From 63b393721217b8650d6b13620d7d101932e27355 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Ho=C3=9F?= Date: Sun, 15 Sep 2024 07:32:53 +0200 Subject: [PATCH] add stackabletech/hdfs-operator MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Sebastian Hoß --- .reuse/dep5 | 4 + code-generator/src/catalog.rs | 7 + .../v1alpha1/hdfsclusters.ignore | 1 + .../v1alpha1/hdfsclusters.yaml | 1804 +++++++++++++++++ 4 files changed, 1816 insertions(+) create mode 100644 crd-catalog/stackabletech/hdfs-operator/hdfs.stackable.tech/v1alpha1/hdfsclusters.ignore create mode 100644 crd-catalog/stackabletech/hdfs-operator/hdfs.stackable.tech/v1alpha1/hdfsclusters.yaml diff --git a/.reuse/dep5 b/.reuse/dep5 index c9753592d..d58d7b308 100644 --- a/.reuse/dep5 +++ b/.reuse/dep5 @@ -1167,6 +1167,10 @@ Files: crd-catalog/stackabletech/hbase-operator/* Copyright: The stackabletech/hbase-operator Authors License: OSL-3.0 +Files: crd-catalog/stackabletech/hdfs-operator/* +Copyright: The stackabletech/hdfs-operator Authors +License: OSL-3.0 + Files: crd-catalog/stackabletech/hive-operator/* Copyright: The stackabletech/hive-operator Authors License: OSL-3.0 diff --git a/code-generator/src/catalog.rs b/code-generator/src/catalog.rs index 5a493c5bc..153f44d7f 100644 --- a/code-generator/src/catalog.rs +++ b/code-generator/src/catalog.rs @@ -2894,6 +2894,13 @@ pub const CRD_V1_SOURCES: &'static [UpstreamSource] = &[ "https://github.com/stackabletech/hbase-operator/blob/main/deploy/helm/hbase-operator/crds/crds.yaml", ], }, + UpstreamSource { + project_name: "stackabletech/hdfs-operator", + license: OSL_V3, + urls: &[ + "https://github.com/stackabletech/hdfs-operator/blob/main/deploy/helm/hdfs-operator/crds/crds.yaml", + ], + }, UpstreamSource { project_name: "stackabletech/hive-operator", license: OSL_V3, diff --git a/crd-catalog/stackabletech/hdfs-operator/hdfs.stackable.tech/v1alpha1/hdfsclusters.ignore b/crd-catalog/stackabletech/hdfs-operator/hdfs.stackable.tech/v1alpha1/hdfsclusters.ignore new file mode 100644 index 000000000..ce7b338a6 --- /dev/null +++ b/crd-catalog/stackabletech/hdfs-operator/hdfs.stackable.tech/v1alpha1/hdfsclusters.ignore @@ -0,0 +1 @@ +cannot find type `HdfsClusterNameNodesRoleGroupsConfigOverrides` in this scope diff --git a/crd-catalog/stackabletech/hdfs-operator/hdfs.stackable.tech/v1alpha1/hdfsclusters.yaml b/crd-catalog/stackabletech/hdfs-operator/hdfs.stackable.tech/v1alpha1/hdfsclusters.yaml new file mode 100644 index 000000000..66207707c --- /dev/null +++ b/crd-catalog/stackabletech/hdfs-operator/hdfs.stackable.tech/v1alpha1/hdfsclusters.yaml @@ -0,0 +1,1804 @@ +apiVersion: "apiextensions.k8s.io/v1" +kind: "CustomResourceDefinition" +metadata: + annotations: + helm.sh/resource-policy: "keep" + name: "hdfsclusters.hdfs.stackable.tech" +spec: + group: "hdfs.stackable.tech" + names: + categories: [] + kind: "HdfsCluster" + plural: "hdfsclusters" + shortNames: + - "hdfs" + singular: "hdfscluster" + scope: "Namespaced" + versions: + - additionalPrinterColumns: [] + name: "v1alpha1" + schema: + openAPIV3Schema: + description: "Auto-generated derived type for HdfsClusterSpec via `CustomResource`" + properties: + spec: + description: "An HDFS cluster stacklet. This resource is managed by the Stackable operator for Apache Hadoop HDFS. Find more information on how to use it and the resources that the operator generates in the [operator documentation](https://docs.stackable.tech/home/nightly/hdfs/).\n\nThe CRD contains three roles: `nameNodes`, `dataNodes` and `journalNodes`." + properties: + clusterConfig: + description: "Configuration that applies to all roles and role groups. This includes settings for authentication, logging and the ZooKeeper cluster to use." + properties: + authentication: + description: "Settings related to user [authentication](https://docs.stackable.tech/home/nightly/usage-guide/security)." + nullable: true + properties: + kerberos: + description: "Kerberos configuration." + properties: + secretClass: + description: "Name of the SecretClass providing the keytab for the HDFS services." + type: "string" + required: + - "secretClass" + type: "object" + tlsSecretClass: + default: "tls" + description: "Name of the SecretClass providing the tls certificates for the WebUIs." + type: "string" + required: + - "kerberos" + type: "object" + authorization: + description: "Authorization options for HDFS. Learn more in the [HDFS authorization usage guide](https://docs.stackable.tech/home/nightly/hdfs/usage-guide/security#authorization)." + nullable: true + properties: + opa: + description: "Configure the OPA stacklet [discovery ConfigMap](https://docs.stackable.tech/home/nightly/concepts/service_discovery) and the name of the Rego package containing your authorization rules. Consult the [OPA authorization documentation](https://docs.stackable.tech/home/nightly/concepts/opa) to learn how to deploy Rego authorization rules with OPA." + properties: + configMapName: + description: "The [discovery ConfigMap](https://docs.stackable.tech/home/nightly/concepts/service_discovery) for the OPA stacklet that should be used for authorization requests." + type: "string" + package: + description: "The name of the Rego package containing the Rego rules for the product." + nullable: true + type: "string" + required: + - "configMapName" + type: "object" + required: + - "opa" + type: "object" + dfsReplication: + default: 3 + description: "`dfsReplication` is the factor of how many times a file will be replicated to different data nodes. The default is 3. You need at least the same amount of data nodes so each file can be replicated correctly, otherwise a warning will be printed." + format: "uint8" + minimum: 0.0 + type: "integer" + listenerClass: + default: "cluster-internal" + description: "Deprecated, please use `.spec.nameNodes.config.listenerClass` and `.spec.dataNodes.config.listenerClass` instead." + enum: + - "cluster-internal" + type: "string" + rackAwareness: + description: "Configuration to control HDFS topology (rack) awareness feature" + items: + oneOf: + - required: + - "nodeLabel" + - required: + - "podLabel" + properties: + nodeLabel: + description: "Name of the label on the Kubernetes Node (where the Pod is placed on) used to resolve a datanode to a topology zone." + type: "string" + podLabel: + description: "Name of the label on the Kubernetes Pod used to resolve a datanode to a topology zone." + type: "string" + type: "object" + nullable: true + type: "array" + vectorAggregatorConfigMapName: + description: "Name of the Vector aggregator [discovery ConfigMap](https://docs.stackable.tech/home/nightly/concepts/service_discovery). It must contain the key `ADDRESS` with the address of the Vector aggregator. Follow the [logging tutorial](https://docs.stackable.tech/home/nightly/tutorials/logging-vector-aggregator) to learn how to configure log aggregation with Vector." + nullable: true + type: "string" + zookeeperConfigMapName: + description: "Name of the [discovery ConfigMap](https://docs.stackable.tech/home/nightly/concepts/service_discovery) for a ZooKeeper cluster." + type: "string" + required: + - "zookeeperConfigMapName" + type: "object" + clusterOperation: + default: + reconciliationPaused: false + stopped: false + description: "[Cluster operations](https://docs.stackable.tech/home/nightly/concepts/operations/cluster_operations) properties, allow stopping the product instance as well as pausing reconciliation." + properties: + reconciliationPaused: + default: false + description: "Flag to stop cluster reconciliation by the operator. This means that all changes in the custom resource spec are ignored until this flag is set to false or removed. The operator will however still watch the deployed resources at the time and update the custom resource status field. If applied at the same time with `stopped`, `reconciliationPaused` will take precedence over `stopped` and stop the reconciliation immediately." + type: "boolean" + stopped: + default: false + description: "Flag to stop the cluster. This means all deployed resources (e.g. Services, StatefulSets, ConfigMaps) are kept but all deployed Pods (e.g. replicas from a StatefulSet) are scaled to 0 and therefore stopped and removed. If applied at the same time with `reconciliationPaused`, the latter will pause reconciliation and `stopped` will take no effect until `reconciliationPaused` is set to false or removed." + type: "boolean" + type: "object" + dataNodes: + description: "This struct represents a role - e.g. HDFS datanodes or Trino workers. It has a key-value-map containing all the roleGroups that are part of this role. Additionally, there is a `config`, which is configurable at the role *and* roleGroup level. Everything at roleGroup level is merged on top of what is configured on role level. There is also a second form of config, which can only be configured at role level, the `roleConfig`. You can learn more about this in the [Roles and role group concept documentation](https://docs.stackable.tech/home/nightly/concepts/roles-and-role-groups)." + nullable: true + properties: + cliOverrides: + additionalProperties: + type: "string" + default: {} + type: "object" + config: + default: {} + description: "Configuration options that are available for all roles." + properties: + affinity: + default: + nodeAffinity: null + nodeSelector: null + podAffinity: null + podAntiAffinity: null + description: "These configuration settings control [Pod placement](https://docs.stackable.tech/home/nightly/concepts/operations/pod_placement)." + properties: + nodeAffinity: + description: "Same as the `spec.affinity.nodeAffinity` field on the Pod, see the [Kubernetes docs](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node)" + nullable: true + type: "object" + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: "string" + description: "Simple key-value pairs forming a nodeSelector, see the [Kubernetes docs](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node)" + nullable: true + type: "object" + podAffinity: + description: "Same as the `spec.affinity.podAffinity` field on the Pod, see the [Kubernetes docs](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node)" + nullable: true + type: "object" + x-kubernetes-preserve-unknown-fields: true + podAntiAffinity: + description: "Same as the `spec.affinity.podAntiAffinity` field on the Pod, see the [Kubernetes docs](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node)" + nullable: true + type: "object" + x-kubernetes-preserve-unknown-fields: true + required: + - "nodeAffinity" + - "podAffinity" + - "podAntiAffinity" + type: "object" + gracefulShutdownTimeout: + description: "Time period Pods have to gracefully shut down, e.g. `30m`, `1h` or `2d`. Consult the operator documentation for details." + nullable: true + type: "string" + listenerClass: + description: "This field controls which [ListenerClass](https://docs.stackable.tech/home/nightly/listener-operator/listenerclass.html) is used to expose this rolegroup. DataNodes should have a direct ListenerClass, such as `cluster-internal` or `external-unstable`." + nullable: true + type: "string" + logging: + default: + containers: {} + enableVectorAgent: null + description: "Logging configuration, learn more in the [logging concept documentation](https://docs.stackable.tech/home/nightly/concepts/logging)." + properties: + containers: + additionalProperties: + anyOf: + - required: + - "custom" + - {} + description: "Log configuration of the container" + properties: + console: + description: "Configuration for the console appender" + nullable: true + properties: + level: + description: "The log level threshold. Log events with a lower log level are discarded." + enum: + - "TRACE" + - "DEBUG" + - "INFO" + - "WARN" + - "ERROR" + - "FATAL" + - "NONE" + nullable: true + type: "string" + type: "object" + custom: + description: "Custom log configuration provided in a ConfigMap" + properties: + configMap: + description: "ConfigMap containing the log configuration files" + nullable: true + type: "string" + type: "object" + file: + description: "Configuration for the file appender" + nullable: true + properties: + level: + description: "The log level threshold. Log events with a lower log level are discarded." + enum: + - "TRACE" + - "DEBUG" + - "INFO" + - "WARN" + - "ERROR" + - "FATAL" + - "NONE" + nullable: true + type: "string" + type: "object" + loggers: + additionalProperties: + description: "Configuration of a logger" + properties: + level: + description: "The log level threshold. Log events with a lower log level are discarded." + enum: + - "TRACE" + - "DEBUG" + - "INFO" + - "WARN" + - "ERROR" + - "FATAL" + - "NONE" + nullable: true + type: "string" + type: "object" + default: {} + description: "Configuration per logger" + type: "object" + type: "object" + description: "Log configuration per container." + type: "object" + enableVectorAgent: + description: "Wether or not to deploy a container with the Vector log agent." + nullable: true + type: "boolean" + type: "object" + resources: + default: + cpu: + max: null + min: null + memory: + limit: null + runtimeLimits: {} + storage: {} + description: "Resource usage is configured here, this includes CPU usage, memory usage and disk storage usage, if this role needs any." + properties: + cpu: + default: + max: null + min: null + properties: + max: + description: "The maximum amount of CPU cores that can be requested by Pods. Equivalent to the `limit` for Pod resource configuration. Cores are specified either as a decimal point number or as milli units. For example:`1.5` will be 1.5 cores, also written as `1500m`." + nullable: true + type: "string" + min: + description: "The minimal amount of CPU cores that Pods need to run. Equivalent to the `request` for Pod resource configuration. Cores are specified either as a decimal point number or as milli units. For example:`1.5` will be 1.5 cores, also written as `1500m`." + nullable: true + type: "string" + type: "object" + memory: + properties: + limit: + description: "The maximum amount of memory that should be available to the Pod. Specified as a byte [Quantity](https://kubernetes.io/docs/reference/kubernetes-api/common-definitions/quantity/), which means these suffixes are supported: E, P, T, G, M, k. You can also use the power-of-two equivalents: Ei, Pi, Ti, Gi, Mi, Ki. For example, the following represent roughly the same value: `128974848, 129e6, 129M, 128974848000m, 123Mi`" + nullable: true + type: "string" + runtimeLimits: + description: "Additional options that can be specified." + type: "object" + type: "object" + storage: + additionalProperties: + properties: + capacity: + description: "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n``` ::= \n\n\t(Note that may be empty, from the \"\" case in .)\n\n ::= 0 | 1 | ... | 9 ::= | ::= | . | . | . ::= \"+\" | \"-\" ::= | ::= | | ::= Ki | Mi | Gi | Ti | Pi | Ei\n\n\t(International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\n ::= m | \"\" | k | M | G | T | P | E\n\n\t(Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\n ::= \"e\" | \"E\" ```\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n\n- No precision is lost - No fractional digits will be emitted - The exponent (or suffix) is as large as possible.\n\nThe sign will be omitted unless the number is negative.\n\nExamples:\n\n- 1.5 will be serialized as \"1500m\" - 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation." + nullable: true + type: "string" + count: + default: 1 + format: "uint16" + minimum: 0.0 + nullable: true + type: "integer" + hdfsStorageType: + enum: + - "Archive" + - "Disk" + - "SSD" + - "RAMDisk" + nullable: true + type: "string" + selectors: + description: "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects." + nullable: true + properties: + matchExpressions: + description: "matchExpressions is a list of label selector requirements. The requirements are ANDed." + items: + description: "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values." + properties: + key: + description: "key is the label key that the selector applies to." + type: "string" + operator: + description: "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist." + type: "string" + values: + description: "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch." + items: + type: "string" + type: "array" + required: + - "key" + - "operator" + type: "object" + type: "array" + matchLabels: + additionalProperties: + type: "string" + description: "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed." + type: "object" + type: "object" + storageClass: + nullable: true + type: "string" + type: "object" + type: "object" + type: "object" + type: "object" + configOverrides: + additionalProperties: + additionalProperties: + type: "string" + type: "object" + default: {} + description: "The `configOverrides` can be used to configure properties in product config files that are not exposed in the CRD. Read the [config overrides documentation](https://docs.stackable.tech/home/nightly/concepts/overrides#config-overrides) and consult the operator specific usage guide documentation for details on the available config files and settings for the specific product." + type: "object" + envOverrides: + additionalProperties: + type: "string" + default: {} + description: "`envOverrides` configure environment variables to be set in the Pods. It is a map from strings to strings - environment variables and the value to set. Read the [environment variable overrides documentation](https://docs.stackable.tech/home/nightly/concepts/overrides#env-overrides) for more information and consult the operator specific usage guide to find out about the product specific environment variables that are available." + type: "object" + podOverrides: + default: {} + description: "In the `podOverrides` property you can define a [PodTemplateSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#podtemplatespec-v1-core) to override any property that can be set on a Kubernetes Pod. Read the [Pod overrides documentation](https://docs.stackable.tech/home/nightly/concepts/overrides#pod-overrides) for more information." + type: "object" + x-kubernetes-preserve-unknown-fields: true + roleConfig: + default: + podDisruptionBudget: + enabled: true + maxUnavailable: null + description: "This is a product-agnostic RoleConfig, which is sufficient for most of the products." + properties: + podDisruptionBudget: + default: + enabled: true + maxUnavailable: null + description: "This struct is used to configure:\n\n1. If PodDisruptionBudgets are created by the operator 2. The allowed number of Pods to be unavailable (`maxUnavailable`)\n\nLearn more in the [allowed Pod disruptions documentation](https://docs.stackable.tech/home/nightly/concepts/operations/pod_disruptions)." + properties: + enabled: + default: true + description: "Whether a PodDisruptionBudget should be written out for this role. Disabling this enables you to specify your own - custom - one. Defaults to true." + type: "boolean" + maxUnavailable: + description: "The number of Pods that are allowed to be down because of voluntary disruptions. If you don't explicitly set this, the operator will use a sane default based upon knowledge about the individual product." + format: "uint16" + minimum: 0.0 + nullable: true + type: "integer" + type: "object" + type: "object" + roleGroups: + additionalProperties: + properties: + cliOverrides: + additionalProperties: + type: "string" + default: {} + type: "object" + config: + default: {} + description: "Configuration options that are available for all roles." + properties: + affinity: + default: + nodeAffinity: null + nodeSelector: null + podAffinity: null + podAntiAffinity: null + description: "These configuration settings control [Pod placement](https://docs.stackable.tech/home/nightly/concepts/operations/pod_placement)." + properties: + nodeAffinity: + description: "Same as the `spec.affinity.nodeAffinity` field on the Pod, see the [Kubernetes docs](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node)" + nullable: true + type: "object" + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: "string" + description: "Simple key-value pairs forming a nodeSelector, see the [Kubernetes docs](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node)" + nullable: true + type: "object" + podAffinity: + description: "Same as the `spec.affinity.podAffinity` field on the Pod, see the [Kubernetes docs](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node)" + nullable: true + type: "object" + x-kubernetes-preserve-unknown-fields: true + podAntiAffinity: + description: "Same as the `spec.affinity.podAntiAffinity` field on the Pod, see the [Kubernetes docs](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node)" + nullable: true + type: "object" + x-kubernetes-preserve-unknown-fields: true + required: + - "nodeAffinity" + - "podAffinity" + - "podAntiAffinity" + type: "object" + gracefulShutdownTimeout: + description: "Time period Pods have to gracefully shut down, e.g. `30m`, `1h` or `2d`. Consult the operator documentation for details." + nullable: true + type: "string" + listenerClass: + description: "This field controls which [ListenerClass](https://docs.stackable.tech/home/nightly/listener-operator/listenerclass.html) is used to expose this rolegroup. DataNodes should have a direct ListenerClass, such as `cluster-internal` or `external-unstable`." + nullable: true + type: "string" + logging: + default: + containers: {} + enableVectorAgent: null + description: "Logging configuration, learn more in the [logging concept documentation](https://docs.stackable.tech/home/nightly/concepts/logging)." + properties: + containers: + additionalProperties: + anyOf: + - required: + - "custom" + - {} + description: "Log configuration of the container" + properties: + console: + description: "Configuration for the console appender" + nullable: true + properties: + level: + description: "The log level threshold. Log events with a lower log level are discarded." + enum: + - "TRACE" + - "DEBUG" + - "INFO" + - "WARN" + - "ERROR" + - "FATAL" + - "NONE" + nullable: true + type: "string" + type: "object" + custom: + description: "Custom log configuration provided in a ConfigMap" + properties: + configMap: + description: "ConfigMap containing the log configuration files" + nullable: true + type: "string" + type: "object" + file: + description: "Configuration for the file appender" + nullable: true + properties: + level: + description: "The log level threshold. Log events with a lower log level are discarded." + enum: + - "TRACE" + - "DEBUG" + - "INFO" + - "WARN" + - "ERROR" + - "FATAL" + - "NONE" + nullable: true + type: "string" + type: "object" + loggers: + additionalProperties: + description: "Configuration of a logger" + properties: + level: + description: "The log level threshold. Log events with a lower log level are discarded." + enum: + - "TRACE" + - "DEBUG" + - "INFO" + - "WARN" + - "ERROR" + - "FATAL" + - "NONE" + nullable: true + type: "string" + type: "object" + default: {} + description: "Configuration per logger" + type: "object" + type: "object" + description: "Log configuration per container." + type: "object" + enableVectorAgent: + description: "Wether or not to deploy a container with the Vector log agent." + nullable: true + type: "boolean" + type: "object" + resources: + default: + cpu: + max: null + min: null + memory: + limit: null + runtimeLimits: {} + storage: {} + description: "Resource usage is configured here, this includes CPU usage, memory usage and disk storage usage, if this role needs any." + properties: + cpu: + default: + max: null + min: null + properties: + max: + description: "The maximum amount of CPU cores that can be requested by Pods. Equivalent to the `limit` for Pod resource configuration. Cores are specified either as a decimal point number or as milli units. For example:`1.5` will be 1.5 cores, also written as `1500m`." + nullable: true + type: "string" + min: + description: "The minimal amount of CPU cores that Pods need to run. Equivalent to the `request` for Pod resource configuration. Cores are specified either as a decimal point number or as milli units. For example:`1.5` will be 1.5 cores, also written as `1500m`." + nullable: true + type: "string" + type: "object" + memory: + properties: + limit: + description: "The maximum amount of memory that should be available to the Pod. Specified as a byte [Quantity](https://kubernetes.io/docs/reference/kubernetes-api/common-definitions/quantity/), which means these suffixes are supported: E, P, T, G, M, k. You can also use the power-of-two equivalents: Ei, Pi, Ti, Gi, Mi, Ki. For example, the following represent roughly the same value: `128974848, 129e6, 129M, 128974848000m, 123Mi`" + nullable: true + type: "string" + runtimeLimits: + description: "Additional options that can be specified." + type: "object" + type: "object" + storage: + additionalProperties: + properties: + capacity: + description: "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n``` ::= \n\n\t(Note that may be empty, from the \"\" case in .)\n\n ::= 0 | 1 | ... | 9 ::= | ::= | . | . | . ::= \"+\" | \"-\" ::= | ::= | | ::= Ki | Mi | Gi | Ti | Pi | Ei\n\n\t(International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\n ::= m | \"\" | k | M | G | T | P | E\n\n\t(Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\n ::= \"e\" | \"E\" ```\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n\n- No precision is lost - No fractional digits will be emitted - The exponent (or suffix) is as large as possible.\n\nThe sign will be omitted unless the number is negative.\n\nExamples:\n\n- 1.5 will be serialized as \"1500m\" - 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation." + nullable: true + type: "string" + count: + default: 1 + format: "uint16" + minimum: 0.0 + nullable: true + type: "integer" + hdfsStorageType: + enum: + - "Archive" + - "Disk" + - "SSD" + - "RAMDisk" + nullable: true + type: "string" + selectors: + description: "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects." + nullable: true + properties: + matchExpressions: + description: "matchExpressions is a list of label selector requirements. The requirements are ANDed." + items: + description: "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values." + properties: + key: + description: "key is the label key that the selector applies to." + type: "string" + operator: + description: "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist." + type: "string" + values: + description: "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch." + items: + type: "string" + type: "array" + required: + - "key" + - "operator" + type: "object" + type: "array" + matchLabels: + additionalProperties: + type: "string" + description: "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed." + type: "object" + type: "object" + storageClass: + nullable: true + type: "string" + type: "object" + type: "object" + type: "object" + type: "object" + configOverrides: + additionalProperties: + additionalProperties: + type: "string" + type: "object" + default: {} + description: "The `configOverrides` can be used to configure properties in product config files that are not exposed in the CRD. Read the [config overrides documentation](https://docs.stackable.tech/home/nightly/concepts/overrides#config-overrides) and consult the operator specific usage guide documentation for details on the available config files and settings for the specific product." + type: "object" + envOverrides: + additionalProperties: + type: "string" + default: {} + description: "`envOverrides` configure environment variables to be set in the Pods. It is a map from strings to strings - environment variables and the value to set. Read the [environment variable overrides documentation](https://docs.stackable.tech/home/nightly/concepts/overrides#env-overrides) for more information and consult the operator specific usage guide to find out about the product specific environment variables that are available." + type: "object" + podOverrides: + default: {} + description: "In the `podOverrides` property you can define a [PodTemplateSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#podtemplatespec-v1-core) to override any property that can be set on a Kubernetes Pod. Read the [Pod overrides documentation](https://docs.stackable.tech/home/nightly/concepts/overrides#pod-overrides) for more information." + type: "object" + x-kubernetes-preserve-unknown-fields: true + replicas: + format: "uint16" + minimum: 0.0 + nullable: true + type: "integer" + type: "object" + type: "object" + required: + - "roleGroups" + type: "object" + image: + anyOf: + - required: + - "custom" + - "productVersion" + - required: + - "productVersion" + description: "Specify which image to use, the easiest way is to only configure the `productVersion`. You can also configure a custom image registry to pull from, as well as completely custom images.\n\nConsult the [Product image selection documentation](https://docs.stackable.tech/home/nightly/concepts/product_image_selection) for details." + properties: + custom: + description: "Overwrite the docker image. Specify the full docker image name, e.g. `docker.stackable.tech/stackable/superset:1.4.1-stackable2.1.0`" + type: "string" + productVersion: + description: "Version of the product, e.g. `1.4.1`." + type: "string" + pullPolicy: + default: "Always" + description: "[Pull policy](https://kubernetes.io/docs/concepts/containers/images/#image-pull-policy) used when pulling the image." + enum: + - "IfNotPresent" + - "Always" + - "Never" + type: "string" + pullSecrets: + description: "[Image pull secrets](https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod) to pull images from a private registry." + items: + description: "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace." + properties: + name: + description: "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names" + type: "string" + type: "object" + nullable: true + type: "array" + repo: + description: "Name of the docker repo, e.g. `docker.stackable.tech/stackable`" + nullable: true + type: "string" + stackableVersion: + description: "Stackable version of the product, e.g. `23.4`, `23.4.1` or `0.0.0-dev`. If not specified, the operator will use its own version, e.g. `23.4.1`. When using a nightly operator or a pr version, it will use the nightly `0.0.0-dev` image." + nullable: true + type: "string" + type: "object" + journalNodes: + description: "This struct represents a role - e.g. HDFS datanodes or Trino workers. It has a key-value-map containing all the roleGroups that are part of this role. Additionally, there is a `config`, which is configurable at the role *and* roleGroup level. Everything at roleGroup level is merged on top of what is configured on role level. There is also a second form of config, which can only be configured at role level, the `roleConfig`. You can learn more about this in the [Roles and role group concept documentation](https://docs.stackable.tech/home/nightly/concepts/roles-and-role-groups)." + nullable: true + properties: + cliOverrides: + additionalProperties: + type: "string" + default: {} + type: "object" + config: + default: {} + description: "Configuration options that are available for all roles." + properties: + affinity: + default: + nodeAffinity: null + nodeSelector: null + podAffinity: null + podAntiAffinity: null + description: "These configuration settings control [Pod placement](https://docs.stackable.tech/home/nightly/concepts/operations/pod_placement)." + properties: + nodeAffinity: + description: "Same as the `spec.affinity.nodeAffinity` field on the Pod, see the [Kubernetes docs](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node)" + nullable: true + type: "object" + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: "string" + description: "Simple key-value pairs forming a nodeSelector, see the [Kubernetes docs](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node)" + nullable: true + type: "object" + podAffinity: + description: "Same as the `spec.affinity.podAffinity` field on the Pod, see the [Kubernetes docs](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node)" + nullable: true + type: "object" + x-kubernetes-preserve-unknown-fields: true + podAntiAffinity: + description: "Same as the `spec.affinity.podAntiAffinity` field on the Pod, see the [Kubernetes docs](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node)" + nullable: true + type: "object" + x-kubernetes-preserve-unknown-fields: true + required: + - "nodeAffinity" + - "podAffinity" + - "podAntiAffinity" + type: "object" + gracefulShutdownTimeout: + description: "Time period Pods have to gracefully shut down, e.g. `30m`, `1h` or `2d`. Consult the operator documentation for details." + nullable: true + type: "string" + logging: + default: + containers: {} + enableVectorAgent: null + description: "Logging configuration, learn more in the [logging concept documentation](https://docs.stackable.tech/home/nightly/concepts/logging)." + properties: + containers: + additionalProperties: + anyOf: + - required: + - "custom" + - {} + description: "Log configuration of the container" + properties: + console: + description: "Configuration for the console appender" + nullable: true + properties: + level: + description: "The log level threshold. Log events with a lower log level are discarded." + enum: + - "TRACE" + - "DEBUG" + - "INFO" + - "WARN" + - "ERROR" + - "FATAL" + - "NONE" + nullable: true + type: "string" + type: "object" + custom: + description: "Custom log configuration provided in a ConfigMap" + properties: + configMap: + description: "ConfigMap containing the log configuration files" + nullable: true + type: "string" + type: "object" + file: + description: "Configuration for the file appender" + nullable: true + properties: + level: + description: "The log level threshold. Log events with a lower log level are discarded." + enum: + - "TRACE" + - "DEBUG" + - "INFO" + - "WARN" + - "ERROR" + - "FATAL" + - "NONE" + nullable: true + type: "string" + type: "object" + loggers: + additionalProperties: + description: "Configuration of a logger" + properties: + level: + description: "The log level threshold. Log events with a lower log level are discarded." + enum: + - "TRACE" + - "DEBUG" + - "INFO" + - "WARN" + - "ERROR" + - "FATAL" + - "NONE" + nullable: true + type: "string" + type: "object" + default: {} + description: "Configuration per logger" + type: "object" + type: "object" + description: "Log configuration per container." + type: "object" + enableVectorAgent: + description: "Wether or not to deploy a container with the Vector log agent." + nullable: true + type: "boolean" + type: "object" + resources: + default: + cpu: + max: null + min: null + memory: + limit: null + runtimeLimits: {} + storage: + data: + capacity: null + description: "Resource usage is configured here, this includes CPU usage, memory usage and disk storage usage, if this role needs any." + properties: + cpu: + default: + max: null + min: null + properties: + max: + description: "The maximum amount of CPU cores that can be requested by Pods. Equivalent to the `limit` for Pod resource configuration. Cores are specified either as a decimal point number or as milli units. For example:`1.5` will be 1.5 cores, also written as `1500m`." + nullable: true + type: "string" + min: + description: "The minimal amount of CPU cores that Pods need to run. Equivalent to the `request` for Pod resource configuration. Cores are specified either as a decimal point number or as milli units. For example:`1.5` will be 1.5 cores, also written as `1500m`." + nullable: true + type: "string" + type: "object" + memory: + properties: + limit: + description: "The maximum amount of memory that should be available to the Pod. Specified as a byte [Quantity](https://kubernetes.io/docs/reference/kubernetes-api/common-definitions/quantity/), which means these suffixes are supported: E, P, T, G, M, k. You can also use the power-of-two equivalents: Ei, Pi, Ti, Gi, Mi, Ki. For example, the following represent roughly the same value: `128974848, 129e6, 129M, 128974848000m, 123Mi`" + nullable: true + type: "string" + runtimeLimits: + description: "Additional options that can be specified." + type: "object" + type: "object" + storage: + properties: + data: + default: + capacity: null + properties: + capacity: + description: "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n``` ::= \n\n\t(Note that may be empty, from the \"\" case in .)\n\n ::= 0 | 1 | ... | 9 ::= | ::= | . | . | . ::= \"+\" | \"-\" ::= | ::= | | ::= Ki | Mi | Gi | Ti | Pi | Ei\n\n\t(International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\n ::= m | \"\" | k | M | G | T | P | E\n\n\t(Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\n ::= \"e\" | \"E\" ```\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n\n- No precision is lost - No fractional digits will be emitted - The exponent (or suffix) is as large as possible.\n\nThe sign will be omitted unless the number is negative.\n\nExamples:\n\n- 1.5 will be serialized as \"1500m\" - 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation." + nullable: true + type: "string" + selectors: + description: "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects." + nullable: true + properties: + matchExpressions: + description: "matchExpressions is a list of label selector requirements. The requirements are ANDed." + items: + description: "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values." + properties: + key: + description: "key is the label key that the selector applies to." + type: "string" + operator: + description: "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist." + type: "string" + values: + description: "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch." + items: + type: "string" + type: "array" + required: + - "key" + - "operator" + type: "object" + type: "array" + matchLabels: + additionalProperties: + type: "string" + description: "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed." + type: "object" + type: "object" + storageClass: + nullable: true + type: "string" + type: "object" + type: "object" + type: "object" + type: "object" + configOverrides: + additionalProperties: + additionalProperties: + type: "string" + type: "object" + default: {} + description: "The `configOverrides` can be used to configure properties in product config files that are not exposed in the CRD. Read the [config overrides documentation](https://docs.stackable.tech/home/nightly/concepts/overrides#config-overrides) and consult the operator specific usage guide documentation for details on the available config files and settings for the specific product." + type: "object" + envOverrides: + additionalProperties: + type: "string" + default: {} + description: "`envOverrides` configure environment variables to be set in the Pods. It is a map from strings to strings - environment variables and the value to set. Read the [environment variable overrides documentation](https://docs.stackable.tech/home/nightly/concepts/overrides#env-overrides) for more information and consult the operator specific usage guide to find out about the product specific environment variables that are available." + type: "object" + podOverrides: + default: {} + description: "In the `podOverrides` property you can define a [PodTemplateSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#podtemplatespec-v1-core) to override any property that can be set on a Kubernetes Pod. Read the [Pod overrides documentation](https://docs.stackable.tech/home/nightly/concepts/overrides#pod-overrides) for more information." + type: "object" + x-kubernetes-preserve-unknown-fields: true + roleConfig: + default: + podDisruptionBudget: + enabled: true + maxUnavailable: null + description: "This is a product-agnostic RoleConfig, which is sufficient for most of the products." + properties: + podDisruptionBudget: + default: + enabled: true + maxUnavailable: null + description: "This struct is used to configure:\n\n1. If PodDisruptionBudgets are created by the operator 2. The allowed number of Pods to be unavailable (`maxUnavailable`)\n\nLearn more in the [allowed Pod disruptions documentation](https://docs.stackable.tech/home/nightly/concepts/operations/pod_disruptions)." + properties: + enabled: + default: true + description: "Whether a PodDisruptionBudget should be written out for this role. Disabling this enables you to specify your own - custom - one. Defaults to true." + type: "boolean" + maxUnavailable: + description: "The number of Pods that are allowed to be down because of voluntary disruptions. If you don't explicitly set this, the operator will use a sane default based upon knowledge about the individual product." + format: "uint16" + minimum: 0.0 + nullable: true + type: "integer" + type: "object" + type: "object" + roleGroups: + additionalProperties: + properties: + cliOverrides: + additionalProperties: + type: "string" + default: {} + type: "object" + config: + default: {} + description: "Configuration options that are available for all roles." + properties: + affinity: + default: + nodeAffinity: null + nodeSelector: null + podAffinity: null + podAntiAffinity: null + description: "These configuration settings control [Pod placement](https://docs.stackable.tech/home/nightly/concepts/operations/pod_placement)." + properties: + nodeAffinity: + description: "Same as the `spec.affinity.nodeAffinity` field on the Pod, see the [Kubernetes docs](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node)" + nullable: true + type: "object" + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: "string" + description: "Simple key-value pairs forming a nodeSelector, see the [Kubernetes docs](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node)" + nullable: true + type: "object" + podAffinity: + description: "Same as the `spec.affinity.podAffinity` field on the Pod, see the [Kubernetes docs](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node)" + nullable: true + type: "object" + x-kubernetes-preserve-unknown-fields: true + podAntiAffinity: + description: "Same as the `spec.affinity.podAntiAffinity` field on the Pod, see the [Kubernetes docs](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node)" + nullable: true + type: "object" + x-kubernetes-preserve-unknown-fields: true + required: + - "nodeAffinity" + - "podAffinity" + - "podAntiAffinity" + type: "object" + gracefulShutdownTimeout: + description: "Time period Pods have to gracefully shut down, e.g. `30m`, `1h` or `2d`. Consult the operator documentation for details." + nullable: true + type: "string" + logging: + default: + containers: {} + enableVectorAgent: null + description: "Logging configuration, learn more in the [logging concept documentation](https://docs.stackable.tech/home/nightly/concepts/logging)." + properties: + containers: + additionalProperties: + anyOf: + - required: + - "custom" + - {} + description: "Log configuration of the container" + properties: + console: + description: "Configuration for the console appender" + nullable: true + properties: + level: + description: "The log level threshold. Log events with a lower log level are discarded." + enum: + - "TRACE" + - "DEBUG" + - "INFO" + - "WARN" + - "ERROR" + - "FATAL" + - "NONE" + nullable: true + type: "string" + type: "object" + custom: + description: "Custom log configuration provided in a ConfigMap" + properties: + configMap: + description: "ConfigMap containing the log configuration files" + nullable: true + type: "string" + type: "object" + file: + description: "Configuration for the file appender" + nullable: true + properties: + level: + description: "The log level threshold. Log events with a lower log level are discarded." + enum: + - "TRACE" + - "DEBUG" + - "INFO" + - "WARN" + - "ERROR" + - "FATAL" + - "NONE" + nullable: true + type: "string" + type: "object" + loggers: + additionalProperties: + description: "Configuration of a logger" + properties: + level: + description: "The log level threshold. Log events with a lower log level are discarded." + enum: + - "TRACE" + - "DEBUG" + - "INFO" + - "WARN" + - "ERROR" + - "FATAL" + - "NONE" + nullable: true + type: "string" + type: "object" + default: {} + description: "Configuration per logger" + type: "object" + type: "object" + description: "Log configuration per container." + type: "object" + enableVectorAgent: + description: "Wether or not to deploy a container with the Vector log agent." + nullable: true + type: "boolean" + type: "object" + resources: + default: + cpu: + max: null + min: null + memory: + limit: null + runtimeLimits: {} + storage: + data: + capacity: null + description: "Resource usage is configured here, this includes CPU usage, memory usage and disk storage usage, if this role needs any." + properties: + cpu: + default: + max: null + min: null + properties: + max: + description: "The maximum amount of CPU cores that can be requested by Pods. Equivalent to the `limit` for Pod resource configuration. Cores are specified either as a decimal point number or as milli units. For example:`1.5` will be 1.5 cores, also written as `1500m`." + nullable: true + type: "string" + min: + description: "The minimal amount of CPU cores that Pods need to run. Equivalent to the `request` for Pod resource configuration. Cores are specified either as a decimal point number or as milli units. For example:`1.5` will be 1.5 cores, also written as `1500m`." + nullable: true + type: "string" + type: "object" + memory: + properties: + limit: + description: "The maximum amount of memory that should be available to the Pod. Specified as a byte [Quantity](https://kubernetes.io/docs/reference/kubernetes-api/common-definitions/quantity/), which means these suffixes are supported: E, P, T, G, M, k. You can also use the power-of-two equivalents: Ei, Pi, Ti, Gi, Mi, Ki. For example, the following represent roughly the same value: `128974848, 129e6, 129M, 128974848000m, 123Mi`" + nullable: true + type: "string" + runtimeLimits: + description: "Additional options that can be specified." + type: "object" + type: "object" + storage: + properties: + data: + default: + capacity: null + properties: + capacity: + description: "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n``` ::= \n\n\t(Note that may be empty, from the \"\" case in .)\n\n ::= 0 | 1 | ... | 9 ::= | ::= | . | . | . ::= \"+\" | \"-\" ::= | ::= | | ::= Ki | Mi | Gi | Ti | Pi | Ei\n\n\t(International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\n ::= m | \"\" | k | M | G | T | P | E\n\n\t(Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\n ::= \"e\" | \"E\" ```\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n\n- No precision is lost - No fractional digits will be emitted - The exponent (or suffix) is as large as possible.\n\nThe sign will be omitted unless the number is negative.\n\nExamples:\n\n- 1.5 will be serialized as \"1500m\" - 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation." + nullable: true + type: "string" + selectors: + description: "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects." + nullable: true + properties: + matchExpressions: + description: "matchExpressions is a list of label selector requirements. The requirements are ANDed." + items: + description: "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values." + properties: + key: + description: "key is the label key that the selector applies to." + type: "string" + operator: + description: "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist." + type: "string" + values: + description: "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch." + items: + type: "string" + type: "array" + required: + - "key" + - "operator" + type: "object" + type: "array" + matchLabels: + additionalProperties: + type: "string" + description: "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed." + type: "object" + type: "object" + storageClass: + nullable: true + type: "string" + type: "object" + type: "object" + type: "object" + type: "object" + configOverrides: + additionalProperties: + additionalProperties: + type: "string" + type: "object" + default: {} + description: "The `configOverrides` can be used to configure properties in product config files that are not exposed in the CRD. Read the [config overrides documentation](https://docs.stackable.tech/home/nightly/concepts/overrides#config-overrides) and consult the operator specific usage guide documentation for details on the available config files and settings for the specific product." + type: "object" + envOverrides: + additionalProperties: + type: "string" + default: {} + description: "`envOverrides` configure environment variables to be set in the Pods. It is a map from strings to strings - environment variables and the value to set. Read the [environment variable overrides documentation](https://docs.stackable.tech/home/nightly/concepts/overrides#env-overrides) for more information and consult the operator specific usage guide to find out about the product specific environment variables that are available." + type: "object" + podOverrides: + default: {} + description: "In the `podOverrides` property you can define a [PodTemplateSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#podtemplatespec-v1-core) to override any property that can be set on a Kubernetes Pod. Read the [Pod overrides documentation](https://docs.stackable.tech/home/nightly/concepts/overrides#pod-overrides) for more information." + type: "object" + x-kubernetes-preserve-unknown-fields: true + replicas: + format: "uint16" + minimum: 0.0 + nullable: true + type: "integer" + type: "object" + type: "object" + required: + - "roleGroups" + type: "object" + nameNodes: + description: "This struct represents a role - e.g. HDFS datanodes or Trino workers. It has a key-value-map containing all the roleGroups that are part of this role. Additionally, there is a `config`, which is configurable at the role *and* roleGroup level. Everything at roleGroup level is merged on top of what is configured on role level. There is also a second form of config, which can only be configured at role level, the `roleConfig`. You can learn more about this in the [Roles and role group concept documentation](https://docs.stackable.tech/home/nightly/concepts/roles-and-role-groups)." + nullable: true + properties: + cliOverrides: + additionalProperties: + type: "string" + default: {} + type: "object" + config: + default: {} + description: "Configuration options that are available for all roles." + properties: + affinity: + default: + nodeAffinity: null + nodeSelector: null + podAffinity: null + podAntiAffinity: null + description: "These configuration settings control [Pod placement](https://docs.stackable.tech/home/nightly/concepts/operations/pod_placement)." + properties: + nodeAffinity: + description: "Same as the `spec.affinity.nodeAffinity` field on the Pod, see the [Kubernetes docs](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node)" + nullable: true + type: "object" + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: "string" + description: "Simple key-value pairs forming a nodeSelector, see the [Kubernetes docs](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node)" + nullable: true + type: "object" + podAffinity: + description: "Same as the `spec.affinity.podAffinity` field on the Pod, see the [Kubernetes docs](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node)" + nullable: true + type: "object" + x-kubernetes-preserve-unknown-fields: true + podAntiAffinity: + description: "Same as the `spec.affinity.podAntiAffinity` field on the Pod, see the [Kubernetes docs](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node)" + nullable: true + type: "object" + x-kubernetes-preserve-unknown-fields: true + required: + - "nodeAffinity" + - "podAffinity" + - "podAntiAffinity" + type: "object" + gracefulShutdownTimeout: + description: "Time period Pods have to gracefully shut down, e.g. `30m`, `1h` or `2d`. Consult the operator documentation for details." + nullable: true + type: "string" + listenerClass: + description: "This field controls which [ListenerClass](https://docs.stackable.tech/home/nightly/listener-operator/listenerclass.html) is used to expose this rolegroup. NameNodes should have a stable ListenerClass, such as `cluster-internal` or `external-stable`." + nullable: true + type: "string" + logging: + default: + containers: {} + enableVectorAgent: null + description: "Logging configuration, learn more in the [logging concept documentation](https://docs.stackable.tech/home/nightly/concepts/logging)." + properties: + containers: + additionalProperties: + anyOf: + - required: + - "custom" + - {} + description: "Log configuration of the container" + properties: + console: + description: "Configuration for the console appender" + nullable: true + properties: + level: + description: "The log level threshold. Log events with a lower log level are discarded." + enum: + - "TRACE" + - "DEBUG" + - "INFO" + - "WARN" + - "ERROR" + - "FATAL" + - "NONE" + nullable: true + type: "string" + type: "object" + custom: + description: "Custom log configuration provided in a ConfigMap" + properties: + configMap: + description: "ConfigMap containing the log configuration files" + nullable: true + type: "string" + type: "object" + file: + description: "Configuration for the file appender" + nullable: true + properties: + level: + description: "The log level threshold. Log events with a lower log level are discarded." + enum: + - "TRACE" + - "DEBUG" + - "INFO" + - "WARN" + - "ERROR" + - "FATAL" + - "NONE" + nullable: true + type: "string" + type: "object" + loggers: + additionalProperties: + description: "Configuration of a logger" + properties: + level: + description: "The log level threshold. Log events with a lower log level are discarded." + enum: + - "TRACE" + - "DEBUG" + - "INFO" + - "WARN" + - "ERROR" + - "FATAL" + - "NONE" + nullable: true + type: "string" + type: "object" + default: {} + description: "Configuration per logger" + type: "object" + type: "object" + description: "Log configuration per container." + type: "object" + enableVectorAgent: + description: "Wether or not to deploy a container with the Vector log agent." + nullable: true + type: "boolean" + type: "object" + resources: + default: + cpu: + max: null + min: null + memory: + limit: null + runtimeLimits: {} + storage: + data: + capacity: null + description: "Resource usage is configured here, this includes CPU usage, memory usage and disk storage usage, if this role needs any." + properties: + cpu: + default: + max: null + min: null + properties: + max: + description: "The maximum amount of CPU cores that can be requested by Pods. Equivalent to the `limit` for Pod resource configuration. Cores are specified either as a decimal point number or as milli units. For example:`1.5` will be 1.5 cores, also written as `1500m`." + nullable: true + type: "string" + min: + description: "The minimal amount of CPU cores that Pods need to run. Equivalent to the `request` for Pod resource configuration. Cores are specified either as a decimal point number or as milli units. For example:`1.5` will be 1.5 cores, also written as `1500m`." + nullable: true + type: "string" + type: "object" + memory: + properties: + limit: + description: "The maximum amount of memory that should be available to the Pod. Specified as a byte [Quantity](https://kubernetes.io/docs/reference/kubernetes-api/common-definitions/quantity/), which means these suffixes are supported: E, P, T, G, M, k. You can also use the power-of-two equivalents: Ei, Pi, Ti, Gi, Mi, Ki. For example, the following represent roughly the same value: `128974848, 129e6, 129M, 128974848000m, 123Mi`" + nullable: true + type: "string" + runtimeLimits: + description: "Additional options that can be specified." + type: "object" + type: "object" + storage: + properties: + data: + default: + capacity: null + properties: + capacity: + description: "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n``` ::= \n\n\t(Note that may be empty, from the \"\" case in .)\n\n ::= 0 | 1 | ... | 9 ::= | ::= | . | . | . ::= \"+\" | \"-\" ::= | ::= | | ::= Ki | Mi | Gi | Ti | Pi | Ei\n\n\t(International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\n ::= m | \"\" | k | M | G | T | P | E\n\n\t(Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\n ::= \"e\" | \"E\" ```\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n\n- No precision is lost - No fractional digits will be emitted - The exponent (or suffix) is as large as possible.\n\nThe sign will be omitted unless the number is negative.\n\nExamples:\n\n- 1.5 will be serialized as \"1500m\" - 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation." + nullable: true + type: "string" + selectors: + description: "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects." + nullable: true + properties: + matchExpressions: + description: "matchExpressions is a list of label selector requirements. The requirements are ANDed." + items: + description: "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values." + properties: + key: + description: "key is the label key that the selector applies to." + type: "string" + operator: + description: "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist." + type: "string" + values: + description: "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch." + items: + type: "string" + type: "array" + required: + - "key" + - "operator" + type: "object" + type: "array" + matchLabels: + additionalProperties: + type: "string" + description: "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed." + type: "object" + type: "object" + storageClass: + nullable: true + type: "string" + type: "object" + type: "object" + type: "object" + type: "object" + configOverrides: + additionalProperties: + additionalProperties: + type: "string" + type: "object" + default: {} + description: "The `configOverrides` can be used to configure properties in product config files that are not exposed in the CRD. Read the [config overrides documentation](https://docs.stackable.tech/home/nightly/concepts/overrides#config-overrides) and consult the operator specific usage guide documentation for details on the available config files and settings for the specific product." + type: "object" + envOverrides: + additionalProperties: + type: "string" + default: {} + description: "`envOverrides` configure environment variables to be set in the Pods. It is a map from strings to strings - environment variables and the value to set. Read the [environment variable overrides documentation](https://docs.stackable.tech/home/nightly/concepts/overrides#env-overrides) for more information and consult the operator specific usage guide to find out about the product specific environment variables that are available." + type: "object" + podOverrides: + default: {} + description: "In the `podOverrides` property you can define a [PodTemplateSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#podtemplatespec-v1-core) to override any property that can be set on a Kubernetes Pod. Read the [Pod overrides documentation](https://docs.stackable.tech/home/nightly/concepts/overrides#pod-overrides) for more information." + type: "object" + x-kubernetes-preserve-unknown-fields: true + roleConfig: + default: + podDisruptionBudget: + enabled: true + maxUnavailable: null + description: "This is a product-agnostic RoleConfig, which is sufficient for most of the products." + properties: + podDisruptionBudget: + default: + enabled: true + maxUnavailable: null + description: "This struct is used to configure:\n\n1. If PodDisruptionBudgets are created by the operator 2. The allowed number of Pods to be unavailable (`maxUnavailable`)\n\nLearn more in the [allowed Pod disruptions documentation](https://docs.stackable.tech/home/nightly/concepts/operations/pod_disruptions)." + properties: + enabled: + default: true + description: "Whether a PodDisruptionBudget should be written out for this role. Disabling this enables you to specify your own - custom - one. Defaults to true." + type: "boolean" + maxUnavailable: + description: "The number of Pods that are allowed to be down because of voluntary disruptions. If you don't explicitly set this, the operator will use a sane default based upon knowledge about the individual product." + format: "uint16" + minimum: 0.0 + nullable: true + type: "integer" + type: "object" + type: "object" + roleGroups: + additionalProperties: + properties: + cliOverrides: + additionalProperties: + type: "string" + default: {} + type: "object" + config: + default: {} + description: "Configuration options that are available for all roles." + properties: + affinity: + default: + nodeAffinity: null + nodeSelector: null + podAffinity: null + podAntiAffinity: null + description: "These configuration settings control [Pod placement](https://docs.stackable.tech/home/nightly/concepts/operations/pod_placement)." + properties: + nodeAffinity: + description: "Same as the `spec.affinity.nodeAffinity` field on the Pod, see the [Kubernetes docs](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node)" + nullable: true + type: "object" + x-kubernetes-preserve-unknown-fields: true + nodeSelector: + additionalProperties: + type: "string" + description: "Simple key-value pairs forming a nodeSelector, see the [Kubernetes docs](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node)" + nullable: true + type: "object" + podAffinity: + description: "Same as the `spec.affinity.podAffinity` field on the Pod, see the [Kubernetes docs](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node)" + nullable: true + type: "object" + x-kubernetes-preserve-unknown-fields: true + podAntiAffinity: + description: "Same as the `spec.affinity.podAntiAffinity` field on the Pod, see the [Kubernetes docs](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node)" + nullable: true + type: "object" + x-kubernetes-preserve-unknown-fields: true + required: + - "nodeAffinity" + - "podAffinity" + - "podAntiAffinity" + type: "object" + gracefulShutdownTimeout: + description: "Time period Pods have to gracefully shut down, e.g. `30m`, `1h` or `2d`. Consult the operator documentation for details." + nullable: true + type: "string" + listenerClass: + description: "This field controls which [ListenerClass](https://docs.stackable.tech/home/nightly/listener-operator/listenerclass.html) is used to expose this rolegroup. NameNodes should have a stable ListenerClass, such as `cluster-internal` or `external-stable`." + nullable: true + type: "string" + logging: + default: + containers: {} + enableVectorAgent: null + description: "Logging configuration, learn more in the [logging concept documentation](https://docs.stackable.tech/home/nightly/concepts/logging)." + properties: + containers: + additionalProperties: + anyOf: + - required: + - "custom" + - {} + description: "Log configuration of the container" + properties: + console: + description: "Configuration for the console appender" + nullable: true + properties: + level: + description: "The log level threshold. Log events with a lower log level are discarded." + enum: + - "TRACE" + - "DEBUG" + - "INFO" + - "WARN" + - "ERROR" + - "FATAL" + - "NONE" + nullable: true + type: "string" + type: "object" + custom: + description: "Custom log configuration provided in a ConfigMap" + properties: + configMap: + description: "ConfigMap containing the log configuration files" + nullable: true + type: "string" + type: "object" + file: + description: "Configuration for the file appender" + nullable: true + properties: + level: + description: "The log level threshold. Log events with a lower log level are discarded." + enum: + - "TRACE" + - "DEBUG" + - "INFO" + - "WARN" + - "ERROR" + - "FATAL" + - "NONE" + nullable: true + type: "string" + type: "object" + loggers: + additionalProperties: + description: "Configuration of a logger" + properties: + level: + description: "The log level threshold. Log events with a lower log level are discarded." + enum: + - "TRACE" + - "DEBUG" + - "INFO" + - "WARN" + - "ERROR" + - "FATAL" + - "NONE" + nullable: true + type: "string" + type: "object" + default: {} + description: "Configuration per logger" + type: "object" + type: "object" + description: "Log configuration per container." + type: "object" + enableVectorAgent: + description: "Wether or not to deploy a container with the Vector log agent." + nullable: true + type: "boolean" + type: "object" + resources: + default: + cpu: + max: null + min: null + memory: + limit: null + runtimeLimits: {} + storage: + data: + capacity: null + description: "Resource usage is configured here, this includes CPU usage, memory usage and disk storage usage, if this role needs any." + properties: + cpu: + default: + max: null + min: null + properties: + max: + description: "The maximum amount of CPU cores that can be requested by Pods. Equivalent to the `limit` for Pod resource configuration. Cores are specified either as a decimal point number or as milli units. For example:`1.5` will be 1.5 cores, also written as `1500m`." + nullable: true + type: "string" + min: + description: "The minimal amount of CPU cores that Pods need to run. Equivalent to the `request` for Pod resource configuration. Cores are specified either as a decimal point number or as milli units. For example:`1.5` will be 1.5 cores, also written as `1500m`." + nullable: true + type: "string" + type: "object" + memory: + properties: + limit: + description: "The maximum amount of memory that should be available to the Pod. Specified as a byte [Quantity](https://kubernetes.io/docs/reference/kubernetes-api/common-definitions/quantity/), which means these suffixes are supported: E, P, T, G, M, k. You can also use the power-of-two equivalents: Ei, Pi, Ti, Gi, Mi, Ki. For example, the following represent roughly the same value: `128974848, 129e6, 129M, 128974848000m, 123Mi`" + nullable: true + type: "string" + runtimeLimits: + description: "Additional options that can be specified." + type: "object" + type: "object" + storage: + properties: + data: + default: + capacity: null + properties: + capacity: + description: "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n``` ::= \n\n\t(Note that may be empty, from the \"\" case in .)\n\n ::= 0 | 1 | ... | 9 ::= | ::= | . | . | . ::= \"+\" | \"-\" ::= | ::= | | ::= Ki | Mi | Gi | Ti | Pi | Ei\n\n\t(International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\n ::= m | \"\" | k | M | G | T | P | E\n\n\t(Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\n ::= \"e\" | \"E\" ```\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n\n- No precision is lost - No fractional digits will be emitted - The exponent (or suffix) is as large as possible.\n\nThe sign will be omitted unless the number is negative.\n\nExamples:\n\n- 1.5 will be serialized as \"1500m\" - 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation." + nullable: true + type: "string" + selectors: + description: "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects." + nullable: true + properties: + matchExpressions: + description: "matchExpressions is a list of label selector requirements. The requirements are ANDed." + items: + description: "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values." + properties: + key: + description: "key is the label key that the selector applies to." + type: "string" + operator: + description: "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist." + type: "string" + values: + description: "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch." + items: + type: "string" + type: "array" + required: + - "key" + - "operator" + type: "object" + type: "array" + matchLabels: + additionalProperties: + type: "string" + description: "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed." + type: "object" + type: "object" + storageClass: + nullable: true + type: "string" + type: "object" + type: "object" + type: "object" + type: "object" + configOverrides: + additionalProperties: + additionalProperties: + type: "string" + type: "object" + default: {} + description: "The `configOverrides` can be used to configure properties in product config files that are not exposed in the CRD. Read the [config overrides documentation](https://docs.stackable.tech/home/nightly/concepts/overrides#config-overrides) and consult the operator specific usage guide documentation for details on the available config files and settings for the specific product." + type: "object" + envOverrides: + additionalProperties: + type: "string" + default: {} + description: "`envOverrides` configure environment variables to be set in the Pods. It is a map from strings to strings - environment variables and the value to set. Read the [environment variable overrides documentation](https://docs.stackable.tech/home/nightly/concepts/overrides#env-overrides) for more information and consult the operator specific usage guide to find out about the product specific environment variables that are available." + type: "object" + podOverrides: + default: {} + description: "In the `podOverrides` property you can define a [PodTemplateSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/#podtemplatespec-v1-core) to override any property that can be set on a Kubernetes Pod. Read the [Pod overrides documentation](https://docs.stackable.tech/home/nightly/concepts/overrides#pod-overrides) for more information." + type: "object" + x-kubernetes-preserve-unknown-fields: true + replicas: + format: "uint16" + minimum: 0.0 + nullable: true + type: "integer" + type: "object" + type: "object" + required: + - "roleGroups" + type: "object" + required: + - "clusterConfig" + - "image" + type: "object" + status: + nullable: true + properties: + conditions: + default: [] + items: + properties: + lastTransitionTime: + description: "Last time the condition transitioned from one status to another." + format: "date-time" + nullable: true + type: "string" + lastUpdateTime: + description: "The last time this condition was updated." + format: "date-time" + nullable: true + type: "string" + message: + description: "A human readable message indicating details about the transition." + nullable: true + type: "string" + reason: + description: "The reason for the condition's last transition." + nullable: true + type: "string" + status: + description: "Status of the condition, one of True, False, Unknown." + enum: + - "True" + - "False" + - "Unknown" + type: "string" + type: + description: "Type of deployment condition." + enum: + - "Available" + - "Degraded" + - "Progressing" + - "ReconciliationPaused" + - "Stopped" + type: "string" + required: + - "status" + - "type" + type: "object" + type: "array" + deployedProductVersion: + description: "The product version that the HDFS cluster is currently running.\n\nDuring upgrades, this field contains the *old* version." + nullable: true + type: "string" + upgradeTargetProductVersion: + description: "The product version that is currently being upgraded to, otherwise null." + nullable: true + type: "string" + type: "object" + required: + - "spec" + title: "HdfsCluster" + type: "object" + served: true + storage: true + subresources: + status: {}