diff --git a/README.md b/README.md index 5ec9336..4c9b0d5 100644 --- a/README.md +++ b/README.md @@ -131,6 +131,7 @@ Below is a list of available charts along with their links: | **JupyterHub** | [helm.zop.dev/jupyterhub](https://helm.zop.dev/src/readme.html?id=jupyterhub) | Deploy to Zopday | | **LiteLLM** | [helm.zop.dev/litellm](https://helm.zop.dev/src/readme.html?id=litellm) | Deploy to Zopday | | **LocalAI** | [helm.zop.dev/localai](https://helm.zop.dev/src/readme.html?id=localai) | Deploy to Zopday | +| **n8n** | [helm.zop.dev/n8n](https://helm.zop.dev/src/readme.html?id=n8n) | Deploy to Zopday | | **Outline** | [helm.zop.dev/outline](https://helm.zop.dev/src/readme.html?id=outline) | Deploy to Zopday | | **Superset** | [helm.zop.dev/superset](https://helm.zop.dev/src/readme.html?id=superset) | Deploy to Zopday | | **WordPress** | [helm.zop.dev/wordpress](https://helm.zop.dev/src/readme.html?id=wordpress) | Deploy to Zopday | diff --git a/charts/n8n/Chart.lock b/charts/n8n/Chart.lock new file mode 100644 index 0000000..0424274 --- /dev/null +++ b/charts/n8n/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: postgres + repository: https://helm.zop.dev + version: v0.0.14 +digest: sha256:52fa869fd28543afab579ed94b65e63f4faf619086333867dc89e6a93dddbf7b +generated: "2026-08-18T15:24:15.723291+05:30" diff --git a/charts/n8n/Chart.yaml b/charts/n8n/Chart.yaml new file mode 100644 index 0000000..497ce18 --- /dev/null +++ b/charts/n8n/Chart.yaml @@ -0,0 +1,28 @@ +apiVersion: v2 +# Pinned to the semver tag that `stable` and `latest` currently resolve to. +# Both of those are moving tags, so naming one of them here would make two +# installs of the same chart version run different code. +appVersion: "2.35.3" +description: Helm chart for deploying n8n, a workflow automation platform +name: n8n +version: 0.0.1 +type: application +icon: "https://storage.googleapis.com/zopdev-blog-resources/1/files/originals/20260812/71ab17a6-11d5-4280-a267-1749b533b756-n8n.png" +maintainers: + - name: ZopDev + url: zop.dev +# PostgreSQL holds workflows, credentials and execution history. It is the +# default and only supported datastore for this chart; point the release at an +# existing server with externalDatabase instead of turning this off. +dependencies: + - name: postgres + # 0.0.14 or later is required, not merely preferred. Up to 0.0.13 the + # database init ran as a bare Pod, and a completed Pod never reports + # Ready - so `helm install --wait` blocked until it timed out. 0.0.14 + # runs it as a Job. 0.0.13 also fixed the alerts template rendering a + # null `service` label that the PrometheusRule CRD rejects. + version: 0.0.14 + repository: https://helm.zop.dev + condition: postgres.enabled +annotations: + type: application diff --git a/charts/n8n/README.md b/charts/n8n/README.md new file mode 100644 index 0000000..62e2187 --- /dev/null +++ b/charts/n8n/README.md @@ -0,0 +1,381 @@ +Deploy to Zopday + +# n8n Helm Chart + +This Helm chart deploys [n8n](https://n8n.io) on Kubernetes. n8n is a workflow +automation platform: workflows are built in a browser-based editor and triggered +on a schedule, by a webhook call, or by hand. + +The chart is self-contained. It ships its own Deployment, Service and config +templates and pulls in the zopdev `postgres` chart as a subchart for the backing +database. + +One pod serves the editor, the REST API and the webhook endpoints, and runs the +executions in the same process (`EXECUTIONS_MODE=regular`). Queue mode — which +spreads executions across dedicated worker pods and needs Redis — is not part of +this chart. + +--- + +## Prerequisites + +- Kubernetes 1.19+ +- Helm 3.0+ +- kubectl configured to communicate with your cluster +- A default StorageClass, for the data volume +- PostgreSQL (installed automatically as a subchart dependency) +- Prometheus Operator CRDs (`servicemonitors` and `prometheusrules`) + +The CRDs are required even with `metrics.enabled=false` and `alerts.enabled=false`. +Those flags govern this chart's own objects; the postgres subchart renders a +ServiceMonitor and a PrometheusRule unconditionally, and without the CRDs the +install fails with `no matches for kind "PrometheusRule"`. On a cluster without +the Prometheus Operator, install just the two CRDs: + +```bash +BASE=https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/main/example/prometheus-operator-crd +kubectl apply --server-side -f $BASE/monitoring.coreos.com_servicemonitors.yaml +kubectl apply --server-side -f $BASE/monitoring.coreos.com_prometheusrules.yaml +``` + +--- + +## Dependencies + +| Chart | Version | Repository | Purpose | +|------------|----------|------------------------|------------------------------------------------------| +| `postgres` | `0.0.14` | `https://helm.zop.dev` | Stores workflows, credentials and execution history | + +Build the dependencies before installing from a local checkout: + +```bash +helm dependency update charts/n8n +``` + +--- + +## Install + +```bash +helm repo add zop https://helm.zop.dev +helm repo update +helm install n8n zop/n8n +``` + +To skip this chart's own monitoring objects (the CRDs are still needed, see +above): + +```bash +helm install n8n zop/n8n --set metrics.enabled=false --set alerts.enabled=false +``` + +--- + +## Verify + +```bash +# The pod waits on the database, then runs migrations, then becomes Ready +kubectl get pods -l app=n8n + +kubectl port-forward svc/n8n-n8n 5678:5678 +open http://localhost:5678 +``` + +The first page asks you to create an owner account. That account lives in the +database rather than in the release, so it survives upgrades — and it cannot be +recovered from the chart, so keep the password. + +--- + +## Two things worth getting right before building workflows + +### The public URL + +n8n writes its own address into every webhook it registers and into OAuth +callback URLs. With no public URL configured it uses `http://localhost:5678/`, +which leaves a perfectly working editor whose webhooks nothing outside the +cluster can call. + +Enabling the ingress is what fixes this — `N8N_WEBHOOK_URL`, `N8N_HOST` and +`N8N_PROTOCOL` are all derived from `ingress.host`, and `tlsSecretName` decides +whether that is `https`: + +```yaml +ingress: + enabled: true + host: n8n.example.com + tlsSecretName: n8n-tls +``` + +**If TLS is terminated upstream, say so — the chart cannot tell.** `tlsSecretName` +is only one way a site becomes HTTPS. An ALB with an ACM certificate, a GKE +managed certificate and a `cert-manager.io/cluster-issuer` annotation all serve +HTTPS while rendering no `tls:` block at all, and the chart would otherwise +advertise `http://` for a site that only answers on `https://`. Point +`webhookUrl` at the real address in that case: + +```yaml +ingress: + enabled: true + className: alb + host: n8n.example.com + annotations: + alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:... +webhookUrl: https://n8n.example.com/ # the scheme the world actually sees +``` + +**Serving the host over genuinely plain http needs one concession.** n8n marks +its auth cookie `Secure` by default and browsers will not return a `Secure` +cookie over http, so the editor loads and every login fails. Set +`insecureCookie: true` to accept that, and NOTES will remind you it is on. + +The chart does **not** infer this from a missing `tlsSecretName`. Guessing +"insecure" from an absent field would silently drop `Secure` on the +annotation-terminated HTTPS deployments above — a security downgrade nobody +asked for is worse than an instance that refuses to log in and tells you why. A +port-forward to `localhost` needs none of this: browsers treat localhost as a +secure context. + +If something else terminates traffic — a tunnel, or a proxy on another hostname — +set the URL directly instead. It overrides the derivation, and host and protocol +follow from it: + +```yaml +webhookUrl: https://hooks.example.com/ +``` + +### The encryption key + +Every credential stored in n8n is encrypted with `N8N_ENCRYPTION_KEY`. The chart +generates one on install and reads it back on upgrade, so it is stable for as +long as the secret exists. **It cannot be recovered from the database.** If it is +lost, workflows survive but every credential has to be entered again. + +Back it up after installing: + +```bash +kubectl get secret n8n-n8n-encryption \ + -o jsonpath='{.data.N8N_ENCRYPTION_KEY}' | base64 -d +``` + +To manage it yourself instead, create the secret first and point the chart at it: + +```bash +kubectl create secret generic n8n-encryption \ + --from-literal=N8N_ENCRYPTION_KEY="$(openssl rand -base64 24)" +``` + +```yaml +encryptionKey: + existingSecret: n8n-encryption +``` + +--- + +## Configuration + +`values.schema.json` deliberately describes only the handful of fields the +zop.dev configuration form should offer — image, ingress, persistence, timezone +and resources. Everything else documented below is still settable in a values +file or with `--set`; it simply is not rendered as a form field, because it is +either plumbing or only relevant to a specific topology. The chart's own +`templates/validate.yaml` guards those values at render time regardless of +whether the schema describes them. + + +### Image + +| Key | Description | Default | +|--------------------|--------------------------------------------------------|--------------| +| `image.repository` | Image repository | `n8nio/n8n` | +| `image.tag` | Image tag; falls back to `.Chart.AppVersion` when empty | `""` | +| `image.pullPolicy` | Image pull policy | `IfNotPresent` | + +`appVersion` pins an immutable release tag. `latest` and `stable` both move, so +setting either would make two installs of the same chart version run different +code. + +### Service and ingress + +| Key | Description | Default | +|-------------------------|-----------------------------------------------------------------|-------------| +| `service.type` | Service type | `ClusterIP` | +| `service.port` | Port for the editor, API, webhooks and `/metrics` | `5678` | +| `ingress.enabled` | Render the Ingress | `false` | +| `ingress.className` | IngressClass name | `""` | +| `ingress.host` | Hostname to serve; required when enabled | `""` | +| `ingress.annotations` | Annotations applied to the Ingress | `{}` | +| `ingress.tlsSecretName` | Existing TLS certificate secret | `""` | +| `webhookUrl` | Overrides the public URL derived from `ingress.host`; must include the scheme | `""` | +| `insecureCookie` | Send the auth cookie without `Secure`; needed for plain http | `false` | + +### Persistence + +| Key | Description | Default | +|----------------------------|----------------------------------------------------|----------| +| `persistence.enabled` | Provision a volume for `/home/node/.n8n` | `true` | +| `persistence.size` | Requested volume size | `10Gi` | +| `persistence.storageClass` | StorageClass name; empty uses the cluster default | `""` | +| `persistence.existingClaim`| Bind an existing claim instead of creating one | `""` | + +The volume holds the config file n8n writes on first boot, any custom nodes, and +binary payloads. With it enabled the chart sets +`N8N_DEFAULT_BINARY_DATA_MODE=filesystem`, keeping uploaded files and HTTP +response bodies out of the execution rows in Postgres — which is what stops the +`execution_data` table growing without bound. Disabling it switches binary +storage into Postgres (`N8N_DEFAULT_BINARY_DATA_MODE=database`) rather than +writing to a container filesystem that is lost on restart. The chart never +selects n8n's `default` mode, which despite the name keeps payloads in the +process heap — that would be an OOMKill against the memory limit, and it is +removed in n8n 3.x. + +The claim carries `helm.sh/resource-policy: keep`, so `helm uninstall` leaves the +data behind. + +### Database + +| Key | Description | Default | +|---------------------|----------------------------------------------------------------|---------| +| `postgres.enabled` | Install PostgreSQL with this release | `true` | +| `postgres.name` | Owning service name, used as the `service` label on its alerts | `n8n` | +| `postgres.services` | Databases to provision (`name`/`database`) | `[{name: n8n, database: n8n}]` | + +To use a server this release does not manage, turn the subchart off and describe +the existing one. The password is only ever read from a secret — this chart will +not take it as a plain value, because everything in `values.yaml` ends up +readable in the release manifest: + +```yaml +postgres: + enabled: false +externalDatabase: + host: postgres.example.com + port: 5432 + database: n8n + user: n8n + existingSecret: n8n-db + passwordKey: password +``` + +Setting both `postgres.enabled` and `externalDatabase.host` fails the render +rather than silently picking one. + +| Key | Description | Default | +|---------------------------------|-------------------------------------------------|-----------| +| `waitForDatabase.enabled` | Block startup until the database authenticates | `true` | +| `waitForDatabase.image.*` | Image providing `psql` for the wait loop | `docker.io/bitnamilegacy/postgresql:17.4.0` | + +The postgres chart creates the role from a Pod that sleeps before it runs, so +without this init container n8n crash-loops through the first minute of a fresh +install. + +### Observability + +| Key | Description | Default | +|--------------------------|--------------------------------------------------|---------| +| `metrics.enabled` | Serve `/metrics` and render the ServiceMonitor | `true` | +| `metrics.scrapeInterval` | ServiceMonitor scrape interval | `30s` | +| `alerts.enabled` | Render the PrometheusRule | `true` | + +`metrics.enabled` sets `N8N_METRICS`, which is what makes n8n serve the endpoint +at all, so the scrape target and the endpoint cannot disagree. Both options +render `monitoring.coreos.com` objects and need the Prometheus Operator CRDs. + +### Compute and environment + +| Key | Description | Default | +|------------------------|----------------------------------------------------------|---------| +| `resources.requests` | CPU/memory requests | `500m` / `1Gi` | +| `resources.limits` | CPU/memory limits | `1` / `2Gi` | +| `timezone` | Timezone cron triggers are scheduled against | `UTC` | +| `env` | Extra plain environment variables | `{}` | +| `extraEnvFrom` | Existing secrets mounted via `envFrom` | `[]` | + +`timezone` is applied as both `GENERIC_TIMEZONE` and `TZ`; a wrong value silently +shifts when scheduled workflows run. + +`env` ships four defaults, all settings n8n warns it is about to change. Pinning +them means an image bump cannot quietly alter how the release behaves: + +| Variable | Default | Why | +|---|---|---| +| `N8N_UNVERIFIED_PACKAGES_ENABLED` | `"false"` | Blocks unvetted community nodes; also where n8n's own default is heading | +| `N8N_RUNNERS_TASK_TIMEOUT` | `"300"` | Today's value, kept so a future reduction to 60s cannot start killing long-running Code nodes | +| `N8N_COMPRESSION_NODE_MAX_DECOMPRESSED_SIZE_BYTES` | `"268435456"` | 256 MiB rather than today's 2 GiB; unbounded decompression of an untrusted archive is a memory-exhaustion risk | +| `N8N_COMPRESSION_NODE_MAX_ZIP_ENTRIES` | `"1000"` | Same reasoning, on entry count | + +Override or remove any of them freely — they are ordinary `env` entries. + +Put anything sensitive in a secret and reference it rather than using `env`: + +```yaml +extraEnvFrom: + - secretName: n8n-smtp +``` + +Variables the chart derives from other values — `DB_TYPE`, the `DB_POSTGRESDB_*` +set, `N8N_ENCRYPTION_KEY`, `N8N_DEFAULT_BINARY_DATA_MODE` — are rejected at +render time rather than silently overridden. + +--- + +## Upgrading + +```bash +helm upgrade n8n zop/n8n +``` + +The encryption key is read back from the existing secret, and the database +credentials belong to the postgres subchart, which preserves them the same way. +Because the data volume is ReadWriteOnce the Deployment uses `strategy: Recreate` +— the old pod is torn down before the new one starts, so an upgrade is a brief +outage rather than a rolling handover. + +--- + +## Uninstalling + +```bash +helm uninstall n8n +``` + +Three things deliberately survive an uninstall, because together they are the +instance: + +| Object | Why it stays | +|---|---| +| `pvc/n8n-n8n` | `helm.sh/resource-policy: keep` — binary data and custom nodes | +| `pvc/n8n-persistent-storage-n8n-postgres-0` | a `volumeClaimTemplates` claim; Kubernetes never deletes these | +| `secret/n8n-n8n-encryption` | `helm.sh/resource-policy: keep` — the only key that can decrypt the credentials in that database | + +The encryption secret is kept for the same reason as the volumes: deleting it +while the database survives would leave workflows intact and every stored +credential undecryptable. + +**Uninstall is not reversible, though — verified, not assumed.** Reinstalling the +same release over those retained volumes fails, and not because of anything this +chart does. The postgres subchart's `-postgres-root-secret` is *not* +retained, so a reinstall generates a new superuser password while the retained +data directory still expects the old one. Postgres then refuses its own init Job +(`password authentication failed for user "postgres"`), the n8n role is never +created, and this chart's `wait-for-db` init container blocks — which is the +correct outcome, since the alternative is n8n starting against a database it +cannot read. + +So: to keep an instance alive, use `helm upgrade`, never uninstall-and-reinstall. +If you must uninstall and later restore, back up **both** secrets first: + +```bash +kubectl get secret n8n-n8n-encryption -o yaml > n8n-encryption.backup.yaml +kubectl get secret n8n-postgres-root-secret -o yaml > n8n-postgres-root.backup.yaml +``` + +Restoring both before reinstalling is what makes the retained volumes usable +again. + +To remove the instance completely, delete all three deliberately: + +```bash +kubectl delete pvc n8n-n8n n8n-persistent-storage-n8n-postgres-0 +kubectl delete secret n8n-n8n-encryption +``` diff --git a/charts/n8n/templates/NOTES.txt b/charts/n8n/templates/NOTES.txt new file mode 100644 index 0000000..27d876b --- /dev/null +++ b/charts/n8n/templates/NOTES.txt @@ -0,0 +1,70 @@ +n8n is installed as release {{ .Release.Name }}. + + database: {{ if .Values.postgres.enabled }}installed by this release{{ else }}{{ .Values.externalDatabase.host }}{{ end }} + persistence: {{ if .Values.persistence.enabled }}{{ if .Values.persistence.existingClaim }}{{ .Values.persistence.existingClaim }}{{ else }}{{ .Values.persistence.size }} claim {{ include "n8n.fullname" . }}{{ end }}{{ else }}disabled - binary data is stored in Postgres (database mode){{ end }} + +Reach the editor: + + kubectl port-forward -n {{ .Release.Namespace }} \ + svc/{{ include "n8n.fullname" . }} 5678:{{ .Values.service.port }} + + open http://localhost:5678 +{{- if .Values.ingress.enabled }} + +Or over the ingress at http{{ if .Values.ingress.tlsSecretName }}s{{ end }}://{{ .Values.ingress.host }} +{{- end }} + +The first page asks you to create an owner account. That account is held in the +database, not in this chart, so it survives upgrades and is not recoverable from +the release - keep the password somewhere you can find it again. + +{{ if include "n8n.webhookUrl" . -}} +Webhooks are registered under {{ include "n8n.webhookUrl" . }} +{{- else -}} +No public URL is configured, so n8n falls back to http://localhost:5678/ and +every webhook it registers will carry that address. Before building anything +webhook-triggered, set one: + + --set ingress.enabled=true --set ingress.host=n8n.example.com + +or, if something else already terminates traffic for you: + + --set webhookUrl=https://n8n.example.com/ +{{- end }} +{{- $public := include "n8n.public" . | fromYaml }} +{{- if .Values.insecureCookie }} + +WARNING: insecureCookie is set, so the session cookie is sent without the Secure +flag and travels in clear over http. Set ingress.tlsSecretName, or terminate TLS +upstream and point webhookUrl at the https address, then turn this back off. +{{- else if and $public.url (eq $public.protocol "http") }} + +WARNING: this release advertises {{ $public.url }} over plain http, and n8n marks +its session cookie Secure - so the editor will load and every login will fail. +Pick one: + + * serve TLS from the ingress: --set ingress.tlsSecretName= + * TLS terminated upstream (ALB/ACM, GKE managed cert, cert-manager annotation)? + tell n8n the real scheme: --set webhookUrl=https://{{ $public.host }}/ + * genuinely plain http, accept the risk: --set insecureCookie=true + +A port-forward to localhost is unaffected; browsers treat localhost as secure. +{{- end }} + +{{ if not .Values.encryptionKey.existingSecret }} +The credential encryption key was generated into secret +{{ include "n8n.encryptionSecretName" . }}. Every credential stored in n8n is +encrypted with it, and it cannot be recovered from the database. Back it up now: + + kubectl get secret -n {{ .Release.Namespace }} \ + {{ include "n8n.encryptionSecretName" . }} \ + -o jsonpath='{.data.{{ .Values.encryptionKey.secretKey }}}' | base64 -d + +Upgrades read the existing key back rather than generating a new one, and the +secret carries helm.sh/resource-policy: keep so `helm uninstall` leaves it behind. + +Use `helm upgrade` to keep an instance alive. Uninstall-and-reinstall does NOT +work over the retained volumes: the postgres root secret is not retained, so the +new one will not match the existing data directory. Back up this secret and +{{ .Release.Name }}-postgres-root-secret together if you ever intend to restore. +{{- end }} diff --git a/charts/n8n/templates/_helpers.tpl b/charts/n8n/templates/_helpers.tpl new file mode 100644 index 0000000..0185403 --- /dev/null +++ b/charts/n8n/templates/_helpers.tpl @@ -0,0 +1,128 @@ +{{- define "n8n.name" -}} + {{- default .Chart.Name | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "n8n.fullname" -}} + {{- printf "%s-n8n" .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "n8n.chart" -}} + {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{- define "n8n.labels" -}} +app: {{ include "n8n.name" . }} +chart: {{ include "n8n.chart" . }} +release: {{ .Release.Name }} +{{- end -}} + +{{- define "n8n.selectorLabels" -}} +app: {{ include "n8n.name" . }} +release: {{ .Release.Name }} +{{- end -}} + +{{/* +Name of the postgres subchart's per-database secret, which carries DB_USER and +DB_PASSWORD. The subchart composes this name from the services[] entry rather +than exposing it, so the format is reproduced here and has to stay in step with +its init-script-config-map template. +*/}} +{{- define "n8n.postgresSecretName" -}} + {{- if not .Values.postgres.services -}} + {{- fail "postgres.services must list one entry (name and database); it is what provisions the n8n database, its role, and the Secret holding those credentials." -}} + {{- end -}} + {{- $svc := index .Values.postgres.services 0 -}} + {{- printf "%s-%s-%s-postgres-database-secret" .Release.Name (replace "_" "-" $svc.database) $svc.name -}} +{{- end -}} + +{{/* +Name of the secret holding N8N_ENCRYPTION_KEY: the pre-created one when given, +otherwise the generated -encryption. +*/}} +{{- define "n8n.encryptionSecretName" -}} + {{- if .Values.encryptionKey.existingSecret -}} + {{- .Values.encryptionKey.existingSecret -}} + {{- else -}} + {{- printf "%s-encryption" (include "n8n.fullname" .) -}} + {{- end -}} +{{- end -}} + +{{/* +Database connection details, resolved once so the deployment and the wait-for-db +init container cannot disagree about where the database is. Returns a dict with +host, port, database and user; the password is always a secret reference and is +handled separately. +*/}} +{{- define "n8n.db" -}} + {{- if .Values.postgres.enabled -}} + {{- if not .Values.postgres.services -}} + {{- fail "postgres.services must list one entry (name and database); it is what provisions the n8n database, its role, and the Secret holding those credentials." -}} + {{- end -}} + {{- $svc := index .Values.postgres.services 0 -}} + {{- dict "host" (printf "%s-postgres" .Release.Name) "port" "5432" "database" $svc.database | toYaml -}} + {{- else -}} + {{- dict "host" .Values.externalDatabase.host "port" (toString .Values.externalDatabase.port) "database" .Values.externalDatabase.database | toYaml -}} + {{- end -}} +{{- end -}} + +{{/* +The claim the n8n data volume binds to: the user's existing claim when named, +otherwise the one this chart creates. +*/}} +{{- define "n8n.claimName" -}} + {{- if .Values.persistence.existingClaim -}} + {{- .Values.persistence.existingClaim -}} + {{- else -}} + {{- include "n8n.fullname" . -}} + {{- end -}} +{{- end -}} + +{{/* +n8n bakes its public URL into every webhook it registers and into OAuth callback +URLs, so this has to be the address a caller outside the cluster would use, not +the service address. An explicit webhookUrl wins; otherwise it is derived from +the ingress host, which is the only externally reachable name the chart knows. +Empty when there is neither, which leaves n8n on its own localhost default. +*/}} +{{- define "n8n.webhookUrl" -}} + {{- if .Values.webhookUrl -}} + {{- printf "%s/" (.Values.webhookUrl | trimSuffix "/") -}} + {{- else if and .Values.ingress.enabled .Values.ingress.host -}} + {{- $scheme := ternary "https" "http" (ne (toString .Values.ingress.tlsSecretName) "") -}} + {{- printf "%s://%s/" $scheme .Values.ingress.host -}} + {{- end -}} +{{- end -}} + +{{/* +Host and protocol as n8n should advertise them, taken apart from the public URL +above so all three agree. Deriving N8N_PROTOCOL from ingress.tlsSecretName +instead would contradict an explicit https webhookUrl whenever TLS is terminated +somewhere ahead of the ingress. Returns an empty dict when no public URL is +configured, leaving n8n on its own defaults. +*/}} +{{- define "n8n.public" -}} + {{- $url := include "n8n.webhookUrl" . -}} + {{- if $url -}} + {{- $scheme := ternary "https" "http" (hasPrefix "https://" $url) -}} + {{- $authority := $url | trimPrefix "https://" | trimPrefix "http://" | trimSuffix "/" -}} + {{/* Drop any path, then any port: N8N_HOST is the hostname alone. */}} + {{- $host := $authority | splitList "/" | first | splitList ":" | first -}} + {{- dict "url" $url "host" $host "protocol" $scheme | toYaml -}} + {{- else -}} + {{- dict | toYaml -}} + {{- end -}} +{{- end -}} + +{{/* +Every environment variable the chart derives from other values, as a comma +separated list. validate.yaml rejects `env` overrides of these, and configmap.yaml +skips them defensively - two consumers, one definition, so the guard cannot fall +behind the ConfigMap the way a hand-maintained list does. + +Overriding any of them through `env` would not win cleanly anyway: the ConfigMap +would carry the key twice and last-one-wins, leaving n8n advertising one value +while a related variable still described the other. +*/}} +{{- define "n8n.ownedEnv" -}} +DB_TYPE,DB_POSTGRESDB_HOST,DB_POSTGRESDB_PORT,DB_POSTGRESDB_DATABASE,DB_POSTGRESDB_SCHEMA,DB_POSTGRESDB_USER,DB_POSTGRESDB_PASSWORD,EXECUTIONS_MODE,N8N_PORT,N8N_PROXY_HOPS,N8N_EDITOR_BASE_URL,N8N_DEFAULT_BINARY_DATA_MODE,N8N_DIAGNOSTICS_ENABLED,N8N_WEBHOOK_URL,WEBHOOK_URL,N8N_HOST,N8N_PROTOCOL,N8N_SECURE_COOKIE,N8N_METRICS,GENERIC_TIMEZONE,TZ,N8N_ENCRYPTION_KEY +{{- end -}} diff --git a/charts/n8n/templates/alerts.yaml b/charts/n8n/templates/alerts.yaml new file mode 100644 index 0000000..d681f26 --- /dev/null +++ b/charts/n8n/templates/alerts.yaml @@ -0,0 +1,62 @@ +{{- if .Values.alerts.enabled }} +{{/* +Named after the chart's fullname, NOT .Release.Name. The postgres subchart's own +alerts template already creates a PrometheusRule called {{ .Release.Name }}, and +two objects of the same kind and name in one release make helm refuse to install. + +Every label value is quoted. An unquoted value from an unset key renders as null, +which the PrometheusRule CRD rejects, and that rejection fails the whole release +rather than just the alert. +*/}} +apiVersion: monitoring.coreos.com/v1 +kind: PrometheusRule +metadata: + name: {{ include "n8n.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: + app: kube-prometheus-stack + release: prometheus + {{- include "n8n.labels" . | nindent 4 }} +spec: + groups: + - name: {{ .Release.Namespace }}.{{ include "n8n.fullname" . }}.rules + rules: + {{- if .Values.metrics.enabled }} + {{/* + Gated on metrics: `up` only exists for a job Prometheus actually scrapes, + and this chart's ServiceMonitor is what creates that job. With metrics off + the series is absent rather than 0, so the rule could never fire - it would + sit in the UI looking like coverage while providing none. The restart alert + below needs no gate: it reads kube-state-metrics, not our own endpoint. + */}} + - alert: N8nDown + expr: up{job="{{ include "n8n.fullname" . }}",namespace="{{ .Release.Namespace }}"} == 0 + for: 5m + labels: + severity: "critical" + # Every alert rule in this repo carries servicealert; the zop.dev + # pipeline routes on it, so a rule without it renders but goes nowhere. + servicealert: "true" + service: {{ include "n8n.fullname" . | quote }} + namespace: {{ .Release.Namespace | quote }} + annotations: + summary: "n8n is not responding" + description: "n8n in namespace {{ .Release.Namespace }} has been unreachable for 5 minutes. Scheduled workflows and webhook deliveries are not running." + + {{- end }} + + # A restarting pod is worth alerting on here in a way it would not be for + # a stateless replica: this is a single instance, and every restart is a + # window where cron triggers do not fire and webhook calls get refused. + - alert: N8nRestarting + expr: sum(increase(kube_pod_container_status_restarts_total{namespace="{{ .Release.Namespace }}",pod=~"{{ include "n8n.fullname" . }}-.*"}[15m])) > 2 + for: 5m + labels: + severity: "warning" + servicealert: "true" + service: {{ include "n8n.fullname" . | quote }} + namespace: {{ .Release.Namespace | quote }} + annotations: + summary: "n8n is restarting repeatedly" + description: "The n8n container in namespace {{ .Release.Namespace }} has restarted more than twice in 15 minutes." +{{- end }} diff --git a/charts/n8n/templates/configmap.yaml b/charts/n8n/templates/configmap.yaml new file mode 100644 index 0000000..68b7ca3 --- /dev/null +++ b/charts/n8n/templates/configmap.yaml @@ -0,0 +1,98 @@ +{{- $db := include "n8n.db" . | fromYaml }} +{{- $public := include "n8n.public" . | fromYaml }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ include "n8n.fullname" . }}-config + namespace: {{ .Release.Namespace }} + labels: + {{- include "n8n.labels" . | nindent 4 }} +data: + DB_TYPE: "postgresdb" + DB_POSTGRESDB_HOST: {{ $db.host | quote }} + DB_POSTGRESDB_PORT: {{ $db.port | quote }} + DB_POSTGRESDB_DATABASE: {{ $db.database | quote }} + DB_POSTGRESDB_SCHEMA: "public" + + # Without queue mode there is one process, and it both serves the editor and + # runs the executions. + EXECUTIONS_MODE: "regular" + + N8N_PORT: "5678" + {{/* + N8N_LISTEN_ADDRESS is deliberately not set. n8n defaults to `::`, which accepts + both IPv4 and IPv6; pinning 0.0.0.0 would narrow that to IPv4 only for no gain, + since the kubelet's probes and the Service reach `::` perfectly well. Set it + through `env` if a node genuinely has IPv6 disabled. + */}} + + # Number of proxies between a client and n8n, used to pick the real client IP + # out of X-Forwarded-For. Typically 1 behind an ingress, more behind a CDN. + # Left at n8n's own default of 0 because the unsafe direction is upward: trust + # more hops than exist and a client can spoof its own address. + N8N_PROXY_HOPS: {{ .Values.proxyHops | quote }} + + {{- if .Values.persistence.enabled }} + # Binary payloads go to the mounted volume, keeping them out of the execution + # rows in Postgres, which is what stops execution_data growing without bound. + N8N_DEFAULT_BINARY_DATA_MODE: "filesystem" + {{- else }} + # No volume, so payloads go into Postgres. NOT "default": that mode keeps + # binary data in the process heap, which would OOMKill the pod against its + # memory limit and is removed in n8n 3.x. "database" is the Postgres-backed + # mode. Payloads are capped by N8N_BINARY_DATA_DATABASE_MAX_FILE_SIZE. + N8N_DEFAULT_BINARY_DATA_MODE: "database" + {{- end }} + + # Self-hosted installs should not report usage back to n8n's servers unless + # the operator opts in. + N8N_DIAGNOSTICS_ENABLED: "false" + + {{- if $public.url }} + # Baked into every registered webhook and OAuth callback URL. Derived from the + # ingress host unless webhookUrl overrides it. All three come from one value, so + # the protocol n8n advertises cannot contradict the URL it hands out. + # + # N8N_WEBHOOK_URL, not WEBHOOK_URL: the latter is deprecated and, unlike the + # four variables this chart pins deliberately, it warns whenever it is SET + # rather than when it is unset. + N8N_WEBHOOK_URL: {{ $public.url | quote }} + N8N_HOST: {{ $public.host | quote }} + N8N_PROTOCOL: {{ $public.protocol | quote }} + # Base URL the editor advertises for itself - the address in invite emails and + # password resets. Same public URL, so those links cannot point somewhere the + # webhooks do not. + N8N_EDITOR_BASE_URL: {{ $public.url | quote }} + {{- end }} + + {{- if .Values.insecureCookie }} + # Explicitly opted in. n8n marks its auth cookie Secure by default and no + # browser sends a Secure cookie over plain http, so a genuinely http instance + # needs this or nobody can log in. + # + # Deliberately NOT inferred from "no ingress.tlsSecretName". TLS is often + # terminated upstream - an ALB with an ACM certificate, a GKE managed + # certificate, a cert-manager annotation - and those render no tls: block at + # all. Inferring insecurity from a missing field would drop Secure on sites + # that are HTTPS-only, silently, which is worse than an instance that refuses + # to log in and says why. + N8N_SECURE_COOKIE: "false" + {{- end }} + + N8N_METRICS: {{ .Values.metrics.enabled | quote }} + + GENERIC_TIMEZONE: {{ .Values.timezone | quote }} + TZ: {{ .Values.timezone | quote }} + + {{/* + Chart-owned keys are skipped rather than emitted a second time. validate.yaml + already fails the render on them, so this is unreachable in practice - but it + means no ordering of templates can produce a ConfigMap carrying the same key + twice, where the last one silently wins. + */}} + {{- $owned := splitList "," (include "n8n.ownedEnv" .) }} + {{- range $key, $value := .Values.env }} + {{- if not (has $key $owned) }} + {{ $key }}: {{ $value | quote }} + {{- end }} + {{- end }} diff --git a/charts/n8n/templates/deployment.yaml b/charts/n8n/templates/deployment.yaml new file mode 100644 index 0000000..503cc21 --- /dev/null +++ b/charts/n8n/templates/deployment.yaml @@ -0,0 +1,176 @@ +{{- $db := include "n8n.db" . | fromYaml }} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "n8n.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: + {{- include "n8n.labels" . | nindent 4 }} +spec: + # One replica is a property of this topology, not a limit to raise. Without + # queue mode each pod runs its own scheduler, so a second one would fire every + # cron-triggered workflow twice. + replicas: 1 + strategy: + # The data volume is ReadWriteOnce, so a rolling update would deadlock: the + # new pod cannot attach the volume until the old one releases it, and the old + # one is not torn down until the new one is ready. + type: Recreate + selector: + matchLabels: + {{- include "n8n.selectorLabels" . | nindent 6 }} + template: + metadata: + annotations: + # Environment is read once at process start, so a ConfigMap edit alone + # would leave the running pod on the old values. + checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} + labels: + {{- include "n8n.selectorLabels" . | nindent 8 }} + spec: + # n8n's own graceful shutdown budget (N8N_GRACEFUL_SHUTDOWN_TIMEOUT) is 30s. + # Kubernetes also defaults to 30s, so SIGKILL would land at the exact moment + # n8n expects to finish draining. The extra 10s is that headroom; raise it + # alongside the timeout if you lengthen n8n's. + terminationGracePeriodSeconds: 40 + securityContext: + # The image runs as the `node` user, uid/gid 1000, and cannot write a + # freshly provisioned volume that comes up owned by root. + runAsUser: 1000 + runAsGroup: 1000 + fsGroup: 1000 + {{- if .Values.waitForDatabase.enabled }} + initContainers: + # The postgres subchart provisions the database and role from a Pod that + # sleeps before it runs, so on a fresh install the role n8n authenticates + # as does not exist yet. Blocking here turns what would be a crash loop + # for the first minute into a clean install. + - name: wait-for-db + image: "{{ .Values.waitForDatabase.image.repository }}:{{ .Values.waitForDatabase.image.tag }}" + imagePullPolicy: {{ .Values.waitForDatabase.image.pullPolicy }} + command: + - /bin/sh + - -c + # Authenticating is the check. A TCP probe would pass as soon as + # postgres accepts connections, which happens before the role and + # database this release needs have been created. + - | + until psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -c 'select 1' >/dev/null 2>&1; do + echo "waiting for postgres at $DB_HOST:$DB_PORT/$DB_NAME as $DB_USER" + sleep 2 + done + echo "database is ready" + env: + - name: DB_HOST + value: {{ $db.host | quote }} + - name: DB_PORT + value: {{ $db.port | quote }} + - name: DB_NAME + value: {{ $db.database | quote }} + {{- if .Values.postgres.enabled }} + - name: DB_USER + valueFrom: + secretKeyRef: + name: {{ include "n8n.postgresSecretName" . }} + key: DB_USER + - name: PGPASSWORD + valueFrom: + secretKeyRef: + name: {{ include "n8n.postgresSecretName" . }} + key: DB_PASSWORD + {{- else }} + - name: DB_USER + value: {{ .Values.externalDatabase.user | quote }} + - name: PGPASSWORD + valueFrom: + secretKeyRef: + name: {{ .Values.externalDatabase.existingSecret }} + key: {{ .Values.externalDatabase.passwordKey }} + {{- end }} + resources: + requests: + cpu: 10m + memory: 32Mi + limits: + cpu: 100m + memory: 128Mi + {{- end }} + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + ports: + - name: http + containerPort: 5678 + protocol: TCP + envFrom: + - configMapRef: + name: {{ include "n8n.fullname" . }}-config + {{- range .Values.extraEnvFrom }} + - secretRef: + name: {{ .secretName }} + {{- end }} + env: + {{- if .Values.postgres.enabled }} + # The subchart publishes these as DB_USER / DB_PASSWORD, so they are + # mapped key by key rather than pulled in wholesale with envFrom. + - name: DB_POSTGRESDB_USER + valueFrom: + secretKeyRef: + name: {{ include "n8n.postgresSecretName" . }} + key: DB_USER + - name: DB_POSTGRESDB_PASSWORD + valueFrom: + secretKeyRef: + name: {{ include "n8n.postgresSecretName" . }} + key: DB_PASSWORD + {{- else }} + - name: DB_POSTGRESDB_USER + value: {{ .Values.externalDatabase.user | quote }} + - name: DB_POSTGRESDB_PASSWORD + valueFrom: + secretKeyRef: + name: {{ .Values.externalDatabase.existingSecret }} + key: {{ .Values.externalDatabase.passwordKey }} + {{- end }} + - name: N8N_ENCRYPTION_KEY + valueFrom: + secretKeyRef: + name: {{ include "n8n.encryptionSecretName" . }} + key: {{ .Values.encryptionKey.secretKey }} + volumeMounts: + - name: data + mountPath: /home/node/.n8n + # Database migrations run before the HTTP server binds, and on a first + # install that is the slowest part of startup, so readiness is gated by + # a long startup budget instead of a long delay on every probe. + startupProbe: + httpGet: + path: /healthz + port: http + periodSeconds: 5 + failureThreshold: 60 + readinessProbe: + httpGet: + path: /healthz/readiness + port: http + periodSeconds: 10 + timeoutSeconds: 5 + failureThreshold: 3 + livenessProbe: + httpGet: + path: /healthz + port: http + periodSeconds: 20 + timeoutSeconds: 5 + failureThreshold: 6 + resources: + {{- toYaml .Values.resources | nindent 12 }} + volumes: + - name: data + {{- if .Values.persistence.enabled }} + persistentVolumeClaim: + claimName: {{ include "n8n.claimName" . }} + {{- else }} + emptyDir: {} + {{- end }} diff --git a/charts/n8n/templates/ingress.yaml b/charts/n8n/templates/ingress.yaml new file mode 100644 index 0000000..262452f --- /dev/null +++ b/charts/n8n/templates/ingress.yaml @@ -0,0 +1,43 @@ +{{- if .Values.ingress.enabled }} +{{/* +A hostless Ingress would render a catch-all rule, and the chart could not derive +a webhook URL from it. n8n would fall back to its localhost default, leaving a +working editor whose registered webhooks all point somewhere unreachable - the +failure this chart is most concerned with preventing. +*/}} +{{- if not .Values.ingress.host }} +{{- fail "ingress.enabled requires ingress.host; n8n bakes that hostname into every webhook it registers and into OAuth callback URLs." }} +{{- end }} +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: {{ include "n8n.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: + {{- include "n8n.labels" . | nindent 4 }} + {{- with .Values.ingress.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + {{- if .Values.ingress.className }} + ingressClassName: {{ .Values.ingress.className }} + {{- end }} + {{- if .Values.ingress.tlsSecretName }} + tls: + - hosts: + - {{ .Values.ingress.host | quote }} + secretName: {{ .Values.ingress.tlsSecretName }} + {{- end }} + rules: + - host: {{ .Values.ingress.host | quote }} + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: {{ include "n8n.fullname" . }} + port: + number: {{ .Values.service.port }} +{{- end }} diff --git a/charts/n8n/templates/pvc.yaml b/charts/n8n/templates/pvc.yaml new file mode 100644 index 0000000..13e2453 --- /dev/null +++ b/charts/n8n/templates/pvc.yaml @@ -0,0 +1,31 @@ +{{- if and .Values.persistence.enabled (not .Values.persistence.existingClaim) }} +{{/* +Holds the config file n8n writes on first boot, any custom nodes installed into +the instance, and binary payloads under filesystem mode. + +Deliberately not a volumeClaimTemplate on a StatefulSet: a Deployment is the +right controller for a single stateless-ish process, and keeping the claim as its +own object means `helm uninstall` leaves the data behind rather than depending on +the cluster's StatefulSet retention policy. +*/}} +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: {{ include "n8n.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: + {{- include "n8n.labels" . | nindent 4 }} + annotations: + # The volume outlives the release. Losing it means losing the instance's + # binary data and its generated config. + helm.sh/resource-policy: keep +spec: + accessModes: + - ReadWriteOnce + {{- if .Values.persistence.storageClass }} + storageClassName: {{ .Values.persistence.storageClass | quote }} + {{- end }} + resources: + requests: + storage: {{ .Values.persistence.size | quote }} +{{- end }} diff --git a/charts/n8n/templates/secret.yaml b/charts/n8n/templates/secret.yaml new file mode 100644 index 0000000..72e9ed6 --- /dev/null +++ b/charts/n8n/templates/secret.yaml @@ -0,0 +1,38 @@ +{{- if not .Values.encryptionKey.existingSecret }} +{{/* +n8n encrypts stored credentials with this key. If it changes, every credential +already in the database becomes undecryptable - the workflows survive, but each +credential has to be entered again. So it is generated once on install and read +back from the live Secret on every upgrade, never regenerated. + +`lookup` returns nothing during `helm template` and `--dry-run`, so a rendered +manifest always shows a fresh key. That is an artefact of rendering without a +cluster, not what an upgrade does to a real release. +*/}} +{{- $secretName := printf "%s-encryption" (include "n8n.fullname" .) }} +{{- $existing := lookup "v1" "Secret" .Release.Namespace $secretName }} +{{- $key := randAlphaNum 32 }} +{{- if and $existing $existing.data (hasKey $existing.data .Values.encryptionKey.secretKey) }} +{{- $key = index $existing.data .Values.encryptionKey.secretKey | b64dec }} +{{- end }} +apiVersion: v1 +kind: Secret +metadata: + name: {{ $secretName }} + namespace: {{ .Release.Namespace }} + annotations: + # Kept for the same reason the data volume is kept. The n8n PVC carries + # resource-policy: keep and the postgres subchart uses volumeClaimTemplates, + # which Kubernetes never deletes - so an uninstall leaves the database intact + # while, without this, deleting the only key that can decrypt the credentials + # inside it. Note this is not enough to make uninstall reversible: the + # postgres subchart does not retain ITS root secret, so a reinstall mints a + # superuser password the retained data directory rejects. Keeping this one + # means the key still exists to restore alongside a database backup. + helm.sh/resource-policy: keep + labels: + {{- include "n8n.labels" . | nindent 4 }} +type: Opaque +data: + {{ .Values.encryptionKey.secretKey }}: {{ $key | b64enc }} +{{- end }} diff --git a/charts/n8n/templates/service.yaml b/charts/n8n/templates/service.yaml new file mode 100644 index 0000000..3ba5912 --- /dev/null +++ b/charts/n8n/templates/service.yaml @@ -0,0 +1,18 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ include "n8n.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: + {{- include "n8n.labels" . | nindent 4 }} +spec: + type: {{ .Values.service.type }} + ports: + # n8n serves the editor UI, the REST API, the webhook endpoints and, when + # metrics are on, /metrics all on this one port. + - name: http + port: {{ .Values.service.port }} + targetPort: http + protocol: TCP + selector: + {{- include "n8n.selectorLabels" . | nindent 4 }} diff --git a/charts/n8n/templates/serviceMonitor.yaml b/charts/n8n/templates/serviceMonitor.yaml new file mode 100644 index 0000000..e7e1efc --- /dev/null +++ b/charts/n8n/templates/serviceMonitor.yaml @@ -0,0 +1,26 @@ +{{- if .Values.metrics.enabled }} +{{/* +n8n only serves /metrics when N8N_METRICS is set, which the ConfigMap derives +from this same flag - so the endpoint and the scrape config can never disagree +and leave a permanently failing target. +*/}} +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + name: {{ include "n8n.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: + release: prometheus + {{- include "n8n.labels" . | nindent 4 }} +spec: + selector: + matchLabels: + {{- include "n8n.selectorLabels" . | nindent 6 }} + endpoints: + - port: http + path: /metrics + interval: {{ .Values.metrics.scrapeInterval }} + namespaceSelector: + matchNames: + - {{ .Release.Namespace }} +{{- end }} diff --git a/charts/n8n/templates/validate.yaml b/charts/n8n/templates/validate.yaml new file mode 100644 index 0000000..c8a1cba --- /dev/null +++ b/charts/n8n/templates/validate.yaml @@ -0,0 +1,47 @@ +{{/* +Fail rendering on configurations that would install cleanly and then misbehave at +runtime, where the symptom is a crash loop or silent data loss rather than a +message pointing at the cause. +*/}} + +{{- if and .Values.postgres.enabled .Values.externalDatabase.host }} +{{- fail "postgres.enabled and externalDatabase.host are both set, so it is ambiguous which database n8n should use. Leave postgres.enabled=true to have this release install one, or set postgres.enabled=false to point at externalDatabase." }} +{{- end }} + +{{- if and (not .Values.postgres.enabled) (not .Values.externalDatabase.host) }} +{{- fail "n8n requires PostgreSQL: leave postgres.enabled=true to install it with this release, or set externalDatabase.host to use an existing server. Workflows, credentials and execution history all live there." }} +{{- end }} + +{{- if .Values.postgres.enabled }} +{{- if not .Values.postgres.services }} +{{- fail "postgres.services must list one entry (name and database); it is what provisions the n8n database, its role, and the Secret holding those credentials." }} +{{- end }} +{{- end }} + +{{- if .Values.externalDatabase.host }} +{{- if not .Values.externalDatabase.user }} +{{- fail "externalDatabase.host is set without externalDatabase.user. n8n does not fall back to a default role." }} +{{- end }} +{{- if not .Values.externalDatabase.existingSecret }} +{{- fail "externalDatabase.host is set without externalDatabase.existingSecret. The password must come from a Secret; this chart will not take it as a plain value, because everything in values.yaml ends up readable in the release manifest." }} +{{- end }} +{{- end }} + +{{- if .Values.webhookUrl }} +{{- if not (or (hasPrefix "http://" .Values.webhookUrl) (hasPrefix "https://" .Values.webhookUrl)) }} +{{- fail (printf "webhookUrl must start with http:// or https:// - got %q. n8n advertises this verbatim in every registered webhook, so a schemeless value produces URLs no caller can resolve, and the scheme is also what tells the chart whether the site is https." .Values.webhookUrl) }} +{{- end }} +{{- end }} + +{{/* +Variables the chart derives from other values. Setting them through `env` would +leave the two disagreeing, with the override winning silently: a DB_POSTGRESDB_HOST +pointing away from the provisioned database, or a binary data mode writing to a +path no volume is mounted at. +*/}} +{{- $owned := splitList "," (include "n8n.ownedEnv" .) }} +{{- range $key := $owned }} +{{- if hasKey $.Values.env $key }} +{{- fail (printf "%s is set by the chart and cannot be overridden through `env`. See values.yaml for the value it is derived from." $key) }} +{{- end }} +{{- end }} diff --git a/charts/n8n/values.schema.json b/charts/n8n/values.schema.json new file mode 100644 index 0000000..bbfa9fe --- /dev/null +++ b/charts/n8n/values.schema.json @@ -0,0 +1,138 @@ +{ + "$schema": "https://json-schema.org/draft-07/schema#", + "type": "object", + "title": "n8n Helm Chart Values", + "description": "Configuration values for the n8n workflow automation Helm chart", + "properties": { + "image": { + "type": "object", + "category": "runtime", + "description": "n8n container image", + "properties": { + "repository": { + "type": "string", + "description": "Image repository", + "default": "n8nio/n8n", + "editDisabled": true + }, + "tag": { + "type": "string", + "description": "Image tag; falls back to the chart's appVersion when empty", + "default": "", + "mutable": true + }, + "pullPolicy": { + "type": "string", + "description": "Image pull policy", + "default": "IfNotPresent", + "mutable": true + } + }, + "required": ["repository"] + }, + "ingress": { + "type": "object", + "category": "runtime", + "description": "How n8n is reached from outside the cluster. The host is also written into every webhook URL n8n registers", + "properties": { + "enabled": { + "type": "boolean", + "description": "Expose n8n through an Ingress", + "default": false, + "mutable": true + }, + "className": { + "type": "string", + "description": "IngressClass name; empty uses the cluster default", + "default": "", + "mutable": true + }, + "host": { + "type": "string", + "description": "Hostname to serve n8n on; required when enabled", + "default": "", + "mutable": true + }, + "tlsSecretName": { + "type": "string", + "description": "Existing TLS certificate secret for the host; serving over https is strongly recommended", + "default": "", + "mutable": true + } + }, + "required": ["enabled"] + }, + "persistence": { + "type": "object", + "category": "compute", + "description": "Disk for n8n's own data - its generated config, any custom nodes, and binary payloads from executions", + "properties": { + "enabled": { + "type": "boolean", + "description": "Provision a disk; when off, binary payloads are stored in the database instead", + "default": true + }, + "size": { + "type": "string", + "description": "Disk size", + "default": "10Gi", + "mutable": true, + "editDisabled": true + } + }, + "required": ["enabled", "size"] + }, + "timezone": { + "type": "string", + "category": "runtime", + "description": "Timezone that scheduled workflows are evaluated against; a wrong value shifts when they run", + "default": "UTC", + "mutable": true + }, + "resources": { + "type": "object", + "category": "compute", + "description": "CPU and memory for the n8n container", + "properties": { + "requests": { + "type": "object", + "properties": { + "cpu": { + "type": "string", + "description": "CPU request", + "default": "500m", + "mutable": true + }, + "memory": { + "type": "string", + "description": "Memory request", + "default": "1Gi", + "mutable": true + } + }, + "required": ["cpu", "memory"] + }, + "limits": { + "type": "object", + "properties": { + "cpu": { + "type": "string", + "description": "CPU limit", + "default": "1", + "mutable": true + }, + "memory": { + "type": "string", + "description": "Memory limit", + "default": "2Gi", + "mutable": true + } + }, + "required": ["cpu", "memory"] + } + }, + "required": ["requests", "limits"] + } + }, + "required": ["image", "ingress", "persistence", "resources"] +} diff --git a/charts/n8n/values.yaml b/charts/n8n/values.yaml new file mode 100644 index 0000000..7d5af3f --- /dev/null +++ b/charts/n8n/values.yaml @@ -0,0 +1,166 @@ +# n8n is a workflow automation platform. This chart runs a single instance that +# serves the editor UI, the REST API and the webhook endpoints, with PostgreSQL +# holding workflows, credentials and execution history. +# +# Executions run in the same process as the editor (EXECUTIONS_MODE=regular). +# Queue mode, which spreads executions across dedicated worker pods and needs +# Redis, is not part of this chart. + +image: + repository: n8nio/n8n + # Empty falls back to .Chart.AppVersion, which is pinned to an immutable + # release tag. `latest` and `stable` both move, so naming either here would + # make two installs of this chart version run different code. + tag: "" + pullPolicy: IfNotPresent + +service: + type: ClusterIP + # The editor, the API, the webhook endpoints and /metrics all answer here. + port: 5678 + +# Holds the config file n8n writes on first boot, any custom nodes, and binary +# payloads. Turning this off switches binary storage into Postgres (n8n's +# `database` mode) rather than writing to a container filesystem that is lost on +# restart. The chart never selects n8n's `default` mode: despite the name it +# keeps payloads in the process heap, which OOMKills the pod against its memory +# limit, and it is removed in n8n 3.x. +persistence: + enabled: true + size: "10Gi" + # Empty uses the cluster's default StorageClass. + storageClass: "" + # Bind to a claim you already have instead of creating one. + existingClaim: "" + +# n8n writes its own hostname into every webhook it registers and into OAuth +# callback URLs, so enabling the ingress is also what makes those URLs correct. +ingress: + enabled: false + className: "" + host: "" + annotations: {} + # Set to serve the host over TLS from an existing certificate secret. Its + # presence is also what decides whether webhook URLs are https. + tlsSecretName: "" + +# Overrides the URL derived from ingress.host. Set this when something else +# terminates traffic - a tunnel, a proxy on another hostname, or TLS terminated +# by the load balancer - and n8n would otherwise advertise an address callers +# cannot reach. Must include the scheme; a schemeless value fails the render. +webhookUrl: "" + +# Sends the auth cookie without the Secure flag (N8N_SECURE_COOKIE=false). +# +# Required for a genuinely plain-http instance: n8n marks the cookie Secure by +# default, no browser returns a Secure cookie over http, and the result is an +# editor that loads and then refuses every login. localhost is exempt - browsers +# treat it as a secure context - so a port-forward works without this. +# +# It is an explicit opt-in rather than something the chart infers from a missing +# ingress.tlsSecretName, because TLS is frequently terminated upstream (ALB with +# an ACM certificate, GKE managed certificate, cert-manager annotation) and those +# render no tls: block at all. Guessing would drop Secure on HTTPS-only sites. +insecureCookie: false + +# How many proxies sit between a client and n8n, so it can resolve the real +# client IP from X-Forwarded-For - which is what per-client rate limiting and +# audit logging depend on. Typically 1 behind an ingress, 2 behind a CDN as well. +# Left at n8n's default of 0 because the unsafe direction is upward: trusting more +# hops than exist lets a client spoof its own address. +proxyHops: 0 + +# Encrypts every credential stored in n8n. Generated on install and read back on +# upgrade, so it stays stable for the life of the secret. It cannot be recovered +# from the database: if it is lost, every stored credential must be re-entered. +encryptionKey: + # Use a pre-created secret instead of generating one. + existingSecret: "" + secretKey: N8N_ENCRYPTION_KEY + +# Applied as both GENERIC_TIMEZONE and TZ. Cron-triggered workflows are +# scheduled against this, so a wrong value silently shifts when they run. +timezone: "UTC" + +# Renders a ServiceMonitor and sets N8N_METRICS, which is what makes n8n serve +# /metrics at all. Needs the Prometheus Operator CRDs. +metrics: + enabled: true + scrapeInterval: 30s + +# Renders a PrometheusRule. Needs the Prometheus Operator CRDs. +alerts: + enabled: true + +resources: + requests: + cpu: "500m" + memory: "1Gi" + limits: + cpu: "1" + memory: "2Gi" + +# Extra plain environment variables, e.g. +# env: +# N8N_LOG_LEVEL: debug +# Variables this chart derives from other values are rejected at render time +# rather than silently overridden - see templates/validate.yaml. +# +# The four defaults below are settings n8n warns it is about to change. Pinning +# them here means an image bump cannot quietly alter how this release behaves; +# override or remove any of them freely. +env: + # Community nodes that have not been vetted. n8n's default becomes false in a + # future version and that is the safer position, so the chart starts there + # rather than inheriting a permissive default that later flips. + N8N_UNVERIFIED_PACKAGES_ENABLED: "false" + # Seconds a Code node may run. n8n plans to cut its default to 60, which would + # start killing legitimate long-running tasks on an image bump, so the current + # value is pinned instead. Lower it if you would rather bound them tightly. + N8N_RUNNERS_TASK_TIMEOUT: "300" + # Decompression bounds for the Compression node, taken from where n8n is + # heading rather than from today's much looser defaults: 2 GiB of + # decompressed output from an untrusted archive is a memory-exhaustion risk, + # and this chart has no existing behaviour to preserve. Raise them if you + # genuinely process large archives. + N8N_COMPRESSION_NODE_MAX_DECOMPRESSED_SIZE_BYTES: "268435456" + N8N_COMPRESSION_NODE_MAX_ZIP_ENTRIES: "1000" + +# Existing secrets mounted with envFrom, for values that should not sit in +# values.yaml. Useful for SMTP credentials or an external storage key. +extraEnvFrom: [] +# - secretName: n8n-smtp + +# Blocks startup until the database accepts an authenticated connection. The +# postgres chart provisions the role from a Job that sleeps before it runs, so +# without this n8n crash-loops through the first minute of a fresh install. +waitForDatabase: + enabled: true + image: + # The same image the postgres chart runs, so this introduces no new registry. + # Keep the tag in step with the postgres subchart's own `version`. + repository: docker.io/bitnamilegacy/postgresql + tag: "17.4.0" + pullPolicy: IfNotPresent + +# The zopdev postgres chart. It provisions the database, a dedicated role, and +# the secret this chart reads those credentials from. +postgres: + enabled: true + # Used as the `service` label on the postgres alerts, attributing them to this + # release rather than to the datastore in isolation. + name: n8n + services: + - name: n8n + database: n8n + +# Point at a PostgreSQL server this release does not manage. Setting host turns +# the subchart off; the two are mutually exclusive and setting both fails the +# render. The password is only ever read from a secret. +externalDatabase: + host: "" + port: 5432 + database: n8n + user: "" + existingSecret: "" + passwordKey: password diff --git a/docs/index.yaml b/docs/index.yaml index 0a2026e..dad656f 100644 --- a/docs/index.yaml +++ b/docs/index.yaml @@ -5,7 +5,7 @@ entries: type: datasource apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.135731+05:30" + created: "2026-08-28T12:22:53.439846+05:30" description: Helm chart for deploying cassandra digest: 0b1d9c5e9e7e621bb4f42722301f64d55517e641b8bf4c12864ec46bbba9c983 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241223/d7c22b49-c87b-4d41-a109-334a83b44f8d-cassandra.png @@ -20,7 +20,7 @@ entries: type: datasource apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.135454+05:30" + created: "2026-08-28T12:22:53.439619+05:30" description: Helm chart for deploying cassandra digest: 5ad8c3dd137ecef4ee348b7f855f0b6e2f0860040a5faea921bac812ebe0344e icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241223/d7c22b49-c87b-4d41-a109-334a83b44f8d-cassandra.png @@ -35,7 +35,7 @@ entries: type: datasource apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.134559+05:30" + created: "2026-08-28T12:22:53.439441+05:30" description: Helm chart for deploying cassandra digest: 8204a7e66878a8c14cd517fb4db71afe9980a1f194f850aba1d0b972f708604a icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241223/d7c22b49-c87b-4d41-a109-334a83b44f8d-cassandra.png @@ -50,7 +50,7 @@ entries: type: datasource apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.134332+05:30" + created: "2026-08-28T12:22:53.439281+05:30" description: Helm chart for deploying cassandra digest: d8c73f81cbbf8d9c32118c2939ff855a36a1b6c8c593baf77bfb6b99f161c8a3 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241223/d7c22b49-c87b-4d41-a109-334a83b44f8d-cassandra.png @@ -63,7 +63,7 @@ entries: version: v0.0.3 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.134037+05:30" + created: "2026-08-28T12:22:53.438596+05:30" description: Helm chart for deploying cassandra digest: f45dea69d490bc1e07764fc2e632cabda6465b4a99d12ed6c78eb4646b742e11 icon: https://zop.dev/logo.png @@ -76,7 +76,7 @@ entries: version: v0.0.2 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.133834+05:30" + created: "2026-08-28T12:22:53.438358+05:30" description: Helm chart for deploying cassandra digest: 87dcf6e85af6afe5ff9c90bb29272edbc9cb21ce8019361015b1733442644ca9 icon: https://zop.dev/logo.png @@ -92,7 +92,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.136443+05:30" + created: "2026-08-28T12:22:53.440234+05:30" description: Helm chart for deploying chromadb datastore digest: 94ca640fc537837c955a55a41e53da01b38203fe28e9e5df92f7f121ac51f68e icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241205/f21ef909-e0ea-4969-8963-0848602a5e4b-ImageEditor.jpg @@ -107,7 +107,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.136107+05:30" + created: "2026-08-28T12:22:53.440112+05:30" description: Helm chart for deploying chromadb datastore digest: ba37d2c0312b72096223fae3329696dd8b5c0f050712369a7d17d61136c7a91b icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241205/f21ef909-e0ea-4969-8963-0848602a5e4b-ImageEditor.jpg @@ -122,7 +122,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.135916+05:30" + created: "2026-08-28T12:22:53.439986+05:30" description: Helm chart for deploying chromadb datastore digest: 4b595dd52a315a9c5731a2407c33840e5f9d838c0faa534a65348a927e63ea7d icon: https://zop.dev/logo.png @@ -135,7 +135,7 @@ entries: version: v0.0.2 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.13362+05:30" + created: "2026-08-28T12:22:53.438138+05:30" description: Helm chart for deploying chromadb datastore digest: e80e4a44755d08f58044aaffc16074668015f121b5a7359cd20b75526a46ee3a icon: https://zop.dev/logo.png @@ -151,7 +151,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.138588+05:30" + created: "2026-08-28T12:22:53.441651+05:30" description: Helm chart for deploying clickhouse datastore digest: a06c43648285f68a7deece96385dd133c32593bcee6026aba40323889fc954ff icon: https://storage.googleapis.com/zopdev-blog-resources/1/files/originals/20260608/f641a725-da8d-450a-b57b-c959551a07bc-clickhouse.png @@ -166,7 +166,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.1382+05:30" + created: "2026-08-28T12:22:53.441217+05:30" description: Helm chart for deploying clickhouse datastore digest: e5f9f77310ec4711db0707ce0ba8f5ac73607ae41ce46e71463cca580fc50b77 icon: https://storage.googleapis.com/zopdev-blog-resources/1/files/originals/20260608/f641a725-da8d-450a-b57b-c959551a07bc-clickhouse.png @@ -181,7 +181,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.137881+05:30" + created: "2026-08-28T12:22:53.440911+05:30" description: Helm chart for deploying clickhouse datastore digest: 2681560fcf0c2d1a8efb989cf609b29308336c2991992a8d0a852c84b1de66c2 icon: https://storage.googleapis.com/zopdev-blog-resources/1/files/originals/20260608/f641a725-da8d-450a-b57b-c959551a07bc-clickhouse.png @@ -196,7 +196,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.136815+05:30" + created: "2026-08-28T12:22:53.440491+05:30" description: Helm chart for deploying clickhouse datastore digest: cff6f6d0fc4bf6ce09c435816f071c0057df9e8fe475f2d3ee7cbef41ccea2e6 icon: https://storage.googleapis.com/zopdev-blog-resources/1/files/originals/20260608/f641a725-da8d-450a-b57b-c959551a07bc-clickhouse.png @@ -212,7 +212,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.139646+05:30" + created: "2026-08-28T12:22:53.442437+05:30" description: Helm chart for deploying cockroachdb datastore digest: 063c06a5758ec40aabaf8390a5004964f039dc2bf699999054d4f5adef76fd27 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20250402/331014cf-f38d-484f-9246-1c9a045cb9a0-cockroachicon.png @@ -227,7 +227,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.13939+05:30" + created: "2026-08-28T12:22:53.442292+05:30" description: Helm chart for deploying cockroachdb datastore digest: aafca1db83b781cfc87de37fae49dc57122fb7c0b57dacee765a7fb8de72cfc1 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20250402/331014cf-f38d-484f-9246-1c9a045cb9a0-cockroachicon.png @@ -242,7 +242,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.139244+05:30" + created: "2026-08-28T12:22:53.442158+05:30" description: Helm chart for deploying cockroachdb datastore digest: 2bea5770d823248ddf13b2930796e7c58ee72323683f7e5d39851d500d680b29 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20250402/331014cf-f38d-484f-9246-1c9a045cb9a0-cockroachicon.png @@ -257,7 +257,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.139096+05:30" + created: "2026-08-28T12:22:53.442024+05:30" description: Helm chart for deploying cockroachdb datastore digest: 413d30a76f216aaba3e6e8768d3195006d5248e15f26884291031ad311c111d2 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20250402/331014cf-f38d-484f-9246-1c9a045cb9a0-cockroachicon.png @@ -270,7 +270,7 @@ entries: version: v0.0.2 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.138943+05:30" + created: "2026-08-28T12:22:53.441887+05:30" description: Helm chart for deploying cockroachdb datastore digest: 34f77cf414230048d6da77866c1ac39093625e761b5c68c71b7e214a4191da09 icon: https://zop.dev/logo.png @@ -284,7 +284,7 @@ entries: cron-job: - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.141785+05:30" + created: "2026-08-28T12:22:53.444451+05:30" description: Helm chart creates a cron-job, service, alerts along with serviceMonitor etc digest: 66c0ffbdb63c5bc7b3e67c06ffac12001d6bc836bfee45502830dbefd288ecd2 @@ -298,7 +298,7 @@ entries: version: v0.0.18 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.141478+05:30" + created: "2026-08-28T12:22:53.444299+05:30" description: Helm chart creates a cron-job, service, alerts along with serviceMonitor etc digest: df89a1f9b87ee180ff45fed5106197ebc98dde611fe12fc26665096d8ad22071 @@ -312,7 +312,7 @@ entries: version: v0.0.17 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.141317+05:30" + created: "2026-08-28T12:22:53.44414+05:30" description: Helm chart creates a cron-job, service, alerts along with serviceMonitor etc digest: b09b48b17c5518b18ff360770bcdb54f1babd195d1f9eabaccbc2dd0041a0ab3 @@ -326,7 +326,7 @@ entries: version: v0.0.16 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.14111+05:30" + created: "2026-08-28T12:22:53.443897+05:30" description: Helm chart creates a cron-job, service, alerts along with serviceMonitor etc digest: 56cb5aa749ecb2d7b6a44b1cc7598bdab04319be280731233e7f1c3edaf0c81a @@ -340,7 +340,7 @@ entries: version: v0.0.15 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.140951+05:30" + created: "2026-08-28T12:22:53.443743+05:30" description: Helm chart creates a cron-job, service, alerts along with serviceMonitor etc digest: 9fe2649ba7a57a70efbadd6fc7f630f689a285411b6a9a82fa71797f3729d7d1 @@ -354,7 +354,7 @@ entries: version: v0.0.14 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.140789+05:30" + created: "2026-08-28T12:22:53.443579+05:30" description: Helm chart creates a cron-job, service, alerts along with serviceMonitor etc digest: cea536911b8a40c81d0dea88039b651e822f7f520cac1bc7984f1436f6d2db1e @@ -368,7 +368,7 @@ entries: version: v0.0.13 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.140619+05:30" + created: "2026-08-28T12:22:53.443393+05:30" description: Helm chart creates a cron-job, service, alerts along with serviceMonitor etc digest: 462e6ec152db5248ef7f16884414dc5230e07800b7b068f3f57cb759439f2051 @@ -382,7 +382,7 @@ entries: version: v0.0.12 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.140442+05:30" + created: "2026-08-28T12:22:53.443177+05:30" description: Helm chart creates a cron-job, service, alerts along with serviceMonitor etc digest: 5ec17930747dbefa44d30240d1ecc94f649084f8a252ad3351b5a5f7463bb592 @@ -396,7 +396,7 @@ entries: version: v0.0.11 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.140103+05:30" + created: "2026-08-28T12:22:53.442733+05:30" description: Helm chart creates a cron-job, service, alerts along with serviceMonitor etc digest: ebc0c13fa2b4c085475168759a66c464801a099c00e60790ee3c141a619208e6 @@ -410,7 +410,7 @@ entries: version: v0.0.10 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.144034+05:30" + created: "2026-08-28T12:22:53.445523+05:30" description: Helm chart creates a cron-job, service, alerts along with serviceMonitor etc digest: c59e1c2ca03efcd354674efd6c6142bb897a522511b21ab2204d758c0ad7838d @@ -424,7 +424,7 @@ entries: version: v0.0.9 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.143687+05:30" + created: "2026-08-28T12:22:53.445388+05:30" description: Helm chart creates a cron-job, service, alerts along with serviceMonitor etc digest: b0b0f1b080fb355d0c0a4c9a793aa08c42ae3d346d3d35924b160402146f3ba4 @@ -438,7 +438,7 @@ entries: version: v0.0.8 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.143474+05:30" + created: "2026-08-28T12:22:53.445253+05:30" description: Helm chart creates a cron-job, service, alerts along with serviceMonitor etc digest: 68deab7c093b6399751337046e2e3d44b2f92583ff5897268b2e7096c3ecc7d4 @@ -452,7 +452,7 @@ entries: version: v0.0.7 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.143281+05:30" + created: "2026-08-28T12:22:53.44512+05:30" description: Helm chart creates a cron-job, service, alerts along with serviceMonitor etc digest: 12ef691b470c85021dea5a2abb22ed85a1eeb0eebb639b4e961ebc9e48b77379 @@ -466,7 +466,7 @@ entries: version: v0.0.6 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.143117+05:30" + created: "2026-08-28T12:22:53.444988+05:30" description: Helm chart creates a cron-job, service, alerts along with serviceMonitor etc digest: feacad697b021e3101356c723937a67384ce40b20d8262f8cb0dccb778ce3409 @@ -480,7 +480,7 @@ entries: version: v0.0.5 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.142614+05:30" + created: "2026-08-28T12:22:53.444855+05:30" description: Helm chart creates a cron-job, service, alerts along with serviceMonitor etc digest: a0b223548907a6e97153e62a80c71fa20a2d1b44d6ddd6f86c99ee1d0bded277 @@ -494,7 +494,7 @@ entries: version: v0.0.4 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.14236+05:30" + created: "2026-08-28T12:22:53.44472+05:30" description: Helm chart creates a cron-job, service, alerts along with serviceMonitor etc digest: 915559e842b254eb709dae62904e6021123d76fba00367c0f676ea471fd9bb34 @@ -508,7 +508,7 @@ entries: version: v0.0.3 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.142133+05:30" + created: "2026-08-28T12:22:53.444582+05:30" description: Helm chart creates a cron-job, service, alerts along with serviceMonitor etc digest: 8647eaeb33477970ec574dfea3549f71d480bb89cac42b99fba36a4f56d2c64f @@ -522,7 +522,7 @@ entries: version: v0.0.2 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.139876+05:30" + created: "2026-08-28T12:22:53.442576+05:30" description: Helm chart creates a cron-job, service, alerts along with serviceMonitor etc digest: d8ab447cd5bff82957fc1bafdd4a1bdab91cea3b9eba179f17359d4b6265718b @@ -539,7 +539,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.14526+05:30" + created: "2026-08-28T12:22:53.446671+05:30" description: Helm chart for deploying dgraph datastore digest: 39df09aa5c2fd7d4ff91f023a4257a3fc5690538b99a5a666f9a22d99d3f3c9c icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20250402/b62a941f-db26-4b89-a1c0-6758a616c028-dgraph.png @@ -554,7 +554,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.144956+05:30" + created: "2026-08-28T12:22:53.446259+05:30" description: Helm chart for deploying dgraph datastore digest: da8b3703d231048d9831066e82fd1a6c6dff59da7a786e8396137b2c22d6ef62 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20250402/b62a941f-db26-4b89-a1c0-6758a616c028-dgraph.png @@ -567,7 +567,7 @@ entries: version: v0.0.2 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.144635+05:30" + created: "2026-08-28T12:22:53.446068+05:30" description: Helm chart for deploying dgraph datastore digest: 81cd012d3d9b7a4b5275d4e0bc16f15cf4c4636eee17d7177c124c37c3f70a34 icon: https://zop.dev/logo.png @@ -583,7 +583,7 @@ entries: type: application apiVersion: v2 appVersion: 0.39.0 - created: "2026-08-19T16:41:33.145847+05:30" + created: "2026-08-28T12:22:53.447468+05:30" description: Helm chart for deploying HolmesGPT, an AI agent for investigating production incidents digest: 9fe40f4d3c872120784eb3ba92ef62c21a98958423b1c486b2a84bf28453e96b @@ -601,7 +601,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.148996+05:30" + created: "2026-08-28T12:22:53.450168+05:30" description: Helm chart for Deploying JupyterHub digest: 7ff775eacab9ff759dfffc80f435293e04946628eb8b60d291dcfa215d2eaa36 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20250313/e2540703-3750-4d46-ba32-32445e506332-jupyter.png @@ -617,7 +617,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.148142+05:30" + created: "2026-08-28T12:22:53.449388+05:30" description: Helm chart for Deploying JupyterHub digest: f84e94e60206ce31fd483c8f95509e3a0633bd37ac69ead5260d25b49c7c2e3d icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20250313/e2540703-3750-4d46-ba32-32445e506332-jupyter.png @@ -633,7 +633,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.147437+05:30" + created: "2026-08-28T12:22:53.448863+05:30" description: Helm chart for Deploying JupyterHub digest: 557ab4461adc4e40e2e1ddd0de44f12d06d76ff0b0a42f29feb39b63c7e49360 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20250313/e2540703-3750-4d46-ba32-32445e506332-jupyter.png @@ -646,7 +646,7 @@ entries: version: v0.0.2 - apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.146661+05:30" + created: "2026-08-28T12:22:53.448294+05:30" description: Helm chart for Deploying JupyterHub digest: 93a2b8063b3bc5ec24e4b9e0978913fa0f79b951e73913f562746cbc9353b0bd icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20250313/e2540703-3750-4d46-ba32-32445e506332-jupyter.png @@ -663,7 +663,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.150574+05:30" + created: "2026-08-28T12:22:53.451268+05:30" dependencies: - alias: zookeeper condition: zookeeper.enabled @@ -684,7 +684,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.150209+05:30" + created: "2026-08-28T12:22:53.451+05:30" dependencies: - alias: zookeeper condition: zookeeper.enabled @@ -705,7 +705,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.149862+05:30" + created: "2026-08-28T12:22:53.450751+05:30" dependencies: - alias: zookeeper condition: zookeeper.enabled @@ -724,7 +724,7 @@ entries: version: v0.0.2 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.149458+05:30" + created: "2026-08-28T12:22:53.450489+05:30" description: Helm chart deploys kafka digest: 1a6d2313a07f4a2786e0fb94acb3cdf30215cf652628f397a91bb68aaa1717e1 icon: https://zop.dev/logo.png @@ -738,7 +738,7 @@ entries: karpenter-gcp: - apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.152178+05:30" + created: "2026-08-28T12:22:53.453008+05:30" description: A Helm chart for deploying Karpenter in gke cluster digest: d725414ec4face5ee25f9f6ffc1bea1e3aaccf934cb9bae4ec72f898cf846fa8 maintainers: @@ -750,7 +750,7 @@ entries: version: v0.0.3 - apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.151599+05:30" + created: "2026-08-28T12:22:53.452502+05:30" description: A Helm chart for deploying Karpenter in gke cluster digest: 4d6c4098860bdaa0d6386e2f638be1ed735b41a2c5e17d31689a33b510b22a40 maintainers: @@ -762,7 +762,7 @@ entries: version: v0.0.2 - apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.151178+05:30" + created: "2026-08-28T12:22:53.452045+05:30" description: A Helm chart for deploying Karpenter in gke cluster digest: 15f592f10d3084e81219099025ebbe1cef95da8fa50c4874db5b00fe6c8042ad maintainers: @@ -777,7 +777,7 @@ entries: type: application apiVersion: v2 appVersion: 1.83.14 - created: "2026-08-19T16:41:33.153339+05:30" + created: "2026-08-28T12:22:53.454225+05:30" dependencies: - condition: postgres.enabled name: postgres @@ -798,7 +798,7 @@ entries: type: application apiVersion: v2 appVersion: 1.83.14 - created: "2026-08-19T16:41:33.152769+05:30" + created: "2026-08-28T12:22:53.453546+05:30" dependencies: - condition: postgres.enabled name: postgres @@ -820,7 +820,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.154618+05:30" + created: "2026-08-28T12:22:53.455802+05:30" dependencies: - condition: postgres.enabled name: postgres @@ -847,7 +847,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.156115+05:30" + created: "2026-08-28T12:22:53.457408+05:30" description: Helm chart for deploying mariadb datastore digest: c8fbfa56d9332447a678de155e5b3b574edcc0e0c4cf215acb93130f27150e18 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241210/f80d4fa9-22ff-4ea8-9558-abb1ab3dc4f3-mariadb.png @@ -862,7 +862,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.155797+05:30" + created: "2026-08-28T12:22:53.457179+05:30" description: Helm chart for deploying mariadb datastore digest: 6b45a459eee41308010175d20ab5caf884bdef6bd9f75e9327c02e9703eace6f icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241210/f80d4fa9-22ff-4ea8-9558-abb1ab3dc4f3-mariadb.png @@ -877,7 +877,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.155541+05:30" + created: "2026-08-28T12:22:53.456902+05:30" description: Helm chart for deploying mariadb datastore digest: 301f9f4ce7bc4ed7c87078ba28ecbb9b41527eb244cce884c57b684bbcabc156 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241210/f80d4fa9-22ff-4ea8-9558-abb1ab3dc4f3-mariadb.png @@ -892,7 +892,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.15525+05:30" + created: "2026-08-28T12:22:53.45646+05:30" description: Helm chart for deploying mariadb datastore digest: 5f5b91c6e5b772c5b4b862b7dab3bb3c89b346c0af1c53414afcc5beae74f6a6 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241210/f80d4fa9-22ff-4ea8-9558-abb1ab3dc4f3-mariadb.png @@ -905,7 +905,7 @@ entries: version: v0.0.2 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.154948+05:30" + created: "2026-08-28T12:22:53.456204+05:30" description: Helm chart for deploying mariadb datastore digest: 27f9e8208c4c87915296c1e4a00c2bd0cb6ff48806b2f4e62a11cc85ec66567b icon: https://zop.dev/logo.png @@ -921,7 +921,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.159026+05:30" + created: "2026-08-28T12:22:53.458889+05:30" description: Helm chart for deploying mysql datastore digest: 8933b31aae8522b26b7b9e8dbce870674a3f75b9b071df5ae66d44f2d3cb8d90 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/c647e8cc-f958-4e6b-ba08-22dc79ca703a-pngtransparentmysqldatabasemariadbdolphinmarinemammalanimalstextthumbnail.png @@ -936,7 +936,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.158767+05:30" + created: "2026-08-28T12:22:53.458649+05:30" description: Helm chart for deploying mysql datastore digest: f9a418fb02ae3cee19f627015c84eadf2d9d97dd53e0a2bf0ee8f0b416ebeacc icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/c647e8cc-f958-4e6b-ba08-22dc79ca703a-pngtransparentmysqldatabasemariadbdolphinmarinemammalanimalstextthumbnail.png @@ -951,7 +951,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.158495+05:30" + created: "2026-08-28T12:22:53.458491+05:30" description: Helm chart for deploying mysql datastore digest: 54bb226a20cf47b56ae0a07585b450f0c0b98e228a4c44567910c1eac18fb858 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/c647e8cc-f958-4e6b-ba08-22dc79ca703a-pngtransparentmysqldatabasemariadbdolphinmarinemammalanimalstextthumbnail.png @@ -966,7 +966,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.15828+05:30" + created: "2026-08-28T12:22:53.458335+05:30" description: Helm chart for deploying mysql datastore digest: ba225be6ddab11b576bdbfa7ce977fd8b82e47d427f8fa022c122443c872b119 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/c647e8cc-f958-4e6b-ba08-22dc79ca703a-pngtransparentmysqldatabasemariadbdolphinmarinemammalanimalstextthumbnail.png @@ -981,7 +981,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.158048+05:30" + created: "2026-08-28T12:22:53.458181+05:30" description: Helm chart for deploying mysql datastore digest: 47cd9bffa81e71ce96fdea4303d407d20ed17fc52eeaa29bca329553a5aca117 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/c647e8cc-f958-4e6b-ba08-22dc79ca703a-pngtransparentmysqldatabasemariadbdolphinmarinemammalanimalstextthumbnail.png @@ -996,7 +996,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.15723+05:30" + created: "2026-08-28T12:22:53.458035+05:30" description: Helm chart for deploying mysql datastore digest: 0a700f2d21091b08e4dffe41fcfe951a31bfcea320df10051e2d27175979a8d6 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/c647e8cc-f958-4e6b-ba08-22dc79ca703a-pngtransparentmysqldatabasemariadbdolphinmarinemammalanimalstextthumbnail.png @@ -1011,7 +1011,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.157+05:30" + created: "2026-08-28T12:22:53.457894+05:30" description: Helm chart for deploying mysql datastore digest: 61ec682378d67ee959c57acb2a6cb0f60d54bd5a1cf0cac4f8dc88f31b6771e6 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/c647e8cc-f958-4e6b-ba08-22dc79ca703a-pngtransparentmysqldatabasemariadbdolphinmarinemammalanimalstextthumbnail.png @@ -1026,7 +1026,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.156695+05:30" + created: "2026-08-28T12:22:53.457753+05:30" description: Helm chart for deploying mysql datastore digest: 693f49466f3aa2741fef88115d1cd7c220c2580747cd58801244cdafceb54df1 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/c647e8cc-f958-4e6b-ba08-22dc79ca703a-pngtransparentmysqldatabasemariadbdolphinmarinemammalanimalstextthumbnail.png @@ -1041,7 +1041,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.161551+05:30" + created: "2026-08-28T12:22:53.460267+05:30" description: Helm chart for deploying mysql datastore digest: f6cea40dae37912aeb37318baeaf51dc048758031492a22ecd7d5d66c12b23bc icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/c647e8cc-f958-4e6b-ba08-22dc79ca703a-pngtransparentmysqldatabasemariadbdolphinmarinemammalanimalstextthumbnail.png @@ -1056,7 +1056,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.161229+05:30" + created: "2026-08-28T12:22:53.460007+05:30" description: Helm chart for deploying mysql datastore digest: 72cfd04c203bb9e90d50aa06ad2bdd090b546e92c1132f51d485122c7f483105 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/c647e8cc-f958-4e6b-ba08-22dc79ca703a-pngtransparentmysqldatabasemariadbdolphinmarinemammalanimalstextthumbnail.png @@ -1071,7 +1071,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.160916+05:30" + created: "2026-08-28T12:22:53.459863+05:30" description: Helm chart for deploying mysql datastore digest: cd4a6304ec32384c5a278ba4cc356d5d36abecf639f5c1b49ce8fc0eff4016d6 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/c647e8cc-f958-4e6b-ba08-22dc79ca703a-pngtransparentmysqldatabasemariadbdolphinmarinemammalanimalstextthumbnail.png @@ -1086,7 +1086,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.16063+05:30" + created: "2026-08-28T12:22:53.459712+05:30" description: Helm chart for deploying mysql datastore digest: 3eb4fdd1593a952a7ff7a10310b48484047eabeacadcf3f039e32d7f1a130c13 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/c647e8cc-f958-4e6b-ba08-22dc79ca703a-pngtransparentmysqldatabasemariadbdolphinmarinemammalanimalstextthumbnail.png @@ -1101,7 +1101,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.160384+05:30" + created: "2026-08-28T12:22:53.459552+05:30" description: Helm chart for deploying mysql datastore digest: d3635b40f2b416a5616ff1ba50d9572318e285ead03213ee7a5a45caaa8ab5e8 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/c647e8cc-f958-4e6b-ba08-22dc79ca703a-pngtransparentmysqldatabasemariadbdolphinmarinemammalanimalstextthumbnail.png @@ -1116,7 +1116,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.160063+05:30" + created: "2026-08-28T12:22:53.459417+05:30" description: Helm chart for deploying mysql datastore digest: 22a84b7172e1424845524d9c2a06a3ec7c29f445349ff4650531001bd50fb5a8 icon: https://zop.dev/logo.png @@ -1129,7 +1129,7 @@ entries: version: v0.0.4 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.159399+05:30" + created: "2026-08-28T12:22:53.459285+05:30" description: Helm chart for deploying mysql datastore digest: cd72e08b2235de99a477dfad97c1d13fff7ae5e37397f0d6dbd682bf949b2046 icon: https://zop.dev/logo.png @@ -1142,7 +1142,7 @@ entries: version: v0.0.3 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.159219+05:30" + created: "2026-08-28T12:22:53.459043+05:30" description: Helm chart for deploying mysql datastore digest: 7e4bf128d43f03e3930457b8eb731935c98c82b2528a5c28559a921850cb5922 icon: https://zop.dev/logo.png @@ -1155,7 +1155,7 @@ entries: version: v0.0.2 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.156309+05:30" + created: "2026-08-28T12:22:53.457609+05:30" description: Helm chart for deploying mysql datastore digest: d1b0b8aff145de7076aa97054be6da52e769ac7be00d8453500a75ac82cc0d07 icon: https://zop.dev/logo.png @@ -1166,10 +1166,32 @@ entries: urls: - https://helm.zop.dev/mysql-v0.0.1.tgz version: v0.0.1 + n8n: + - annotations: + type: application + apiVersion: v2 + appVersion: 2.35.3 + created: "2026-08-28T12:22:53.460916+05:30" + dependencies: + - condition: postgres.enabled + name: postgres + repository: https://helm.zop.dev + version: 0.0.14 + description: Helm chart for deploying n8n, a workflow automation platform + digest: f1ae0551bd72d2b73eef305364aa4dd74ad0b5057648a53d9157acd35cbdff45 + icon: https://storage.googleapis.com/zopdev-blog-resources/1/files/originals/20260812/71ab17a6-11d5-4280-a267-1749b533b756-n8n.png + maintainers: + - name: ZopDev + url: zop.dev + name: n8n + type: application + urls: + - https://helm.zop.dev/n8n-v0.0.1.tgz + version: v0.0.1 openobserve-standalone: - apiVersion: v2 appVersion: v1.0.0 - created: "2026-08-19T16:41:33.16371+05:30" + created: "2026-08-28T12:22:53.462378+05:30" dependencies: - condition: minio.enabled name: minio @@ -1190,7 +1212,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.164606+05:30" + created: "2026-08-28T12:22:53.463169+05:30" dependencies: - name: zookeeper repository: https://helm.zop.dev @@ -1209,7 +1231,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.164302+05:30" + created: "2026-08-28T12:22:53.462753+05:30" description: Helm chart for deploying opentsdb digest: ceb20fb363bef19fbc077ba7647b389a9741f0b748b555f23e2e6bd6b5f97020 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241122/42ea9c53-055c-4441-8438-95d639dfc2f4-2086220.png @@ -1224,7 +1246,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.164104+05:30" + created: "2026-08-28T12:22:53.46263+05:30" description: Helm chart for deploying opentsdb digest: e20e1734631e6079fe6e8e44b6c63d46c49c9888f99e0b9706d22bed09b4c8be icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241122/42ea9c53-055c-4441-8438-95d639dfc2f4-2086220.png @@ -1237,7 +1259,7 @@ entries: version: v0.0.2 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.163918+05:30" + created: "2026-08-28T12:22:53.462497+05:30" description: Helm chart for deploying opentsdb digest: fd3473ad09c60da40c8ddbb319a4c015774d0ae35c0e7da5556949bcbde39f7e icon: https://zop.dev/logo.png @@ -1253,7 +1275,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.171173+05:30" + created: "2026-08-28T12:22:53.469568+05:30" dependencies: - name: postgres repository: https://helm.zop.dev @@ -1279,7 +1301,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.169944+05:30" + created: "2026-08-28T12:22:53.468387+05:30" dependencies: - name: postgres repository: https://helm.zop.dev @@ -1305,7 +1327,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.169321+05:30" + created: "2026-08-28T12:22:53.467759+05:30" dependencies: - name: postgres repository: https://helm.zop.dev @@ -1331,7 +1353,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.168758+05:30" + created: "2026-08-28T12:22:53.467211+05:30" dependencies: - name: postgres repository: https://helm.zop.dev @@ -1357,7 +1379,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.168189+05:30" + created: "2026-08-28T12:22:53.466656+05:30" dependencies: - name: postgres repository: https://helm.zop.dev @@ -1383,7 +1405,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.167486+05:30" + created: "2026-08-28T12:22:53.465966+05:30" dependencies: - name: postgres repository: https://helm.zop.dev @@ -1406,7 +1428,7 @@ entries: version: v0.0.4 - apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.166481+05:30" + created: "2026-08-28T12:22:53.465324+05:30" dependencies: - name: postgres repository: https://helm.zop.dev @@ -1430,7 +1452,7 @@ entries: version: v0.0.3 - apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.165805+05:30" + created: "2026-08-28T12:22:53.464576+05:30" dependencies: - name: postgres repository: https://helm.zop.dev @@ -1454,7 +1476,7 @@ entries: version: v0.0.2 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.1652+05:30" + created: "2026-08-28T12:22:53.463792+05:30" description: Helm chart for deploying outline app digest: 4a24106f04a0e89503000afc5a7fd2546eff2e092caf500b12a48bbd2d17e659 icon: https://zop.dev/logo.png @@ -1470,7 +1492,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.172643+05:30" + created: "2026-08-28T12:22:53.471335+05:30" description: Helm chart for deploying postgres datastore digest: 3d916bf50ee92014d900f4a23c2a47d8ffa017cf1eddd651490ce29e94fb3a1d icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/e4d58134-93e4-478e-851b-3a70b58dcd81-Postgresqlelephantsvg.jpg @@ -1485,7 +1507,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.172379+05:30" + created: "2026-08-28T12:22:53.471044+05:30" description: Helm chart for deploying postgres datastore digest: 561e553524e45ab009d9003bc44282d50186faab995df321563406897d78d7bc icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/e4d58134-93e4-478e-851b-3a70b58dcd81-Postgresqlelephantsvg.jpg @@ -1500,7 +1522,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.172145+05:30" + created: "2026-08-28T12:22:53.470776+05:30" description: Helm chart for deploying postgres datastore digest: 7fb9fa1dc8d60d142b1033ce34e7c5e218719748fa9316308687d1fc1a881147 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/e4d58134-93e4-478e-851b-3a70b58dcd81-Postgresqlelephantsvg.jpg @@ -1515,7 +1537,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.171886+05:30" + created: "2026-08-28T12:22:53.470369+05:30" description: Helm chart for deploying postgres datastore digest: d6cbd601071407c68195931900b60f04e4ef50a2f52413c60a3b24ed9d2581d6 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/e4d58134-93e4-478e-851b-3a70b58dcd81-Postgresqlelephantsvg.jpg @@ -1530,7 +1552,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.171677+05:30" + created: "2026-08-28T12:22:53.470091+05:30" description: Helm chart for deploying postgres datastore digest: c017d3ee10187abf8e55c01a6aa197a889e2108d4177fd27a852ea0066f2702f icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/e4d58134-93e4-478e-851b-3a70b58dcd81-Postgresqlelephantsvg.jpg @@ -1545,7 +1567,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.174892+05:30" + created: "2026-08-28T12:22:53.472693+05:30" description: Helm chart for deploying postgres datastore digest: 623814cf583d824ed687749f0b089cd8a7e7a2b2163a26ae45cd34450323df27 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/e4d58134-93e4-478e-851b-3a70b58dcd81-Postgresqlelephantsvg.jpg @@ -1560,7 +1582,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.174628+05:30" + created: "2026-08-28T12:22:53.472528+05:30" description: Helm chart for deploying postgres datastore digest: 760b6075b10c9044cade7a1692a1a2b22363335710ac50a60e90890864665e41 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/e4d58134-93e4-478e-851b-3a70b58dcd81-Postgresqlelephantsvg.jpg @@ -1575,7 +1597,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.174378+05:30" + created: "2026-08-28T12:22:53.472372+05:30" description: Helm chart for deploying postgres datastore digest: d155a052c1ede6249edb2b0b30720ddaf0e7dda52bc352d4f231359e40456068 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/e4d58134-93e4-478e-851b-3a70b58dcd81-Postgresqlelephantsvg.jpg @@ -1590,7 +1612,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.174197+05:30" + created: "2026-08-28T12:22:53.47221+05:30" description: Helm chart for deploying postgres datastore digest: c1767b70e53d69d8680170e759780cdc4492f483f5896307412355331c16c7ea icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/e4d58134-93e4-478e-851b-3a70b58dcd81-Postgresqlelephantsvg.jpg @@ -1605,7 +1627,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.173564+05:30" + created: "2026-08-28T12:22:53.472046+05:30" description: Helm chart for deploying postgres datastore digest: 06347f98453069747de484984e4dafe36bbf79f386ef76f3de735d6ece206085 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/e4d58134-93e4-478e-851b-3a70b58dcd81-Postgresqlelephantsvg.jpg @@ -1620,7 +1642,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.173338+05:30" + created: "2026-08-28T12:22:53.471907+05:30" description: Helm chart for deploying postgres datastore digest: 75b652602f68dc46effc64332320aa5383b89561db869db77396bd1ab0ff55b6 icon: https://zop.dev/logo.png @@ -1633,7 +1655,7 @@ entries: version: v0.0.4 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.173119+05:30" + created: "2026-08-28T12:22:53.471772+05:30" description: Helm chart for deploying postgres datastore digest: 8d9d5a47255fc7d149c3975386c0adf8b3e9ad66ae9d6c1da0ca7ea7d9cf3f69 icon: https://zop.dev/logo.png @@ -1646,7 +1668,7 @@ entries: version: v0.0.3 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.172902+05:30" + created: "2026-08-28T12:22:53.471644+05:30" description: Helm chart for deploying postgres datastore digest: ffc38c1a1dbc3f4e2db9ff742475e2380094c912d9f84a3a2e6511fac6f04133 icon: https://zop.dev/logo.png @@ -1659,7 +1681,7 @@ entries: version: v0.0.2 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.171394+05:30" + created: "2026-08-28T12:22:53.469823+05:30" description: Helm chart for deploying postgres datastore digest: 6e8a630281561184374d252a30f3541faa49fed00d072d4e0b37b4363b1bdc7b icon: https://zop.dev/logo.png @@ -1675,7 +1697,7 @@ entries: type: datasource apiVersion: v2 appVersion: 1.19.0 - created: "2026-08-19T16:41:33.175062+05:30" + created: "2026-08-28T12:22:53.472871+05:30" description: High-performance vector database for AI search, recommendations and RAG digest: fc7c2cc582f1738876a5fb64c63211e2fa225dbca5069ee274280dedb976822c @@ -1692,7 +1714,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.176451+05:30" + created: "2026-08-28T12:22:53.474133+05:30" description: Helm chart deploys redis instance digest: 54cb3cd6a2fc657a8c9074177e0472a1363b190ec7fe359f8d537fbcc2ff33d0 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/a322e6a1-2433-4ff5-b778-6372fc27bedd-cdnlogocomredis2min111.jpg @@ -1707,7 +1729,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.176249+05:30" + created: "2026-08-28T12:22:53.473996+05:30" description: Helm chart deploys redis instance digest: 09e347bc7fb6663917771eb3c345f3d86ed552d3fdafab6a4db4cefddd3da40b icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/a322e6a1-2433-4ff5-b778-6372fc27bedd-cdnlogocomredis2min111.jpg @@ -1722,7 +1744,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.175623+05:30" + created: "2026-08-28T12:22:53.47385+05:30" description: Helm chart deploys redis instance digest: 29fea3bd4a21a6e3af62c433d46406361ec09348b65f7a761c55a8fe0f36d90c icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/a322e6a1-2433-4ff5-b778-6372fc27bedd-cdnlogocomredis2min111.jpg @@ -1737,7 +1759,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.175393+05:30" + created: "2026-08-28T12:22:53.473721+05:30" description: Helm chart deploys redis instance digest: a25641daa9934bd778b27d537c2c3f5ed8bbc80df243e615b5abd78af43f1920 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241119/a322e6a1-2433-4ff5-b778-6372fc27bedd-cdnlogocomredis2min111.jpg @@ -1750,7 +1772,7 @@ entries: version: v0.0.2 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.175204+05:30" + created: "2026-08-28T12:22:53.473188+05:30" description: Helm chart deploys redis instance digest: a1181c8d8c0808bfcbcd59a7ba08d675f83285221fff6fa10bc3fbc6014305e2 icon: https://zop.dev/logo.png @@ -1766,7 +1788,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.177215+05:30" + created: "2026-08-28T12:22:53.474845+05:30" description: Helm chart deploys redis distributed instance digest: ef079609c1fcb4d3fff8c961050551aed044cee88161f808a044d3fc8a7d7567 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241227/beaa0bf2-efc3-4096-9616-69568624a7d6-redisdistributed.png @@ -1781,7 +1803,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.176985+05:30" + created: "2026-08-28T12:22:53.47467+05:30" description: Helm chart deploys redis distributed instance digest: 8e331db39a745eec8d28e365d044b82717631ef1c74cd8d1ded504546e55e586 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241227/beaa0bf2-efc3-4096-9616-69568624a7d6-redisdistributed.png @@ -1796,7 +1818,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.176835+05:30" + created: "2026-08-28T12:22:53.474516+05:30" description: Helm chart deploys redis distributed instance digest: 46722cb13848de0ecd10e75b1ae0c34ae14d9bd648c46175357c3e1a4973be9c icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241227/beaa0bf2-efc3-4096-9616-69568624a7d6-redisdistributed.png @@ -1811,7 +1833,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.17668+05:30" + created: "2026-08-28T12:22:53.474372+05:30" description: Helm chart deploys redis distributed instance digest: dca0d7799dc7c6f51ba5d64cb9708bade16a19446a543fa98b43093576291108 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241227/beaa0bf2-efc3-4096-9616-69568624a7d6-redisdistributed.png @@ -1825,7 +1847,7 @@ entries: scylladb: - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.177593+05:30" + created: "2026-08-28T12:22:53.475125+05:30" description: Helm chart for deploying ScyllaDB digest: 88843927b917732223dd0f0a09e9570dd507b8a7d5af519ea555f258a8bc009f icon: https://zop.dev/logo.png @@ -1838,7 +1860,7 @@ entries: version: v0.0.2 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.177406+05:30" + created: "2026-08-28T12:22:53.474977+05:30" description: Helm chart for deploying ScyllaDB digest: 715797a89c9a8d06bfd839f68a18b4a720db459539581043daf153d72994e420 icon: https://zop.dev/logo.png @@ -1852,7 +1874,7 @@ entries: service: - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.188152+05:30" + created: "2026-08-28T12:22:53.485259+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: 23b3e69dea6cb6f9af99f3d690aaa56802f9a8eec1bfeff46f48a5ef638b087e @@ -1866,7 +1888,7 @@ entries: version: v0.0.32 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.187664+05:30" + created: "2026-08-28T12:22:53.484775+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: e91c0e50880aac92d0e5db2fbc4b05372d382f37c7289cf93068a99da777f989 @@ -1880,7 +1902,7 @@ entries: version: v0.0.31 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.187179+05:30" + created: "2026-08-28T12:22:53.484303+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: 260220b14ca4912bc17c3a6a6bde30b4f4e9f714701c48435a1bfc4ea1a4709d @@ -1894,7 +1916,7 @@ entries: version: v0.0.30 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.186398+05:30" + created: "2026-08-28T12:22:53.483588+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: 696c79878cb5a290bf4433e01ff9525e219fd00134c4b9fdb7a1b9e8d81d590a @@ -1908,7 +1930,7 @@ entries: version: v0.0.29 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.185934+05:30" + created: "2026-08-28T12:22:53.48327+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: 0721018c635b98bc7d6d51c71a3770f075eed1e3c859f568179b79e7d48ed130 @@ -1922,7 +1944,7 @@ entries: version: v0.0.28 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.185616+05:30" + created: "2026-08-28T12:22:53.482954+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: c110801168b355cc2c6de64d0adad1dc8e7c08cbefacffc54f07cc8abb9eb9fd @@ -1936,7 +1958,7 @@ entries: version: v0.0.27 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.184516+05:30" + created: "2026-08-28T12:22:53.481959+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: abfe37cc7137ab2f6077b2dace85bb550dd60dcfbed009edcb804cf590143bef @@ -1950,7 +1972,7 @@ entries: version: v0.0.26 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.184215+05:30" + created: "2026-08-28T12:22:53.481624+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: 3cabf00ba943c3e9d27a0b84df5175197b0f4105b732028eca650ad4ed402072 @@ -1964,7 +1986,7 @@ entries: version: v0.0.25 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.183803+05:30" + created: "2026-08-28T12:22:53.480882+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: 666480b58aca6a312a915fc1e51ac0c717444f0d95345a4367c70d73b891f566 @@ -1978,7 +2000,7 @@ entries: version: v0.0.24 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.183366+05:30" + created: "2026-08-28T12:22:53.480433+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: 0b397d47f66b85d9e14cad455c1328397c70f0483f39428d83c56839c99f7c29 @@ -1992,7 +2014,7 @@ entries: version: v0.0.23 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.183002+05:30" + created: "2026-08-28T12:22:53.480077+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: c763047324f4bf10eb76fe0ff1fc5dcb5ab9c1c5b0ca67003e73f50822a507b7 @@ -2006,7 +2028,7 @@ entries: version: v0.0.22 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.182602+05:30" + created: "2026-08-28T12:22:53.479797+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: ba222bd78f7fcf4bb6ff0cb192e19b68d968c1d2573ef71d18adb57bf8774678 @@ -2020,7 +2042,7 @@ entries: version: v0.0.21 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.182242+05:30" + created: "2026-08-28T12:22:53.479509+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: 2f64dfd5959cc287274fd582fc7308fb60971ac58881cb3458f79f7426c42c63 @@ -2034,7 +2056,7 @@ entries: version: v0.0.20 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.181756+05:30" + created: "2026-08-28T12:22:53.479014+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: 51b7fcff52739a83c4107516026ec0c270b0f8633e9399dccbdf2a8f6006a1d2 @@ -2048,7 +2070,7 @@ entries: version: v0.0.19 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.18132+05:30" + created: "2026-08-28T12:22:53.478765+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: 8ebbf53c27110582d1d3aa775eae4eb1028672776015dcbfe798ff0c5056b8b1 @@ -2062,7 +2084,7 @@ entries: version: v0.0.18 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.180909+05:30" + created: "2026-08-28T12:22:53.478501+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: 6901e261fe4617b08207cf498845614275ebac2bfaed54ad5eb8f640a7150ead @@ -2076,7 +2098,7 @@ entries: version: v0.0.17 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.180384+05:30" + created: "2026-08-28T12:22:53.478037+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: 0b49c92f2075609563e6d596d205045f3299d2dcbcbe09a3194a7e12b4df617c @@ -2090,7 +2112,7 @@ entries: version: v0.0.16 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.180152+05:30" + created: "2026-08-28T12:22:53.477615+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: 9b25ba867e6c7297bcae9a7795cc29348006f1d310e7f563b948ffaceb760149 @@ -2104,7 +2126,7 @@ entries: version: v0.0.15 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.179695+05:30" + created: "2026-08-28T12:22:53.477146+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: f74d351c335d5b9db31685da2bf5cab33079593bdc0b010f710cb54df9b6bab1 @@ -2118,7 +2140,7 @@ entries: version: v0.0.14 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.179301+05:30" + created: "2026-08-28T12:22:53.476562+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: eca3b5e28c90dcbed32071e7b28dfab4e88014a679bbd16a03729f34c9dccc5f @@ -2132,7 +2154,7 @@ entries: version: v0.0.13 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.179012+05:30" + created: "2026-08-28T12:22:53.476197+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: 4cc6acd625ea36bdb9bd874c4d648efb379129438f48c91098a59e8d84ba3620 @@ -2146,7 +2168,7 @@ entries: version: v0.0.12 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.178715+05:30" + created: "2026-08-28T12:22:53.475879+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: 08769b7fe4e8be7e26a53329c764abd9013dca805e6249ccf3d8a8155a9a8959 @@ -2160,7 +2182,7 @@ entries: version: v0.0.11 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.17817+05:30" + created: "2026-08-28T12:22:53.475614+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: 1d3435fe1e7dc358e2941621aadf1ba21d16fa4f72d8320810c61f5a11ae7189 @@ -2174,7 +2196,7 @@ entries: version: v0.0.10 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.19067+05:30" + created: "2026-08-28T12:22:53.487448+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: 6c65c363d54c2463167d77451525c546b08ed030143fb911a51c34b1d5967f45 @@ -2188,7 +2210,7 @@ entries: version: v0.0.9 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.190409+05:30" + created: "2026-08-28T12:22:53.487186+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: e9feb789d09a51445657aa1a2c71e87411bcbae36a366c4ae8f6b200049addba @@ -2202,7 +2224,7 @@ entries: version: v0.0.8 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.189498+05:30" + created: "2026-08-28T12:22:53.48692+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: c5793cb3415ae0b68cfdc44fb9927ce68f0f4b77e50c7ab3cef610ed5d1cb98e @@ -2216,7 +2238,7 @@ entries: version: v0.0.7 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.189252+05:30" + created: "2026-08-28T12:22:53.486236+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: b45dd74d7722d961d949102c81b2321ff1d575c3e94fbd9bf5aca9e328626d49 @@ -2230,7 +2252,7 @@ entries: version: v0.0.6 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.188852+05:30" + created: "2026-08-28T12:22:53.485897+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: 0d10278e951800d9b46a1415e090c62ff642ecbdc0f181fba617bf273799114a @@ -2244,7 +2266,7 @@ entries: version: v0.0.5 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.188476+05:30" + created: "2026-08-28T12:22:53.485578+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: f405204dd81300e58188ca5d41efbd6ea3f1b8f08bd50d65ea95000d38edc517 @@ -2258,7 +2280,7 @@ entries: version: v0.0.4 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.186757+05:30" + created: "2026-08-28T12:22:53.483982+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: f31132842aca2478c10457f6e323ffa566cca222afc58996d42a08f6f87a121e @@ -2272,7 +2294,7 @@ entries: version: v0.0.3 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.181985+05:30" + created: "2026-08-28T12:22:53.479232+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: cc7992d670d615549c67717904238998780abe5aa5df400e4e3eb31d16237ea4 @@ -2286,7 +2308,7 @@ entries: version: v0.0.2 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.177896+05:30" + created: "2026-08-28T12:22:53.475359+05:30" description: Helm chart creates a deployment, service, hpa for a service along with serviceMonitor etc digest: e45d41b5041d8a3649bb8db768226990b2aae21b31b13ffd18d7253fe1e1d441 @@ -2303,7 +2325,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.196708+05:30" + created: "2026-08-28T12:22:53.492379+05:30" description: Helm chart for deploying Apache Solr datastore digest: f26072bc8a074f83ab7a6b0fa7d1b9cda62b19324cbb30f7773847a3ca20eba0 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20250403/a45b7860-5846-4fa9-b68d-6765251210bd-solr.png @@ -2318,7 +2340,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.196055+05:30" + created: "2026-08-28T12:22:53.492227+05:30" description: Helm chart for deploying Apache Solr datastore digest: 6b20bc75e235deed888fba4f9f8aa6331a29358aa7f845710a978bd0420f0234 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20250403/a45b7860-5846-4fa9-b68d-6765251210bd-solr.png @@ -2333,7 +2355,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.195819+05:30" + created: "2026-08-28T12:22:53.492057+05:30" description: Helm chart for deploying Apache Solr datastore digest: ecf9a0838f59fb0b2197c1526bc3e7febe37e5aa3d2158651b4cec9bb51891dc icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20250403/a45b7860-5846-4fa9-b68d-6765251210bd-solr.png @@ -2348,7 +2370,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.195605+05:30" + created: "2026-08-28T12:22:53.491914+05:30" description: Helm chart for deploying Apache Solr datastore digest: c6b7165c189a94bb3b35135f6a6a97b59ac3e971f8354544583bbc715e8b5f76 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20250403/a45b7860-5846-4fa9-b68d-6765251210bd-solr.png @@ -2361,7 +2383,7 @@ entries: version: v0.0.3 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.195099+05:30" + created: "2026-08-28T12:22:53.491748+05:30" description: Helm chart for deploying Apache Solr datastore digest: 7b179009c3258ab1abb9520aa60281ddffda8220eb3906811a0aa0ffd023f154 icon: https://zop.dev/logo.png @@ -2374,7 +2396,7 @@ entries: version: v0.0.2 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.194897+05:30" + created: "2026-08-28T12:22:53.491536+05:30" description: Helm chart for deploying Apache Solr datastore digest: b55472585f9c7272cdd3fcef0ee411c20a2f429f4b9d7d8a0ba7912a840333b8 icon: https://zop.dev/logo.png @@ -2388,7 +2410,7 @@ entries: solr-operator: - apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.194682+05:30" + created: "2026-08-28T12:22:53.491313+05:30" dependencies: - condition: zookeeper-operator.install name: zookeeper-operator @@ -2409,7 +2431,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.214257+05:30" + created: "2026-08-28T12:22:53.507676+05:30" dependencies: - name: solr-operator repository: https://helm.zop.dev @@ -2428,7 +2450,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.209995+05:30" + created: "2026-08-28T12:22:53.504081+05:30" dependencies: - name: solr-operator repository: https://helm.zop.dev @@ -2447,7 +2469,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.205321+05:30" + created: "2026-08-28T12:22:53.500133+05:30" dependencies: - name: solr-operator repository: https://helm.zop.dev @@ -2466,7 +2488,7 @@ entries: type: datasource apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.200929+05:30" + created: "2026-08-28T12:22:53.496586+05:30" dependencies: - name: solr-operator repository: https://helm.zop.dev @@ -2486,7 +2508,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.22037+05:30" + created: "2026-08-28T12:22:53.513433+05:30" dependencies: - condition: postgres.enabled name: postgres @@ -2511,7 +2533,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.21953+05:30" + created: "2026-08-28T12:22:53.512526+05:30" dependencies: - condition: postgres.enabled name: postgres @@ -2536,7 +2558,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.218922+05:30" + created: "2026-08-28T12:22:53.511911+05:30" dependencies: - condition: postgres.enabled name: postgres @@ -2561,7 +2583,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.218311+05:30" + created: "2026-08-28T12:22:53.511266+05:30" dependencies: - condition: postgres.enabled name: postgres @@ -2586,7 +2608,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.217739+05:30" + created: "2026-08-28T12:22:53.51072+05:30" dependencies: - condition: postgres.enabled name: postgres @@ -2608,7 +2630,7 @@ entries: version: v0.0.4 - apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.217166+05:30" + created: "2026-08-28T12:22:53.510321+05:30" dependencies: - condition: postgres.enabled name: postgres @@ -2631,7 +2653,7 @@ entries: version: v0.0.3 - apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.21652+05:30" + created: "2026-08-28T12:22:53.509894+05:30" dependencies: - condition: postgres.enabled name: postgres @@ -2654,7 +2676,7 @@ entries: version: v0.0.2 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.215406+05:30" + created: "2026-08-28T12:22:53.508933+05:30" description: Helm chart for Deploying Apache Superset digest: f2612f4782cc4e971f095ddbb76b3e9631e52b7ba6473e48226d2f769317be56 icon: https://zop.dev/logo.png @@ -2670,7 +2692,7 @@ entries: type: datasource apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.221307+05:30" + created: "2026-08-28T12:22:53.514288+05:30" description: Helm chart for deploying surrealdb digest: 4e87390d8466c1c3cb37c25a0a59be957d792976bafb3b3a02101927dcf8a3da icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241122/c44b7326-00d7-4c62-bce7-ca576509d27f-10982346.png @@ -2685,7 +2707,7 @@ entries: type: datasource apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.220973+05:30" + created: "2026-08-28T12:22:53.513985+05:30" description: Helm chart for deploying surrealdb digest: e73e929591f817ffa0a7477fb8b24c7572b667534e14280c107b170bb4b29568 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20241122/c44b7326-00d7-4c62-bce7-ca576509d27f-10982346.png @@ -2698,7 +2720,7 @@ entries: version: v0.0.2 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.220642+05:30" + created: "2026-08-28T12:22:53.513679+05:30" description: Helm chart for deploying surrealdb digest: 3dc8d5151d6a8b5a96dc3b7aabb8e575e4c5298f0eef30943b44f74f0892bd38 icon: https://zop.dev/logo.png @@ -2712,7 +2734,7 @@ entries: uptime-monitoring: - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.22207+05:30" + created: "2026-08-28T12:22:53.514547+05:30" description: HTTPS uptime and TLS monitoring digest: 00ab35eb86ad249c196029e804798aa870ee399d0c15299cc502697f8d3b4791 icon: https://zop.dev/logo.png @@ -2728,7 +2750,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.228037+05:30" + created: "2026-08-28T12:22:53.519465+05:30" dependencies: - name: mysql repository: https://helm.zop.dev @@ -2751,7 +2773,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.226852+05:30" + created: "2026-08-28T12:22:53.518485+05:30" dependencies: - name: mysql repository: https://helm.zop.dev @@ -2774,7 +2796,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.226101+05:30" + created: "2026-08-28T12:22:53.517784+05:30" dependencies: - name: mysql repository: https://helm.zop.dev @@ -2797,7 +2819,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.225624+05:30" + created: "2026-08-28T12:22:53.517316+05:30" dependencies: - name: mysql repository: https://helm.zop.dev @@ -2820,7 +2842,7 @@ entries: type: application apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.22506+05:30" + created: "2026-08-28T12:22:53.516869+05:30" dependencies: - name: mysql repository: https://helm.zop.dev @@ -2840,7 +2862,7 @@ entries: version: v0.0.4 - apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.224443+05:30" + created: "2026-08-28T12:22:53.51646+05:30" dependencies: - name: mysql repository: https://helm.zop.dev @@ -2861,7 +2883,7 @@ entries: version: v0.0.3 - apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.223637+05:30" + created: "2026-08-28T12:22:53.515815+05:30" dependencies: - name: mysql repository: https://helm.zop.dev @@ -2882,7 +2904,7 @@ entries: version: v0.0.2 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.222988+05:30" + created: "2026-08-28T12:22:53.515241+05:30" description: Helm chart for deploying WordPress app digest: 1b5793a827827be151ebe571fcadec8507a6562da1213c774ca0acba91e91ab2 icon: https://zop.dev/logo.png @@ -2896,7 +2918,7 @@ entries: zookeeper: - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.229662+05:30" + created: "2026-08-28T12:22:53.520629+05:30" description: A Helm chart for Deploying Zookeeper on Kubernetes digest: 8b0183fb1c180fbf9f756362079cd0fb6c199fce2900f1c2644292789de9d4d0 icon: https://zop.dev/logo.png @@ -2909,7 +2931,7 @@ entries: version: v0.0.2 - apiVersion: v1 appVersion: "1.0" - created: "2026-08-19T16:41:33.229294+05:30" + created: "2026-08-28T12:22:53.520364+05:30" description: A Helm chart for Deploying Zookeeper on Kubernetes digest: 06e4542609434c3c6385b75619e254ada3771e332c025b25c2f074992d5043ca icon: https://zop.dev/logo.png @@ -2923,7 +2945,7 @@ entries: zookeeper-operator: - apiVersion: v2 appVersion: "1.0" - created: "2026-08-19T16:41:33.229025+05:30" + created: "2026-08-28T12:22:53.520187+05:30" description: A Helm chart for Deploying Zookeeper Operator on Kubernetes digest: 54a824110bc9e4bbf8228f49c601f8d2cfab1ff815037a09ac7e29067f5dd8d1 icon: https://storage.googleapis.com/zopdev-test-bucket/zop/files/originals/20250407/69625503-f6f1-4521-9c14-1d262ee8683b-zookeeper.png @@ -2934,4 +2956,4 @@ entries: urls: - https://helm.zop.dev/zookeeper-operator-v0.0.1.tgz version: v0.0.1 -generated: "2026-08-19T16:41:33.133028+05:30" +generated: "2026-08-28T12:22:53.437487+05:30" diff --git a/docs/n8n-v0.0.1.tgz b/docs/n8n-v0.0.1.tgz new file mode 100644 index 0000000..d7032de Binary files /dev/null and b/docs/n8n-v0.0.1.tgz differ diff --git a/docs/src/js/display.js b/docs/src/js/display.js index eed71ba..e69acb6 100644 --- a/docs/src/js/display.js +++ b/docs/src/js/display.js @@ -69,6 +69,11 @@ const CHART_DISPLAY = { name: "MySQL", description: "Deploy a MySQL database service", }, + n8n: { + // Lowercase on purpose; titleCase would render this "N8n". + name: "n8n", + description: "Workflow automation you build in the browser and trigger by webhook or schedule", + }, opentsdb: { name: "OpenTSDB", description: "A Distributed, Scalable Monitoring System",