Compare commits

..

24 Commits

Author SHA1 Message Date
31dca5519f chore(deps): update dependency valkey-io/valkey to v9.0.4
All checks were successful
lint-and-test / lint-helm (pull_request) Successful in 12s
lint-and-test / chart-testing (pull_request) Successful in 41s
2026-05-07 00:58:43 +00:00
9be8e7dd76 Merge pull request 'chore(deps): update ghcr.io/squat/generic-device-plugin:latest docker digest to face047' (#200) from renovate/unified-squatgeneric-device-plugin into main
All checks were successful
lint-and-test / lint-helm (push) Successful in 15s
lint-and-test / chart-testing (push) Successful in 26s
release-charts-generic-device-plugin / release (push) Successful in 22s
renovate / renovate (push) Successful in 1m58s
2026-05-07 00:57:44 +00:00
142a3556b1 chore(deps): update ghcr.io/squat/generic-device-plugin:latest docker digest to face047
Some checks failed
renovate/stability-days Updates have not met minimum release age requirement
lint-and-test / lint-helm (pull_request) Failing after 15s
lint-and-test / chart-testing (pull_request) Successful in 21s
2026-05-07 00:57:24 +00:00
9347aa397e feat: bump version
Some checks failed
lint-and-test / lint-helm (push) Successful in 11s
lint-and-test / chart-testing (push) Successful in 24s
release-charts-rclone-bucket / release (push) Successful in 21s
release-charts-generic-device-plugin / release (push) Has been cancelled
renovate / renovate (push) Has been cancelled
2026-05-06 19:55:22 -05:00
9e7ab77502 fix: wrong argument 2026-05-06 19:55:06 -05:00
8c9a3bf080 feat: bump version
All checks were successful
lint-and-test / lint-helm (push) Successful in 16s
lint-and-test / chart-testing (push) Successful in 39s
release-charts-rclone-bucket / release (push) Successful in 28s
release-charts-valkey / release (push) Successful in 28s
renovate / renovate (push) Successful in 2m13s
2026-05-06 19:10:43 -05:00
86c9cd930a fix: wrong argument 2026-05-06 19:10:43 -05:00
0f14e46c20 fix: fix env force path style 2026-05-06 19:10:43 -05:00
8cae3bb53c Merge pull request 'chore(deps): update ghcr.io/squat/generic-device-plugin:latest docker digest to 826da38' (#197) from renovate/unified-squatgeneric-device-plugin into main
All checks were successful
lint-and-test / lint-helm (push) Successful in 49s
release-charts-generic-device-plugin / release (push) Successful in 20s
renovate / renovate (push) Successful in 1m28s
lint-and-test / chart-testing (push) Successful in 5m20s
2026-05-07 00:02:49 +00:00
49e3392ed5 chore(deps): update ghcr.io/squat/generic-device-plugin:latest docker digest to 826da38
Some checks failed
renovate/stability-days Updates have not met minimum release age requirement
lint-and-test / lint-helm (pull_request) Failing after 38s
lint-and-test / chart-testing (pull_request) Successful in 14m35s
2026-05-07 00:02:23 +00:00
8e9b9460b6 Merge pull request 'chore(deps): update rclone/rclone to v1.74.0' (#195) from renovate/unified-rclonerclone into main
All checks were successful
lint-and-test / chart-testing (push) Successful in 22s
release-charts-rclone-bucket / release (push) Successful in 27s
lint-and-test / lint-helm (push) Successful in 1m6s
renovate / renovate (push) Successful in 2m13s
Reviewed-on: #195
2026-05-02 00:43:46 +00:00
82ded9e1cd chore(deps): update rclone/rclone to v1.74.0
All checks were successful
lint-and-test / lint-helm (pull_request) Successful in 13s
lint-and-test / chart-testing (pull_request) Successful in 4m35s
2026-05-02 00:42:45 +00:00
89319e12c5 Merge pull request 'chore(deps): update ghcr.io/oliver006/redis_exporter docker tag to v1.83.0' (#194) from renovate/unified-oliver006redis_exporter into main
Some checks failed
renovate / renovate (push) Successful in 49s
release-charts-valkey / release (push) Successful in 1m22s
lint-and-test / lint-helm (push) Has been cancelled
lint-and-test / chart-testing (push) Has been cancelled
Reviewed-on: #194
2026-05-02 00:41:54 +00:00
007016b59f chore(deps): update ghcr.io/oliver006/redis_exporter docker tag to v1.83.0
All checks were successful
lint-and-test / lint-helm (pull_request) Successful in 31s
lint-and-test / chart-testing (pull_request) Successful in 8m0s
2026-05-01 00:03:00 +00:00
52363a1dbc fix: invalid rules
All checks were successful
lint-and-test / lint-helm (push) Successful in 30s
release-charts-volsync-target / release (push) Successful in 17s
lint-and-test / chart-testing (push) Successful in 2m50s
renovate / renovate (push) Successful in 1m44s
2026-04-28 17:53:08 -05:00
1a535ae4c2 feat: add rule
All checks were successful
lint-and-test / lint-helm (push) Successful in 44s
release-charts-volsync-target / release (push) Successful in 41s
renovate / renovate (push) Successful in 1m9s
lint-and-test / chart-testing (push) Successful in 3m44s
2026-04-28 16:36:05 -05:00
5a73a500a2 feat: quote values
All checks were successful
lint-and-test / lint-helm (push) Successful in 14s
release-charts-rclone-bucket / release (push) Successful in 2m49s
lint-and-test / chart-testing (push) Successful in 3m28s
renovate / renovate (push) Successful in 2m3s
2026-04-26 15:34:12 -05:00
67d0dbcf71 feat: change helper
All checks were successful
lint-and-test / lint-helm (push) Successful in 19s
lint-and-test / chart-testing (push) Successful in 40s
release-charts-rclone-bucket / release (push) Successful in 25s
renovate / renovate (push) Successful in 40s
2026-04-26 15:15:36 -05:00
f901d1574b fix: wrong destination secret generation
All checks were successful
lint-and-test / lint-helm (push) Successful in 15s
lint-and-test / chart-testing (push) Successful in 29s
renovate / renovate (push) Successful in 46s
release-charts-rclone-bucket / release (push) Successful in 3m8s
2026-04-26 14:13:08 -05:00
73779ad42b feat: add include and exclude to prune
All checks were successful
lint-and-test / lint-helm (push) Successful in 14s
lint-and-test / chart-testing (push) Successful in 25s
release-charts-rclone-bucket / release (push) Successful in 20s
renovate / renovate (push) Successful in 57s
2026-04-26 14:12:11 -05:00
96cc6a8038 feat: add age to backup
All checks were successful
lint-and-test / lint-helm (push) Successful in 17s
release-charts-rclone-bucket / release (push) Successful in 30s
renovate / renovate (push) Successful in 50s
lint-and-test / chart-testing (push) Successful in 5m45s
2026-04-26 13:57:24 -05:00
addd63616c fix: separate secret naming
All checks were successful
lint-and-test / lint-helm (push) Successful in 22s
renovate / renovate (push) Successful in 41s
release-charts-rclone-bucket / release (push) Successful in 57s
lint-and-test / chart-testing (push) Successful in 3m21s
2026-04-25 20:56:43 -05:00
5cb8e9d43e feat: add rclone for bucket mirror
All checks were successful
release-charts-rclone-bucket / release (push) Successful in 28s
lint-and-test / lint-helm (push) Successful in 54s
renovate / renovate (push) Successful in 1m20s
lint-and-test / chart-testing (push) Successful in 2m45s
2026-04-25 20:42:45 -05:00
9b50e6b890 feat: tidy external secrets
All checks were successful
lint-and-test / lint-helm (push) Successful in 20s
release-charts-postgres-cluster / release (push) Successful in 16s
lint-and-test / chart-testing (push) Successful in 3m51s
renovate / renovate (push) Successful in 3m5s
2026-04-24 15:39:30 -05:00
22 changed files with 635 additions and 32 deletions

View File

@@ -0,0 +1,128 @@
name: release-charts-rclone-bucket
on:
push:
branches:
- main
paths:
- "charts/rclone-bucket/**"
workflow_dispatch:
env:
WORKFLOW_DIR: "charts/rclone-bucket"
jobs:
release:
runs-on: ubuntu-js
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Set up Helm
uses: azure/setup-helm@v5
with:
token: ${{ secrets.GITEA_TOKEN }}
version: v3.19.2
- name: Add Repositories
run: |
cd ${WORKFLOW_DIR}
echo ">> Adding repositories for chart dependencies ..."
helm dependency list --max-col-width 120 2> /dev/null \
| tail +2 | head -n -1 \
| awk '{ print "helm repo add " $1 " " $3 }' \
| while read cmd; do echo "$cmd" | sh; done || true
if helm repo list | tail +2 | read -r; then
echo ">> Update repository cache ..."
helm repo update
fi
echo "----"
- name: Package Helm Chart
run: |
cd ${WORKFLOW_DIR}
echo ">> Building helm dependency ..."
helm dependency build --skip-refresh --debug
echo "----"
echo "PACKAGE_PATH=$(helm package . | awk '{print $NF}')" >> $GITEA_ENV
- name: Publish Helm Chart to Harbor
run: |
echo ">> Logging into Harbor ..."
helm registry login ${{ vars.REGISTRY_HOST }} -u ${{ vars.REGISTRY_USER }} -p ${{ secrets.REGISTRY_SECRET }} --debug
echo ""
echo ">> Publishing chart to Harbor ..."
helm push ${{ env.PACKAGE_PATH }} oci://${{ vars.REGISTRY_HOST }}/helm-charts --debug
echo "----"
- name: Publish Helm Chart to Gitea
run: |
echo ">> Installing Chart Museum plugin ..."
helm plugin install https://github.com/chartmuseum/helm-push --debug
echo ""
echo ">> Adding Gitea repository ..."
helm repo add --username ${{ gitea.actor }} --password ${{ secrets.REPOSITORY_TOKEN }} helm-charts https://${{ vars.REPOSITORY_HOST }}/api/packages/alexlebens/helm --debug
echo ""
echo ">> Pushing chart to gitea"
helm cm-push ${{ env.PACKAGE_PATH }} helm-charts --debug
- name: Extract Chart Metadata
run: |
cd ${WORKFLOW_DIR}
echo ">> Adding Chart metadata to workflow ENV ..."
echo ""
echo ">> Chart Version: $(yq '.version' Chart.yaml)"
echo ">> Chart Name: $(yq '.name' Chart.yaml)"
echo "----"
echo "CHART_VERSION=$(yq '.version' Chart.yaml)" >> $GITEA_ENV
echo "CHART_NAME=$(yq '.name' Chart.yaml)" >> $GITEA_ENV
- name: Release Helm Chart
uses: akkuman/gitea-release-action@v1
with:
name: ${{ env.CHART_NAME }}-${{ env.CHART_VERSION }}
tag_name: ${{ env.CHART_NAME }}-${{ env.CHART_VERSION }}
files: |-
${{ env.PACKAGE_PATH }}
- name: ntfy Success
uses: niniyas/ntfy-action@master
if: success()
with:
url: '${{ secrets.NTFY_URL }}'
topic: '${{ secrets.NTFY_TOPIC }}'
title: 'Release Success - ${{ env.CHART_NAME }}'
priority: 3
headers: '{"Authorization": "Bearer ${{ secrets.NTFY_CRED }}"}'
tags: action,successfully,completed
details: 'Helm Chart ${{ env.CHART_NAME }}-${{ env.CHART_VERSION }} has been released!'
icon: 'https://cdn.jsdelivr.net/gh/selfhst/icons/png/gitea.png'
- name: ntfy Failed
uses: niniyas/ntfy-action@master
if: failure()
with:
url: '${{ secrets.NTFY_URL }}'
topic: '${{ secrets.NTFY_TOPIC }}'
title: 'Release Failure - ${{ env.CHART_NAME }}'
priority: 4
headers: '{"Authorization": "Bearer ${{ secrets.NTFY_CRED }}"}'
tags: action,failed
details: 'Helm Chart ${{ env.CHART_NAME }}-${{ env.CHART_VERSION }} has failed to be released.'
icon: 'https://cdn.jsdelivr.net/gh/selfhst/icons/png/gitea.png'
actions: '[{"action": "view", "label": "Open Gitea", "url": "https://gitea.alexlebens.dev/alexlebens/helm-charts/actions?workflow=release-charts-rclone-bucket.yml", "clear": true}]'
image: true

View File

@@ -1,6 +1,6 @@
apiVersion: v2
name: generic-device-plugin
version: 0.20.31
version: 0.20.33
description: Generic Device Plugin
keywords:
- generic-device-plugin

View File

@@ -1,6 +1,6 @@
# generic-device-plugin
![Version: 0.20.31](https://img.shields.io/badge/Version-0.20.31-informational?style=flat-square) ![AppVersion: 0.20.17](https://img.shields.io/badge/AppVersion-0.20.17-informational?style=flat-square)
![Version: 0.20.32](https://img.shields.io/badge/Version-0.20.32-informational?style=flat-square) ![AppVersion: 0.20.17](https://img.shields.io/badge/AppVersion-0.20.17-informational?style=flat-square)
Generic Device Plugin
@@ -28,7 +28,7 @@ Generic Device Plugin
| config | object | `{"data":"devices:\n - name: serial\n groups:\n - paths:\n - path: /dev/ttyUSB*\n - paths:\n - path: /dev/ttyACM*\n - paths:\n - path: /dev/tty.usb*\n - paths:\n - path: /dev/cu.*\n - paths:\n - path: /dev/cuaU*\n - paths:\n - path: /dev/rfcomm*\n - name: video\n groups:\n - paths:\n - path: /dev/video0\n - name: fuse\n groups:\n - count: 10\n paths:\n - path: /dev/fuse\n - name: audio\n groups:\n - count: 10\n paths:\n - path: /dev/snd\n - name: capture\n groups:\n - paths:\n - path: /dev/snd/controlC0\n - path: /dev/snd/pcmC0D0c\n - paths:\n - path: /dev/snd/controlC1\n mountPath: /dev/snd/controlC0\n - path: /dev/snd/pcmC1D0c\n mountPath: /dev/snd/pcmC0D0c\n - paths:\n - path: /dev/snd/controlC2\n mountPath: /dev/snd/controlC0\n - path: /dev/snd/pcmC2D0c\n mountPath: /dev/snd/pcmC0D0c\n - paths:\n - path: /dev/snd/controlC3\n mountPath: /dev/snd/controlC0\n - path: /dev/snd/pcmC3D0c\n mountPath: /dev/snd/pcmC0D0c\n","enabled":true}` | Config map |
| config.data | string | See [values.yaml](./values.yaml) | generic-device-plugin config file [[ref]](https://github.com/squat/generic-device-plugin#usage) |
| deviceDomain | string | `"devic.es"` | Domain used by devices for identifcation |
| image | object | `{"pullPolicy":"Always","repository":"ghcr.io/squat/generic-device-plugin","tag":"latest@sha256:d9e098e33a20c32a561adb1ef8cace7d5912cd5ffb38f07dd9f83af4bdf38505"}` | Default image |
| image | object | `{"pullPolicy":"Always","repository":"ghcr.io/squat/generic-device-plugin","tag":"latest@sha256:826da38d5a66409d6042ac92dc6357f2e45675cdcedb2d259c893a4392734630"}` | Default image |
| name | string | `"generic-device-plugin"` | Name override of release |
| resources | object | `{"requests":{"cpu":"50m","memory":"10Mi"}}` | Default resources |
| service | object | `{"listenPort":8080}` | Service port |

View File

@@ -4,7 +4,7 @@ name: generic-device-plugin
# -- Default image
image:
repository: ghcr.io/squat/generic-device-plugin
tag: latest@sha256:d9e098e33a20c32a561adb1ef8cace7d5912cd5ffb38f07dd9f83af4bdf38505
tag: latest@sha256:face0477a34f4eb49502226a28d126403b844c2eaee7ce691e7b9529ca8ab123
pullPolicy: Always
# -- Domain used by devices for identifcation

View File

@@ -1,6 +1,6 @@
apiVersion: v2
name: postgres-cluster
version: 7.12.0
version: 7.12.1
description: Cloudnative-pg Cluster
keywords:
- database

View File

@@ -1,6 +1,6 @@
# postgres-cluster
![Version: 7.12.0](https://img.shields.io/badge/Version-7.12.0-informational?style=flat-square) ![AppVersion: v1.29.0](https://img.shields.io/badge/AppVersion-v1.29.0-informational?style=flat-square)
![Version: 7.12.1](https://img.shields.io/badge/Version-7.12.1-informational?style=flat-square) ![AppVersion: v1.29.0](https://img.shields.io/badge/AppVersion-v1.29.0-informational?style=flat-square)
Cloudnative-pg Cluster

View File

@@ -20,24 +20,15 @@ spec:
data:
- secretKey: ACCESS_REGION
remoteRef:
conversionStrategy: Default
decodingStrategy: None
key: {{ .externalSecretCredentialPath | required "External Secret Credential local path is required" }}
metadataPolicy: None
property: ACCESS_REGION
- secretKey: ACCESS_KEY_ID
remoteRef:
conversionStrategy: Default
decodingStrategy: None
key: {{ .externalSecretCredentialPath | required "External Secret Credential local path is required" }}
metadataPolicy: None
property: ACCESS_KEY_ID
- secretKey: ACCESS_SECRET_KEY
remoteRef:
conversionStrategy: Default
decodingStrategy: None
key: {{ .externalSecretCredentialPath| required "External Secret Credential local path is required" }}
metadataPolicy: None
property: ACCESS_SECRET_KEY
{{ end -}}
{{ end }}
@@ -62,23 +53,14 @@ spec:
data:
- secretKey: ACCESS_REGION
remoteRef:
conversionStrategy: Default
decodingStrategy: None
key: {{ .Values.recovery.objectStore.externalSecret.credentialPath | required "External Secret Credential local path is required" }}
metadataPolicy: None
property: ACCESS_REGION
- secretKey: ACCESS_KEY_ID
remoteRef:
conversionStrategy: Default
decodingStrategy: None
key: {{ .Values.recovery.objectStore.externalSecret.credentialPath | required "External Secret Credential local path is required" }}
metadataPolicy: None
property: ACCESS_KEY_ID
- secretKey: ACCESS_SECRET_KEY
remoteRef:
conversionStrategy: Default
decodingStrategy: None
key: {{ .Values.recovery.objectStore.externalSecret.credentialPath | required "External Secret Credential local path is required" }}
metadataPolicy: None
property: ACCESS_SECRET_KEY
{{- end }}

View File

@@ -0,0 +1,6 @@
dependencies:
- name: common
repository: https://bjw-s-labs.github.io/helm-charts/
version: 4.6.2
digest: sha256:35e8f4e5d15d878c246a04eb51de580291f31203fa10e9e4d2318f16026b2061
generated: "2026-04-25T20:40:50.27544-05:00"

View File

@@ -0,0 +1,20 @@
apiVersion: v2
name: rclone-bucket
version: 0.7.0
description: Rclone CronJob to replicate buckets
keywords:
- rclone-bucket
- rclone
- storage
sources:
- https://github.com/rclone/rclone
- https://hub.docker.com/r/rclone/rclone
maintainers:
- name: alexlebens
dependencies:
- name: common
repository: https://bjw-s-labs.github.io/helm-charts/
version: 4.6.2
icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/rclone.png
# renovate: datasource=github-releases depName=rclone/rclone
appVersion: v1.74.0

View File

@@ -0,0 +1,44 @@
# rclone-bucket
![Version: 0.7.0](https://img.shields.io/badge/Version-0.7.0-informational?style=flat-square) ![AppVersion: v1.74.0](https://img.shields.io/badge/AppVersion-v1.74.0-informational?style=flat-square)
Rclone CronJob to replicate buckets
## Maintainers
| Name | Email | Url |
| ---- | ------ | --- |
| alexlebens | | |
## Source Code
* <https://github.com/rclone/rclone>
* <https://hub.docker.com/r/rclone/rclone>
## Requirements
| Repository | Name | Version |
|------------|------|---------|
| https://bjw-s-labs.github.io/helm-charts/ | common | 4.6.2 |
## Values
| Key | Type | Default | Description |
|-----|------|---------|-------------|
| additionalLabels | object | `{}` | Add additional labels |
| cronJob | object | `{"backoffLimit":3,"parallelism":1,"schedule":"0 0 * * *","suspend":false,"timeZone":"America/Chicago"}` | CronJob configuration |
| image | object | `{"pullPolicy":"IfNotPresent","repository":"rclone/rclone","tag":"1.74.0@sha256:d2e0e88359d0b2e67cfcd2c43d5405185eb8adfc207079df27c42da82c5207bc"}` | Default image |
| nameOverride | string | `""` | Default pattern follows <pvcTarget>-backup |
| prune | object | `{"ageToPrune":"90d","enabled":false,"exclude":"","include":""}` | Enable prune job |
| rclone | object | `{"destination":{"bucketName":"bucket","forcePathStyle":true,"providerType":"Other"},"providerType":"Other","source":{"bucketName":"bucket","forcePathStyle":true,"providerType":"Other"}}` | rclone configuration |
| rclone.destination | object | `{"bucketName":"bucket","forcePathStyle":true,"providerType":"Other"}` | Destination configuration |
| rclone.source | object | `{"bucketName":"bucket","forcePathStyle":true,"providerType":"Other"}` | Source configuration |
| secret | object | `{"existingSecretDestination":{"name":"rclone-destination-secret"},"existingSecretSource":{"name":"rclone-source-secret"},"externalSecret":{"additionalLabels":{},"destination":{"config":{"endpointProperty":"ENDPOINT_REMOTE","path":"/config"},"credentials":{"keyIdProperty":"ACCESS_KEY_ID","path":"/credential","regionProperty":"ACCESS_REGION","secretKeyProperty":"ACCESS_SECRET_KEY"},"nameOverride":""},"enabled":true,"source":{"config":{"endpointProperty":"ENDPOINT_LOCAL","path":"/config"},"credentials":{"keyIdProperty":"ACCESS_KEY_ID","path":"/credential","regionProperty":"ACCESS_REGION","secretKeyProperty":"ACCESS_SECRET_KEY"},"nameOverride":""},"storeName":"openbao"}}` | Secret configuration |
| secret.existingSecretSource | object | `{"name":"rclone-source-secret"}` | Name of existing secret that contains the configuration |
| secret.externalSecret | object | `{"additionalLabels":{},"destination":{"config":{"endpointProperty":"ENDPOINT_REMOTE","path":"/config"},"credentials":{"keyIdProperty":"ACCESS_KEY_ID","path":"/credential","regionProperty":"ACCESS_REGION","secretKeyProperty":"ACCESS_SECRET_KEY"},"nameOverride":""},"enabled":true,"source":{"config":{"endpointProperty":"ENDPOINT_LOCAL","path":"/config"},"credentials":{"keyIdProperty":"ACCESS_KEY_ID","path":"/credential","regionProperty":"ACCESS_REGION","secretKeyProperty":"ACCESS_SECRET_KEY"},"nameOverride":""},"storeName":"openbao"}` | External Secret configuration |
| secret.externalSecret.additionalLabels | object | `{}` | Add additional labels |
| secret.externalSecret.destination | object | `{"config":{"endpointProperty":"ENDPOINT_REMOTE","path":"/config"},"credentials":{"keyIdProperty":"ACCESS_KEY_ID","path":"/credential","regionProperty":"ACCESS_REGION","secretKeyProperty":"ACCESS_SECRET_KEY"},"nameOverride":""}` | Destination configuration |
| secret.externalSecret.source | object | `{"config":{"endpointProperty":"ENDPOINT_LOCAL","path":"/config"},"credentials":{"keyIdProperty":"ACCESS_KEY_ID","path":"/credential","regionProperty":"ACCESS_REGION","secretKeyProperty":"ACCESS_SECRET_KEY"},"nameOverride":""}` | Source configuration |
----------------------------------------------
Autogenerated from chart metadata using [helm-docs v1.14.2](https://github.com/norwoodj/helm-docs/releases/v1.14.2)

View File

@@ -0,0 +1,90 @@
{{/*
Generate the root name
*/}}
{{- define "rclone.name" -}}
{{- if .Values.nameOverride }}
{{- .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- printf "%s-rclone" .Values.rclone.source.bucketName | trunc 63 | trimSuffix "-" -}}
{{- end }}
{{- end }}
{{/*
Generate the secret name
*/}}
{{- define "rclone.sourceSecretName" -}}
{{- if .Values.secret.externalSecret.enabled }}
{{- if .Values.secret.externalSecret.source.nameOverride }}
{{- .Values.secret.externalSecret.source.nameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- printf "%s-rclone-source-config" .Values.rclone.source.bucketName -}}
{{- end }}
{{- else if .Values.secret.existingSecretSource.name }}
{{- printf "%s" .Values.secret.existingSecretSource.name -}}
{{- else }}
{{ fail "No Secret Name Found!" }}
{{- end }}
{{- end }}
{{- define "rclone.destinationSecretName" -}}
{{- if .Values.secret.externalSecret.enabled }}
{{- if .Values.secret.externalSecret.destination.nameOverride }}
{{- .Values.secret.externalSecret.destination.nameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
{{- printf "%s-rclone-destination-config" .Values.rclone.destination.bucketName -}}
{{- end }}
{{- else if .Values.secret.existingSecretDestination.name }}
{{- printf "%s" .Values.secret.existingSecretDestination.name -}}
{{- else }}
{{ fail "No Secret Name Found!" }}
{{- end }}
{{- end }}
{{/*
Common env names
*/}}
{{- define "secretRclone.envAccessKey" -}}
ACCESS_KEY_ID
{{- end }}
{{- define "secretRclone.envSecretKey" -}}
ACCESS_SECRET_KEY
{{- end }}
{{- define "secretRclone.envRegion" -}}
ACCESS_REGION
{{- end }}
{{- define "secretRclone.envSrcEndpoint" -}}
SRC_ENDPOINT
{{- end }}
{{- define "secretRclone.envDestEndpoint" -}}
DEST_ENDPOINT
{{- end }}
{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "secretRclone.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/*
Common labels
*/}}
{{- define "secretRclone.labels" -}}
helm.sh/chart: {{ include "secretRclone.chart" $ }}
{{ include "secretRclone.selectorLabels" $ }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.Version | quote }}
{{- end }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- with .Values.secret.externalSecret.additionalLabels }}
{{ toYaml . }}
{{- end }}
{{- end }}
{{/*
Selector labels
*/}}
{{- define "secretRclone.selectorLabels" -}}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/part-of: {{ .Release.Name }}
{{- end }}

View File

@@ -0,0 +1,143 @@
{{- include "bjw-s.common.loader.init" . }}
{{- define "rclone.hardcodedValues" -}}
global:
nameOverride: {{ include "rclone.name" . }}
fullNameOverride: {{ include "rclone.name" . }}
controllers:
main:
type: cronjob
{{- with .Values.cronJob }}
cronjob:
{{- toYaml . | nindent 6 }}
{{ end }}
containers:
sync:
image:
repository: {{ .Values.image.repository }}
tag: {{ .Values.image.tag }}
pullPolicy: {{ .Values.image.pullPolicy }}
args:
- sync
- src:{{ .Values.rclone.source.bucketName }}
- dest:{{ .Values.rclone.destination.bucketName }}
- --s3-no-check-bucket
{{- if .Values.prune.enabled }}
- --max-age
- {{ .Values.prune.ageToPrune | quote }}
{{- end }}
{{- if .Values.prune.include }}
- --include
- {{ .Values.prune.include | quote }}
{{- end }}
{{- if .Values.prune.exclude }}
- --exclude
- {{ .Values.prune.exclude | quote }}
{{- end }}
- --verbose
env:
- name: RCLONE_S3_PROVIDER
value: {{ .Values.rclone.providerType }}
- name: RCLONE_CONFIG_SRC_TYPE
value: s3
- name: RCLONE_CONFIG_SRC_PROVIDER
value: {{ .Values.rclone.source.providerType }}
- name: RCLONE_CONFIG_SRC_ENV_AUTH
value: "false"
- name: RCLONE_CONFIG_SRC_ACCESS_KEY_ID
valueFrom:
secretKeyRef:
name: {{ include "rclone.sourceSecretName" . }}
key: {{ include "secretRclone.envAccessKey" . }}
- name: RCLONE_CONFIG_SRC_SECRET_ACCESS_KEY
valueFrom:
secretKeyRef:
name: {{ include "rclone.sourceSecretName" . }}
key: {{ include "secretRclone.envSecretKey" . }}
- name: RCLONE_CONFIG_SRC_REGION
valueFrom:
secretKeyRef:
name: {{ include "rclone.sourceSecretName" . }}
key: {{ include "secretRclone.envRegion" . }}
- name: RCLONE_CONFIG_SRC_ENDPOINT
valueFrom:
secretKeyRef:
name: {{ include "rclone.sourceSecretName" . }}
key: {{ include "secretRclone.envSrcEndpoint" . }}
- name: RCLONE_CONFIG_SRC_FORCE_PATH_STYLE
value: {{ .Values.rclone.source.forcePathStyle | quote }}
- name: RCLONE_CONFIG_DEST_TYPE
value: s3
- name: RCLONE_CONFIG_DEST_PROVIDER
value: {{ .Values.rclone.destination.providerType }}
- name: RCLONE_CONFIG_DEST_ENV_AUTH
value: "false"
- name: RCLONE_CONFIG_DEST_ACCESS_KEY_ID
valueFrom:
secretKeyRef:
name: {{ include "rclone.destinationSecretName" . }}
key: {{ include "secretRclone.envAccessKey" . }}
- name: RCLONE_CONFIG_DEST_SECRET_ACCESS_KEY
valueFrom:
secretKeyRef:
name: {{ include "rclone.destinationSecretName" . }}
key: {{ include "secretRclone.envSecretKey" . }}
- name: RCLONE_CONFIG_DEST_REGION
valueFrom:
secretKeyRef:
name: {{ include "rclone.destinationSecretName" . }}
key: {{ include "secretRclone.envRegion" . }}
- name: RCLONE_CONFIG_DEST_ENDPOINT
valueFrom:
secretKeyRef:
name: {{ include "rclone.destinationSecretName" . }}
key: {{ include "secretRclone.envDestEndpoint" . }}
- name: RCLONE_CONFIG_DEST_FORCE_PATH_STYLE
value: {{ .Values.rclone.destination.forcePathStyle | quote }}
{{- if .Values.prune.enabled }}
prune:
image:
repository: {{ .Values.image.repository }}
tag: {{ .Values.image.tag }}
pullPolicy: {{ .Values.image.pullPolicy }}
args:
- delete
- dest:{{ .Values.rclone.destination.bucketName }}
- --min-age
- {{ .Values.prune.ageToPrune | quote }}
- --verbose
env:
- name: RCLONE_CONFIG_DEST_TYPE
value: s3
- name: RCLONE_CONFIG_DEST_PROVIDER
value: {{ .Values.rclone.destination.providerType }}
- name: RCLONE_CONFIG_DEST_ENV_AUTH
value: "false"
- name: RCLONE_CONFIG_DEST_ACCESS_KEY_ID
valueFrom:
secretKeyRef:
name: {{ include "rclone.destinationSecretName" . }}
key: {{ include "secretRclone.envAccessKey" . }}
- name: RCLONE_CONFIG_DEST_SECRET_ACCESS_KEY
valueFrom:
secretKeyRef:
name: {{ include "rclone.destinationSecretName" . }}
key: {{ include "secretRclone.envSecretKey" . }}
- name: RCLONE_CONFIG_DEST_REGION
valueFrom:
secretKeyRef:
name: {{ include "rclone.destinationSecretName" . }}
key: {{ include "secretRclone.envRegion" . }}
- name: RCLONE_CONFIG_DEST_ENDPOINT
valueFrom:
secretKeyRef:
name: {{ include "rclone.destinationSecretName" . }}
key: {{ include "secretRclone.envDestEndpoint" . }}
- name: RCLONE_CONFIG_DEST_FORCE_PATH_STYLE
value: {{ .Values.rclone.destination.forcePathStyle | quote }}
{{- end }}
{{- end -}}
{{- $_ := mergeOverwrite .Values (include "rclone.hardcodedValues" . | fromYaml) -}}
{{/* Render the templates */}}
{{ include "bjw-s.common.loader.generate" . }}

View File

@@ -0,0 +1,69 @@
{{- if .Values.secret.externalSecret.enabled }}
---
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: {{ include "rclone.sourceSecretName" . }}
namespace: {{ .Release.Namespace }}
labels:
{{- include "secretRclone.labels" . | nindent 4 }}
app.kubernetes.io/name: {{ include "rclone.sourceSecretName" . }}
{{- with .Values.additionalLabels }}
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
secretStoreRef:
kind: ClusterSecretStore
name: {{ .Values.secret.externalSecret.storeName | required "External Secret store name is required" }}
data:
- secretKey: {{ include "secretRclone.envAccessKey" . }}
remoteRef:
key: {{ .Values.secret.externalSecret.source.credentials.path }}
property: {{ .Values.secret.externalSecret.source.credentials.keyIdProperty }}
- secretKey: {{ include "secretRclone.envSecretKey" . }}
remoteRef:
key: {{ .Values.secret.externalSecret.source.credentials.path }}
property: {{ .Values.secret.externalSecret.source.credentials.secretKeyProperty }}
- secretKey: {{ include "secretRclone.envRegion" . }}
remoteRef:
key: {{ .Values.secret.externalSecret.source.credentials.path }}
property: {{ .Values.secret.externalSecret.source.credentials.regionProperty }}
- secretKey: {{ include "secretRclone.envSrcEndpoint" . }}
remoteRef:
key: {{ .Values.secret.externalSecret.source.config.path }}
property: {{ .Values.secret.externalSecret.source.config.endpointProperty }}
---
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: {{ include "rclone.destinationSecretName" . }}
namespace: {{ .Release.Namespace }}
labels:
{{- include "secretRclone.labels" . | nindent 4 }}
app.kubernetes.io/name: {{ include "rclone.destinationSecretName" . }}
{{- with .Values.additionalLabels }}
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
secretStoreRef:
kind: ClusterSecretStore
name: {{ .Values.secret.externalSecret.storeName | required "External Secret store name is required" }}
data:
- secretKey: {{ include "secretRclone.envAccessKey" . }}
remoteRef:
key: {{ .Values.secret.externalSecret.destination.credentials.path }}
property: {{ .Values.secret.externalSecret.destination.credentials.keyIdProperty }}
- secretKey: {{ include "secretRclone.envSecretKey" . }}
remoteRef:
key: {{ .Values.secret.externalSecret.destination.credentials.path }}
property: {{ .Values.secret.externalSecret.destination.credentials.secretKeyProperty }}
- secretKey: {{ include "secretRclone.envRegion" . }}
remoteRef:
key: {{ .Values.secret.externalSecret.destination.credentials.path }}
property: {{ .Values.secret.externalSecret.destination.credentials.regionProperty }}
- secretKey: {{ include "secretRclone.envDestEndpoint" . }}
remoteRef:
key: {{ .Values.secret.externalSecret.destination.config.path }}
property: {{ .Values.secret.externalSecret.destination.config.endpointProperty }}
{{- end }}

View File

@@ -0,0 +1,84 @@
# -- Default pattern follows <pvcTarget>-backup
nameOverride: ""
# -- Add additional labels
additionalLabels: {}
# -- Default image
image:
repository: rclone/rclone
tag: 1.74.0@sha256:d2e0e88359d0b2e67cfcd2c43d5405185eb8adfc207079df27c42da82c5207bc
pullPolicy: IfNotPresent
# -- CronJob configuration
cronJob:
suspend: false
timeZone: America/Chicago
schedule: 0 0 * * *
backoffLimit: 3
parallelism: 1
# -- rclone configuration
rclone:
providerType: Other
# -- Source configuration
source:
providerType: Other
bucketName: bucket
forcePathStyle: true
# -- Destination configuration
destination:
providerType: Other
bucketName: bucket
forcePathStyle: true
# -- Enable prune job
prune:
enabled: false
ageToPrune: 90d
include: ""
exclude: ""
# -- Secret configuration
secret:
# -- External Secret configuration
externalSecret:
enabled: true
storeName: openbao
# -- Source configuration
source:
nameOverride: ""
credentials:
path: /credential
keyIdProperty: ACCESS_KEY_ID
secretKeyProperty: ACCESS_SECRET_KEY
regionProperty: ACCESS_REGION
config:
path: /config
endpointProperty: ENDPOINT_LOCAL
# -- Destination configuration
destination:
nameOverride: ""
credentials:
path: /credential
keyIdProperty: ACCESS_KEY_ID
secretKeyProperty: ACCESS_SECRET_KEY
regionProperty: ACCESS_REGION
config:
path: /config
endpointProperty: ENDPOINT_REMOTE
# -- Add additional labels
additionalLabels: {}
# -- Name of existing secret that contains the configuration
existingSecretSource:
name: rclone-source-secret
existingSecretDestination:
name: rclone-destination-secret

View File

@@ -1,6 +1,6 @@
apiVersion: v2
name: valkey
version: 0.6.1
version: 0.7.1
description: Valkey chart with preconfigured settings
keywords:
- valkey
@@ -19,4 +19,4 @@ dependencies:
version: 0.9.4
icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/png/valkey.png
# renovate: datasource=github-releases depName=valkey-io/valkey
appVersion: 9.0.3
appVersion: 9.0.4

View File

@@ -1,6 +1,6 @@
# valkey
![Version: 0.6.1](https://img.shields.io/badge/Version-0.6.1-informational?style=flat-square) ![AppVersion: 9.0.3](https://img.shields.io/badge/AppVersion-9.0.3-informational?style=flat-square)
![Version: 0.7.0](https://img.shields.io/badge/Version-0.7.0-informational?style=flat-square) ![AppVersion: 9.0.3](https://img.shields.io/badge/AppVersion-9.0.3-informational?style=flat-square)
Valkey chart with preconfigured settings
@@ -39,7 +39,7 @@ Valkey chart with preconfigured settings
| valkey.metrics.enabled | bool | `true` | |
| valkey.metrics.exporter.image.registry | string | `"ghcr.io"` | |
| valkey.metrics.exporter.image.repository | string | `"oliver006/redis_exporter"` | |
| valkey.metrics.exporter.image.tag | string | `"v1.82.0@sha256:6a97d4dd743b533e1f950c677b87d880e44df363c61af3f406fc9e53ed65ee03"` | |
| valkey.metrics.exporter.image.tag | string | `"v1.83.0@sha256:e8c209894d4c0cc55b1259ddd47e0b769ad1ff864b356736ee885462a3b0e48c"` | |
| valkey.metrics.exporter.resources.requests.cpu | string | `"1m"` | |
| valkey.metrics.exporter.resources.requests.memory | string | `"10M"` | |
| valkey.metrics.podMonitor.enabled | bool | `true` | |

View File

@@ -31,7 +31,7 @@ valkey:
image:
registry: ghcr.io
repository: oliver006/redis_exporter
tag: v1.82.0@sha256:6a97d4dd743b533e1f950c677b87d880e44df363c61af3f406fc9e53ed65ee03
tag: v1.83.0@sha256:e8c209894d4c0cc55b1259ddd47e0b769ad1ff864b356736ee885462a3b0e48c
resources:
requests:
cpu: 1m

View File

@@ -1,6 +1,6 @@
apiVersion: v2
name: volsync-target
version: 1.0.0
version: 1.1.1
description: Volsync Replication set to target specific PVC with preconfigured settings
keywords:
- volsync-target

View File

@@ -1,6 +1,6 @@
# volsync-target
![Version: 1.0.0](https://img.shields.io/badge/Version-1.0.0-informational?style=flat-square) ![AppVersion: 0.15.0](https://img.shields.io/badge/AppVersion-0.15.0-informational?style=flat-square)
![Version: 1.1.1](https://img.shields.io/badge/Version-1.1.1-informational?style=flat-square) ![AppVersion: 0.15.0](https://img.shields.io/badge/AppVersion-0.15.0-informational?style=flat-square)
Volsync Replication set to target specific PVC with preconfigured settings
@@ -33,6 +33,7 @@ Volsync Replication set to target specific PVC with preconfigured settings
| moverSecurityContext | object | `{}` | Glocal security context for restic mover |
| nameOverride | string | `""` | Default pattern follows <pvcTarget>-backup |
| namespaceOverride | string | `""` | Override the namespace of the chart |
| prometheusRule | object | `{"enabled":true}` | Prometheus Rule |
| pvcTarget | string | `"data"` | Name of the PVC target |
| remote | object | `{"enabled":false,"externalSecret":{"bucketPath":"/garage/config","credentialPath":"/garage/home-infra/volsync-backups"},"restic":{"cacheCapacity":"1Gi","copyMethod":"Snapshot","pruneIntervalDays":7,"repository":"","retain":{"daily":7,"hourly":0,"monthly":3,"weekly":4,"yearly":1},"storageClassName":"ceph-block","volumeSnapshotClassName":"ceph-blockpool-snapshot"},"schedule":"0 10 * * *"}` | Remote backup configuration |
| remote.externalSecret | object | `{"bucketPath":"/garage/config","credentialPath":"/garage/home-infra/volsync-backups"}` | External Secret configuration |

View File

@@ -0,0 +1,32 @@
{{- if .Values.prometheusRule.enabled }}
---
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: {{ include "volsync.name" . }}-source-local
namespace: {{ include "volsync.namespace" . }}
labels:
{{- include "volsync.labels" . | nindent 4 }}
app.kubernetes.io/name: {{ include "volsync.name" . }}-source-local
{{- with .Values.additionalLabels }}
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
groups:
- name: volsync.alerts
rules:
- alert: VolSyncBackupPodFailed
expr: |
(kube_pod_container_status_last_terminated_exitcode > 0)
* on(pod, namespace) group_left(owner_name)
kube_pod_owner{owner_kind="Job", owner_name=~"volsync-.*"}
for: 1m
labels:
severity: critical
annotations:
summary: "VolSync Backup Pod failed in {{ `{{ $labels.namespace }}` }}"
description: |
A pod for the VolSync backup of PVC '{{ .Values.pvcTarget }}' failed with exit code {{ `{{ $value }}` }}.
Job: {{ `{{ $labels.owner_name }}` }}
Namespace: {{ `{{ $labels.namespace }}` }}
{{- end }}

View File

@@ -7,7 +7,7 @@ metadata:
namespace: {{ include "volsync.namespace" . }}
labels:
{{- include "volsync.labels" . | nindent 4 }}
app.kubernetes.io/name: {{ include "volsync.name" . }}
app.kubernetes.io/name: {{ include "volsync.name" . }}-source-local
{{- with .Values.additionalLabels }}
{{- toYaml . | nindent 4 }}
{{- end }}

View File

@@ -16,6 +16,10 @@ pvcTarget: "data"
# -- Glocal security context for restic mover
moverSecurityContext: {}
# -- Prometheus Rule
prometheusRule:
enabled: true
# -- Use external secrets
externalSecrets:
enabled: true