This is an automated email from the ASF dual-hosted git repository.
emaynard pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/polaris.git
The following commit(s) were added to refs/heads/main by this push:
new 3844fae96 fix(helm): Fix features configuration section & enhance docs
(#1638)
3844fae96 is described below
commit 3844fae96559e506135fc424381d9ea5a322d37e
Author: Alexandre Dutra <[email protected]>
AuthorDate: Wed May 21 19:04:10 2025 +0200
fix(helm): Fix features configuration section & enhance docs (#1638)
Fixes #1618 .
Fixes #1634.
This change adapts the `Values.features` section to the changes from #1572,
also fixing incorrect configmap entries produced by the template.
It also re-syncs the README.md file with README.md.gotmpl (the sync was
lost a few commits ago), and enhances the instructions for running Helm tests
locally.
---
helm/polaris/README.md | 121 ++++++++++++++++++++++++++--------
helm/polaris/README.md.gotmpl | 116 ++++++++++++++++++++++++--------
helm/polaris/ci/features-values.yaml | 31 +++++++++
helm/polaris/templates/configmap.yaml | 2 +
helm/polaris/values.yaml | 13 ++--
5 files changed, 221 insertions(+), 62 deletions(-)
diff --git a/helm/polaris/README.md b/helm/polaris/README.md
index e6707091f..74b3e55ad 100644
--- a/helm/polaris/README.md
+++ b/helm/polaris/README.md
@@ -46,33 +46,27 @@ A Helm chart for Apache Polaris (incubating).
## Installation
-### Optional
+### Prerequisites
-When using a custom `persistence.xml`, a Kubernetes Secret must be created for
it. Below is a sample command:
-```bash
-kubectl create secret generic polaris-secret -n polaris
--from-file=persistence.xml
-```
-
-### Running the unit tests
-
-Helm unit tests do not require a Kubernetes cluster. To run the unit tests
from the Polaris repo
-root:
+When using the (deprecated) EclipseLink-backed metastore, a custom
`persistence.xml` is required,
+and a Kubernetes Secret must be created for it. Below is a sample command:
```bash
-helm unittest helm/polaris
+kubectl create secret generic polaris-secret -n polaris
--from-file=persistence.xml
```
### Running locally with a Kind cluster
The below instructions assume Kind and Helm are installed.
-Simply run the `run.sh` script from the Polaris repo root, making sure to
specify the
-`--eclipse-link-deps` option:
+Simply run the `run.sh` script from the Polaris repo root:
```bash
./run.sh
```
+If using the EclipseLink-backed metastore, make sure to specify the
`--eclipse-link-deps` option.
+
This script will create a Kind cluster, deploy a local Docker registry, build
the Polaris Docker
images with support for Postgres and load them into the Kind cluster. (It will
also create an
example Deployment and Service with in-memory storage.)
@@ -100,27 +94,24 @@ The below instructions assume a local Kubernetes cluster
is running and Helm is
#### Common setup
-Create and populate the target namespace:
+Create the target namespace:
```bash
kubectl create namespace polaris
-kubectl apply --namespace polaris -f helm/polaris/ci/fixtures/
-
-kubectl wait --namespace polaris --for=condition=ready pod
--selector=app.kubernetes.io/name=postgres --timeout=120s
```
-The `helm/polaris/ci` contains a number of values files that can be used to
install the chart with
-different configurations.
-
-You can also run `ct` (chart-testing):
-
-```bash
-ct lint --charts helm/polaris
-ct install --namespace polaris --debug --charts ./helm/polaris
-```
+Create all the required resources in the `polaris` namespace. This usually
includes a Postgres
+database and a Kubernetes Secret for the `persistence.xml` file. The Polaris
chart does not create
+these resources automatically, as they are not required for all Polaris
deployments. The chart will
+fail if these resources are not created beforehand.
Below are two sample deployment models for installing the chart: one with a
non-persistent backend and another with a persistent backend.
+> [!WARNING]
+> The examples below use values files located in the `helm/polaris/ci`
directory.
+> **These files are intended for testing purposes primarily, and may not be
suitable for production use**.
+> For production deployments, create your own values files based on the
provided examples.
+
#### Non-persistent backend
Install the chart with a non-persistent backend. From Polaris repo root:
@@ -131,6 +122,16 @@ helm upgrade --install --namespace polaris \
polaris helm/polaris
```
+Note: if you are running the tests on a Kind cluster started with the `run.sh`
command explained
+above, then you need to run `helm upgrade` as follows:
+
+```bash
+helm upgrade --install --namespace polaris \
+ --debug --values helm/polaris/ci/simple-values.yaml \
+ --set=image.repository=localhost:5001/apache/polaris \
+ polaris helm/polaris
+```
+
#### Persistent backend
> [!WARNING]
@@ -184,6 +185,69 @@ kubectl delete --namespace polaris -f
helm/polaris/ci/fixtures/
kubectl delete namespace polaris
```
+## Development & Testing
+
+This section is intended for developers who want to run the Polaris Helm chart
tests.
+
+### Prerequisites
+
+The following tools are required to run the tests:
+
+* [Helm Unit Test](https://github.com/helm-unittest/helm-unittest)
+* [Chart Testing](https://github.com/helm/chart-testing)
+
+Quick installation instructions for these tools:
+
+```bash
+helm plugin install https://github.com/helm-unittest/helm-unittest.git
+brew install chart-testing
+```
+
+The integration tests also require some fixtures to be deployed. The
`ci/fixtures` directory
+contains the required resources. To deploy them, run the following command:
+
+```bash
+kubectl apply --namespace polaris -f helm/polaris/ci/fixtures/
+kubectl wait --namespace polaris --for=condition=ready pod
--selector=app.kubernetes.io/name=postgres --timeout=120s
+```
+
+The `helm/polaris/ci` contains a number of values files that will be used to
install the chart with
+different configurations.
+
+### Running the unit tests
+
+Helm unit tests do not require a Kubernetes cluster. To run the unit tests,
execute Helm Unit from
+the Polaris repo root:
+
+```bash
+helm unittest helm/polaris
+```
+
+You can also lint the chart using the Chart Testing tool, with the following
command:
+
+```bash
+ct lint --charts helm/polaris
+```
+
+### Running the integration tests
+
+Integration tests require a Kubernetes cluster. See installation instructions
above for setting up
+a local cluster.
+
+Integration tests are run with the Chart Testing tool:
+
+```bash
+ct install --namespace polaris --debug --charts ./helm/polaris
+```
+
+Note: if you are running the tests on a Kind cluster started with the `run.sh`
command explained
+above, then you need to run `ct install` as follows:
+
+```bash
+ct install --namespace polaris --debug --charts ./helm/polaris \
+ --helm-extra-set-args "--set=image.repository=localhost:5001/apache/polaris"
+```
+
## Values
| Key | Type | Default | Description |
@@ -219,8 +283,7 @@ kubectl delete namespace polaris
| extraServices | list | `[]` | Additional service definitions. All service
definitions always select all Polaris pods. Use this if you need to expose
specific ports with different configurations, e.g. expose polaris-http with an
alternate LoadBalancer service instead of ClusterIP. |
| extraVolumeMounts | list | `[]` | Extra volume mounts to add to the polaris
container. See https://kubernetes.io/docs/concepts/storage/volumes/. |
| extraVolumes | list | `[]` | Extra volumes to add to the polaris pod. See
https://kubernetes.io/docs/concepts/storage/volumes/. |
-| features | object | `{"defaults":{},"realmOverrides":{}}` | Polaris features
configuration. |
-| features.defaults | object | `{}` | Features to enable or disable globally.
If a feature is not present in the map, the default built-in value is used. |
+| features | object | `{"realmOverrides":{}}` | Polaris features
configuration. |
| features.realmOverrides | object | `{}` | Features to enable or disable per
realm. This field is a map of maps. The realm name is the key, and the value is
a map of feature names to values. If a feature is not present in the map, the
default value from the 'defaults' field is used. |
| fileIo | object | `{"type":"default"}` | Polaris FileIO configuration. |
| fileIo.type | string | `"default"` | The type of file IO to use. Two
built-in types are supported: default and wasb. The wasb one translates WASB
paths to ABFS ones. |
@@ -285,7 +348,7 @@ kubectl delete namespace polaris
| persistence.eclipseLink.secret | object |
`{"key":"persistence.xml","name":null}` | The secret name to pull
persistence.xml from. |
| persistence.eclipseLink.secret.key | string | `"persistence.xml"` | The key
in the secret to pull persistence.xml from. |
| persistence.eclipseLink.secret.name | string | `nil` | The name of the
secret to pull persistence.xml from. If not provided, the default built-in
persistence.xml will be used. This is probably not what you want. |
-| persistence.type | string | `"relational-jdbc"` | Three built-in types are
available: "relational-jdbc", "in-memory", "eclipse-link". The in-memory type
is not recommended for production use. The eclipse-link type is deprecated and
will be unsupported in a future release. |
+| persistence.type | string | `"eclipse-link"` | The type of persistence to
use. Two built-in types are supported: in-memory and eclipse-link. |
| podAnnotations | object | `{}` | Annotations to apply to polaris pods. |
| podLabels | object | `{}` | Additional Labels to apply to polaris pods. |
| podSecurityContext | object |
`{"fsGroup":10001,"seccompProfile":{"type":"RuntimeDefault"}}` | Security
context for the polaris pod. See
https://kubernetes.io/docs/tasks/configure-pod-container/security-context/. |
diff --git a/helm/polaris/README.md.gotmpl b/helm/polaris/README.md.gotmpl
index d478c6518..94a233ada 100644
--- a/helm/polaris/README.md.gotmpl
+++ b/helm/polaris/README.md.gotmpl
@@ -47,33 +47,27 @@
## Installation
-### Optional
+### Prerequisites
-When using a custom `persistence.xml`, a Kubernetes Secret must be created for
it. Below is a sample command:
-```bash
-kubectl create secret generic polaris-secret -n polaris
--from-file=persistence.xml
-```
-
-### Running the unit tests
-
-Helm unit tests do not require a Kubernetes cluster. To run the unit tests
from the Polaris repo
-root:
+When using the (deprecated) EclipseLink-backed metastore, a custom
`persistence.xml` is required,
+and a Kubernetes Secret must be created for it. Below is a sample command:
```bash
-helm unittest helm/polaris
+kubectl create secret generic polaris-secret -n polaris
--from-file=persistence.xml
```
### Running locally with a Kind cluster
The below instructions assume Kind and Helm are installed.
-Simply run the `run.sh` script from the Polaris repo root, making sure to
specify the
-`--eclipse-link-deps` option:
+Simply run the `run.sh` script from the Polaris repo root:
```bash
./run.sh
```
+If using the EclipseLink-backed metastore, make sure to specify the
`--eclipse-link-deps` option.
+
This script will create a Kind cluster, deploy a local Docker registry, build
the Polaris Docker
images with support for Postgres and load them into the Kind cluster. (It will
also create an
example Deployment and Service with in-memory storage.)
@@ -101,27 +95,24 @@ The below instructions assume a local Kubernetes cluster
is running and Helm is
#### Common setup
-Create and populate the target namespace:
+Create the target namespace:
```bash
kubectl create namespace polaris
-kubectl apply --namespace polaris -f helm/polaris/ci/fixtures/
-
-kubectl wait --namespace polaris --for=condition=ready pod
--selector=app.kubernetes.io/name=postgres --timeout=120s
```
-The `helm/polaris/ci` contains a number of values files that can be used to
install the chart with
-different configurations.
-
-You can also run `ct` (chart-testing):
-
-```bash
-ct lint --charts helm/polaris
-ct install --namespace polaris --debug --charts ./helm/polaris
-```
+Create all the required resources in the `polaris` namespace. This usually
includes a Postgres
+database and a Kubernetes Secret for the `persistence.xml` file. The Polaris
chart does not create
+these resources automatically, as they are not required for all Polaris
deployments. The chart will
+fail if these resources are not created beforehand.
Below are two sample deployment models for installing the chart: one with a
non-persistent backend and another with a persistent backend.
+> [!WARNING]
+> The examples below use values files located in the `helm/polaris/ci`
directory.
+> **These files are intended for testing purposes primarily, and may not be
suitable for production use**.
+> For production deployments, create your own values files based on the
provided examples.
+
#### Non-persistent backend
Install the chart with a non-persistent backend. From Polaris repo root:
@@ -132,6 +123,16 @@ helm upgrade --install --namespace polaris \
polaris helm/polaris
```
+Note: if you are running the tests on a Kind cluster started with the `run.sh`
command explained
+above, then you need to run `helm upgrade` as follows:
+
+```bash
+helm upgrade --install --namespace polaris \
+ --debug --values helm/polaris/ci/simple-values.yaml \
+ --set=image.repository=localhost:5001/apache/polaris \
+ polaris helm/polaris
+```
+
#### Persistent backend
> [!WARNING]
@@ -185,4 +186,67 @@ kubectl delete --namespace polaris -f
helm/polaris/ci/fixtures/
kubectl delete namespace polaris
```
+## Development & Testing
+
+This section is intended for developers who want to run the Polaris Helm chart
tests.
+
+### Prerequisites
+
+The following tools are required to run the tests:
+
+* [Helm Unit Test](https://github.com/helm-unittest/helm-unittest)
+* [Chart Testing](https://github.com/helm/chart-testing)
+
+Quick installation instructions for these tools:
+
+```bash
+helm plugin install https://github.com/helm-unittest/helm-unittest.git
+brew install chart-testing
+```
+
+The integration tests also require some fixtures to be deployed. The
`ci/fixtures` directory
+contains the required resources. To deploy them, run the following command:
+
+```bash
+kubectl apply --namespace polaris -f helm/polaris/ci/fixtures/
+kubectl wait --namespace polaris --for=condition=ready pod
--selector=app.kubernetes.io/name=postgres --timeout=120s
+```
+
+The `helm/polaris/ci` contains a number of values files that will be used to
install the chart with
+different configurations.
+
+### Running the unit tests
+
+Helm unit tests do not require a Kubernetes cluster. To run the unit tests,
execute Helm Unit from
+the Polaris repo root:
+
+```bash
+helm unittest helm/polaris
+```
+
+You can also lint the chart using the Chart Testing tool, with the following
command:
+
+```bash
+ct lint --charts helm/polaris
+```
+
+### Running the integration tests
+
+Integration tests require a Kubernetes cluster. See installation instructions
above for setting up
+a local cluster.
+
+Integration tests are run with the Chart Testing tool:
+
+```bash
+ct install --namespace polaris --debug --charts ./helm/polaris
+```
+
+Note: if you are running the tests on a Kind cluster started with the `run.sh`
command explained
+above, then you need to run `ct install` as follows:
+
+```bash
+ct install --namespace polaris --debug --charts ./helm/polaris \
+ --helm-extra-set-args "--set=image.repository=localhost:5001/apache/polaris"
+```
+
{{ template "chart.valuesSection" . }}
diff --git a/helm/polaris/ci/features-values.yaml
b/helm/polaris/ci/features-values.yaml
new file mode 100644
index 000000000..cf44ce0c0
--- /dev/null
+++ b/helm/polaris/ci/features-values.yaml
@@ -0,0 +1,31 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+image:
+ pullPolicy: Never
+
+features:
+ ENFORCE_PRINCIPAL_CREDENTIAL_ROTATION_REQUIRED_CHECKING: false
+ SUPPORTED_CATALOG_STORAGE_TYPES:
+ - S3
+ realmOverrides:
+ POLARIS:
+ ENFORCE_PRINCIPAL_CREDENTIAL_ROTATION_REQUIRED_CHECKING: true
+ SUPPORTED_CATALOG_STORAGE_TYPES:
+ - GCS
diff --git a/helm/polaris/templates/configmap.yaml
b/helm/polaris/templates/configmap.yaml
index ae732760c..6d12fbd7e 100644
--- a/helm/polaris/templates/configmap.yaml
+++ b/helm/polaris/templates/configmap.yaml
@@ -37,8 +37,10 @@ data:
{{- /* Features */ -}}
{{- range $k, $v := .Values.features -}}
+ {{- if ( ne $k "realmOverrides" ) -}}
{{- $_ = set $map (printf "polaris.features.\"%s\"" $k) (toJson $v) -}}
{{- end -}}
+ {{- end -}}
{{- range $realm, $overrides := .Values.features.realmOverrides -}}
{{- range $k, $v := $overrides -}}
{{- $_ = set $map (printf "polaris.features.realm-overrides.\"%s\".\"%s\""
$realm $k) (toJson $v) -}}
diff --git a/helm/polaris/values.yaml b/helm/polaris/values.yaml
index 04a1013cf..5cf964f20 100644
--- a/helm/polaris/values.yaml
+++ b/helm/polaris/values.yaml
@@ -507,13 +507,12 @@ realmContext:
features:
# -- Features to enable or disable globally. If a feature is not present in
the map, the default
# built-in value is used.
- defaults: {}
- # ENFORCE_PRINCIPAL_CREDENTIAL_ROTATION_REQUIRED_CHECKING: false
- # SUPPORTED_CATALOG_STORAGE_TYPES:
- # - S3
- # - GCS
- # - AZURE
- # - FILE
+ # ENFORCE_PRINCIPAL_CREDENTIAL_ROTATION_REQUIRED_CHECKING: false
+ # SUPPORTED_CATALOG_STORAGE_TYPES:
+ # - S3
+ # - GCS
+ # - AZURE
+ # - FILE
# -- Features to enable or disable per realm. This field is a map of maps.
The realm name is the key, and the value is a map of
# feature names to values. If a feature is not present in the map, the
default value from the 'defaults' field is used.
realmOverrides: {}