Compare commits

..

10 commits
main ... pages

Author SHA1 Message Date
forgejo-actions
dca26ab70b Publish cnpg-cluster-0.0.43.tgz keydb-0.0.43.tgz maildev-0.0.43.tgz modjo-microservice-0.0.43.tgz
All checks were successful
Mirror Sync / codeberg (push) Successful in 8s
2024-08-17 17:42:56 +00:00
forgejo-actions
9556d9bf49 Publish cnpg-cluster-0.0.42.tgz keydb-0.0.42.tgz maildev-0.0.42.tgz modjo-microservice-0.0.42.tgz
All checks were successful
Mirror Sync / codeberg (push) Successful in 13s
2024-07-21 14:06:05 +00:00
forgejo-actions
5624b5fec1 Publish cnpg-cluster-0.0.41.tgz keydb-0.0.41.tgz maildev-0.0.41.tgz modjo-microservice-0.0.41.tgz
All checks were successful
Mirror Sync / codeberg (push) Successful in 8s
2024-07-18 22:48:03 +00:00
forgejo-actions
5db5a5fa86 Publish keydb-0.0.40.tgz maildev-0.0.40.tgz modjo-microservice-0.0.40.tgz
All checks were successful
Mirror Sync / codeberg (push) Successful in 8s
2024-07-18 18:37:23 +00:00
forgejo-actions
5935fb95cd Publish keydb-0.0.39.tgz maildev-0.0.39.tgz modjo-microservice-0.0.39.tgz
All checks were successful
Mirror Sync / codeberg (push) Successful in 9s
2024-07-18 17:50:57 +00:00
aa38f96b5d
fix: wip
All checks were successful
Mirror Sync / codeberg (push) Successful in 9s
2024-07-18 19:49:23 +02:00
forgejo-actions
867a5661fb Publish keydb-0.0.38.tgz maildev-0.0.38.tgz modjo-microservice-0.0.38.tgz
Some checks failed
Mirror Sync / codeberg (push) Failing after 3s
2024-07-18 17:46:44 +00:00
forgejo-actions
34429a79a4 Publish keydb-0.0.37.tgz maildev-0.0.37.tgz modjo-microservice-0.0.37.tgz
Some checks failed
Mirror Sync / codeberg (push) Failing after 3s
2024-07-18 17:44:15 +00:00
forgejo-actions
42e732d928 Publish keydb-0.0.36.tgz maildev-0.0.36.tgz modjo-microservice-0.0.36.tgz
All checks were successful
Mirror Sync / codeberg (push) Successful in 8s
2024-07-12 21:08:12 +00:00
forgejo-actions
46fa592b91 Publish maildev-0.0.35.tgz modjo-microservice-0.0.35.tgz
All checks were successful
Mirror Sync / codeberg (push) Successful in 8s
2024-07-04 17:33:39 +00:00
71 changed files with 396 additions and 2443 deletions

View file

@ -17,7 +17,7 @@ jobs:
charts_dir: charts
linting: off
branch: pages
charts_url: https://devthefuture.codeberg.page/helm-charts
charts_url: https://devthefuture.codeberg.org/helm-charts
commit_username: "forgejo-actions"
commit_email: "bot@devthefuture.org"
repo_url: https://org-bot-devthefuture:${{ secrets.M8A_ORG_BOT_REPO_TOKEN }}@git.devthefuture.org/${{ github.repository }}.git

View file

@ -2,222 +2,6 @@
All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
## 0.0.43 (2024-08-17)
### Bug Fixes
* maildev cron ([723ccf5](https://codeberg.org/devthefuture/helm-charts/commit/723ccf5a190b763107814327f6f4121eae278e9c))
## 0.0.42 (2024-07-21)
### Bug Fixes
* up ([9940847](https://codeberg.org/devthefuture/helm-charts/commit/99408476084068c8f91b449952ecef07afd24bfa))
## 0.0.41 (2024-07-18)
### Features
* cnpg-cluster ([103cc95](https://codeberg.org/devthefuture/helm-charts/commit/103cc957ca84e799f4a950718b9624867ec2e326))
## 0.0.40 (2024-07-18)
### Bug Fixes
* probes ([921e731](https://codeberg.org/devthefuture/helm-charts/commit/921e731c815394ccdd9391a14f8be307da3b0972))
## 0.0.39 (2024-07-18)
### Bug Fixes
* trigger ci ([a6dfb33](https://codeberg.org/devthefuture/helm-charts/commit/a6dfb33bd74e72e75d9a4844ec789bf60c3c75a4))
## 0.0.38 (2024-07-18)
### Bug Fixes
* trigger ci ([38a6676](https://codeberg.org/devthefuture/helm-charts/commit/38a66768ad86ab37ccf7c7f719c2e8f1a0f31f56))
## 0.0.37 (2024-07-18)
### Bug Fixes
* cicd ([200bee2](https://codeberg.org/devthefuture/helm-charts/commit/200bee21cb7d4749c5e5e6dadd35bd9936a018d6))
## 0.0.36 (2024-07-12)
### Features
* add keydb chart ([9b67090](https://codeberg.org/devthefuture/helm-charts/commit/9b67090f9d25142722a442161848c8e0e05f31d7))
## 0.0.35 (2024-07-04)
### Bug Fixes
* trigger ci ([d1ef35b](https://codeberg.org/devthefuture/helm-charts/commit/d1ef35b12bf51d9f1182e14f5a24bed1c3bcb2c9))
## 0.0.34 (2024-07-04)
### Bug Fixes
* trigger ci ([670ae5f](https://codeberg.org/devthefuture/helm-charts/commit/670ae5f4c2d87871be7f7df518b6d11054118559))
## 0.0.33 (2024-07-04)
## 0.0.32 (2024-06-29)
### Bug Fixes
* probes lightship + improvments ([5a88ca8](https://codeberg.org/devthefuture/helm-charts/commit/5a88ca81f9652f26c7f3989ca0abd136e3bddf7b))
## 0.0.31 (2024-06-29)
### Bug Fixes
* wip ([2cca472](https://codeberg.org/devthefuture/helm-charts/commit/2cca4729943eb2b009971edfafa03642bc463ad7))
## 0.0.30 (2024-06-29)
### Bug Fixes
* maildev ([5478ce7](https://codeberg.org/devthefuture/helm-charts/commit/5478ce77b9ccb6fac462d6ef4f306837191d925f))
## 0.0.29 (2024-06-29)
### Features
* maildev ([7a607b9](https://codeberg.org/devthefuture/helm-charts/commit/7a607b95f2686933c4c70de9ad0e4dcb67e7c761))
## 0.0.28 (2024-06-24)
### Bug Fixes
* argo diff on rollout ([c560465](https://codeberg.org/devthefuture/helm-charts/commit/c56046583e0ab17a61d21b0583a3a20242f4ba67))
## 0.0.27 (2024-06-23)
### Bug Fixes
* tpl extraEnv + envMap ([d5a0b47](https://codeberg.org/devthefuture/helm-charts/commit/d5a0b47ce5e8c547522146936ec3a2b870d72468))
## 0.0.26 (2023-12-18)
### Bug Fixes
* default secret name ([930a660](https://codeberg.org/devthefuture/helm-charts/commit/930a660631fd55911d92b0d25bef65256dfd627c))
## 0.0.25 (2023-12-18)
## 0.0.24 (2023-12-18)
### Bug Fixes
* default secret name ([b1d1364](https://codeberg.org/devthefuture/helm-charts/commit/b1d1364dea2fffae129fbad662fb49086b777bf7))
## 0.0.23 (2023-12-17)
### Bug Fixes
* default secret name ([3807d19](https://codeberg.org/devthefuture/helm-charts/commit/3807d19885add56353f4e32214d2a83fc604fc3e))
## 0.0.22 (2023-12-17)
### Bug Fixes
* mini default key ([0eee058](https://codeberg.org/devthefuture/helm-charts/commit/0eee058781926a6cda22f97fa582d6581e652160))
## 0.0.21 (2023-12-17)
### Bug Fixes
* terminology ([c9bd984](https://codeberg.org/devthefuture/helm-charts/commit/c9bd984d4d725f58c806f3e4e92d35d9f92b78e7))
## 0.0.20 (2023-12-17)
### Bug Fixes
* consistency .Values.rollout.enabled ([a31d897](https://codeberg.org/devthefuture/helm-charts/commit/a31d897ce56d24feaee0f72ca4e88749277e747b))
## 0.0.19 (2023-12-17)
### Features
* kind deployment ([ba62fd7](https://codeberg.org/devthefuture/helm-charts/commit/ba62fd730a96c9905b287aa55af643290412b9d7))
## 0.0.18 (2023-12-16)
### Bug Fixes
* exposed ([0ca9b46](https://codeberg.org/devthefuture/helm-charts/commit/0ca9b4662572d1a710912f7ca6737394489f0508))
## 0.0.17 (2023-12-16)
### Bug Fixes
* exposed ([9aaf012](https://codeberg.org/devthefuture/helm-charts/commit/9aaf012e4edf3bd88fd27fab4ef2fc99eb80c568))
## 0.0.16 (2023-12-16)
### Features
* **modjo-microservice:** optional svc ([1d9a211](https://codeberg.org/devthefuture/helm-charts/commit/1d9a2115c8457f7f8f8ddb1b782ca1de4ec02420))
## 0.0.15 (2023-12-16)
### Features
* **modjo-microservice:** extraVolumes ([3014f5c](https://codeberg.org/devthefuture/helm-charts/commit/3014f5c3f2f4c1d471debb5513c804224dbf72fb))
## 0.0.14 (2023-12-16)
### Bug Fixes
* port cast type ([c3ceb38](https://codeberg.org/devthefuture/helm-charts/commit/c3ceb3861f1669a1c5676bed1099080bdd1d3bb6))
## 0.0.13 (2023-12-16)
### Features
* **modjo-microservice:** minio ([4cda51e](https://codeberg.org/devthefuture/helm-charts/commit/4cda51e07d83f9489b0dce036437605631c6cd52))
## 0.0.12 (2023-12-16)
### Bug Fixes
* url ([5eed44b](https://codeberg.org/devthefuture/helm-charts/commit/5eed44b75016bdcd06e3d115d29ce51a5caafc95))
## 0.0.11 (2023-12-16)
## 0.0.10 (2023-12-16)
## 0.0.9 (2023-12-16)

View file

@ -1,5 +1 @@
# DevTheFuture Helm Charts Registry
```sh
helm repo add devthefuture https://devthefuture.codeberg.page/helm-charts
```
# DevTheFuture Helm Charts Registry

View file

@ -1,6 +0,0 @@
apiVersion: v2
name: cnpg-cluster
description: A Helm chart to create cloudnative-pg.io clusters
type: application
version: 0.0.43
appVersion: '15'

View file

@ -1,8 +0,0 @@
# cnpg-cluster
A Helm chart to create cloudnative-pg.io clusters
originally based on [enix's cnpg-cluster helm chart](https://github.com/enix/helm-charts/tree/master/charts/cnpg-cluster)
then on https://socialgouv.github.io/helm-charts

View file

@ -1,68 +0,0 @@
{{/*
Expand the name of the chart.
*/}}
{{- define "cnpg-cluster.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "cnpg-cluster.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- $name := default .Chart.Name .Values.nameOverride }}
{{- if contains $name .Release.Name }}
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{- end }}
{{- end }}
{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "cnpg-cluster.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Common labels
*/}}
{{- define "cnpg-cluster.labels" -}}
helm.sh/chart: {{ include "cnpg-cluster.chart" . }}
{{ include "cnpg-cluster.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end }}
{{/*
Common annotations
*/}}
{{- define "cnpg-cluster.annotations" -}}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- if .Values.annotations }}
{{ toYaml .Values.annotations}}
{{- end }}
{{- end }}
{{/*
Selector labels
*/}}
{{- define "cnpg-cluster.selectorLabels" -}}
app.kubernetes.io/name: {{ include "cnpg-cluster.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}
{{/*
Backup secret name
*/}}
{{- define "cnpg-cluster.backupSecretName" -}}
{{ or .Values.backup.secretName (print (include "cnpg-cluster.fullname" .) `-backup`) }}
{{- end }}

View file

@ -1,166 +0,0 @@
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
name: {{ include "cnpg-cluster.fullname" . }}
labels:
{{- include "cnpg-cluster.labels" . | nindent 4 }}
annotations:
{{- include "cnpg-cluster.annotations" . | nindent 4 }}
spec:
logLevel: {{ .Values.logLevel }}
instances: {{ .Values.instances }}
{{- if .Values.image.repository }}
imageName: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
{{- end }}
imagePullPolicy: {{ .Values.image.pullPolicy }}
{{- if or .Values.imagePullSecrets .Values.registryCredentials }}
imagePullSecrets:
{{- with .Values.imagePullSecrets }}
{{- toYaml . | nindent 8 }}
{{- end }}
{{- range $name, $settings := .Values.registryCredentials }}
- name: "{{ include "cnpg-cluster.fullname" $ }}-{{ $name }}"
{{- end }}
{{- end }}
{{- with .Values.resources }}
resources:
{{- toYaml . | nindent 4 }}
{{- end }}
{{- if or .Values.nodeSelector .Values.tolerations .Values.extraAffinity }}
affinity:
{{- with .Values.nodeSelector }}
nodeSelector:
{{- toYaml . | nindent 6 }}
{{- end }}
{{- with .Values.tolerations }}
tolerations:
{{- toYaml . | nindent 6 }}
{{- end }}
{{- with .Values.extraAffinity }}
{{- toYaml . | nindent 4 }}
{{- end }}
{{- end }}
storage:
size: {{ .Values.persistence.size | quote }}
{{- with .Values.persistence.resizeInUseVolumes }}
resizeInUseVolumes: {{ . | quote }}
{{- end }}
{{- if .Values.persistence.storageClass }}
{{- if (eq "-" .Values.persistence.storageClass) }}
storageClass: ""
{{- else }}
storageClass: "{{ .Values.persistence.storageClass }}"
{{- end }}
{{- end }}
{{- with .Values.persistence.pvcTemplate }}
pvcTemplate:
{{- toYaml . | nindent 6 }}
{{- end }}
{{- if .Values.backup.enabled }}
backup:
retentionPolicy: "{{ .Values.backup.retentionPolicy }}"
barmanObjectStore:
{{- toYaml .Values.backup.barmanObjectStore | nindent 6 }}
{{- end }}
minSyncReplicas: {{ .Values.minSyncReplicas }}
maxSyncReplicas: {{ .Values.maxSyncReplicas }}
postgresql:
pg_hba:
{{- with .Values.pg_hba }}
{{- toYaml . | nindent 8 }}
{{- end }}
parameters:
{{- with .Values.postgresqlParameters }}
{{- toYaml . | nindent 8 }}
{{- end }}
shared_preload_libraries:
{{- with .Values.sharedPreloadLibraries }}
{{- toYaml . | nindent 8 }}
{{- end }}
monitoring:
enablePodMonitor: {{ .Values.monitoring.enablePodMonitor }}
{{ if .Values.superuserSecretName }}
superuserSecret:
name: {{ .Values.superuserSecretName }}
{{ end}}
{{- if .Values.replica.enabled }}
replica:
enabled: true
source: {{ .Values.replica.source }}
{{- end }}
{{- if .Values.priorityClassName }}
priorityClassName: {{ .Values.priorityClassName }}
{{- end }}
bootstrap:
{{- if .Values.recovery.enabled }}
recovery:
source: {{ .Values.recovery.externalClusterName | default "recovery-cluster" }}
{{ if .Values.recovery.database }}
database: {{ .Values.recovery.database }}
{{- end }}
{{ if .Values.recovery.owner }}
owner: {{ .Values.recovery.owner }}
{{- end }}
{{ if .Values.recovery.secretName }}
secret:
name: {{ .Values.recovery.secretName }}
{{ end }}
{{- if .Values.recovery.targetTime }}
recoveryTarget:
targetTime: "{{ .Values.recovery.targetTime }}"
{{- end }}
{{- else if (and .Values.pg_basebackup.enabled .Values.pg_basebackup.source) }}
pg_basebackup:
source: {{ .Values.pg_basebackup.source }}
{{- else }}
initdb:
database: {{ .Values.dbName }}
owner: {{ .Values.dbOwner }}
{{ if .Values.dbSecretName }}
secret:
name: {{ .Values.dbSecretName }}
{{ end }}
# postgis configuration plugins
postInitTemplateSQL:
{{- range $cmd := .Values.postgresqlInitCommandsBeforeExtensions }}
- {{ $cmd | quote }}
{{- end }}
{{- range $name := .Values.extensions }}
- CREATE EXTENSION IF NOT EXISTS "{{ $name }}";
{{- end }}
{{- range $cmd := .Values.postgresqlInitCommands }}
- {{ $cmd | quote }}
{{- end }}
{{ if .Values.postInitApplicationSQL }}
postInitApplicationSQL:
{{- toYaml .Values.postInitApplicationSQL | nindent 8 }}
{{ end }}
{{ if .Values.postInitApplicationSQLRefs }}
postInitApplicationSQLRefs:
{{- toYaml .Values.postInitApplicationSQLRefs | nindent 8 }}
{{ end }}
{{- end }}
externalClusters:
{{- if .Values.recovery.enabled }}
- name: {{ .Values.recovery.externalClusterName | default "recovery-cluster" }}
barmanObjectStore:
{{- toYaml .Values.recovery.barmanObjectStore | nindent 8 }}
{{- end }}
{{- if .Values.externalClusters }}
{{- toYaml .Values.externalClusters | nindent 4 }}
{{- end }}
{{- with .Values.clusterExtraSpec }}
{{- toYaml . | nindent 2 }}
{{- end }}

View file

@ -1,16 +0,0 @@
{{- range $name, $spec := .Values.poolers }}
---
apiVersion: postgresql.cnpg.io/v1
kind: Pooler
metadata:
name: {{ include "cnpg-cluster.fullname" $ }}-{{ $name }}
labels:
{{- include "cnpg-cluster.labels" $ | nindent 4 }}
cnpg.io/poolerName: {{ include "cnpg-cluster.fullname" $ }}-{{ $name }}
spec:
cluster:
name: {{ include "cnpg-cluster.fullname" $ }}
{{- toYaml $spec | nindent 2 }}
monitoring:
enablePodMonitor: {{ $.Values.monitoring.enablePodMonitor }}
{{- end }}

View file

@ -1,12 +0,0 @@
{{- range $name, $settings := .Values.registryCredentials }}
apiVersion: v1
kind: Secret
metadata:
name: {{ include "cnpg-cluster.fullname" $ }}-{{ $name }}
labels:
{{- include "cnpg-cluster.labels" $ | nindent 4 }}
type: kubernetes.io/dockerconfigjson
data:
.dockerconfigjson: "{{- printf "{\"auths\":{\"%s\":{\"username\":\"%s\",\"password\":\"%s\",\"email\":\"%s\",\"auth\":\"%s\"}}}" $settings.registry $settings.username $settings.password $settings.email (printf "%s:%s" $settings.username $settings.password | b64enc) | b64enc }}"
---
{{- end }}

View file

@ -1,14 +0,0 @@
{{- if .Values.backup.enabled }}
apiVersion: postgresql.cnpg.io/v1
kind: ScheduledBackup
metadata:
name: {{ include "cnpg-cluster.fullname" $ }}-scheduledbackup
labels:
{{- include "cnpg-cluster.labels" $ | nindent 4 }}
spec:
backupOwnerReference: self
cluster:
name: {{ include "cnpg-cluster.fullname" $ }}
schedule: "{{ .Values.backup.schedule }}"
immediate: {{ .Values.backup.immediate }}
{{- end }}

View file

@ -1,239 +0,0 @@
# yaml-language-server: $schema=./values.schema.json
# Default values for cnpg-cluster.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
# @param {number} [instances] Number of Postgres instances in the cluster
instances: 1
# @param {string} [logLevel] The instances log level, one of the following values: error, warning, info (default), debug, trace
logLevel: info
# @param {object} [annotations] CNPG cluster annotations
annotations: {}
# @param {object} [image] Docker image for the PG instances
image:
# @param {string} [repository] CNPG compatible Postgres image. see https://github.com/cloudnative-pg/postgres-containers
repository: "ghcr.io/cloudnative-pg/postgis"
# @param {string} [pullPolicy] Docker image pull policy. see https://kubernetes.io/docs/concepts/containers/images#updating-images
pullPolicy: IfNotPresent
# @param {string} [tag] Docker image tag
tag: "15"
# @param {array} [imagePullSecrets] docker image pull secrets. see https://kubernetes.io/fr/docs/tasks/configure-pod-container/pull-image-private-registry/
imagePullSecrets: []
# @param {object,null} [registryCredentials]
registryCredentials:
# Eg:
# mygitlab:
# registry: gitlab-registry.example.org
# email: foo@example.org
# username: foobar
# password: secret
# @param {string} [nameOverride] String to partially override cnpg-cluster.fullname template with a string (will prepend the release name)
nameOverride: ""
# @param {string} [fullnameOverride] String to fully override cnpg-cluster.fullname template with a string
fullnameOverride: ""
# We usually recommend not to specify default resources and to leave this as a conscious
# choice for the user. This also increases chances charts run on environments with little
# resources, such as Minikube. If you do want to specify resources, uncomment the following
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
# @param {https://raw.githubusercontent.com/yannh/kubernetes-json-schema/master/v1.24.0/_definitions.json#/definitions/io.k8s.api.core.v1.ResourceRequirements} [resources] CPU/Memory resource requests/limits
resources:
{}
# limits:
# cpu: 100m
# memory: 128Mi
# requests:
# cpu: 100m
# memory: 128Mi
# @param {object} [nodeSelector] Postgres instances labels for pod assignment
nodeSelector: {}
# Name of the priority class which will be used in every generated Pod, if the PriorityClass specified does not exist, the pod will not be able to schedule. Please refer to https://kubernetes.io/docs/concepts/scheduling-eviction/pod-priority-preemption/#priorityclass for more information
# @param {string} [priorityClassName] Name of the priority class which will be used in every generated Pod
priorityClassName: ""
# @param {array} [tolerations] Postgres instances labels for tolerations pod assignment
tolerations: []
# @param {object} [extraAffinity] Extra configuration for Cluster's affinity resource, see: https://cloudnative-pg.io/documentation/1.17/api_reference/#AffinityConfiguration
extraAffinity: {}
# @param {object} [persistence] Data persistence configuration
persistence:
# @param {string} [size] Size of each instance storage volume
size: 8Gi
# @param {boolean,null} [resizeInUseVolumes] Resize existent PVCs, defaults to true
resizeInUseVolumes:
# Applied after evaluating the PVC template, if available.
# If not specified, generated PVCs will be satisfied by the default storage class
# @param {string} [storageClass] StorageClass to use for database data,
storageClass: ""
# @param {object} [pvcTemplate] Template to be used to generate the Persistent Volume Claim
pvcTemplate: {}
# @param {object} [backup] Backup configuration
backup:
# @param {boolean} [enabled] Enable backups
enabled: false
# this cron format has the seconds on the left
# @param {string} [schedule] Schedule the backups, for instance every day at midnight
schedule: "0 0 0 * * 0"
# The retention policy is expressed in the form of XXu where XX is a positive integer and
# u is in [dwm] - days, weeks, months.
# @param {string} [retentionPolicy] RetentionPolicy is the retention policy to be used for backups and WALs (i.e. '60d').
retentionPolicy: 30d
# @param {boolean} [enabled] If the first backup has to be immediately start after creation or not
immediate: true
# See: https://cloudnative-pg.io/documentation/1.20/backup_recovery/
# @param {object,null} [barmanObjectStore] Object store credentials and access config
barmanObjectStore:
# destinationPath:
# endpointURL:
# s3Credentials:
# accessKeyId:
# name:
# key:
# secretAccessKey:
# name:
# key:
# region:
# name:
# key:
# @param {object} [clusterExtraSpec] Extra configuration for Cluster resource. See: https://cloudnative-pg.io/documentation/1.17/api_reference/#clusterspec
clusterExtraSpec: {}
# @param {object} [scheduledBackups] ScheduledBackup resources to create for this Cluster resource. See: https://cloudnative-pg.io/documentation/1.17/api_reference/#ScheduledBackupSpec
scheduledBackups: {}
# Eg:
# daily:
# schedule: "0 0 0 * * *"
# @param {object} [poolers] Pooler resources to create for this Cluster resource. See: https://cloudnative-pg.io/documentation/1.17/api_reference/#PoolerSpec
poolers: {}
# Eg:
# rw:
# instances: 3
# type: rw
# pgbouncer:
# poolMode: session
# parameters:
# max_client_conn: "1000"
# default_pool_size: "10"
# @param {number} [minSyncReplicas] Minimum of synchronous replicas. see https://cloudnative-pg.io/documentation/current/replication/#synchronous-replication
minSyncReplicas: 0
# @param {number} [maxSyncReplicas] Maximum of synchronous replicas. see https://cloudnative-pg.io/documentation/current/replication/#synchronous-replication
maxSyncReplicas: 0
# @param {array} [pg_hba] pg_hba entries. See https://www.postgresql.org/docs/9.3/auth-pg-hba-conf.html
pg_hba: []
# Define your parameters on https://pgtune.leopard.in.ua
# @param {https://raw.githubusercontent.com/SocialGouv/json-schemas/main/postgres/parameters.json} [postgresqlParameters] PostgreSQL parameters. See https://www.postgresql.org/docs/9.3/auth-pg-hba-conf.html
postgresqlParameters: {}
# @param {array} [sharedPreloadLibraries] PostgreSQL shared preload libraries. See https://cloudnative-pg.io/documentation/current/cloudnative-pg.v1/#postgresql-cnpg-io-v1-PostgresConfiguration
sharedPreloadLibraries: {}
# @param {array} [externalClusters] define external clusters for recovery/replication see https://cloudnative-pg.io/documentation/current/api_reference/#externalcluster
externalClusters: []
# @param {object} [replica] Replica mode
replica:
# @param {boolean} [enabled] Enable replica mode
enabled: false
# @param {object} [pg_basebackup] Enable pg_basebackup on bootstrap, see https://cloudnative-pg.io/documentation/current/bootstrap/#bootstrap-from-a-live-cluster-pg_basebackup
pg_basebackup:
# @param {boolean} [enabled] Enable pg_basebackup bootstrap, see https://cloudnative-pg.io/documentation/current/bootstrap/#bootstrap-from-a-live-cluster-pg_basebackup
enabled: false
# @param {string,null} [source] externalCluster cluster name for the pg_basebackup
source:
# @param {https://raw.githubusercontent.com/SocialGouv/json-schemas/main/postgres/extensions.json} [extensions]
extensions: []
postgresqlInitCommandsBeforeExtensions: []
postgresqlInitCommands: []
# @param {string} [dbName] Name of the default database to create
dbName: app
# @param {string} [dbName] Name of the default user to create
dbOwner: app
# @param {object} [monitoring] Monitoring. see https://cloudnative-pg.io/documentation/current/monitoring/
monitoring:
# @param {boolean} [enablePodMonitor] Enable metrics monitoring. see https://cloudnative-pg.io/documentation/current/monitoring/
enablePodMonitor: false
# @param {string,null} [superuserSecretName] To force the super user secret name
superuserSecretName:
# @param {string,null} [dbSecretName] To force the DB secret name
dbSecretName:
# @param {object} [recovery] Recovery. see https://cloudnative-pg.io/documentation/current/backup_recovery/#recovery
recovery:
# @param {boolean} [enabled] Enable recovery
enabled: false
# Relative to Postgres server timezone
# @param {string} [targetTime] Time to restore from, in RFC3339 format https://datatracker.ietf.org/doc/html/rfc3339
targetTime: ""
# @param {string,null} [database] Database to restore to
database:
# @param {string,null} [owner] Database owner to restore to
owner:
# @param {string,null} [secretName] Secret where owner password is set
secretName:
# @param {string,null} [externalClusterName] Name for the external cluster to recover from
externalClusterName:
# See: https://cloudnative-pg.io/documentation/current/backup_recovery/
# @param {object,null} [barmanObjectStore] Object store credentials and access config
barmanObjectStore:
# destinationPath:
# endpointURL:
# name of the recovery server on the s3 backups
# serverName:
# s3Credentials:
# accessKeyId:
# name:
# key:
# secretAccessKey:
# name:
# key:
# region:
# name:
# key:
# @param {string[]} [postInitApplicationSQL] List of SQL queries to be executed as a superuser in the application database right after is created - to be used with extreme care (by default empty)
postInitApplicationSQL: []
# Points references to ConfigMaps or Secrets which contain SQL files, the general implementation order to these references is from all Secrets to all ConfigMaps, and inside Secrets or ConfigMaps, the implementation order is same as the order of each array (by default empty
# See https://cloudnative-pg.io/documentation/current/api_reference/#postinitapplicationsqlrefs
# @param {object,null} [postInitApplicationSQLRefs]
postInitApplicationSQLRefs:
# configMapRefs:
# - name: post-init-sql-configmap
# key: configmap.sql
# secretRefs:
# - name: post-init-sql-secret
# key: secret.sql

View file

@ -1,5 +0,0 @@
apiVersion: v2
name: keydb
description: A Helm chart for KeyDB multimaster setup
type: application
version: 0.0.43

View file

@ -1,134 +0,0 @@
# KeyDB
[KeyDB](https://keydb.dev) clocks in at 5X faster than Redis (node vs node). KeyDB is a popular drop in Redis alternative that people flock to because it enables you to consolidate a lot of the complexities associated with Redis. KeyDB is multithreaded with the ability to use several storage mediums natively and scale vertically. The superior architecture is enabling KeyDB to become the bridge between cache layer and traditional databases offering performance and durability.
## Introduction
This chart bootstraps a [KeyDB](https://keydb.dev) highly available multi-master statefulset in a [Kubernetes](http://kubernetes.io) cluster using the Helm package manager.
forked from https://github.com/Enapter/charts
### Config Example:
```
configExtraArgs:
- client-output-buffer-limit: ["normal", "0", "0", "0"]
- client-output-buffer-limit: ["replica", "268435456", "67108864", "60"]
- client-output-buffer-limit: ["pubsub", "33554432", "8388608", "60"]
- save: ~
- tcp-backlog "1024"
```
### Resulting File:
```
...
exec keydb-server /etc/keydb/redis.conf \
...
--client-output-buffer-limit "normal" "0" "0" "0" \
--client-output-buffer-limit "replica" "268435456" "67108864" "60" \
--client-output-buffer-limit "pubsub" "33554432" "8388608" "60" \
--save \
--tcp-backlog "1024" \
...
```
## Prerequisites
- PV provisioner support in the underlying infrastructure if you want to enable persistence
## Configuration
The following table lists the configurable parameters of the KeyDB chart and their default values.
| Parameter | Description | Default |
|:--------------------------------|:---------------------------------------------------|:------------------------------------------|
| `imageRepository` | KeyDB docker image | `eqalpha/keydb` |
| `imageTag` | KeyDB docker image tag | `x86_64_v6.3.2` |
| `imagePullPolicy` | K8s imagePullPolicy | `IfNotPresent` |
| `imagePullSecrets` | KeyDB Pod imagePullSecrets | `[]` |
| `nodes` | Number of KeyDB master pods | `3` |
| `password` | If enabled KeyDB servers are password-protected | `""` |
| `existingSecret` | If enabled password is taken from secret | `""` |
| `existingSecretPasswordKey` | Secret key name. | `"password"` |
| `port` | KeyDB service port clients connect to | `6379` |
| `portName` | KeyDB service port name in the Service spec | `server` |
| `threads` | KeyDB server-threads per node | `2` |
| `multiMaster` | KeyDB multi-master setup | `yes` |
| `activeReplicas` | KeyDB active replication setup | `yes` |
| `protectedMode` | KeyDB protection mode | `no` |
| `appendonly` | KeyDB appendonly setting | `no` |
| `configExtraArgs` | Additional configuration arguments for KeyDB | `[]` |
| `annotations` | KeyDB StatefulSet annotations | `{}` |
| `podAnnotations` | KeyDB pods annotations | `{}` |
| `tolerations` | KeyDB tolerations setting | `{}` |
| `nodeSelector` | KeyDB nodeSelector setting | `{}` |
| `topologySpreadConstraints` | KeyDB topologySpreadConstraints setting | `[]` |
| `affinity` | StatefulSet Affinity rules | Look values.yaml |
| `extraInitContainers` | Additional init containers for StatefulSet | `[]` |
| `extraContainers` | Additional sidecar containers for StatefulSet | `[]` |
| `extraVolumes` | Additional volumes for init and sidecar containers | `[]` |
| `livenessProbe.custom` | Custom LivenessProbe for KeyDB pods | `{}` |
| `readinessProbe.custom` | Custom ReadinessProbe for KeyDB pods | `{}` |
| `readinessProbeRandomUuid` | Random UUIDv4 for readiness GET probe | `90f717dd-0e68-43b8-9363-fddaad00d6c9` |
| `startupProbe.custom` | Custom StartupProbe for KeyDB pods | `{}` |
| `persistentVolume.enabled` | Should PVC be created via volumeClaimTemplates | `true` |
| `persistentVolume.accessModes` | Volume access modes | `[ReadWriteOnce]` |
| `persistentVolume.selector` | PVC selector. (In order to match existing PVs) | `{}` |
| `persistentVolume.size` | Size of the volume | `1Gi` |
| `persistentVolume.storageClass` | StorageClassName for volume | `` |
| `podDisruptionBudget` | podDisruptionBudget for KeyDB pods | Look values.yaml |
| `resources` | Resources for KeyDB containers | `{}` |
| `scripts.enabled` | Turn on health util scripts | `false` |
| `scripts.cleanupCoredumps` | Coredumps cleanup scripts | Look values.yaml |
| `scripts.cleanupTempfiles` | Tempfiles cleanup scripts | Look values.yaml |
| `scripts.securityContext` | SecurityContext for scripts container | `{}` |
| `keydb.securityContext` | SecurityContext for KeyDB container | `{}` |
| `securityContext` | SecurityContext for KeyDB pods | `{}` |
| `service.annotations` | Service annotations | `{}` |
| `service.appProtocol.enabled` | Turn on appProtocol fields in port specs | `false` |
| `loadBalancer.enabled` | Create LoadBalancer service | `false` |
| `loadBalancer.annotations` | Annotations for LB | `{}` |
| `loadBalancer.extraSpec` | Additional spec for LB | `{}` |
| `serviceAccount.enabled` | Use a dedicated ServiceAccount (SA) | `false` |
| `serviceAccount.create` | Create the SA (rather than use an existing one) | `true` |
| `serviceAccount.name` | Set the name of an existing SA or override created | `` |
| `serviceAccount.extraSpec` | Additional spec for the created SA | `{}` |
| `serviceMonitor.enabled` | Prometheus operator ServiceMonitor | `false` |
| `serviceMonitor.labels` | Additional labels for ServiceMonitor | `{}` |
| `serviceMonitor.annotations` | Additional annotations for ServiceMonitor | `{}` |
| `serviceMonitor.interval` | ServiceMonitor scrape interval | `30s` |
| `serviceMonitor.scrapeTimeout` | ServiceMonitor scrape timeout | `nil` |
| `exporter.enabled` | Prometheus Exporter sidecar contaner | `false` |
| `exporter.imageRepository` | Exporter Image | `oliver006/redis_exporter` |
| `exporter.imageTag` | Exporter Image Tag | `v1.48.0-alpine` |
| `exporter.pullPolicy` | Exporter imagePullPolicy | `IfNotPresent` |
| `exporter.port` | `prometheus.io/port` | `9121` |
| `exporter.portName` | Exporter service port name in the Service spec | `redis-exporter` |
| `exporter.scrapePath` | `prometheus.io/path` | `/metrics` |
| `exporter.livenessProbe` | LivenessProbe for sidecar Prometheus exporter | Look values.yaml |
| `exporter.readinessProbe` | ReadinessProbe for sidecar Prometheus exporter | Look values.yaml |
| `exporter.startupProbe` | StartupProbe for sidecar Prometheus exporter | Look values.yaml |
| `exporter.resources` | Resources for sidecar Prometheus container | `{}` |
| `exporter.securityContext` | SecurityContext for Prometheus exporter container | `{}` |
| `exporter.extraArgs` | Additional arguments for exporter | `[]` |
## Using existingSecret
When definining existingSecret (by default is "") password value is ignored. Password is taken from that secret, instead of being provided as plain text under values.yaml file. \
Secret key must be `existingSecretPasswordKey` (*password* by default). \
Example of of such secret:
```bash
kubectl create secret generic keydb-password --from-literal=password=KEYDB_PASSWORD
```
Definition of existingSecret in that case:
```yaml
password: ""
existingSecret: keydb-password
existingSecretPasswordKey: password-key-in-secret-file
```
It is important to use only one way of providing passwords: via plain text under values.yaml or using already existing secret.

View file

@ -1,68 +0,0 @@
{{/* vim: set filetype=mustache: */}}
{{/*
Expand the name of the chart.
*/}}
{{- define "keydb.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "keydb.fullname" -}}
{{- if .Values.fullnameOverride -}}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- $name := default .Chart.Name .Values.nameOverride -}}
{{- if contains $name .Release.Name -}}
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{- end -}}
{{- end -}}
{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "keydb.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{/*
Common labels
*/}}
{{- define "keydb.labels" -}}
helm.sh/chart: {{ include "keydb.chart" . }}
{{ include "keydb.selectorLabels" . }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end -}}
{{/*
Selector labels
*/}}
{{- define "keydb.selectorLabels" -}}
app.kubernetes.io/name: {{ include "keydb.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end -}}
{{/*
Create the name of the service account to use
*/}}
{{- define "keydb.serviceAccountName" -}}
{{- if .Values.serviceAccount.create -}}
{{ default (include "keydb.fullname" .) .Values.serviceAccount.name }}
{{- else -}}
{{ default "default" .Values.serviceAccount.name }}
{{- end -}}
{{- end -}}
{{- define "common.tplvalues.render" -}}
{{- if typeIs "string" .value }}
{{- tpl .value .context }}
{{- else }}
{{- tpl (.value | toYaml) .context }}
{{- end }}
{{- end -}}

View file

@ -1,80 +0,0 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ include "keydb.fullname" . }}-health
labels:
{{- include "keydb.labels" . | nindent 4 }}
data:
ping_readiness_local.sh: |-
#!/bin/bash
set -e
loading_response="LOADING KeyDB is loading the dataset in memory"
[[ -n "${REDIS_PASSWORD}" ]] && export REDISCLI_AUTH="${REDIS_PASSWORD}"
response="$(
timeout -s 15 "${1}" \
keydb-cli \
-h localhost \
-p "${REDIS_PORT}" \
GET {{ .Values.readinessProbeRandomUuid }}
)"
if [ "${response}" = "${loading_response}" ]; then
echo "${response}"
exit 1
fi
ping_liveness_local.sh: |-
#!/bin/bash
set -e
[[ -n "${REDIS_PASSWORD}" ]] && export REDISCLI_AUTH="${REDIS_PASSWORD}"
response="$(
timeout -s 15 "${1}" \
keydb-cli \
-h localhost \
-p "${REDIS_PORT}" \
PING
)"
if [ "${response}" != "PONG" ]; then
echo "${response}"
exit 1
fi
{{- if .Values.scripts.enabled }}
scripts_local.sh: |-
#!/bin/bash
set -e
script_dir="$(dirname "$0")"
while true; do
{{- if .Values.scripts.cleanupCoredumps.enabled }}
"${script_dir}/cleanup_coredumps.sh"
{{- end }}
{{- if .Values.scripts.cleanupTempfiles.enabled }}
"${script_dir}/cleanup_tempfiles.sh"
{{- end }}
sleep 60
done
{{- end }}
{{- if .Values.scripts.cleanupCoredumps.enabled }}
cleanup_coredumps.sh: |-
#!/bin/bash
set -e
find /data/ -type f -name "core.*" -mmin +{{ .Values.scripts.cleanupCoredumps.minutes }} -delete
{{- end }}
{{- if .Values.scripts.cleanupTempfiles.enabled }}
cleanup_tempfiles.sh: |-
#!/bin/bash
set -e
find /data/ -type f \( -name "temp-*.aof" -o -name "temp-*.rdb" \) -mmin +{{ .Values.scripts.cleanupTempfiles.minutes }} -delete
{{- end }}

View file

@ -1,18 +0,0 @@
{{- if .Values.podDisruptionBudget.enabled }}
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: {{ include "keydb.fullname" . }}
labels:
{{- include "keydb.labels" . | nindent 4 }}
spec:
{{- if .Values.podDisruptionBudget.maxUnavailable }}
maxUnavailable: {{ .Values.podDisruptionBudget.maxUnavailable }}
{{- end }}
{{- if .Values.podDisruptionBudget.minAvailable }}
minAvailable: {{ .Values.podDisruptionBudget.minAvailable }}
{{- end }}
selector:
matchLabels:
{{- include "keydb.selectorLabels" . | nindent 6 }}
{{- end }}

View file

@ -1,11 +0,0 @@
{{- if .Values.serviceAccount.enabled | and .Values.serviceAccount.create }}
apiVersion: v1
kind: ServiceAccount
metadata:
name: {{ include "keydb.serviceAccountName" . | quote }}
labels:
{{- include "keydb.labels" . | nindent 4 }}
{{- with .Values.serviceAccount.extraSpec }}
{{ toYaml . }}
{{- end }}
{{- end }}

View file

@ -1,46 +0,0 @@
apiVersion: v1
kind: Secret
metadata:
name: {{ include "keydb.fullname" . }}-utils
labels:
{{- include "keydb.labels" . | nindent 4 }}
type: Opaque
stringData:
server.sh: |
#!/bin/bash
set -euxo pipefail
host="$(hostname)"
replicas=()
for node in {0..{{ (sub (.Values.nodes | int) 1) }}}; do
if [ "${host}" != "{{ include "keydb.fullname" . }}-${node}" ]; then
replicas+=("--replicaof {{ include "keydb.fullname" . }}-${node}.{{ include "keydb.fullname" . }}-headless {{ .Values.port }}")
fi
done
exec keydb-server /etc/keydb/redis.conf \
--active-replica {{ .Values.activeReplicas | quote }} \
--multi-master {{ .Values.multiMaster | quote }} \
--appendonly {{ .Values.appendonly | quote }} \
--bind "0.0.0.0" \
--port "{{ .Values.internalPort }}" \
--protected-mode {{ .Values.protectedMode | quote }} \
--server-threads {{ .Values.threads | quote }} \
{{- if .Values.existingSecret }}
--masterauth "${REDIS_PASSWORD}" \
--requirepass "${REDIS_PASSWORD}" \
{{- else if .Values.password }}
--masterauth {{ .Values.password | quote }} \
--requirepass {{ .Values.password | quote }} \
{{- end }}
{{- range $item := .Values.configExtraArgs }}
{{- range $key, $value := $item }}
{{- if kindIs "invalid" $value }}
--{{ $key }} \
{{- else if kindIs "slice" $value }}
--{{ $key }}{{ range $value }} {{ . | quote }}{{ end }} \
{{- else }}
--{{ $key }} {{ $value | quote }} \
{{- end }}
{{- end }}
{{- end }}
"${replicas[@]}"

View file

@ -1,31 +0,0 @@
{{- if and .Values.exporter.enabled .Values.serviceMonitor.enabled }}
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: {{ include "keydb.fullname" . }}
labels:
{{- include "keydb.labels" . | nindent 4 }}
{{- if .Values.serviceMonitor.labels }}
{{- toYaml .Values.serviceMonitor.labels | nindent 4 }}
{{- end }}
{{- if .Values.serviceMonitor.annotations }}
annotations:
{{- toYaml .Values.serviceMonitor.annotations | nindent 4 }}
{{- end }}
spec:
selector:
matchLabels:
{{- include "keydb.labels" . | nindent 6 }}
namespaceSelector:
matchNames:
- {{.Release.Namespace }}
endpoints:
- port: redis-exporter
path: {{ .Values.exporter.scrapePath }}
{{- if .Values.serviceMonitor.interval }}
interval: {{ .Values.serviceMonitor.interval }}
{{- end }}
{{- if .Values.serviceMonitor.scrapeTimeout }}
scrapeTimeout: {{ .Values.serviceMonitor.scrapeTimeout }}
{{- end }}
{{- end }}

View file

@ -1,311 +0,0 @@
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: {{ include "keydb.fullname" . }}
{{- if .Values.annotations }}
annotations:
{{- toYaml .Values.annotations | nindent 4 }}
{{- end }}
labels:
{{- include "keydb.labels" . | nindent 4 }}
spec:
replicas: {{ .Values.nodes }}
serviceName: {{ include "keydb.fullname" . }}-headless
selector:
matchLabels:
{{- include "keydb.selectorLabels" . | nindent 6 }}
template:
metadata:
annotations:
checksum/secret-utils: {{ include (print $.Template.BasePath "/secret-utils.yaml") . | sha256sum }}
{{- if .Values.exporter.enabled }}
prometheus.io/scrape: "true"
prometheus.io/path: "{{ .Values.exporter.scrapePath }}"
prometheus.io/port: "{{ .Values.exporter.port }}"
{{- end }}
{{- if .Values.podAnnotations }}
{{- toYaml .Values.podAnnotations | nindent 8 }}
{{- end }}
labels:
{{- include "keydb.labels" . | nindent 8 }}
spec:
affinity:
{{- include "common.tplvalues.render" (dict "value" .Values.affinity "context" $) | nindent 8 }}
{{- if .Values.extraInitContainers }}
initContainers:
{{- toYaml .Values.extraInitContainers | nindent 6 }}
{{- end }}
containers:
- name: keydb
{{- if .Values.image }}
image: {{ .Values.image }}
{{- else }}
image: {{ .Values.imageRepository }}:{{ .Values.imageTag }}
{{- end }}
imagePullPolicy: {{ .Values.imagePullPolicy }}
command:
- /utils/server.sh
env:
- name: REDIS_PORT
value: {{ .Values.internalPort | quote }}
{{- if .Values.existingSecret }}
- name: REDIS_PASSWORD
valueFrom:
secretKeyRef:
name: {{ .Values.existingSecret }}
key: {{ .Values.existingSecretPasswordKey }}
{{- else if .Values.password }}
- name: REDIS_PASSWORD
value: "{{ .Values.password }}"
{{- end }}
ports:
- name: {{ .Values.internalPortName }}
containerPort: {{ .Values.internalPort | int }}
protocol: TCP
{{- if .Values.livenessProbe.enabled }}
livenessProbe:
{{- if .Values.livenessProbe.custom }}
{{- toYaml .Values.livenessProbe.custom | nindent 10 }}
{{- else }}
initialDelaySeconds: {{ .Values.livenessProbe.initialDelaySeconds }}
periodSeconds: {{ .Values.livenessProbe.periodSeconds }}
# One second longer than command timeout should prevent generation of zombie processes.
timeoutSeconds: {{ add1 .Values.livenessProbe.timeoutSeconds }}
successThreshold: {{ .Values.livenessProbe.successThreshold }}
failureThreshold: {{ .Values.livenessProbe.failureThreshold }}
exec:
command:
- sh
- -c
- /health/ping_liveness_local.sh {{ .Values.livenessProbe.timeoutSeconds }}
{{- end }}
{{- end }}
{{- if .Values.readinessProbe.enabled }}
readinessProbe:
{{- if .Values.readinessProbe.custom }}
{{- toYaml .Values.readinessProbe.custom | nindent 10 }}
{{- else }}
initialDelaySeconds: {{ .Values.readinessProbe.initialDelaySeconds }}
periodSeconds: {{ .Values.readinessProbe.periodSeconds }}
# One second longer than command timeout should prevent generation of zombie processes.
timeoutSeconds: {{ add1 .Values.readinessProbe.timeoutSeconds }}
successThreshold: {{ .Values.readinessProbe.successThreshold }}
failureThreshold: {{ .Values.readinessProbe.failureThreshold }}
exec:
command:
- sh
- -c
- /health/ping_readiness_local.sh {{ .Values.readinessProbe.timeoutSeconds }}
{{- end }}
{{- end }}
{{- if .Values.startupProbe.enabled }}
startupProbe:
{{- if .Values.startupProbe.custom }}
{{- toYaml .Values.startupProbe.custom | nindent 10 }}
{{- else }}
periodSeconds: {{ .Values.startupProbe.periodSeconds }}
# One second longer than command timeout should prevent generation of zombie processes.
timeoutSeconds: {{ add1 .Values.startupProbe.timeoutSeconds }}
failureThreshold: {{ .Values.startupProbe.failureThreshold }}
exec:
command:
- sh
- -c
- /health/ping_readiness_local.sh {{ .Values.startupProbe.timeoutSeconds }}
{{- end }}
{{- end }}
{{- if .Values.lifecycle }}
lifecycle:
{{- toYaml .Values.lifecycle | nindent 10 }}
{{- end }}
resources:
{{- toYaml .Values.resources | nindent 10 }}
securityContext:
{{- toYaml .Values.keydb.securityContext | nindent 10 }}
volumeMounts:
- name: health
mountPath: /health
- name: keydb-data
mountPath: /data
- name: utils
mountPath: /utils
readOnly: true
{{- if .Values.exporter.enabled }}
- name: redis-exporter
{{- if .Values.exporter.image }}
image: {{ .Values.exporter.image }}
{{- else }}
image: {{ .Values.exporter.imageRepository }}:{{ .Values.exporter.imageTag }}
{{- end }}
imagePullPolicy: {{ .Values.exporter.pullPolicy }}
args:
{{- range $item := .Values.exporter.extraArgs }}
{{- range $key, $value := $item }}
{{- if kindIs "invalid" $value }}
- --{{ $key }}
{{- else if kindIs "slice" $value }}
- --{{ $key }}
{{- range $value }}
- {{ . | quote }}
{{- end }}
{{- else }}
- --{{ $key }}
- {{ $value | quote }}
{{- end }}
{{- end }}
{{- end }}
env:
- name: REDIS_EXPORTER_WEB_LISTEN_ADDRESS
value: "0.0.0.0:{{ .Values.exporter.port }}"
- name: REDIS_EXPORTER_WEB_TELEMETRY_PATH
value: {{ .Values.exporter.scrapePath | quote }}
- name: REDIS_ADDR
value: "redis://localhost:{{ .Values.internalPort }}"
{{- if .Values.existingSecret }}
- name: REDIS_PASSWORD
valueFrom:
secretKeyRef:
name: {{ .Values.existingSecret }}
key: {{ .Values.existingSecretPasswordKey }}
{{- else if .Values.password }}
- name: REDIS_PASSWORD
value: "{{ .Values.password }}"
{{- end }}
{{- if .Values.exporter.livenessProbe }}
livenessProbe:
{{- toYaml .Values.exporter.livenessProbe | nindent 10 }}
{{- end }}
{{- if .Values.exporter.readinessProbe }}
readinessProbe:
{{- toYaml .Values.exporter.readinessProbe | nindent 10 }}
{{- end }}
{{- if .Values.exporter.startupProbe }}
startupProbe:
{{- toYaml .Values.exporter.startupProbe | nindent 10 }}
{{- end }}
resources:
{{- toYaml .Values.exporter.resources | nindent 10 }}
securityContext:
{{- toYaml .Values.exporter.securityContext | nindent 10 }}
ports:
- name: {{ .Values.exporter.portName | quote }}
containerPort: {{ .Values.exporter.port }}
protocol: TCP
{{- end }}
{{- if .Values.scripts.enabled }}
- name: scripts
{{- if .Values.image }}
image: {{ .Values.image }}
{{- else }}
image: {{ .Values.imageRepository }}:{{ .Values.imageTag }}
{{- end }}
imagePullPolicy: {{ .Values.imagePullPolicy }}
command:
- /health/scripts_local.sh
env:
- name: REDIS_PORT
value: {{ .Values.internalPort | quote }}
{{- if .Values.existingSecret }}
- name: REDIS_PASSWORD
valueFrom:
secretKeyRef:
name: {{ .Values.existingSecret }}
key: {{ .Values.existingSecretPasswordKey }}
{{- else if .Values.password }}
- name: REDIS_PASSWORD
value: "{{ .Values.password }}"
{{- end }}
resources:
{{- toYaml .Values.scripts.resources | nindent 10 }}
securityContext:
{{- toYaml .Values.scripts.securityContext | nindent 10 }}
volumeMounts:
- name: health
mountPath: /health
- name: keydb-data
mountPath: /data
{{- end }}
{{- if .Values.extraContainers }}
{{- toYaml .Values.extraContainers | nindent 6 }}
{{- end }}
imagePullSecrets:
{{- toYaml .Values.imagePullSecrets | nindent 8 }}
securityContext:
{{- toYaml .Values.securityContext | nindent 8 }}
{{- if .Values.serviceAccount.enabled }}
serviceAccountName: {{ include "keydb.serviceAccountName" . | quote }}
{{- end }}
{{- if .Values.tolerations }}
tolerations:
{{- toYaml .Values.tolerations | nindent 8 }}
{{- end }}
{{- if .Values.nodeSelector }}
nodeSelector:
{{- toYaml .Values.nodeSelector | nindent 8 }}
{{- end }}
{{- if .Values.topologySpreadConstraints }}
topologySpreadConstraints:
{{- range .Values.topologySpreadConstraints }}
- labelSelector:
matchLabels:
{{- include "keydb.selectorLabels" $ | nindent 14 }}
topologyKey: {{ default "topology.kubernetes.io/zone" .topologyKey }}
maxSkew: {{ .maxSkew }}
{{- if .minDomains }}
minDomains: {{ .minDomains }}
{{- end }}
whenUnsatisfiable: {{ default "DoNotSchedule" .whenUnsatisfiable }}
{{- if .nodeAffinityPolicy }}
nodeAffinityPolicy: {{ .nodeAffinityPolicy }}
{{- end }}
{{- if .nodeTaintsPolicy }}
nodeTaintsPolicy: {{ .nodeTaintsPolicy }}
{{- end }}
{{- end }}
{{- end }}
volumes:
- name: health
configMap:
name: {{ include "keydb.fullname" . }}-health
defaultMode: 0755
- name: utils
secret:
secretName: {{ include "keydb.fullname" . }}-utils
defaultMode: 0755
items:
- key: server.sh
path: server.sh
{{- if not .Values.persistentVolume.enabled }}
- name: keydb-data
emptyDir: {{- toYaml .Values.persistentVolume.emptyDir | nindent 10 }}
{{- end }}
{{- if .Values.extraVolumes }}
{{- toYaml .Values.extraVolumes | nindent 6 }}
{{- end }}
{{- if .Values.persistentVolume.enabled }}
volumeClaimTemplates:
- metadata:
name: keydb-data
annotations:
{{- if .Values.persistentVolume.annotations }}
{{- toYaml .Values.persistentVolume.annotations | nindent 8 }}
{{- end }}
labels:
spec:
accessModes:
{{- toYaml .Values.persistentVolume.accessModes | nindent 8 }}
resources:
requests:
storage: {{ .Values.persistentVolume.size }}
{{- if .Values.persistentVolume.storageClass }}
{{- if (eq "-" .Values.persistentVolume.storageClass) }}
storageClassName: ""
{{ else }}
storageClassName: {{ .Values.persistentVolume.storageClass }}
{{- end }}
{{- end }}
{{- if .Values.persistentVolume.selector }}
selector:
{{- toYaml .Values.persistentVolume.selector | nindent 8 }}
{{- end }}
{{- end }}

View file

@ -1,22 +0,0 @@
# Headless service
apiVersion: v1
kind: Service
metadata:
name: {{ include "keydb.fullname" . }}-headless
labels:
{{- include "keydb.labels" . | nindent 4 }}
annotations:
{{- toYaml .Values.service.annotations | nindent 4 }}
spec:
type: ClusterIP
clusterIP: None
ports:
- name: {{ .Values.portName | quote }}
port: {{ .Values.port | int }}
protocol: TCP
targetPort: {{ .Values.internalPortName | quote }}
{{- if .Values.service.appProtocol.enabled }}
appProtocol: redis
{{- end }}
selector:
{{- include "keydb.selectorLabels" . | nindent 4 }}

View file

@ -1,26 +0,0 @@
{{- if .Values.loadBalancer.enabled }}
# Load balancer service
apiVersion: v1
kind: Service
metadata:
name: {{ include "keydb.fullname" . }}-lb
labels:
{{- include "keydb.labels" . | nindent 4 }}
annotations:
{{- toYaml .Values.loadBalancer.annotations | nindent 4 }}
spec:
type: LoadBalancer
{{- if .Values.loadBalancer.extraSpec }}
{{- toYaml .Values.loadBalancer.extraSpec | nindent 2 }}
{{- end }}
ports:
- name: {{ .Values.portName | quote }}
port: {{ .Values.port | int }}
protocol: TCP
targetPort: {{ .Values.internalPortName | quote }}
{{- if .Values.service.appProtocol.enabled }}
appProtocol: redis
{{- end }}
selector:
{{- include "keydb.selectorLabels" . | nindent 4 }}
{{- end }}

View file

@ -1,28 +0,0 @@
apiVersion: v1
kind: Service
metadata:
name: {{ include "keydb.fullname" . }}
labels:
{{- include "keydb.labels" . | nindent 4 }}
annotations:
{{- toYaml .Values.service.annotations | nindent 4 }}
spec:
type: ClusterIP
ports:
- name: {{ .Values.portName | quote }}
port: {{ .Values.port | int }}
protocol: TCP
targetPort: {{ .Values.internalPortName | quote }}
{{- if .Values.service.appProtocol.enabled }}
appProtocol: redis
{{- end }}
- name: {{ .Values.exporter.portName | quote }}
port: {{ .Values.exporter.port | int }}
protocol: TCP
targetPort: {{ .Values.exporter.portName | quote }}
{{- if .Values.service.appProtocol.enabled }}
appProtocol: http
{{- end }}
selector:
{{- include "keydb.selectorLabels" . | nindent 4 }}
sessionAffinity: ClientIP

View file

@ -1,279 +0,0 @@
nameOverride: ""
fullnameOverride: ""
imageRepository: eqalpha/keydb
imageTag: x86_64_v6.3.4
imagePullPolicy: IfNotPresent
imagePullSecrets: []
nodes: 3
password: ""
existingSecret: ""
existingSecretPasswordKey: "password"
port: 6379
portName: server
internalPort: 6379
internalPortName: keydb
threads: 2
multiMaster: "yes"
activeReplicas: "yes"
protectedMode: "no"
appendonly: "no"
annotations: {}
configExtraArgs: []
# - somesimple: "argument"
# - client-output-buffer-limit: ["normal", "0", "0", "0"]
# - client-output-buffer-limit: ["replica", "268435456", "67108864", "60"]
# - client-output-buffer-limit: ["pubsub", "33554432", "8388608", "60"]
podAnnotations: {}
tolerations: {}
# - effect: NoSchedule
# key: key
# operator: Equal
# value: value
nodeSelector: {}
# topology.kubernetes.io/region: some-region
topologySpreadConstraints: []
# - maxSkew: 1
# ## Optional keys
# # whenUnsatisfiable: DoNotSchedule
# # topologyKey: "topology.kubernetes.io/zone"
# # minDomains: 1
# # nodeAffinityPolicy: Honor
# # nodeTaintsPolicy: Honor
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app.kubernetes.io/name
operator: In
values:
- '{{ include "keydb.name" . }}'
- key: app.kubernetes.io/instance
operator: In
values:
- '{{ .Release.Name }}'
topologyKey: "kubernetes.io/hostname"
additionalAffinities: {}
# nodeAffinity:
# requiredDuringSchedulingIgnoredDuringExecution:
# nodeSelectorTerms:
# - matchExpressions:
# - key: node_pool
# operator: In
# values: somenodepool
podDisruptionBudget:
enabled: true
maxUnavailable: 1
# Additional init containers
extraInitContainers: []
# Additional sidecar containers
extraContainers: []
# - name: backup
# image: minio/mc:latest
# Volumes that can be used in init and sidecar containers
extraVolumes: []
# - name: volume-from-secret
# secret:
# secretName: secret-to-mount
# - name: empty-dir-volume
# emptyDir: {}
# Liveness Probe
livenessProbe:
enabled: true
custom: {}
# tcpSocket:
# port: keydb
# initialDelaySeconds: 30
initialDelaySeconds: 20
periodSeconds: 5
timeoutSeconds: 5
successThreshold: 1
failureThreshold: 5
# Readiness Probe
readinessProbe:
enabled: true
custom: {}
# tcpSocket:
# port: keydb
# initialDelaySeconds: 30
initialDelaySeconds: 20
periodSeconds: 5
timeoutSeconds: 1
successThreshold: 1
failureThreshold: 5
# Random UUID for readiness GET probe
readinessProbeRandomUuid: "90f717dd-0e68-43b8-9363-fddaad00d6c9"
# Startup Probe
startupProbe:
enabled: true
custom: {}
# tcpSocket:
# port: keydb
periodSeconds: 5
timeoutSeconds: 1
failureThreshold: 24
# Lifecycle Hooks
lifecycle: {}
# preStop:
# exec:
# command:
# - sh
# - -c
# - "sleep 15; kill 1"
persistentVolume:
enabled: true
accessModes:
- ReadWriteOnce
selector: {}
# matchLabels:
# release: "stable"
# matchExpressions:
# - {key: environment, operator: In, values: [dev]}
size: 1Gi
## If defined, storageClassName: <storageClass>
## If set to "-", storageClassName: "", which disables dynamic provisioning
## If undefined (the default) or set to null, no storageClassName spec is
## set, choosing the default provisioner. (gp2 on AWS, standard on
## GKE, AWS & OpenStack)
##
# storageClass: "-"
# If persistentVolume is disable, use this to configure the empty dir
emptyDir: {}
resources: {}
# Please read https://kubernetes.io/docs/tasks/administer-cluster/sysctl-cluster/#enabling-unsafe-sysctls
# before sysctls setup
securityContext: {}
# sysctls:
# - name: net.core.somaxconn
# value: "512"
# - name: vm.overcommit_memory
# value: "1"
keydb:
# Container security context
securityContext: {}
service:
annotations: {}
appProtocol:
enabled: false
serviceAccount:
enabled: false
create: true
name: ""
# extraSpec:
# automountServiceAccountToken: false
# imagePullSecrets:
# - name: pull-secret
extraSpec: {}
loadBalancer:
enabled: false
# annotations:
# service.beta.kubernetes.io/aws-load-balancer-type: nlb
annotations: {}
# extraSpec:
# loadBalancerIP: "1.2.3.4"
# loadBalancerSourceRanges:
# - 1.2.3.4/32
extraSpec: {}
# Prometheus-operator ServiceMonitor
serviceMonitor:
# Redis exporter must also be enabled
enabled: false
labels:
annotations:
interval: 30s
# scrapeTimeout: 20s
# Redis exporter
exporter:
enabled: false
imageRepository: oliver006/redis_exporter
imageTag: v1.48.0-alpine
pullPolicy: IfNotPresent
# Prometheus port & scrape path
port: 9121
portName: redis-exporter
scrapePath: /metrics
# Liveness Probe
livenessProbe:
httpGet:
path: /health
port: redis-exporter
# Readiness Probe
readinessProbe:
httpGet:
path: /health
port: redis-exporter
# Startup Probe
startupProbe:
httpGet:
path: /health
port: redis-exporter
failureThreshold: 24
periodSeconds: 5
# CPU/Memory resource limits/requests
resources: {}
# Container security context
securityContext: {}
# Additional args for redis exporter
extraArgs: []
# - somesimple: "argument"
# - client-output-buffer-limit: ["normal", "0", "0", "0"]
# - client-output-buffer-limit: ["replica", "268435456", "67108864", "60"]
# - client-output-buffer-limit: ["pubsub", "33554432", "8388608", "60"]
scripts:
enabled: false
# CPU/Memory resource limits/requests
resources: {}
# Container security context
securityContext: {}
cleanupCoredumps:
enabled: false
minutes: 1440
cleanupTempfiles:
enabled: true
minutes: 60

View file

@ -1,4 +0,0 @@
apiVersion: v2
description: A Helm chart for maildev
name: maildev
version: 0.0.43

View file

@ -1,38 +0,0 @@
{{- define "common.names.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{- define "common.names.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{- define "common.names.fullname" -}}
{{- if .Values.fullnameOverride -}}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- $name := default .Chart.Name .Values.nameOverride -}}
{{- if contains $name .Release.Name -}}
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{- end -}}
{{- end -}}
{{- define "common.names.suffixedName" -}}
{{- $base := trunc 54 (include "common.names.fullname" .root) -}}
{{- $suffix := .suffix -}}
{{- printf "%s-%s" $base $suffix | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{- define "common.labels.standard" -}}
app.kubernetes.io/name: {{ include "common.names.name" . }}
helm.sh/chart: {{ include "common.names.chart" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end -}}
{{- define "common.labels.matchLabels" -}}
app.kubernetes.io/name: {{ include "common.names.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end -}}

View file

@ -1,54 +0,0 @@
{{- if and .Values.persistence.enabled .Values.cron.enabled }}
apiVersion: batch/v1
kind: CronJob
metadata:
name: {{ include "common.names.fullname" . }}
labels: {{- include "common.labels.standard" . | nindent 4 }}
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
spec:
schedule: {{ .Values.cron.schedule | quote }}
startingDeadlineSeconds: 100
jobTemplate:
spec:
template:
spec:
containers:
- name: delete-mail
image: "{{ .Values.cron.image.repository }}:{{ .Values.cron.image.tag }}"
imagePullPolicy: {{ .Values.cron.image.pullPolicy }}
args:
- "find"
- "{{ .Values.persistence.mountPath }}"
- "-type"
- "f"
- "-mtime"
- "+{{ .Values.cron.daysToKeep }}"
- "-exec"
- "rm"
- "-f"
- "{}"
- ";"
volumeMounts:
- name: data
mountPath: {{ .Values.persistence.mountPath }}
securityContext:
runAsUser: 1000
runAsGroup: 1000
- name: reload-mail
image: "{{ .Values.cron.image.repository }}:{{ .Values.cron.image.tag }}"
imagePullPolicy: {{ .Values.cron.image.pullPolicy }}
args: ["wget","{{ include "common.names.fullname" . }}:1080/reloadMailsFromDirectory","-q","-O","/dev/null"]
securityContext:
runAsUser: 1000
runAsGroup: 1000
volumes:
- name: data
persistentVolumeClaim:
claimName: {{ include "common.names.fullname" . }}
restartPolicy: OnFailure
{{- end }}

View file

@ -1,72 +0,0 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "common.names.fullname" . }}
labels: {{- include "common.labels.standard" . | nindent 4 }}
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels: {{ include "common.labels.matchLabels" . | nindent 6 }}
template:
metadata:
{{ if .Values.podAnnotations }}
annotations:
{{- toYaml .Values.podAnnotations | nindent 8 }}
{{ end }}
labels: {{- include "common.labels.standard" . | nindent 8 }}
spec:
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
args:
- "--mail-directory"
- "{{ .Values.persistence.mountPath }}"
{{- if .Values.extraArgs }}
{{- range .Values.extraArgs }}
- {{ . | quote }}
{{- end }}
{{- end }}
volumeMounts:
- name: data
mountPath: {{ .Values.persistence.mountPath }}
ports:
- name: http
containerPort: 1080
protocol: TCP
- name: smtp
containerPort: 1025
protocol: TCP
livenessProbe:
httpGet:
path: /healthz
port: http
readinessProbe:
httpGet:
path: /healthz
port: http
securityContext:
runAsUser: 1000
runAsGroup: 1000
resources:
{{- toYaml .Values.resources | nindent 12 }}
volumes:
- name: data
{{- if and (.Values.persistence.enabled) }}
persistentVolumeClaim:
claimName: {{ include "common.names.fullname" . }}
{{- else }}
emptyDir: {}
{{- end }}
nodeSelector:
{{- toYaml .Values.nodeSelector | nindent 8 }}
affinity:
{{- toYaml .Values.affinity | nindent 8 }}
tolerations:
{{- toYaml .Values.tolerations | nindent 8 }}

View file

@ -1,32 +0,0 @@
{{- if .Values.ingress.enabled -}}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ include "common.names.fullname" . }}
labels: {{- include "common.labels.standard" . | nindent 4 }}
annotations:
{{- if .Values.ingress.annotations }}
{{- include "common.tplvalues.render" (dict "value" .Values.ingress.annotations "context" $) | nindent 4 }}
{{- end }}
spec:
{{- if .Values.ingress.className }}
ingressClassName: {{ .Values.ingress.className | quote }}
{{- end }}
tls:
{{- if .Values.ingress.tls }}
- hosts:
- {{ .Values.ingress.hostname | quote }}
secretName: {{ .Values.ingress.tlsSecretname }}
{{- end }}
rules:
- host: {{ .Values.ingress.hostname | quote }}
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: {{ include "common.names.fullname" . }}
port:
name: http
{{- end }}

View file

@ -1,25 +0,0 @@
{{- if and (.Values.persistence.enabled) (not .Values.persistence.existingClaim) }}
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: {{ include "common.names.fullname" . }}
labels: {{- include "common.labels.standard" . | nindent 4 }}
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
annotations:
{{- if .Values.commonAnnotations }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
spec:
accessModes:
- {{ .Values.persistence.accessMode | quote }}
resources:
requests:
storage: {{ .Values.persistence.size | quote }}
{{- if .Values.persistence.storageClass }}
{{- if (not (eq "-" .Values.persistence.storageClass)) }}
storageClassName: "{{ .Values.persistence.storageClass }}"
{{- end }}
{{- end }}
{{- end }}

View file

@ -1,30 +0,0 @@
{{- if .Values.service.enabled -}}
apiVersion: v1
kind: Service
metadata:
name: {{ include "common.names.fullname" . }}
labels: {{- include "common.labels.standard" . | nindent 4 }}
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
annotations:
{{- if .Values.commonAnnotations }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
{{- if .Values.service.annotations }}
{{- include "common.tplvalues.render" ( dict "value" .Values.service.annotations "context" $ ) | nindent 4 }}
{{- end }}
spec:
type: {{ .Values.service.type }}
{{- if and .Values.service.clusterIP (eq .Values.service.type "ClusterIP") }}
clusterIP: {{ .Values.service.clusterIP }}
{{- end }}
ports:
- name: http
port: {{ .Values.service.httpPort }}
targetPort: 1080
- name: smtp
port: {{ .Values.service.smtpPort }}
targetPort: 1025
selector: {{ include "common.labels.matchLabels" . | nindent 4 }}
{{- end }}

View file

@ -1,65 +0,0 @@
fullnameOverride: ""
nameOverride: ""
commonAnnotations: {}
commonLabels: {}
podAnnotations:
image:
repository: maildev/maildev
pullPolicy: IfNotPresent
tag: "2.1.0"
persistence:
enabled:
accessMode: ReadWriteOnce
size: 256M
storageClass: ""
existingClaim: ""
mountPath: /home/node/maildev-data
cron:
enabled:
image:
repository: busybox
pullPolicy: IfNotPresent
tag: latest
schedule: "0 1 * * *"
daysToKeep: 30
extraArgs: []
# - "--outgoing-host"
# - "smtp.yourdomaine.com"
# - "--outgoing-port"
# - "25"
service:
enabled: true
type: ClusterIP
smtpPort: 1025
httpPort: 1080
nodePort:
clusterIP: ""
annotations: {}
ingress:
enabled: false
className: ""
annotations: {}
hostname: maildev.local
tlsSecretname: devthefuture-tls
resources: {}
# requests:
# cpu: "200m"
# memory: 500Mi
# limits:
# cpu: "100m"
# memory: 256Mi
replicaCount: 1
nodeSelector: {}
tolerations: []
affinity: {}

View file

@ -1,3 +1,3 @@
apiVersion: v2
name: modjo-microservice
version: 0.0.43
version: 0.0.10

View file

@ -36,24 +36,3 @@ app.kubernetes.io/managed-by: {{ .Release.Service }}
app.kubernetes.io/name: {{ include "common.names.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end -}}
{{- define "common.tplvalues.render" -}}
{{- $value := typeIs "string" .value | ternary .value (.value | toYaml) }}
{{- if contains "{{" (toJson .value) }}
{{- if .scope }}
{{- tpl (cat "{{- with $.RelativeScope -}}" $value "{{- end }}") (merge (dict "RelativeScope" .scope) .context) }}
{{- else }}
{{- tpl $value .context }}
{{- end }}
{{- else }}
{{- $value }}
{{- end }}
{{- end -}}
{{- define "common.tplvalues.merge" -}}
{{- $dst := dict -}}
{{- range .values -}}
{{- $dst = include "common.tplvalues.render" (dict "value" . "context" $.context "scope" $.scope) | fromYaml | merge $dst -}}
{{- end -}}
{{ $dst | toYaml }}
{{- end -}}

View file

@ -9,9 +9,6 @@ metadata:
{{- include "common.tplvalues.render" (dict "value" .Values.ingress.annotations "context" $) | nindent 4 }}
{{- end }}
spec:
{{- if .Values.ingress.className }}
ingressClassName: {{ .Values.ingress.className | quote }}
{{- end }}
tls:
{{- if .Values.ingress.tls }}
- hosts:

View file

@ -1,4 +1,4 @@
{{- if and .Values.rollout.enabled (eq .Values.rollout.strategy.type "BlueGreen") .Values.preview.ingress.enabled -}}
{{- if and (eq .Values.rollout.strategy.type "BlueGreen") .Values.preview.ingress.enabled -}}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:

View file

@ -1,4 +1,4 @@
{{- if and .Values.rollout.enabled .Values.exposed .Values.service.enabled (eq .Values.rollout.strategy.type "BlueGreen") -}}
{{- if eq .Values.rollout.strategy.type "BlueGreen" -}}
apiVersion: v1
kind: Service
metadata:

View file

@ -1,209 +0,0 @@
apiVersion: {{ .Values.rollout.enabled | ternary "argoproj.io/v1alpha1" "apps/v1" }}
kind: {{ .Values.rollout.enabled | ternary "Rollout" "Deployment" }}
metadata:
name: {{ include "common.names.fullname" . }}
labels: {{- include "common.labels.standard" . | nindent 4 }}
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
spec:
{{- if not .Values.autoscaling.enabled }}
replicas: {{ .Values.replicaCount }}
{{- end }}
revisionHistoryLimit: {{ .Values.revisionHistoryLimit }}
selector:
matchLabels: {{ include "common.labels.matchLabels" . | nindent 6 }}
strategy:
{{- if .Values.rollout.enabled }}
{{- if eq .Values.rollout.strategy.type "BlueGreen" }}
blueGreen:
activeService: {{ default (include "common.names.fullname" .) .Values.rollout.strategy.blueGreen.activeService | quote }}
{{- if .Values.exposed }}
previewService: {{ default (include "common.names.suffixedName" (dict "root" . "suffix" "preview")) .Values.rollout.strategy.blueGreen.previewService | quote }}
{{- end }}
autoPromotionEnabled: {{ .Values.rollout.strategy.blueGreen.autoPromotionEnabled }}
previewReplicaCount: {{ .Values.rollout.strategy.blueGreen.previewReplicaCount }}
antiAffinity:
{{- .Values.rollout.strategy.blueGreen.antiAffinity | toYaml | nindent 8 }}
scaleDownDelaySeconds: {{ .Values.rollout.strategy.blueGreen.scaleDownDelaySeconds }}
# Add additional Blue-Green specific configurations here as needed
{{- else if eq .Values.rollout.strategy.type "Canary" }}
canary:
{{- toYaml .Values.rollout.strategy.canary | nindent 6 }}
{{- else if eq .Values.rollout.strategy.type "RollingUpdate" }}
rollingUpdate:
{{- toYaml .Values.rollout.strategy.rollingUpdate | nindent 6 }}
{{- end }}
{{- else }}
{{- .Values.deployment.strategy | toYaml | nindent 4 }}
{{- end }}
template:
metadata:
{{ if .Values.podAnnotations }}
annotations:
{{- toYaml .Values.podAnnotations | nindent 8 }}
{{ end }}
labels: {{- include "common.labels.standard" . | nindent 8 }}
spec:
imagePullSecrets:
{{- toYaml .Values.image.pullSecrets | nindent 8 }}
volumes:
- name: jwt
secret:
secretName: {{ .Values.application.jwt.secretName }}
{{- if .Values.extraVolumes }}
{{- .Values.extraVolumes | toYaml | nindent 8 }}
{{- end }}
containers:
- name: {{ .Chart.Name }}
{{- with .Values.podSecurityContext }}
securityContext:
{{- toYaml . | nindent 12 }}
{{- end }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
{{- if .Values.exposed }}
ports:
- name: http
containerPort: {{ .Values.httpContainerPort }}
protocol: TCP
{{- end }}
{{- if .Values.customLivenessProbe }}
livenessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.customLivenessProbe "context" $) | nindent 12 }}
{{- else if .Values.livenessProbe.enabled }}
livenessProbe:
httpGet:
path: /live
port: 9000
initialDelaySeconds: {{ .Values.livenessProbe.initialDelaySeconds }}
periodSeconds: {{ .Values.livenessProbe.periodSeconds }}
timeoutSeconds: {{ .Values.livenessProbe.timeoutSeconds }}
successThreshold: {{ .Values.livenessProbe.successThreshold }}
failureThreshold: {{ .Values.livenessProbe.failureThreshold }}
{{- end }}
{{- if .Values.customReadinessProbe }}
readinessProbe: {{- include "common.tplvalues.render" (dict "value" .Values.customReadinessProbe "context" $) | nindent 12 }}
{{- else if .Values.readinessProbe.enabled }}
readinessProbe:
httpGet:
path: /ready
port: 9000
initialDelaySeconds: {{ .Values.readinessProbe.initialDelaySeconds }}
periodSeconds: {{ .Values.readinessProbe.periodSeconds }}
timeoutSeconds: {{ .Values.readinessProbe.timeoutSeconds }}
successThreshold: {{ .Values.readinessProbe.successThreshold }}
failureThreshold: {{ .Values.readinessProbe.failureThreshold }}
{{- end }}
{{- if .Values.customStartupProbe }}
startupProbe: {{- include "common.tplvalues.render" (dict "value" .Values.customStartupProbe "context" $) | nindent 12 }}
{{- else if .Values.startupProbe.enabled }}
startupProbe:
httpGet:
path: /live
port: 9000
initialDelaySeconds: {{ .Values.startupProbe.initialDelaySeconds }}
periodSeconds: {{ .Values.startupProbe.periodSeconds }}
timeoutSeconds: {{ .Values.startupProbe.timeoutSeconds }}
successThreshold: {{ .Values.startupProbe.successThreshold }}
failureThreshold: {{ .Values.startupProbe.failureThreshold }}
{{- end }}
resources:
{{- toYaml .Values.resources | nindent 12 }}
{{- if .Values.lifecycleHooks }}
lifecycle: {{- include "common.tplvalues.render" (dict "value" .Values.lifecycleHooks "context" $) | nindent 12 }}
{{- end }}
volumeMounts:
{{- if .Values.application.jwt.enabled }}
- name: jwt
mountPath: /secrets/jwk.json
subPath: {{ .Values.application.jwt.jwkSecretKey }}
readOnly: true
- name: jwt
mountPath: /secrets/jwk-old.json
subPath: {{ .Values.application.jwt.jwkOldSecretKey }}
readOnly: true
{{- end }}
{{- if .Values.extraVolumeMounts }}
{{- .Values.extraVolumeMounts | toYaml | nindent 12 }}
{{- end }}
env:
- name: LOGLEVEL
value: {{ .Values.application.logLevel }}
- name: LOG_REQUESTS
{{- if .Values.application.jwt.enabled }}
value: {{ .Values.application.logRequests | quote }}
- name: JWK_FILE
value: /secrets/jwk.json
- name: OLDJWK_FILE
value: /secrets/jwk-old.json
{{- end }}
{{- if .Values.application.pg.enabled }}
- name: DATABASE_URL
valueFrom:
secretKeyRef:
name: {{ .Values.application.pg.uriSecretName }}
key: {{ .Values.application.pg.uriSecretKey }}
{{- end }}
{{- if .Values.application.hasura.enabled }}
- name: HASURA_GRAPHQL_URL
value: {{ .Values.application.hasura.graphqlUrl }}
- name: HASURA_GRAPHQL_ADMIN_SECRET
valueFrom:
secretKeyRef:
name: {{ .Values.application.hasura.adminSecretName }}
key: {{ .Values.application.hasura.adminSecretKey }}
{{- end }}
{{- if .Values.application.amqp.enabled }}
- name: AMQP_URL
valueFrom:
secretKeyRef:
name: {{ .Values.application.amqp.uriSecretName }}
key: {{ .Values.application.amqp.uriSecretKey }}
{{- end }}
{{- if .Values.application.minio.enabled }}
- name: MINIO_ENDPOINT
value: {{ .Values.application.minio.endpoint }}
- name: MINIO_PORT
value: {{ .Values.application.minio.port | quote }}
- name: MINIO_ACCESS_KEY
valueFrom:
secretKeyRef:
name: {{ .Values.application.minio.secretName }}
key: {{ .Values.application.minio.accessKeySecretKey }}
- name: MINIO_SECRET_KEY
valueFrom:
secretKeyRef:
name: {{ .Values.application.minio.secretName }}
key: {{ .Values.application.minio.secretKeySecretKey }}
{{- end }}
{{- if .Values.extraEnv }}
{{ (tpl (.Values.extraEnv | toYaml) $) | nindent 12 }}
{{- end }}
{{- range $name, $value := .Values.envMap }}
- name: "{{ $name }}"
{{- if kindIs "string" $value }}
value: {{ (tpl $value $) | quote }}
{{- else }}
{{- (tpl ($value | toYaml) $) | nindent 14 }}
{{- end }}
{{- end }}
{{- if .Values.sidecars }}
{{- include "common.tplvalues.render" (dict "value" .Values.sidecars "context" $) | nindent 8 }}
{{- end }}
{{- if .Values.initContainers }}
initContainers:
{{- include "common.tplvalues.render" (dict "value" .Values.initContainers "context" $) | nindent 8 }}
{{- end }}
{{- with .Values.securityContext }}
securityContext:
{{- toYaml . | nindent 8 }}
{{- end }}
nodeSelector:
{{- toYaml .Values.nodeSelector | nindent 8 }}
affinity:
{{- toYaml .Values.affinity | nindent 8 }}
tolerations:
{{- toYaml .Values.tolerations | nindent 8 }}

View file

@ -0,0 +1,131 @@
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: {{ include "common.names.fullname" . }}
labels: {{- include "common.labels.standard" . | nindent 4 }}
{{- if .Values.commonLabels }}
{{- include "common.tplvalues.render" ( dict "value" .Values.commonLabels "context" $ ) | nindent 4 }}
{{- end }}
{{- if .Values.commonAnnotations }}
annotations: {{- include "common.tplvalues.render" ( dict "value" .Values.commonAnnotations "context" $ ) | nindent 4 }}
{{- end }}
spec:
{{- if not .Values.autoscaling.enabled }}
replicas: {{ .Values.replicaCount }}
{{- end }}
revisionHistoryLimit: {{ .Values.revisionHistoryLimit }}
selector:
matchLabels: {{ include "common.labels.matchLabels" . | nindent 6 }}
strategy:
{{- if eq .Values.rollout.strategy.type "BlueGreen" }}
blueGreen:
activeService: {{ default (include "common.names.fullname" .) .Values.rollout.strategy.blueGreen.activeService | quote }}
previewService: {{ default (include "common.names.suffixedName" (dict "root" . "suffix" "preview")) .Values.rollout.strategy.blueGreen.previewService | quote }}
autoPromotionEnabled: {{ .Values.rollout.strategy.blueGreen.autoPromotionEnabled }}
previewReplicaCount: {{ .Values.rollout.strategy.blueGreen.previewReplicaCount }}
antiAffinity:
{{- .Values.rollout.strategy.blueGreen.antiAffinity | toYaml | nindent 8 }}
scaleDownDelaySeconds: {{ .Values.rollout.strategy.blueGreen.scaleDownDelaySeconds }}
# Add additional Blue-Green specific configurations here as needed
{{- else if eq .Values.rollout.strategy.type "Canary" }}
canary:
{{- toYaml .Values.rollout.strategy.canary | nindent 6 }}
{{- else if eq .Values.rollout.strategy.type "RollingUpdate" }}
rollingUpdate:
{{- toYaml .Values.rollout.strategy.rollingUpdate | nindent 6 }}
{{- end }}
template:
metadata:
annotations:
{{- toYaml .Values.podAnnotations | nindent 8 }}
labels: {{- include "common.labels.standard" . | nindent 8 }}
spec:
imagePullSecrets:
{{- toYaml .Values.image.pullSecrets | nindent 8 }}
volumes:
- name: jwt
secret:
secretName: {{ .Values.application.jwt.secretName }}
containers:
- name: {{ .Chart.Name }}
securityContext:
readOnlyRootFilesystem: true
runAsUser: 1000
runAsGroup: 1000
runAsNonRoot: true
allowPrivilegeEscalation: false
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- name: http
containerPort: 4000
protocol: TCP
livenessProbe:
httpGet:
path: /
port: http
readinessProbe:
httpGet:
path: /
port: http
resources:
{{- toYaml .Values.resources | nindent 12 }}
volumeMounts:
{{- if .Values.application.jwt.enabled }}
- name: jwt
mountPath: /secrets/jwk.json
subPath: {{ .Values.application.jwt.jwkSecretKey }}
readOnly: true
- name: jwt
mountPath: /secrets/jwk-old.json
subPath: {{ .Values.application.jwt.jwkOldSecretKey }}
readOnly: true
{{- end }}
env:
- name: LOGLEVEL
value: {{ .Values.application.logLevel }}
- name: LOG_REQUESTS
{{- if .Values.application.jwt.enabled }}
value: {{ .Values.application.logRequests | quote }}
- name: JWK_FILE
value: /secrets/jwk.json
- name: OLDJWK_FILE
value: /secrets/jwk-old.json
{{- end }}
{{- if .Values.application.pg.enabled }}
- name: DATABASE_URL
valueFrom:
secretKeyRef:
name: {{ .Values.application.pg.dsnSecretName }}
key: {{ .Values.application.pg.dsnSecretKey }}
{{- end }}
{{- if .Values.application.hasura.enabled }}
- name: HASURA_GRAPHQL_URL
value: {{ .Values.application.hasura.graphqlUrl }}
- name: HASURA_WEB_HOOK_SECRET
valueFrom:
secretKeyRef:
name: {{ .Values.application.hasura.webhookSecretName }}
key: {{ .Values.application.hasura.webhookSecretKey }}
- name: HASURA_GRAPHQL_ADMIN_SECRET
valueFrom:
secretKeyRef:
name: {{ .Values.application.hasura.adminSecretName }}
key: {{ .Values.application.hasura.adminSecretKey }}
{{- end }}
{{- if .Values.application.amqp.enabled }}
- name: AMQP_URL
valueFrom:
secretKeyRef:
name: {{ .Values.application.amqp.dsnSecretName }}
key: {{ .Values.application.amqp.dsnSecretKey }}
{{- end }}
{{- if .Values.extraEnv }}
{{ .Values.extraEnv | toYaml | nindent 12 }}
{{- end }}
nodeSelector:
{{- toYaml .Values.nodeSelector | nindent 8 }}
affinity:
{{- toYaml .Values.affinity | nindent 8 }}
tolerations:
{{- toYaml .Values.tolerations | nindent 8 }}

View file

@ -1,11 +1,9 @@
fullnameOverride: ""
nameOverride: ""
exposed: true
image:
repository:
tag:
repository:
tag:
pullPolicy: IfNotPresent
pullSecrets: []
@ -14,84 +12,31 @@ application:
logRequests: false
pg:
enabled: false
uriSecretName: pg
uriSecretKey: uri
dsnSecretName: pg
dsnSecretKey: dsn
amqp:
enabled: false
uriSecretName: amqp
uriSecretKey: uri
dsnSecretName: amqp
dsnSecretKey: dsn
hasura:
enabled: false
graphqlUrl: http://hasura:8080/v1/graphql
adminSecretName: hasura-graphql-engine
webhookSecretName: hasura
webhookSecretKey: webhook-secret
adminSecretName: hasura
adminSecretKey: admin
minio:
enabled: false
secretName: minio-auth
endpoint: minio
port: 9000
accessKeySecretKey: root-user
secretKeySecretKey: root-password
jwt:
enabled: false
secretName: jwks
jwkSecretKey: jwk.json
jwkOldSecretKey: jwk-old.json
envMap: {}
extraEnv:
extraVolumes:
extraVolumeMounts:
livenessProbe:
enabled: true
initialDelaySeconds: 5
periodSeconds: 5
timeoutSeconds: 5
successThreshold: 1
failureThreshold: 5
readinessProbe:
enabled: true
initialDelaySeconds: 5
periodSeconds: 5
timeoutSeconds: 1
successThreshold: 1
failureThreshold: 5
startupProbe:
enabled: false
initialDelaySeconds: 0
periodSeconds: 10
timeoutSeconds: 5
successThreshold: 1
failureThreshold: 60
customLivenessProbe:
customReadinessProbe:
customStartupProbe:
lifecycleHooks: {}
initContainers: []
sidecars: []
extraEnv:
commonAnnotations: {}
commonLabels: {}
podSecurityContext:
fsGroup: 1000
securityContext:
allowPrivilegeEscalation: false
privileged: false
readOnlyRootFilesystem: true
runAsNonRoot: true
runAsGroup: 1000
runAsUser: 1000
capabilities:
drop:
- ALL
podAnnotations:
httpContainerPort: 4000
podAnnotations: {}
service:
enabled: true
@ -109,10 +54,8 @@ service:
ingress:
enabled: false
className: ""
annotations: {}
hostname: api.local
tls: true
tlsSecretname: alerte-secours-tls
resources: {}
@ -129,8 +72,8 @@ autoscaling:
enabled: false
minReplicas: 1
maxReplicas: 100
targetCPUUtilizationPercentage:
targetMemoryUtilizationPercentage:
targetCPUUtilizationPercentage:
targetMemoryUtilizationPercentage:
replicaCount: 1
@ -145,11 +88,7 @@ namespace:
labels:
alerte-secours-tls: wildcard
deployment:
strategy: {}
rollout:
enabled: false
strategy:
type: "BlueGreen"
blueGreen:
@ -167,6 +106,6 @@ rollout:
preview:
ingress:
enabled: false
hostname:
hostname:
automountServiceAccountToken: false
automountServiceAccountToken: false

BIN
cnpg-cluster-0.0.41.tgz Normal file

Binary file not shown.

BIN
cnpg-cluster-0.0.42.tgz Normal file

Binary file not shown.

BIN
cnpg-cluster-0.0.43.tgz Normal file

Binary file not shown.

244
index.yaml Normal file
View file

@ -0,0 +1,244 @@
apiVersion: v1
entries:
cnpg-cluster:
- apiVersion: v2
appVersion: "15"
created: "2024-08-17T17:42:56.183002148Z"
description: A Helm chart to create cloudnative-pg.io clusters
digest: eac49cea01b0e373c6dc58c0e31882c8ebe3c1750d2844d1e4fe4d0f807168f5
name: cnpg-cluster
type: application
urls:
- https://devthefuture.codeberg.page/helm-charts/cnpg-cluster-0.0.43.tgz
version: 0.0.43
- apiVersion: v2
appVersion: "15"
created: "2024-07-21T14:06:05.217000769Z"
description: A Helm chart to create cloudnative-pg.io clusters
digest: bf402d837d7418c7a752ce2e99118e06e84b5cb7247caa93c9a9d9c16b8f697f
name: cnpg-cluster
type: application
urls:
- https://devthefuture.codeberg.page/helm-charts/cnpg-cluster-0.0.42.tgz
version: 0.0.42
- apiVersion: v2
appVersion: "15"
created: "2024-07-18T22:48:03.527762408Z"
description: A Helm chart to create cloudnative-pg.io clusters
digest: 682736808b48027d8b3b97193b138fa1c0c2cdf419182c6a794ce4dcf464788a
name: cnpg-cluster
type: application
urls:
- https://devthefuture.codeberg.page/helm-charts/cnpg-cluster-0.0.41.tgz
version: 0.0.41
keydb:
- apiVersion: v2
created: "2024-08-17T17:42:56.184596465Z"
description: A Helm chart for KeyDB multimaster setup
digest: 2d37cc8bb587fa1e53d6185d2cf52c3ecf1756ba8f3a5182744a914417a079bf
name: keydb
type: application
urls:
- https://devthefuture.codeberg.page/helm-charts/keydb-0.0.43.tgz
version: 0.0.43
- apiVersion: v2
created: "2024-07-21T14:06:05.217955007Z"
description: A Helm chart for KeyDB multimaster setup
digest: d4e5479b22c4a1c230e4947ecd3c1451ae758c2634fd3240c3d071f0a3b584ac
name: keydb
type: application
urls:
- https://devthefuture.codeberg.page/helm-charts/keydb-0.0.42.tgz
version: 0.0.42
- apiVersion: v2
created: "2024-07-18T22:48:03.52876734Z"
description: A Helm chart for KeyDB multimaster setup
digest: be1b79fb587641d9a0d8135461a9c0dfab2e33a50aa2d6a453f68ce411f734ad
name: keydb
type: application
urls:
- https://devthefuture.codeberg.page/helm-charts/keydb-0.0.41.tgz
version: 0.0.41
- apiVersion: v2
created: "2024-07-18T18:37:23.211743839Z"
description: A Helm chart for KeyDB multimaster setup
digest: 4649b92445355b897479e410598ada66ebdfc1aff87003849ee1cb56fad693f5
name: keydb
type: application
urls:
- https://devthefuture.codeberg.page/helm-charts/keydb-0.0.40.tgz
version: 0.0.40
- apiVersion: v2
created: "2024-07-18T17:50:57.357822041Z"
description: A Helm chart for KeyDB multimaster setup
digest: e39dad1170a6c963c60edd0ec030c23d11f8ced45efbf1295a963df73257d627
name: keydb
type: application
urls:
- https://devthefuture.codeberg.page/helm-charts/keydb-0.0.39.tgz
version: 0.0.39
- apiVersion: v2
created: "2024-07-18T17:46:44.121588377Z"
description: A Helm chart for KeyDB multimaster setup
digest: 134480f1d33c84ab0c90c8419922ca697b574b9a7b903979807c0308a9f35443
name: keydb
type: application
urls:
- https://devthefuture.codeberg.page/helm-charts/keydb-0.0.38.tgz
version: 0.0.38
- apiVersion: v2
created: "2024-07-18T17:44:15.061443015Z"
description: A Helm chart for KeyDB multimaster setup
digest: 00841da5e068fb515088800569fe91084faf17c962a9d4f8e197970639213a02
name: keydb
type: application
urls:
- https://devthefuture.codeberg.page/helm-charts/keydb-0.0.37.tgz
version: 0.0.37
- apiVersion: v2
created: "2024-07-12T21:08:12.065201939Z"
description: A Helm chart for KeyDB multimaster setup
digest: cded59df0f023544997906235ef3226091478a31877cfe95c2ff31f0f77aab61
name: keydb
type: application
urls:
- https://devthefuture.codeberg.page/helm-charts/keydb-0.0.36.tgz
version: 0.0.36
maildev:
- apiVersion: v2
created: "2024-08-17T17:42:56.185214884Z"
description: A Helm chart for maildev
digest: c828900cf487229bbb06b7bced2b3d420924bfe6af54887795a6a8a3f73dcfd0
name: maildev
urls:
- https://devthefuture.codeberg.page/helm-charts/maildev-0.0.43.tgz
version: 0.0.43
- apiVersion: v2
created: "2024-07-21T14:06:05.218328993Z"
description: A Helm chart for maildev
digest: 38b7142c7d503e200b3b5683d729db02b69c0d09e3d234c923d18d182fb7a8c7
name: maildev
urls:
- https://devthefuture.codeberg.page/helm-charts/maildev-0.0.42.tgz
version: 0.0.42
- apiVersion: v2
created: "2024-07-18T22:48:03.52916301Z"
description: A Helm chart for maildev
digest: d48b33d9c0caa153db746b07c346d041aeb2aef8b2d2e799b1835a215c8e1f7e
name: maildev
urls:
- https://devthefuture.codeberg.page/helm-charts/maildev-0.0.41.tgz
version: 0.0.41
- apiVersion: v2
created: "2024-07-18T18:37:23.21249341Z"
description: A Helm chart for maildev
digest: 1af3a249688ed524af9ba242e5217c073e2a37328b362dc63c9fb462c6516b49
name: maildev
urls:
- https://devthefuture.codeberg.page/helm-charts/maildev-0.0.40.tgz
version: 0.0.40
- apiVersion: v2
created: "2024-07-18T17:50:57.35844032Z"
description: A Helm chart for maildev
digest: 35bbf4a718fe3ff90f62579c9ef23b0817780b7c68a1bbc05fdeb9600278f258
name: maildev
urls:
- https://devthefuture.codeberg.page/helm-charts/maildev-0.0.39.tgz
version: 0.0.39
- apiVersion: v2
created: "2024-07-18T17:46:44.122116252Z"
description: A Helm chart for maildev
digest: 4d460d65c2010c210c9cb716a17881b5cb2de420eaf39dfec643e085c70a9691
name: maildev
urls:
- https://devthefuture.codeberg.page/helm-charts/maildev-0.0.38.tgz
version: 0.0.38
- apiVersion: v2
created: "2024-07-18T17:44:15.061840598Z"
description: A Helm chart for maildev
digest: 5395916813f982e3ab774bfff73b323f2c59c9ca414b831e3441b72a466d584d
name: maildev
urls:
- https://devthefuture.codeberg.page/helm-charts/maildev-0.0.37.tgz
version: 0.0.37
- apiVersion: v2
created: "2024-07-12T21:08:12.065607639Z"
description: A Helm chart for maildev
digest: 4a788fe2511157c39fd30679e64c76a3387777fe8534baf858313fbcf077767a
name: maildev
urls:
- https://devthefuture.codeberg.page/helm-charts/maildev-0.0.36.tgz
version: 0.0.36
- apiVersion: v2
created: "2024-07-04T17:33:39.063374838Z"
description: A Helm chart for maildev
digest: 45fa2a94c35a70ea13557cc3cf77de5790c320fbf0e150bc802eee560b56b479
name: maildev
urls:
- https://devthefuture.codeberg.page/helm-charts/maildev-0.0.35.tgz
version: 0.0.35
modjo-microservice:
- apiVersion: v2
created: "2024-08-17T17:42:56.186496419Z"
digest: d80671a5487e01913188afdc660ed64da14e8d3fe103367acd47d40da043310d
name: modjo-microservice
urls:
- https://devthefuture.codeberg.page/helm-charts/modjo-microservice-0.0.43.tgz
version: 0.0.43
- apiVersion: v2
created: "2024-07-21T14:06:05.219107624Z"
digest: ade909489e31604082522b00ebc59ded5dd5acfa7b6f997ba07b5ca00bb50bb7
name: modjo-microservice
urls:
- https://devthefuture.codeberg.page/helm-charts/modjo-microservice-0.0.42.tgz
version: 0.0.42
- apiVersion: v2
created: "2024-07-18T22:48:03.529981123Z"
digest: 3ba45ebbabe9c6bc3e1b6f6de29edefaf2187c01c89f0b5aa36cafe44a6cdeef
name: modjo-microservice
urls:
- https://devthefuture.codeberg.page/helm-charts/modjo-microservice-0.0.41.tgz
version: 0.0.41
- apiVersion: v2
created: "2024-07-18T18:37:23.213764322Z"
digest: 3d120014ec0b974079f58bbfad42525a21ae8bc3ab8a3965915bbf27041c39b9
name: modjo-microservice
urls:
- https://devthefuture.codeberg.page/helm-charts/modjo-microservice-0.0.40.tgz
version: 0.0.40
- apiVersion: v2
created: "2024-07-18T17:50:57.360496282Z"
digest: d6f9138bfb745ac187b1a390558cce8274854a8170ec8a3ff886f68b8e8b319b
name: modjo-microservice
urls:
- https://devthefuture.codeberg.page/helm-charts/modjo-microservice-0.0.39.tgz
version: 0.0.39
- apiVersion: v2
created: "2024-07-18T17:46:44.123177651Z"
digest: 6ce482f9a9965f5661e3144ce441f466a6ee4e7a386bd47678e8a6ca52a6e3be
name: modjo-microservice
urls:
- https://devthefuture.codeberg.page/helm-charts/modjo-microservice-0.0.38.tgz
version: 0.0.38
- apiVersion: v2
created: "2024-07-18T17:44:15.062637128Z"
digest: d3025d91533aa6cefbbc9046ba1c82a9195db73cedbf7a0fcf63c0ea606bfe89
name: modjo-microservice
urls:
- https://devthefuture.codeberg.page/helm-charts/modjo-microservice-0.0.37.tgz
version: 0.0.37
- apiVersion: v2
created: "2024-07-12T21:08:12.066333365Z"
digest: 2469e8b10f89dad2ab5b55ac70122ca1263cb7c782a0241ee9f43568c97d6dc1
name: modjo-microservice
urls:
- https://devthefuture.codeberg.page/helm-charts/modjo-microservice-0.0.36.tgz
version: 0.0.36
- apiVersion: v2
created: "2024-07-04T17:33:39.064855347Z"
digest: 09b684627b47cf4fd5e022848d0d2523d2af4a2e1f9262e84055e0b14b34bf46
name: modjo-microservice
urls:
- https://devthefuture.codeberg.page/helm-charts/modjo-microservice-0.0.35.tgz
version: 0.0.35
generated: "2024-08-17T17:42:56.181704271Z"

BIN
keydb-0.0.36.tgz Normal file

Binary file not shown.

BIN
keydb-0.0.37.tgz Normal file

Binary file not shown.

BIN
keydb-0.0.38.tgz Normal file

Binary file not shown.

BIN
keydb-0.0.39.tgz Normal file

Binary file not shown.

BIN
keydb-0.0.40.tgz Normal file

Binary file not shown.

BIN
keydb-0.0.41.tgz Normal file

Binary file not shown.

BIN
keydb-0.0.42.tgz Normal file

Binary file not shown.

BIN
keydb-0.0.43.tgz Normal file

Binary file not shown.

BIN
maildev-0.0.35.tgz Normal file

Binary file not shown.

BIN
maildev-0.0.36.tgz Normal file

Binary file not shown.

BIN
maildev-0.0.37.tgz Normal file

Binary file not shown.

BIN
maildev-0.0.38.tgz Normal file

Binary file not shown.

BIN
maildev-0.0.39.tgz Normal file

Binary file not shown.

BIN
maildev-0.0.40.tgz Normal file

Binary file not shown.

BIN
maildev-0.0.41.tgz Normal file

Binary file not shown.

BIN
maildev-0.0.42.tgz Normal file

Binary file not shown.

BIN
maildev-0.0.43.tgz Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -1,5 +1,5 @@
{
"version": "0.0.43",
"version": "0.0.10",
"repository": "git@codeberg.org:devthefuture/helm-charts.git",
"license": "MIT",
"private": true,