Skip to content

Commit

Permalink
ParadeDB Enterprise (#58)
Browse files Browse the repository at this point in the history
Co-authored-by: Philippe Noël <[email protected]>

chore: Parallel test execution (#59)
  • Loading branch information
itay-grudev authored and philippemnoel committed Dec 18, 2024
1 parent efd4b33 commit ded5af2
Show file tree
Hide file tree
Showing 12 changed files with 198 additions and 12 deletions.
33 changes: 28 additions & 5 deletions .github/workflows/tests-cluster-chainsaw.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,35 @@ on:
- 'gh-pages'

jobs:
test-cluster-standalone:
test-list:
runs-on: ubuntu-latest
outputs:
tests: ${{ steps.listTests.outputs.tests }}

steps:
- name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
uses: actions/checkout@v4
with:
fetch-depth: 1

- id: listTests
run: |
echo "tests=$(ls charts/paradedb/test -1 | jq -cRn '{ include: [inputs | { test: "\(.)" }]}')" >> $GITHUB_OUTPUT
test:
needs: test-list
runs-on: ubuntu-latest
strategy:
matrix: ${{ fromJson(needs.test-list.outputs.tests) }}

steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Install Cosign
uses: sigstore/cosign-installer@dc72c7d5c4d10cd6bcb8cf6e3fd625a9e5e537da # v3.7.0
uses: sigstore/cosign-installer@v3

# Added by ParadeDB: Authenticate to Docker Hub to avoid rate limits
- name: Login to Docker Hub
Expand Down Expand Up @@ -52,7 +71,7 @@ jobs:
helm install prometheus-crds prometheus-community/prometheus-operator-crds
- name: Install Chainsaw
uses: kyverno/action-install-chainsaw@f2b47b97dc889c12702113753d713f01ec268de5 # v0.2.12
uses: kyverno/[email protected]
with:
verify: true

Expand All @@ -73,5 +92,9 @@ jobs:
--values ./.github/minio.yaml \
tenant minio-operator/tenant
# The Docker Hub tokens are required for the ParadeDB Enterprise tests
- name: Run Kyverno/Chainsaw
run: chainsaw test
run: chainsaw test charts/paradedb/test/${{ matrix.test }}
env:
PARADEDB_ENTERPRISE_DOCKER_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
PARADEDB_ENTERPRISE_DOCKER_PAT: ${{ secrets.DOCKERHUB_ACCESS_TOKEN }}
20 changes: 18 additions & 2 deletions charts/paradedb/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,23 @@ helm upgrade --atomic --install paradedb --namespace paradedb --create-namespace

### Database Types

To use the ParadeDB Helm Chart, specify `paradedb` via the `type` parameter.
To create a ParadeDB cluster, you must specify either `paradedb` or `paradedb-enterprise` via the `type` parameter.

> [!IMPORTANT]
> When using `paradedb-enterprise` you must also specify the `cluster.imagePullSecrets` containing the Docker registry credentials. You can create one with:
>
> ```bash
> kubectl -n NAMESPACE create secret docker-registry paradedb-enterprise-registry-cred --docker-server="https://index.docker.io/v1/" --docker-username="USERNAME" --docker-password="ACCESS_TOKEN"
> ```
>
> You then need to set the name of the secret in the `values.yaml` file with:
>
> ```yaml
> type: paradedb-enterprise
> cluster:
> imagePullSecrets:
> - name: paradedb-enterprise-registry-cred
> ```
### Modes of Operation
Expand Down Expand Up @@ -292,7 +308,7 @@ refer to the [CloudNativePG Documentation](https://cloudnative-pg.io/documentat
| recovery.s3.secretKey | string | `""` | |
| recovery.secret.create | bool | `true` | Whether to create a secret for the backup credentials |
| recovery.secret.name | string | `""` | Name of the backup credentials secret |
| type | string | `"paradedb"` | Type of the CNPG database. Available types: * `paradedb` |
| type | string | `"paradedb"` | Type of the CNPG database. Available types: * `paradedb` * `paradedb-enterprise` |
| version.paradedb | string | `"0.12.0"` | We default to v0.12.0 for testing and local development |
| version.postgresql | string | `"16"` | PostgreSQL major version to use |
| poolers[].name | string | `` | Name of the pooler resource |
Expand Down
18 changes: 17 additions & 1 deletion charts/paradedb/README.md.gotmpl
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,23 @@ helm upgrade --atomic --install paradedb --namespace paradedb --create-namespace

### Database Types

To use the ParadeDB Helm Chart, specify `paradedb` via the `type` parameter.
To create a ParadeDB cluster, you must specify either `paradedb` or `paradedb-enterprise` via the `type` parameter.

> [!IMPORTANT]
> When using `paradedb-enterprise` you must also specify the `cluster.imagePullSecrets` containing the Docker registry credentials. You can create one with:
>
> ```bash
> kubectl -n NAMESPACE create secret docker-registry paradedb-enterprise-registry-cred --docker-server="https://index.docker.io/v1/" --docker-username="USERNAME" --docker-password="ACCESS_TOKEN"
> ```
>
> You then need to set the name of the secret in the `values.yaml` file with:
>
> ```yaml
> type: paradedb-enterprise
> cluster:
> imagePullSecrets:
> - name: paradedb-enterprise-registry-cred
> ```

### Modes of Operation

Expand Down
6 changes: 3 additions & 3 deletions charts/paradedb/templates/_bootstrap.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ bootstrap:
owner: {{ tpl .Values.cluster.initdb.owner . }}
{{- end }}
postInitSQL:
{{- if eq .Values.type "paradedb" }}
{{- if or (eq .Values.type "paradedb") (eq .Values.type "paradedb-enterprise") }}
- CREATE EXTENSION IF NOT EXISTS pg_cron;
{{- end }}
{{- with .Values.cluster.initdb }}
Expand All @@ -20,7 +20,7 @@ bootstrap:
{{- end -}}
{{- end }}
postInitApplicationSQL:
{{- if eq .Values.type "paradedb" }}
{{- if or (eq .Values.type "paradedb") (eq .Values.type "paradedb-enterprise") }}
- CREATE EXTENSION IF NOT EXISTS pg_search;
- CREATE EXTENSION IF NOT EXISTS pg_analytics;
- CREATE EXTENSION IF NOT EXISTS pg_ivm;
Expand All @@ -37,7 +37,7 @@ bootstrap:
{{- end -}}
{{- end }}
postInitTemplateSQL:
{{- if eq .Values.type "paradedb" }}
{{- if or (eq .Values.type "paradedb") (eq .Values.type "paradedb-enterprise") }}
- CREATE EXTENSION IF NOT EXISTS pg_search;
- CREATE EXTENSION IF NOT EXISTS pg_analytics;
- CREATE EXTENSION IF NOT EXISTS pg_ivm;
Expand Down
6 changes: 6 additions & 0 deletions charts/paradedb/templates/_helpers.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,8 @@ If a custom imageName is available, use it, otherwise use the defaults based on
{{- printf "ghcr.io/cloudnative-pg/postgresql:%s" .Values.version.postgresql -}}
{{- else if eq .Values.type "paradedb" -}}
{{- printf "paradedb/paradedb:%s-v%s" .Values.version.postgresql .Values.version.paradedb -}}
{{- else if eq .Values.type "paradedb-enterprise" -}}
{{- printf "paradedb/paradedb-enterprise:%s-v%s" .Values.version.postgresql .Values.version.paradedb -}}
{{- else -}}
{{ fail "Invalid cluster type!" }}
{{- end }}
Expand Down Expand Up @@ -114,6 +116,8 @@ Postgres UID
{{- .Values.cluster.postgresUID }}
{{- else if eq .Values.type "paradedb" -}}
{{- 999 -}}
{{- else if eq .Values.type "paradedb-enterprise" -}}
{{- 999 -}}
{{- else -}}
{{- 26 -}}
{{- end -}}
Expand All @@ -127,6 +131,8 @@ Postgres GID
{{- .Values.cluster.postgresGID }}
{{- else if eq .Values.type "paradedb" -}}
{{- 999 -}}
{{- else if eq .Values.type "paradedb-enterprise" -}}
{{- 999 -}}
{{- else -}}
{{- 26 -}}
{{- end -}}
Expand Down
2 changes: 1 addition & 1 deletion charts/paradedb/templates/cluster.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ spec:
postgresql:
{{- if or (eq .Values.type "timescaledb") (not (empty .Values.cluster.postgresql.shared_preload_libraries)) }}
shared_preload_libraries:
{{- if eq .Values.type "paradedb" }}
{{- if or (eq .Values.type "paradedb") (eq .Values.type "paradedb-enterprise") }}
- pg_search
- pg_analytics
- pg_cron
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
name: paradedb-ncc-1701-d
status:
readyInstances: 1
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
type: paradedb-enterprise
mode: standalone

cluster:
instances: 1
storage:
size: 256Mi
imagePullSecrets:
- name: paradedb-enterprise-registry-cred

backups:
enabled: false
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
apiVersion: batch/v1
kind: Job
metadata:
name: paradedb-enterprise-test
status:
succeeded: 1
46 changes: 46 additions & 0 deletions charts/paradedb/test/paradedb-enterprise/02-paradedb_test.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
apiVersion: batch/v1
kind: Job
metadata:
name: paradedb-enterprise-test
spec:
template:
spec:
restartPolicy: OnFailure
containers:
- name: data-test
env:
- name: DB_URI
valueFrom:
secretKeyRef:
name: paradedb-ncc-1701-d-app
key: uri
image: alpine:3.19
command: ['sh', '-c']
args:
- |
apk --no-cache add postgresql-client
psql "$DB_URI" <<-EOSQL
CALL paradedb.create_bm25_test_table(
schema_name => 'public',
table_name => 'mock_items'
);
CALL paradedb.create_bm25(
index_name => 'search_idx',
table_name => 'mock_items',
key_field => 'id',
text_fields => paradedb.field('description') || paradedb.field('category'),
numeric_fields => paradedb.field('rating'),
boolean_fields => paradedb.field('in_stock'),
datetime_fields => paradedb.field('created_at'),
json_fields => paradedb.field('metadata'),
range_fields => paradedb.field('weight_range')
);
EOSQL
RESULT=$(psql "$DB_URI" -t) <<-EOSQL
SELECT description
FROM mock_items
WHERE description @@@ '"bluetooth speaker"~1'
LIMIT 1;
EOSQL
echo -$RESULT-
test "$RESULT" = " Bluetooth-enabled speaker"
54 changes: 54 additions & 0 deletions charts/paradedb/test/paradedb-enterprise/chainsaw-test.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
##
# This test sets up a ParadeDB Enterprise Cluster and ensures that ParadeDB extensions are available.
apiVersion: chainsaw.kyverno.io/v1alpha1
kind: Test
metadata:
name: paradedb-enterprise
spec:
timeouts:
apply: 1s
assert: 2m
cleanup: 1m
steps:
- name: Install a standalone ParadeDB Enterprise CNPG Cluster
try:
- script:
content: |
kubectl -n $NAMESPACE create secret docker-registry paradedb-enterprise-registry-cred --docker-server="https://index.docker.io/v1/" --docker-username="$PARADEDB_ENTERPRISE_DOCKER_USERNAME" --docker-password="$PARADEDB_ENTERPRISE_DOCKER_PAT"
helm upgrade \
--install \
--namespace $NAMESPACE \
--values ./01-paradedb-NCC-1701-D_cluster.yaml \
--wait \
paradedb-ncc-1701-d ../../
- assert:
file: ./01-paradedb-NCC-1701-D_cluster-assert.yaml
catch:
- describe:
apiVersion: v1
kind: Pod
- describe:
apiVersion: batch/v1
kind: Job
- podLogs:
selector: cnpg.io/cluster=paradedb-ncc-1701-d
- name: Verify ParadeDB Enterprise extensions are installed
timeouts:
apply: 1s
assert: 30s
try:
- apply:
file: 02-paradedb_test.yaml
- assert:
file: 02-paradedb_test-assert.yaml
catch:
- describe:
apiVersion: batch/v1
kind: Job
- podLogs:
selector: batch.kubernetes.io/job-name=data-test
- name: Cleanup
try:
- script:
content: |
helm uninstall --namespace $NAMESPACE paradedb-ncc-1701-d
1 change: 1 addition & 0 deletions charts/paradedb/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ namespaceOverride: ""
###
# -- Type of the CNPG database. Available types:
# * `paradedb`
# * `paradedb-enterprise`
type: paradedb

version:
Expand Down

0 comments on commit ded5af2

Please sign in to comment.