Compare commits
37 Commits
de7bd60256
...
redis-repl
| Author | SHA1 | Date | |
|---|---|---|---|
| 96154b9be9 | |||
| 06a206e4b3 | |||
| e49f293690 | |||
| 98b01ba2a4 | |||
| fdc027a298 | |||
| 74577ae63d | |||
| 1e52cebbd3 | |||
| 5bc8c7286c | |||
| 7c8145f741 | |||
|
c2ef2a6e0b
|
|||
| 0fda9c9db4 | |||
| 0765ad2336 | |||
| fb667e69bd | |||
|
577d6d9288
|
|||
| 83f23d6f4a | |||
| ef6c469f6c | |||
| 28e6783d73 | |||
| f7b6037ffc | |||
|
3941d174a8
|
|||
| f693b7f16f | |||
| 1ac412eafe | |||
| 15458b55cb | |||
| 60288e9ab6 | |||
| b35dbccfd2 | |||
| c69733c6bb | |||
| 6a2dbcaf85 | |||
| 47799c0d0d | |||
| 4c0cb5fe18 | |||
| 857c53799a | |||
| 2f09ce9dc0 | |||
| 64d4c731c7 | |||
| 80a4a3fa39 | |||
| d9ce69b996 | |||
| 0767066fc5 | |||
| 749f62a791 | |||
| a429797e5e | |||
| 52078fa459 |
@@ -2,9 +2,22 @@ name: lint-and-test
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- 'charts/**'
|
||||
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- 'charts/**'
|
||||
|
||||
env:
|
||||
BASE_BRANCH: "origin/${{ gitea.base_ref }}"
|
||||
|
||||
jobs:
|
||||
lint-test:
|
||||
chart-testing:
|
||||
runs-on: ubuntu-js
|
||||
steps:
|
||||
- name: Checkout
|
||||
@@ -15,7 +28,13 @@ jobs:
|
||||
- name: Set up Helm
|
||||
uses: azure/setup-helm@v4
|
||||
with:
|
||||
version: latest
|
||||
token: ${{ secrets.GITEA_TOKEN }}
|
||||
version: v3.19.2
|
||||
|
||||
- name: Set up Node.js
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: '24'
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v6
|
||||
@@ -53,3 +72,155 @@ jobs:
|
||||
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=lint-test.yaml", "clear": true}]'
|
||||
image: true
|
||||
|
||||
lint-helm:
|
||||
runs-on: ubuntu-js
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Check Branch Exists
|
||||
id: check-branch-exists
|
||||
if: github.event_name == 'pull_request'
|
||||
uses: GuillaumeFalourd/branch-exists@v1.1
|
||||
with:
|
||||
branch: ${{ gitea.base_ref }}
|
||||
|
||||
- name: Report Branch Exists
|
||||
id: branch-exists
|
||||
if: github.event_name == 'push' || steps.check-branch-exists.outputs.exists == 'true' && github.event_name == 'pull_request'
|
||||
run: |
|
||||
if [ ${{ github.event_name == 'push' }} ]; then
|
||||
echo ">> Action is from a push event, will continue with linting"
|
||||
|
||||
else
|
||||
echo ">> Branch ${{ gitea.base_ref }} exists, will continue with linting"
|
||||
|
||||
fi
|
||||
|
||||
echo "----"
|
||||
|
||||
echo "exists=true" >> $GITEA_OUTPUT
|
||||
|
||||
- name: Set up Helm
|
||||
uses: azure/setup-helm@v4
|
||||
if: steps.branch-exists.outputs.exists == 'true'
|
||||
with:
|
||||
token: ${{ secrets.GITEA_TOKEN }}
|
||||
version: v3
|
||||
|
||||
- name: Check Directories for Changes
|
||||
id: check-dir-changes
|
||||
if: steps.branch-exists.outputs.exists == 'true'
|
||||
run: |
|
||||
CHANGED_CHARTS=()
|
||||
|
||||
echo ">> Target branch for diff is: ${BASE_BRANCH}"
|
||||
|
||||
if [ "${{ github.event_name }}" == "pull_request" ]; then
|
||||
echo ""
|
||||
echo ">> Checking for changes in a pull request ..."
|
||||
GIT_DIFF=$(git diff --name-only "${BASE_BRANCH}" | xargs -I {} dirname {} | sort -u | grep -E "charts/")
|
||||
else
|
||||
echo ""
|
||||
echo ">> Checking for changes from a push ..."
|
||||
GIT_DIFF=$(git diff --name-only ${{ gitea.event.before }}..HEAD | xargs -I {} dirname {} | sort -u | grep -E "charts/")
|
||||
fi
|
||||
|
||||
if [ -n "${GIT_DIFF}" ]; then
|
||||
echo ""
|
||||
echo ">> Changes detected:"
|
||||
echo "$GIT_DIFF"
|
||||
|
||||
for path in $GIT_DIFF; do
|
||||
CHANGED_CHARTS+=$(echo "$path" | awk -F '/' '{print $2}')
|
||||
CHANGED_CHARTS+=$(echo " ")
|
||||
done
|
||||
|
||||
else
|
||||
echo ""
|
||||
echo ">> No changes detected"
|
||||
|
||||
fi
|
||||
|
||||
if [ -n "${CHANGED_CHARTS}" ]; then
|
||||
echo ""
|
||||
echo ">> Chart to Lint:"
|
||||
echo "$(echo "${CHANGED_CHARTS}" | sort -u)"
|
||||
|
||||
echo "----"
|
||||
|
||||
echo "changes-detected=true" >> $GITEA_OUTPUT
|
||||
echo "chart-dir<<EOF" >> $GITEA_OUTPUT
|
||||
echo "$(echo "${CHANGED_CHARTS}" | sort -u)" >> $GITEA_OUTPUT
|
||||
echo "EOF" >> $GITEA_OUTPUT
|
||||
else
|
||||
echo "changes-detected=false" >> $GITEA_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Add Repositories
|
||||
if: steps.check-dir-changes.outputs.changes-detected == 'true'
|
||||
env:
|
||||
CHANGED_CHARTS: ${{ steps.check-dir-changes.outputs.chart-dir }}
|
||||
run: |
|
||||
echo ">> Adding repositories for chart dependencies ..."
|
||||
for dir in ${CHANGED_CHARTS}; do
|
||||
helm dependency list --max-col-width 120 charts/$dir 2> /dev/null \
|
||||
| tail +2 | head -n -1 \
|
||||
| awk '{ print "helm repo add " $1 " " $3 }' \
|
||||
| while read cmd; do echo "$cmd" | sh; done || true
|
||||
done
|
||||
|
||||
if helm repo list | tail +2 | read -r; then
|
||||
echo ""
|
||||
echo ">> Update repository cache ..."
|
||||
helm repo update
|
||||
fi
|
||||
|
||||
echo "----"
|
||||
|
||||
- name: Lint Helm Chart
|
||||
if: steps.check-dir-changes.outputs.changes-detected == 'true'
|
||||
env:
|
||||
CHANGED_CHARTS: ${{ steps.check-dir-changes.outputs.chart-dir }}
|
||||
run: |
|
||||
echo ">> Running linting on changed charts ..."
|
||||
|
||||
for dir in ${CHANGED_CHARTS}; do
|
||||
chart_path=charts/$dir
|
||||
chart_name=$(basename "$chart_path")
|
||||
|
||||
if [ -f "$chart_path/Chart.yaml" ]; then
|
||||
cd $chart_path
|
||||
|
||||
echo ""
|
||||
echo ">> Building helm dependency ..."
|
||||
helm dependency build --skip-refresh
|
||||
|
||||
echo ""
|
||||
echo ">> Linting helm ..."
|
||||
helm lint --namespace "$chart_name"
|
||||
|
||||
else
|
||||
echo ""
|
||||
echo ">> Directory $chart_path does not contain a Chart.yaml. Skipping ..."
|
||||
echo ""
|
||||
fi
|
||||
done
|
||||
|
||||
- name: ntfy Failed
|
||||
uses: niniyas/ntfy-action@master
|
||||
if: failure()
|
||||
with:
|
||||
url: '${{ secrets.NTFY_URL }}'
|
||||
topic: '${{ secrets.NTFY_TOPIC }}'
|
||||
title: 'Test Failure - Helm Charts'
|
||||
priority: 3
|
||||
headers: '{"Authorization": "Bearer ${{ secrets.NTFY_CRED }}"}'
|
||||
tags: action,failed
|
||||
details: 'Tests have failed for Helm Charts'
|
||||
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=lint-test.yaml", "clear": true}]'
|
||||
image: true
|
||||
|
||||
@@ -23,28 +23,71 @@ jobs:
|
||||
uses: azure/setup-helm@v4
|
||||
with:
|
||||
token: ${{ secrets.GITEA_TOKEN }}
|
||||
version: latest
|
||||
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
|
||||
helm dependency build
|
||||
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: |
|
||||
helm registry login ${{ vars.REGISTRY_HOST }} -u ${{ vars.REGISTRY_USER }} -p ${{ secrets.REGISTRY_SECRET }}
|
||||
helm push ${{ env.PACKAGE_PATH }} oci://${{ vars.REGISTRY_HOST }}/helm-charts
|
||||
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: |
|
||||
helm plugin install https://github.com/chartmuseum/helm-push
|
||||
helm repo add --username ${{ gitea.actor }} --password ${{ secrets.REPOSITORY_TOKEN }} helm-charts https://${{ vars.REPOSITORY_HOST }}/api/packages/alexlebens/helm
|
||||
helm cm-push ${{ env.PACKAGE_PATH }} helm-charts
|
||||
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
|
||||
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
|
||||
|
||||
|
||||
@@ -23,28 +23,71 @@ jobs:
|
||||
uses: azure/setup-helm@v4
|
||||
with:
|
||||
token: ${{ secrets.GITEA_TOKEN }}
|
||||
version: latest
|
||||
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
|
||||
helm dependency build
|
||||
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: |
|
||||
helm registry login ${{ vars.REGISTRY_HOST }} -u ${{ vars.REGISTRY_USER }} -p ${{ secrets.REGISTRY_SECRET }}
|
||||
helm push ${{ env.PACKAGE_PATH }} oci://${{ vars.REGISTRY_HOST }}/helm-charts
|
||||
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: |
|
||||
helm plugin install https://github.com/chartmuseum/helm-push
|
||||
helm repo add --username ${{ gitea.actor }} --password ${{ secrets.REPOSITORY_TOKEN }} helm-charts https://${{ vars.REPOSITORY_HOST }}/api/packages/alexlebens/helm
|
||||
helm cm-push ${{ env.PACKAGE_PATH }} helm-charts
|
||||
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
|
||||
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
|
||||
|
||||
|
||||
@@ -23,28 +23,71 @@ jobs:
|
||||
uses: azure/setup-helm@v4
|
||||
with:
|
||||
token: ${{ secrets.GITEA_TOKEN }}
|
||||
version: latest
|
||||
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
|
||||
helm dependency build
|
||||
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: |
|
||||
helm registry login ${{ vars.REGISTRY_HOST }} -u ${{ vars.REGISTRY_USER }} -p ${{ secrets.REGISTRY_SECRET }}
|
||||
helm push ${{ env.PACKAGE_PATH }} oci://${{ vars.REGISTRY_HOST }}/helm-charts
|
||||
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: |
|
||||
helm plugin install https://github.com/chartmuseum/helm-push
|
||||
helm repo add --username ${{ gitea.actor }} --password ${{ secrets.REPOSITORY_TOKEN }} helm-charts https://${{ vars.REPOSITORY_HOST }}/api/packages/alexlebens/helm
|
||||
helm cm-push ${{ env.PACKAGE_PATH }} helm-charts
|
||||
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
|
||||
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
|
||||
|
||||
|
||||
@@ -23,28 +23,71 @@ jobs:
|
||||
uses: azure/setup-helm@v4
|
||||
with:
|
||||
token: ${{ secrets.GITEA_TOKEN }}
|
||||
version: latest
|
||||
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
|
||||
helm dependency build
|
||||
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: |
|
||||
helm registry login ${{ vars.REGISTRY_HOST }} -u ${{ vars.REGISTRY_USER }} -p ${{ secrets.REGISTRY_SECRET }}
|
||||
helm push ${{ env.PACKAGE_PATH }} oci://${{ vars.REGISTRY_HOST }}/helm-charts
|
||||
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: |
|
||||
helm plugin install https://github.com/chartmuseum/helm-push
|
||||
helm repo add --username ${{ gitea.actor }} --password ${{ secrets.REPOSITORY_TOKEN }} helm-charts https://${{ vars.REPOSITORY_HOST }}/api/packages/alexlebens/helm
|
||||
helm cm-push ${{ env.PACKAGE_PATH }} helm-charts
|
||||
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
|
||||
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
|
||||
|
||||
|
||||
128
.gitea/workflows/release-charts-redis-replication.yml
Normal file
128
.gitea/workflows/release-charts-redis-replication.yml
Normal file
@@ -0,0 +1,128 @@
|
||||
name: release-charts-redis-replication
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- "charts/redis-replication/**"
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
env:
|
||||
WORKFLOW_DIR: "charts/redis-replication"
|
||||
|
||||
jobs:
|
||||
release:
|
||||
runs-on: ubuntu-js
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Set up Helm
|
||||
uses: azure/setup-helm@v4
|
||||
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-redis-replication.yml", "clear": true}]'
|
||||
image: true
|
||||
10
.github/workflows/release-charts.yml
vendored
10
.github/workflows/release-charts.yml
vendored
@@ -23,6 +23,16 @@ jobs:
|
||||
git config user.name "$GITHUB_ACTOR"
|
||||
git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
|
||||
|
||||
- name: Add Repositories
|
||||
run: |
|
||||
echo ">> Adding repositories for chart dependencies ..."
|
||||
for dir in $(ls -d charts/*/); do
|
||||
helm dependency list $dir --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
|
||||
done
|
||||
|
||||
- name: Run chart-releaser
|
||||
uses: helm/chart-releaser-action@v1.7.0
|
||||
env:
|
||||
|
||||
10
.gitignore
vendored
10
.gitignore
vendored
@@ -1,12 +1,2 @@
|
||||
# Archived
|
||||
charts/**/archive
|
||||
|
||||
# Compiled Helm chart dependencies
|
||||
charts/**/Chart.lock
|
||||
charts/**/charts/
|
||||
|
||||
# Testing
|
||||
__snapshot__/
|
||||
|
||||
# Docs
|
||||
_site/
|
||||
|
||||
6
charts/cloudflared/Chart.lock
Normal file
6
charts/cloudflared/Chart.lock
Normal file
@@ -0,0 +1,6 @@
|
||||
dependencies:
|
||||
- name: common
|
||||
repository: https://bjw-s-labs.github.io/helm-charts/
|
||||
version: 4.5.0
|
||||
digest: sha256:cd050e107fbec6769024a6d316c3f43701295a55cddf53a9fc304b52ea879560
|
||||
generated: "2025-12-04T18:06:50.235715-06:00"
|
||||
@@ -1,6 +1,6 @@
|
||||
apiVersion: v2
|
||||
name: cloudflared
|
||||
version: 1.23.0
|
||||
version: 1.23.2
|
||||
description: Cloudflared Tunnel
|
||||
keywords:
|
||||
- cloudflare
|
||||
@@ -13,6 +13,6 @@ maintainers:
|
||||
dependencies:
|
||||
- name: common
|
||||
repository: https://bjw-s-labs.github.io/helm-charts/
|
||||
version: 4.4.0
|
||||
version: 4.5.0
|
||||
icon: https://avatars.githubusercontent.com/u/314135?s=48&v=4
|
||||
appVersion: "2025.10.0"
|
||||
appVersion: "2025.11.1"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# cloudflared
|
||||
|
||||
 
|
||||
 
|
||||
|
||||
Cloudflared Tunnel
|
||||
|
||||
@@ -19,7 +19,7 @@ Cloudflared Tunnel
|
||||
|
||||
| Repository | Name | Version |
|
||||
|------------|------|---------|
|
||||
| https://bjw-s-labs.github.io/helm-charts/ | common | 4.4.0 |
|
||||
| https://bjw-s-labs.github.io/helm-charts/ | common | 4.5.0 |
|
||||
|
||||
## Values
|
||||
|
||||
|
||||
6
charts/generic-device-plugin/Chart.lock
Normal file
6
charts/generic-device-plugin/Chart.lock
Normal file
@@ -0,0 +1,6 @@
|
||||
dependencies:
|
||||
- name: common
|
||||
repository: https://bjw-s-labs.github.io/helm-charts/
|
||||
version: 4.5.0
|
||||
digest: sha256:cd050e107fbec6769024a6d316c3f43701295a55cddf53a9fc304b52ea879560
|
||||
generated: "2025-12-04T18:08:17.823318-06:00"
|
||||
@@ -1,6 +1,6 @@
|
||||
apiVersion: v2
|
||||
name: generic-device-plugin
|
||||
version: 0.20.3
|
||||
version: 0.20.7
|
||||
description: Generic Device Plugin
|
||||
keywords:
|
||||
- generic-device-plugin
|
||||
@@ -14,5 +14,5 @@ maintainers:
|
||||
dependencies:
|
||||
- name: common
|
||||
repository: https://bjw-s-labs.github.io/helm-charts/
|
||||
version: 4.4.0
|
||||
appVersion: 0.20.3
|
||||
version: 4.5.0
|
||||
appVersion: 0.20.4
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# generic-device-plugin
|
||||
|
||||
 
|
||||
 
|
||||
|
||||
Generic Device Plugin
|
||||
|
||||
@@ -19,7 +19,7 @@ Generic Device Plugin
|
||||
|
||||
| Repository | Name | Version |
|
||||
|------------|------|---------|
|
||||
| https://bjw-s-labs.github.io/helm-charts/ | common | 4.4.0 |
|
||||
| https://bjw-s-labs.github.io/helm-charts/ | common | 4.5.0 |
|
||||
|
||||
## Values
|
||||
|
||||
@@ -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:4896ffd516624d6eb7572e102bc4397e91f8bc3b2fb38b5bfefd758baae3dcf2"}` | Default image |
|
||||
| image | object | `{"pullPolicy":"Always","repository":"ghcr.io/squat/generic-device-plugin","tag":"latest@sha256:aa0571c7f461fb99747ada00f2de69eb856dcbbc0e87965fffe37a15f7bc006f"}` | 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 |
|
||||
|
||||
@@ -4,7 +4,7 @@ name: generic-device-plugin
|
||||
# -- Default image
|
||||
image:
|
||||
repository: ghcr.io/squat/generic-device-plugin
|
||||
tag: latest@sha256:4896ffd516624d6eb7572e102bc4397e91f8bc3b2fb38b5bfefd758baae3dcf2
|
||||
tag: latest@sha256:aa0571c7f461fb99747ada00f2de69eb856dcbbc0e87965fffe37a15f7bc006f
|
||||
pullPolicy: Always
|
||||
|
||||
# -- Domain used by devices for identifcation
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
apiVersion: v2
|
||||
name: postgres-cluster
|
||||
version: 6.16.0
|
||||
version: 7.1.0
|
||||
description: Cloudnative-pg Cluster
|
||||
keywords:
|
||||
- database
|
||||
@@ -11,4 +11,4 @@ sources:
|
||||
maintainers:
|
||||
- name: alexlebens
|
||||
icon: https://avatars.githubusercontent.com/u/100373852?s=48&v=4
|
||||
appVersion: v1.27.0
|
||||
appVersion: v1.28.0
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# postgres-cluster
|
||||
|
||||
 
|
||||
 
|
||||
|
||||
Cloudnative-pg Cluster
|
||||
|
||||
@@ -23,25 +23,25 @@ Cloudnative-pg Cluster
|
||||
| backup.method | string | `"objectStore"` | Method to create backups, options currently are only objectStore |
|
||||
| backup.objectStore | list | `[]` | Options for object store backups |
|
||||
| backup.scheduledBackups | list | `[]` | List of scheduled backups |
|
||||
| cluster | object | `{"additionalLabels":{},"affinity":{"enablePodAntiAffinity":true,"topologyKey":"kubernetes.io/hostname"},"annotations":{},"certificates":{},"enablePDB":true,"enableSuperuserAccess":false,"image":{"repository":"ghcr.io/cloudnative-pg/postgresql","tag":"17.7-standard-trixie"},"imagePullPolicy":"IfNotPresent","imagePullSecrets":[],"initdb":{},"instances":3,"logLevel":"info","monitoring":{"customQueries":[],"customQueriesSecret":[],"disableDefaultQueries":false,"enabled":false,"podMonitor":{"enabled":true,"metricRelabelings":[],"relabelings":[]},"prometheusRule":{"enabled":false,"excludeRules":["CNPGClusterLastFailedArchiveTimeWarning"]}},"postgresGID":-1,"postgresUID":-1,"postgresql":{"ldap":{},"parameters":{"hot_standby_feedback":"on","max_slot_wal_keep_size":"2000MB","shared_buffers":"128MB"},"pg_hba":[],"pg_ident":[],"shared_preload_libraries":[],"synchronous":{}},"primaryUpdateMethod":"switchover","primaryUpdateStrategy":"unsupervised","priorityClassName":"","resources":{"limits":{"hugepages-2Mi":"256Mi"},"requests":{"cpu":"100m","memory":"256Mi"}},"roles":[],"serviceAccountTemplate":{},"services":{},"storage":{"size":"10Gi","storageClass":""},"superuserSecret":"","walStorage":{"enabled":true,"size":"2Gi","storageClass":""}}` | Cluster settings |
|
||||
| cluster | object | `{"additionalLabels":{},"affinity":{"enablePodAntiAffinity":true,"topologyKey":"kubernetes.io/hostname"},"annotations":{},"certificates":{},"enablePDB":true,"enableSuperuserAccess":false,"image":{"repository":"ghcr.io/cloudnative-pg/postgresql","tag":"18.1-standard-trixie"},"imagePullPolicy":"IfNotPresent","imagePullSecrets":[],"initdb":{"database":"app","owner":"app"},"instances":3,"logLevel":"info","monitoring":{"customQueries":[],"customQueriesSecret":[],"disableDefaultQueries":false,"enabled":true,"podMonitor":{"enabled":true,"metricRelabelings":[],"relabelings":[]},"prometheusRule":{"enabled":true,"excludeRules":["CNPGClusterLastFailedArchiveTimeWarning"]}},"postgresGID":-1,"postgresUID":-1,"postgresql":{"ldap":{},"parameters":{"hot_standby_feedback":"on","max_slot_wal_keep_size":"2000MB","shared_buffers":"128MB"},"pg_hba":[],"pg_ident":[],"shared_preload_libraries":[],"synchronous":{}},"primaryUpdateMethod":"switchover","primaryUpdateStrategy":"unsupervised","priorityClassName":"","resources":{"limits":{"hugepages-2Mi":"256Mi"},"requests":{"cpu":"100m","memory":"256Mi"}},"roles":[],"serviceAccountTemplate":{},"services":{},"storage":{"size":"10Gi","storageClass":""},"superuserSecret":"","walStorage":{"enabled":true,"size":"2Gi","storageClass":""}}` | Cluster settings |
|
||||
| cluster.affinity | object | `{"enablePodAntiAffinity":true,"topologyKey":"kubernetes.io/hostname"}` | Affinity/Anti-affinity rules for Pods. See: https://cloudnative-pg.io/documentation/current/cloudnative-pg.v1/#postgresql-cnpg-io-v1-AffinityConfiguration |
|
||||
| cluster.certificates | object | `{}` | The configuration for the CA and related certificates. See: https://cloudnative-pg.io/documentation/current/cloudnative-pg.v1/#postgresql-cnpg-io-v1-CertificatesConfiguration |
|
||||
| cluster.enablePDB | bool | `true` | Allow to disable PDB, mainly useful for upgrade of single-instance clusters or development purposes See: https://cloudnative-pg.io/documentation/current/kubernetes_upgrade/#pod-disruption-budgets |
|
||||
| cluster.enableSuperuserAccess | bool | `false` | When this option is enabled, the operator will use the SuperuserSecret to update the postgres user password. If the secret is not present, the operator will automatically create one. When this option is disabled, the operator will ignore the SuperuserSecret content, delete it when automatically created, and then blank the password of the postgres user by setting it to NULL. |
|
||||
| cluster.image | object | `{"repository":"ghcr.io/cloudnative-pg/postgresql","tag":"17.7-standard-trixie"}` | Default image |
|
||||
| cluster.image | object | `{"repository":"ghcr.io/cloudnative-pg/postgresql","tag":"18.1-standard-trixie"}` | Default image |
|
||||
| cluster.imagePullPolicy | string | `"IfNotPresent"` | Image pull policy. One of Always, Never or IfNotPresent. If not defined, it defaults to IfNotPresent. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images |
|
||||
| cluster.imagePullSecrets | list | `[]` | The list of pull secrets to be used to pull the images. See: https://cloudnative-pg.io/documentation/current/cloudnative-pg.v1/#postgresql-cnpg-io-v1-LocalObjectReference |
|
||||
| cluster.initdb | object | `{}` | Bootstrap is the configuration of the bootstrap process when initdb is used. See: https://cloudnative-pg.io/documentation/current/bootstrap/ See: https://cloudnative-pg.io/documentation/current/cloudnative-pg.v1/#postgresql-cnpg-io-v1-bootstrapinitdb |
|
||||
| cluster.initdb | object | `{"database":"app","owner":"app"}` | Bootstrap is the configuration of the bootstrap process when initdb is used. See: https://cloudnative-pg.io/documentation/current/bootstrap/ See: https://cloudnative-pg.io/documentation/current/cloudnative-pg.v1/#postgresql-cnpg-io-v1-bootstrapinitdb |
|
||||
| cluster.logLevel | string | `"info"` | The instances' log level, one of the following values: error, warning, info (default), debug, trace |
|
||||
| cluster.monitoring | object | `{"customQueries":[],"customQueriesSecret":[],"disableDefaultQueries":false,"enabled":false,"podMonitor":{"enabled":true,"metricRelabelings":[],"relabelings":[]},"prometheusRule":{"enabled":false,"excludeRules":["CNPGClusterLastFailedArchiveTimeWarning"]}}` | Enable default monitoring and alert rules |
|
||||
| cluster.monitoring | object | `{"customQueries":[],"customQueriesSecret":[],"disableDefaultQueries":false,"enabled":true,"podMonitor":{"enabled":true,"metricRelabelings":[],"relabelings":[]},"prometheusRule":{"enabled":true,"excludeRules":["CNPGClusterLastFailedArchiveTimeWarning"]}}` | Enable default monitoring and alert rules |
|
||||
| cluster.monitoring.customQueries | list | `[]` | Custom Prometheus metrics Will be stored in the ConfigMap |
|
||||
| cluster.monitoring.customQueriesSecret | list | `[]` | The list of secrets containing the custom queries |
|
||||
| cluster.monitoring.disableDefaultQueries | bool | `false` | Whether the default queries should be injected. Set it to true if you don't want to inject default queries into the cluster. |
|
||||
| cluster.monitoring.enabled | bool | `false` | Whether to enable monitoring |
|
||||
| cluster.monitoring.enabled | bool | `true` | Whether to enable monitoring |
|
||||
| cluster.monitoring.podMonitor.enabled | bool | `true` | Whether to enable the PodMonitor |
|
||||
| cluster.monitoring.podMonitor.metricRelabelings | list | `[]` | The list of metric relabelings for the PodMonitor. Applied to samples before ingestion. |
|
||||
| cluster.monitoring.podMonitor.relabelings | list | `[]` | The list of relabelings for the PodMonitor. Applied to samples before scraping. |
|
||||
| cluster.monitoring.prometheusRule.enabled | bool | `false` | Whether to enable the PrometheusRule automated alerts |
|
||||
| cluster.monitoring.prometheusRule.enabled | bool | `true` | Whether to enable the PrometheusRule automated alerts |
|
||||
| cluster.monitoring.prometheusRule.excludeRules | list | `["CNPGClusterLastFailedArchiveTimeWarning"]` | Exclude specified rules |
|
||||
| cluster.postgresUID | int | `-1` | The UID and GID of the postgres user inside the image, defaults to 26 |
|
||||
| cluster.postgresql | object | `{"ldap":{},"parameters":{"hot_standby_feedback":"on","max_slot_wal_keep_size":"2000MB","shared_buffers":"128MB"},"pg_hba":[],"pg_ident":[],"shared_preload_libraries":[],"synchronous":{}}` | Parameters to be set for the database itself See: https://cloudnative-pg.io/documentation/current/cloudnative-pg.v1/#postgresql-cnpg-io-v1-PostgresConfiguration |
|
||||
@@ -58,11 +58,12 @@ Cloudnative-pg Cluster
|
||||
| cluster.serviceAccountTemplate | object | `{}` | Configure the metadata of the generated service account |
|
||||
| cluster.services | object | `{}` | Customization of service definitions. Please refer to https://cloudnative-pg.io/documentation/current/service_management/ |
|
||||
| cluster.storage | object | `{"size":"10Gi","storageClass":""}` | Default storage size |
|
||||
| databases | list | `[]` | Database management configuration |
|
||||
| mode | string | `"standalone"` | Cluster mode of operation. Available modes: * `standalone` - Default mode. Creates new or updates an existing CNPG cluster. * `recovery` - Same as standalone but creates a cluster from a backup, object store or via pg_basebackup |
|
||||
| nameOverride | string | `""` | Override the name of the cluster |
|
||||
| namespaceOverride | string | `""` | Override the namespace of the chart |
|
||||
| poolers | list | `[]` | List of PgBouncer poolers |
|
||||
| recovery | object | `{"backup":{"backupName":"","database":"app","owner":"","pitrTarget":{"time":""}},"import":{"databases":[],"pgDumpExtraOptions":[],"pgRestoreExtraOptions":[],"postImportApplicationSQL":[],"roles":[],"schemaOnly":false,"source":{"database":"app","host":"","passwordSecret":{"create":false,"key":"password","name":"","value":""},"port":5432,"sslCertSecret":{"key":"","name":""},"sslKeySecret":{"key":"","name":""},"sslMode":"verify-full","sslRootCertSecret":{"key":"","name":""},"username":"app"},"type":"microservice"},"method":"backup","objectStore":{"clusterName":"","data":{"compression":"snappy","encryption":"","jobs":1},"database":"app","destinationPath":"","endpointCA":{"create":false,"key":"","name":""},"endpointCredentials":"","endpointURL":"https://nyc3.digitaloceanspaces.com","index":1,"name":"recovery","owner":"","pitrTarget":{"time":""},"wal":{"compression":"snappy","encryption":"","maxParallel":1}},"pgBaseBackup":{"database":"app","owner":"","secret":"","source":{"database":"app","host":"","passwordSecret":{"create":false,"key":"password","name":"","value":""},"port":5432,"sslCertSecret":{"key":"","name":""},"sslKeySecret":{"key":"","name":""},"sslMode":"verify-full","sslRootCertSecret":{"key":"","name":""},"username":""}}}` | Recovery settings when booting cluster from external cluster |
|
||||
| recovery | object | `{"backup":{"backupName":"","database":"app","owner":"","pitrTarget":{"time":""}},"import":{"databases":[],"pgDumpExtraOptions":[],"pgRestoreExtraOptions":[],"postImportApplicationSQL":[],"roles":[],"schemaOnly":false,"source":{"database":"app","host":"","passwordSecret":{"create":false,"key":"password","name":"","value":""},"port":5432,"sslCertSecret":{"key":"","name":""},"sslKeySecret":{"key":"","name":""},"sslMode":"verify-full","sslRootCertSecret":{"key":"","name":""},"username":"app"},"type":"microservice"},"method":"backup","objectStore":{"clusterName":"","data":{"compression":"snappy","encryption":"","jobs":1},"database":"app","destinationPath":"","endpointCA":{"create":false,"key":"","name":""},"endpointCredentials":"","endpointURL":"https://nyc3.digitaloceanspaces.com","index":1,"name":"recovery","owner":"","pitrTarget":{"time":""},"wal":{"compression":"snappy","encryption":"","maxParallel":1}},"pgBaseBackup":{"database":"app","owner":"","secret":"","source":{"database":"app","host":"","passwordSecret":{"create":false,"key":"password","name":"","value":""},"port":5432,"sslCertSecret":{"key":"","name":""},"sslKeySecret":{"key":"","name":""},"sslMode":"disable","sslRootCertSecret":{"key":"","name":""},"username":""}}}` | Recovery settings when booting cluster from external cluster |
|
||||
| recovery.backup.backupName | string | `""` | Name of the backup to recover from. |
|
||||
| recovery.backup.database | string | `"app"` | Name of the database used by the application. Default: `app`. |
|
||||
| recovery.backup.owner | string | `""` | Name of the owner of the database in the instance to be used by applications. Defaults to the value of the `database` key. |
|
||||
@@ -103,7 +104,7 @@ Cloudnative-pg Cluster
|
||||
| recovery.pgBaseBackup.database | string | `"app"` | Name of the database used by the application. Default: `app`. |
|
||||
| recovery.pgBaseBackup.owner | string | `""` | Name of the owner of the database in the instance to be used by applications. Defaults to the value of the `database` key. |
|
||||
| recovery.pgBaseBackup.secret | string | `""` | Name of the secret containing the initial credentials for the owner of the user database. If empty a new secret will be created from scratch |
|
||||
| recovery.pgBaseBackup.source | object | `{"database":"app","host":"","passwordSecret":{"create":false,"key":"password","name":"","value":""},"port":5432,"sslCertSecret":{"key":"","name":""},"sslKeySecret":{"key":"","name":""},"sslMode":"verify-full","sslRootCertSecret":{"key":"","name":""},"username":""}` | Configuration for the source database |
|
||||
| recovery.pgBaseBackup.source | object | `{"database":"app","host":"","passwordSecret":{"create":false,"key":"password","name":"","value":""},"port":5432,"sslCertSecret":{"key":"","name":""},"sslKeySecret":{"key":"","name":""},"sslMode":"disable","sslRootCertSecret":{"key":"","name":""},"username":""}` | Configuration for the source database |
|
||||
| recovery.pgBaseBackup.source.passwordSecret.create | bool | `false` | Whether to create a secret for the password |
|
||||
| recovery.pgBaseBackup.source.passwordSecret.key | string | `"password"` | The key in the secret containing the password |
|
||||
| recovery.pgBaseBackup.source.passwordSecret.name | string | `""` | Name of the secret containing the password |
|
||||
|
||||
@@ -23,7 +23,7 @@ bootstrap:
|
||||
{{- else if eq .Values.mode "recovery" -}}
|
||||
bootstrap:
|
||||
|
||||
{{- if eq .Values.recovery.method "pgBaseBackup" }}
|
||||
{{- if eq .Values.recovery.method "pgBaseBackup" }}
|
||||
pg_basebackup:
|
||||
source: pgBaseBackupSource
|
||||
{{ with .Values.recovery.pgBaseBackup.database }}
|
||||
@@ -36,10 +36,8 @@ bootstrap:
|
||||
secret:
|
||||
{{- toYaml . | nindent 6 }}
|
||||
{{- end }}
|
||||
externalClusters:
|
||||
{{- include "cluster.externalSourceCluster" (list "pgBaseBackupSource" .Values.recovery.pgBaseBackup.source) | nindent 2 }}
|
||||
|
||||
{{- else if eq .Values.recovery.method "import" }}
|
||||
{{- else if eq .Values.recovery.method "import" }}
|
||||
initdb:
|
||||
{{- with .Values.cluster.initdb }}
|
||||
{{- with (omit . "owner" "import" "postInitApplicationSQL") }}
|
||||
@@ -63,7 +61,7 @@ externalClusters:
|
||||
{{- end }}
|
||||
{{- if eq .Values.recovery.import.type "monolith" }}
|
||||
roles:
|
||||
{{- with .Values.replica.importRoles }}
|
||||
{{- with .Values.recovery.import.roles }}
|
||||
{{- . | toYaml | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -82,10 +80,8 @@ externalClusters:
|
||||
pgRestoreExtraOptions:
|
||||
{{- . | toYaml | nindent 8 }}
|
||||
{{- end }}
|
||||
externalClusters:
|
||||
{{- include "cluster.externalSourceCluster" (list "importSource" .Values.recovery.import.source) | nindent 2 }}
|
||||
|
||||
{{- else if eq .Values.recovery.method "backup" }}
|
||||
{{- else if eq .Values.recovery.method "backup" }}
|
||||
recovery:
|
||||
{{- with .Values.recovery.backup.pitrTarget.time }}
|
||||
recoveryTarget:
|
||||
@@ -100,7 +96,7 @@ externalClusters:
|
||||
backup:
|
||||
name: {{ .Values.recovery.backup.backupName }}
|
||||
|
||||
{{- else if eq .Values.recovery.method "objectStore" }}
|
||||
{{- else if eq .Values.recovery.method "objectStore" }}
|
||||
recovery:
|
||||
{{- with .Values.recovery.objectStore.pitrTarget.time }}
|
||||
recoveryTarget:
|
||||
@@ -114,19 +110,9 @@ externalClusters:
|
||||
{{- end }}
|
||||
source: {{ include "cluster.recoveryServerName" . }}
|
||||
|
||||
externalClusters:
|
||||
- name: {{ include "cluster.recoveryServerName" . }}
|
||||
plugin:
|
||||
name: barman-cloud.cloudnative-pg.io
|
||||
enabled: true
|
||||
isWALArchiver: false
|
||||
parameters:
|
||||
barmanObjectName: "{{ include "cluster.name" . }}-{{ .Values.recovery.objectStore.name }}"
|
||||
serverName: {{ include "cluster.recoveryServerName" . }}
|
||||
|
||||
{{- else }}
|
||||
{{ fail "Invalid recovery mode!" }}
|
||||
{{- end }}
|
||||
{{- else }}
|
||||
{{ fail "Invalid recovery mode!" }}
|
||||
{{- end }}
|
||||
|
||||
{{- else }}
|
||||
{{ fail "Invalid cluster mode!" }}
|
||||
|
||||
24
charts/postgres-cluster/templates/_external_clusters.tpl
Normal file
24
charts/postgres-cluster/templates/_external_clusters.tpl
Normal file
@@ -0,0 +1,24 @@
|
||||
{{- define "cluster.externalClusters" -}}
|
||||
externalClusters:
|
||||
{{- if eq .Values.mode "standalone" }}
|
||||
{{- else if eq .Values.mode "recovery" }}
|
||||
{{- if eq .Values.recovery.method "pgBaseBackup" }}
|
||||
- name: pgBaseBackupSource
|
||||
{{- include "cluster.externalSourceCluster" .Values.recovery.pgBaseBackup.source | nindent 4 }}
|
||||
{{- else if eq .Values.recovery.method "import" }}
|
||||
- name: importSource
|
||||
{{- include "cluster.externalSourceCluster" .Values.recovery.import.source | nindent 4 }}
|
||||
{{- else if eq .Values.recovery.method "objectStore" }}
|
||||
- name: {{ include "cluster.recoveryServerName" . }}
|
||||
plugin:
|
||||
name: barman-cloud.cloudnative-pg.io
|
||||
enabled: true
|
||||
isWALArchiver: false
|
||||
barmanObjectStore:
|
||||
barmanObjectName: "{{ include "cluster.name" . }}-{{ .Values.recovery.objectStore.name }}"
|
||||
serverName: {{ include "cluster.recoveryServerName" . }}
|
||||
{{- end }}
|
||||
{{- else }}
|
||||
{{ fail "Invalid cluster mode!" }}
|
||||
{{- end }}
|
||||
{{ end }}
|
||||
@@ -19,32 +19,6 @@ spec:
|
||||
{{- end }}
|
||||
postgresUID: {{ include "cluster.postgresUID" . }}
|
||||
postgresGID: {{ include "cluster.postgresGID" . }}
|
||||
plugins:
|
||||
{{- range $objectStore := .Values.backup.objectStore }}
|
||||
- name: barman-cloud.cloudnative-pg.io
|
||||
enabled: true
|
||||
{{- if $objectStore.isWALArchiver }}
|
||||
isWALArchiver: true
|
||||
{{- else }}
|
||||
isWALArchiver: false
|
||||
{{- end }}
|
||||
parameters:
|
||||
barmanObjectName: "{{ include "cluster.name" $ }}-{{ $objectStore.name }}-backup"
|
||||
{{- if $objectStore.clusterName }}
|
||||
serverName: "{{ $objectStore.clusterName }}-backup-{{ $objectStore.index }}"
|
||||
{{- else }}
|
||||
serverName: "{{ include "cluster.name" $ }}-backup-{{ $objectStore.index }}"
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{ if (eq .Values.recovery.method "objectStore") }}
|
||||
externalClusters:
|
||||
- name: recovery
|
||||
plugin:
|
||||
name: barman-cloud.cloudnative-pg.io
|
||||
parameters:
|
||||
barmanObjectName: "{{ include "cluster.name" . }}-{{ .Values.recovery.objectStore.name }}"
|
||||
serverName: {{ include "cluster.recoveryServerName" . }}
|
||||
{{ end }}
|
||||
storage:
|
||||
size: {{ .Values.cluster.storage.size }}
|
||||
{{- if not (empty .Values.cluster.storage.storageClass) }}
|
||||
@@ -155,4 +129,23 @@ spec:
|
||||
{{ end }}
|
||||
{{- end }}
|
||||
|
||||
plugins:
|
||||
{{- range $objectStore := .Values.backup.objectStore }}
|
||||
- name: barman-cloud.cloudnative-pg.io
|
||||
enabled: true
|
||||
{{- if $objectStore.isWALArchiver }}
|
||||
isWALArchiver: true
|
||||
{{- else }}
|
||||
isWALArchiver: false
|
||||
{{- end }}
|
||||
parameters:
|
||||
barmanObjectName: "{{ include "cluster.name" $ }}-{{ $objectStore.name }}-backup"
|
||||
{{- if $objectStore.clusterName }}
|
||||
serverName: "{{ $objectStore.clusterName }}-backup-{{ $objectStore.index }}"
|
||||
{{- else }}
|
||||
serverName: "{{ include "cluster.name" $ }}-backup-{{ $objectStore.index }}"
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{ include "cluster.bootstrap" . | nindent 2 }}
|
||||
{{ include "cluster.externalClusters" . | nindent 2 }}
|
||||
|
||||
76
charts/postgres-cluster/templates/databases.yaml
Normal file
76
charts/postgres-cluster/templates/databases.yaml
Normal file
@@ -0,0 +1,76 @@
|
||||
{{- range .Values.databases }}
|
||||
---
|
||||
apiVersion: postgresql.cnpg.io/v1
|
||||
kind: Database
|
||||
metadata:
|
||||
name: {{ include "cluster.name" $ }}-database-{{ .name | replace "_" "-" }}
|
||||
namespace: {{ include "cluster.namespace" $ }}
|
||||
labels:
|
||||
{{- include "cluster.labels" $ | nindent 4 }}
|
||||
spec:
|
||||
name: {{ .name }}
|
||||
cluster:
|
||||
name: {{ include "cluster.name" $ }}
|
||||
ensure: {{ .ensure | default "present" }}
|
||||
owner: {{ .owner }}
|
||||
template: {{ .template | default "template1" }}
|
||||
encoding: {{ .encoding | default "UTF8" }}
|
||||
databaseReclaimPolicy: {{ .databaseReclaimPolicy | default "retain" }}
|
||||
{{- with .isTemplate }}
|
||||
isTemplate: {{ . }}
|
||||
{{- end }}
|
||||
{{- with .allowConnections }}
|
||||
allowConnections: {{ . }}
|
||||
{{- end }}
|
||||
{{- with .connectionLimit }}
|
||||
connectionLimit: {{ . }}
|
||||
{{- end }}
|
||||
{{- with .tablespace }}
|
||||
tablespace: {{ . }}
|
||||
{{- end }}
|
||||
{{- with .locale }}
|
||||
locale: {{ . }}
|
||||
{{- end }}
|
||||
{{- with .localeProvider }}
|
||||
localeProvider: {{ . }}
|
||||
{{- end }}
|
||||
{{- with .localeCollate }}
|
||||
localeCollate: {{ . }}
|
||||
{{- end }}
|
||||
{{- with .localeCType }}
|
||||
localeCType: {{ . }}
|
||||
{{- end }}
|
||||
{{- with .icuLocale }}
|
||||
icuLocale: {{ . }}
|
||||
{{- end }}
|
||||
{{- with .icuRules }}
|
||||
icuRules: {{ . }}
|
||||
{{- end }}
|
||||
{{- with .builtinLocale }}
|
||||
builtinLocale: {{ . }}
|
||||
{{- end }}
|
||||
{{- with .collationVersion }}
|
||||
collationVersion: {{ . | quote }}
|
||||
{{- end }}
|
||||
{{- with .schemas }}
|
||||
schemas:
|
||||
{{- range . }}
|
||||
- name: {{ .name }}
|
||||
owner: {{ .owner }}
|
||||
ensure: {{ .ensure | default "present" }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- with .extensions }}
|
||||
extensions:
|
||||
{{- range . }}
|
||||
- name: {{ .name }}
|
||||
{{- with .version }}
|
||||
version: {{ . }}
|
||||
{{- end }}
|
||||
{{- with .schema }}
|
||||
schema: {{ . }}
|
||||
{{- end }}
|
||||
ensure: {{ .ensure | default "present" }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -3,7 +3,7 @@
|
||||
apiVersion: postgresql.cnpg.io/v1
|
||||
kind: Pooler
|
||||
metadata:
|
||||
name: {{ include "cluster.name" $ }}-pooler-{{ .name }}
|
||||
name: {{ include "cluster.name" $ }}-pooler-{{ .name }}
|
||||
namespace: {{ include "cluster.namespace" $ }}
|
||||
labels:
|
||||
{{- include "cluster.labels" $ | nindent 4 }}
|
||||
|
||||
@@ -20,7 +20,7 @@ cluster:
|
||||
# -- Default image
|
||||
image:
|
||||
repository: ghcr.io/cloudnative-pg/postgresql
|
||||
tag: 17.7-standard-trixie
|
||||
tag: 18.1-standard-trixie
|
||||
|
||||
# -- Image pull policy. One of Always, Never or IfNotPresent. If not defined, it defaults to IfNotPresent. Cannot be updated.
|
||||
# More info: https://kubernetes.io/docs/concepts/containers/images#updating-images
|
||||
@@ -109,7 +109,7 @@ cluster:
|
||||
monitoring:
|
||||
|
||||
# -- Whether to enable monitoring
|
||||
enabled: false
|
||||
enabled: true
|
||||
|
||||
podMonitor:
|
||||
|
||||
@@ -127,7 +127,7 @@ cluster:
|
||||
prometheusRule:
|
||||
|
||||
# -- Whether to enable the PrometheusRule automated alerts
|
||||
enabled: false
|
||||
enabled: true
|
||||
|
||||
# -- Exclude specified rules
|
||||
excludeRules:
|
||||
@@ -197,9 +197,9 @@ cluster:
|
||||
# -- Bootstrap is the configuration of the bootstrap process when initdb is used.
|
||||
# See: https://cloudnative-pg.io/documentation/current/bootstrap/
|
||||
# See: https://cloudnative-pg.io/documentation/current/cloudnative-pg.v1/#postgresql-cnpg-io-v1-bootstrapinitdb
|
||||
initdb: {}
|
||||
# database: app
|
||||
# owner: "" # Defaults to the database name
|
||||
initdb:
|
||||
database: app
|
||||
owner: app
|
||||
# secret:
|
||||
# name: "" # Name of the secret containing the initial credentials for the owner of the user database. If empty a new secret will be created from scratch
|
||||
# options: []
|
||||
@@ -330,7 +330,7 @@ recovery:
|
||||
port: 5432
|
||||
username: ""
|
||||
database: "app"
|
||||
sslMode: "verify-full"
|
||||
sslMode: "disable"
|
||||
passwordSecret:
|
||||
|
||||
# -- Whether to create a secret for the password
|
||||
@@ -507,6 +507,35 @@ backup:
|
||||
# # -- Name of backup target
|
||||
# backupName: external
|
||||
|
||||
# -- Database management configuration
|
||||
databases: []
|
||||
# - name: app # -- Name of the database to be created.
|
||||
# ensure: present # -- Ensure the PostgreSQL database is present or absent - defaults to "present".
|
||||
# owner: app # -- Owner of the database, defaults to the value of the `name` key.
|
||||
# template: template1 # -- Maps to the TEMPLATE parameter.
|
||||
# encoding: UTF8 # -- Maps to the ENCODING parameter.
|
||||
# connectionLimit: -1 # -- Maps to the CONNECTION LIMIT parameter. -1 (the default) means no limit.
|
||||
# tablespace: "" # -- Maps to the TABLESPACE parameter and ALTER DATABASE.
|
||||
# databaseReclaimPolicy: retain # -- One of: retain / delete (retain by default).
|
||||
# schemas: [] # -- List of schemas to be created in the database.
|
||||
# # - name: myschema
|
||||
# # owner: app # -- Owner of the schema, defaults to the database owner.
|
||||
# # ensure: present # -- Ensure the PostgreSQL schema is present or absent - defaults to "present".
|
||||
# extensions: [] # -- List of extensions to be created in the database.
|
||||
# # - name: pg_search
|
||||
# # ensure: present # -- Ensure the PostgreSQL extension is present or absent - defaults to "present".
|
||||
# # version: "0.15.21" # -- Version of the extension to be installed, if not specified the latest version will be used.
|
||||
# # schema: "" # -- Schema where the extension will be installed, if not specified the extensions or current default object creation schema will be used.
|
||||
# isTemplate: false # -- Maps to the IS_TEMPLATE parameter. If true, the database is considered a template for new databases.
|
||||
# locale: "" # -- Maps to the LC_COLLATE and LC_CTYPE parameters
|
||||
# localeProvider: "" # -- Maps to the LOCALE_PROVIDER parameter. Available from PostgreSQL 16.
|
||||
# localeCollate: "" # -- Maps to the LC_COLLATE parameter
|
||||
# localeCType: "" # -- Maps to the LC_CTYPE parameter
|
||||
# icuLocale: "" # -- Maps to the ICU_LOCALE parameter. Available from PostgreSQL 15.
|
||||
# icuRules: "" # -- Maps to the ICU_RULES parameter. Available from PostgreSQL 16.
|
||||
# builtinLocale: "" # -- Maps to the BUILTIN_LOCALE parameter. Available from PostgreSQL 17.
|
||||
# collationVersion: "" # -- Maps to the COLLATION_VERSION parameter.
|
||||
|
||||
# -- List of PgBouncer poolers
|
||||
poolers: []
|
||||
# -
|
||||
|
||||
15
charts/redis-replication/Chart.yaml
Normal file
15
charts/redis-replication/Chart.yaml
Normal file
@@ -0,0 +1,15 @@
|
||||
apiVersion: v2
|
||||
name: redis-replication
|
||||
version: 0.1.0
|
||||
description: Redis Replication with Sentinel
|
||||
keywords:
|
||||
- redis-operator
|
||||
- redis
|
||||
- kubernetes
|
||||
sources:
|
||||
- https://github.com/OT-CONTAINER-KIT/redis-operator
|
||||
- https://github.com/OT-CONTAINER-KIT/redis-operator/tree/main/charts/redis-operator
|
||||
maintainers:
|
||||
- name: alexlebens
|
||||
icon: https://github.com/OT-CONTAINER-KIT/redis-operator/raw/main/static/redis-operator-logo.svg
|
||||
appVersion: v0.21.0
|
||||
39
charts/redis-replication/README.md
Normal file
39
charts/redis-replication/README.md
Normal file
@@ -0,0 +1,39 @@
|
||||
# redis-replication
|
||||
|
||||
 
|
||||
|
||||
Redis Replication with Sentinel
|
||||
|
||||
## Maintainers
|
||||
|
||||
| Name | Email | Url |
|
||||
| ---- | ------ | --- |
|
||||
| alexlebens | | |
|
||||
|
||||
## Source Code
|
||||
|
||||
* <https://github.com/OT-CONTAINER-KIT/redis-operator>
|
||||
* <https://github.com/OT-CONTAINER-KIT/redis-operator/tree/main/charts/redis-operator>
|
||||
|
||||
## Values
|
||||
|
||||
| Key | Type | Default | Description |
|
||||
|-----|------|---------|-------------|
|
||||
| additionalLabels | object | `{}` | Add additional labels |
|
||||
| existingSecret | object | `{"enabled":false,"key":"password","name":"secret-name"}` | Password |
|
||||
| namespaceOverride | string | `""` | Override the namespace of the chart |
|
||||
| redisReplication | object | `{"clusterSize":3,"image":{"pullPolicy":"IfNotPresent","repository":"quay.io/opstree/redis","tag":"v8.4.0"},"podSecurityContext":{"fsGroup":1000,"runAsUser":1000},"redisExporter":{"enabled":true,"image":{"repository":"quay.io/opstree/redis-exporter","tag":"v1.80.1"}},"resources":{"requests":{"cpu":"10m","memory":"128Mi"}},"volumeClaimTemplate":{"spec":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"1Gi"}},"storageClassName":"ceph-block"}}}` | Redis Replication settings |
|
||||
| redisReplication.image | object | `{"pullPolicy":"IfNotPresent","repository":"quay.io/opstree/redis","tag":"v8.4.0"}` | Image |
|
||||
| redisReplication.podSecurityContext | object | `{"fsGroup":1000,"runAsUser":1000}` | Security |
|
||||
| redisReplication.redisExporter | object | `{"enabled":true,"image":{"repository":"quay.io/opstree/redis-exporter","tag":"v1.80.1"}}` | Metrics |
|
||||
| redisReplication.resources | object | `{"requests":{"cpu":"10m","memory":"128Mi"}}` | Resources |
|
||||
| redisReplication.volumeClaimTemplate | object | `{"spec":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"1Gi"}},"storageClassName":"ceph-block"}}` | Storage |
|
||||
| redisSentinel | object | `{"clusterSize":3,"enabled":false,"image":{"pullPolicy":"IfNotPresent","repository":"quay.io/opstree/redis-sentinel","tag":"v8.4.0"},"podSecurityContext":{"fsGroup":1000,"runAsUser":1000},"resources":{"requests":{"cpu":"10m","memory":"128Mi"}}}` | Redis Sentinel settings |
|
||||
| redisSentinel.image | object | `{"pullPolicy":"IfNotPresent","repository":"quay.io/opstree/redis-sentinel","tag":"v8.4.0"}` | Image |
|
||||
| redisSentinel.podSecurityContext | object | `{"fsGroup":1000,"runAsUser":1000}` | Security |
|
||||
| redisSentinel.resources | object | `{"requests":{"cpu":"10m","memory":"128Mi"}}` | Resources |
|
||||
| replicationNameOverride | string | `""` | Override the name of the resources |
|
||||
| sentinelNameOverride | string | `""` | |
|
||||
|
||||
----------------------------------------------
|
||||
Autogenerated from chart metadata using [helm-docs v1.14.2](https://github.com/norwoodj/helm-docs/releases/v1.14.2)
|
||||
65
charts/redis-replication/templates/_helpers.tpl
Normal file
65
charts/redis-replication/templates/_helpers.tpl
Normal file
@@ -0,0 +1,65 @@
|
||||
{{/*
|
||||
Expand the names
|
||||
*/}}
|
||||
{{- define "redis.replicationName" -}}
|
||||
{{- if .Values.replicationNameOverride }}
|
||||
{{- .Values.replicationNameOverride | trunc 63 | trimSuffix "-" }}
|
||||
{{- else }}
|
||||
{{- printf "redis-replication-%s" .Release.Name -}}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{- define "redis.sentinelName" -}}
|
||||
{{- if .Values.sentinelNameOverride }}
|
||||
{{- .Values.sentinelNameOverride | trunc 63 | trimSuffix "-" }}
|
||||
{{- else }}
|
||||
{{- printf "redis-sentinel-%s" .Release.Name -}}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Allow the release namespace to be overridden for multi-namespace deployments in combined charts
|
||||
*/}}
|
||||
{{- define "redis.namespace" -}}
|
||||
{{- if .Values.namespaceOverride -}}
|
||||
{{- .Values.namespaceOverride -}}
|
||||
{{- else -}}
|
||||
{{- .Release.Namespace -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create chart name and version as used by the chart label.
|
||||
*/}}
|
||||
{{- define "redis.chart" -}}
|
||||
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Common labels
|
||||
*/}}
|
||||
{{- define "redis.labels" -}}
|
||||
helm.sh/chart: {{ include "redis.chart" $ }}
|
||||
{{- if .Chart.AppVersion }}
|
||||
app.kubernetes.io/version: {{ .Chart.Version | quote }}
|
||||
{{- end }}
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||
{{- with .Values.additionalLabels }}
|
||||
{{ toYaml . }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Selector labels
|
||||
*/}}
|
||||
{{- define "redis.replicationSelectorLabels" -}}
|
||||
app.kubernetes.io/name: {{ include "redis.replicationName" $ }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
{{- end }}
|
||||
|
||||
{{- define "redis.sentinelSelectorLabels" -}}
|
||||
app.kubernetes.io/name: {{ include "redis.sentinelName" $ }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
{{- end }}
|
||||
39
charts/redis-replication/templates/redis-replication.yaml
Normal file
39
charts/redis-replication/templates/redis-replication.yaml
Normal file
@@ -0,0 +1,39 @@
|
||||
apiVersion: redis.redis.opstreelabs.in/v1beta2
|
||||
kind: RedisReplication
|
||||
metadata:
|
||||
name: {{ include "redis.replicationName" . }}
|
||||
namespace: {{ include "redis.namespace" . }}
|
||||
labels:
|
||||
{{- include "redis.labels" . | nindent 4 }}
|
||||
{{- include "redis.replicationSelectorLabels" . | nindent 4 }}
|
||||
spec:
|
||||
clusterSize: {{ .Values.redisReplication.clusterSize }}
|
||||
|
||||
podSecurityContext:
|
||||
{{- with .Values.redisReplication.podSecurityContext }}
|
||||
{{- toYaml . | nindent 10 }}
|
||||
{{ end }}
|
||||
|
||||
kubernetesConfig:
|
||||
image: "{{ .Values.redisReplication.image.repository }}:{{ .Values.redisReplication.image.tag }}"
|
||||
imagePullPolicy: {{ .Values.redisReplication.image.pullPolicy }}
|
||||
resources:
|
||||
{{- with .Values.redisReplication.resources }}
|
||||
{{- toYaml . | nindent 10 }}
|
||||
{{ end }}
|
||||
|
||||
{{ if .Values.existingSecret.enabled }}
|
||||
redisSecret:
|
||||
name: {{ .Values.existingSecret.name }}
|
||||
key: {{ .Values.existingSecret.key }}
|
||||
{{ end }}
|
||||
|
||||
storage:
|
||||
volumeClaimTemplate:
|
||||
{{- with .Values.redisReplication.volumeClaimTemplate }}
|
||||
{{- toYaml . | nindent 10 }}
|
||||
{{ end }}
|
||||
|
||||
redisExporter:
|
||||
enabled: {{ .Values.redisReplication.redisExporter.enabled }}
|
||||
image: "{{ .Values.redisReplication.redisExporter.image.repository }}:{{ .Values.redisReplication.redisExporter.image.tag }}"
|
||||
41
charts/redis-replication/templates/redis-sentinel.yaml
Normal file
41
charts/redis-replication/templates/redis-sentinel.yaml
Normal file
@@ -0,0 +1,41 @@
|
||||
{{- if .Values.redisSentinel.enabled }}
|
||||
---
|
||||
apiVersion: redis.redis.opstreelabs.in/v1beta2
|
||||
kind: RedisSentinel
|
||||
metadata:
|
||||
name: {{ include "redis.sentinelName" . }}
|
||||
namespace: {{ include "redis.namespace" . }}
|
||||
labels:
|
||||
{{- include "redis.labels" . | nindent 4 }}
|
||||
{{- include "redis.sentinelSelectorLabels" . | nindent 4 }}
|
||||
spec:
|
||||
clusterSize: {{ .Values.redisSentinel.clusterSize }}
|
||||
|
||||
podSecurityContext:
|
||||
{{- with .Values.redisSentinel.podSecurityContext }}
|
||||
{{- toYaml . | nindent 10 }}
|
||||
{{ end }}
|
||||
|
||||
redisSentinelConfig:
|
||||
redisReplicationName: {{ include "redis.replicationName" . }}
|
||||
{{ if .Values.existingSecret.enabled }}
|
||||
redisReplicationPassword:
|
||||
secretKeyRef:
|
||||
name: {{ .Values.existingSecret.name }}
|
||||
key: {{ .Values.existingSecret.key }}
|
||||
{{ end }}
|
||||
|
||||
kubernetesConfig:
|
||||
image: "{{ .Values.redisSentinel.image.repository }}:{{ .Values.redisSentinel.image.tag }}"
|
||||
imagePullPolicy: {{ .Values.redisSentinel.image.pullPolicy }}
|
||||
resources:
|
||||
{{- with .Values.redisSentinel.resources }}
|
||||
{{- toYaml . | nindent 10 }}
|
||||
{{ end }}
|
||||
|
||||
{{ if .Values.existingSecret.enabled }}
|
||||
redisSecret:
|
||||
name: {{ .Values.existingSecret.name }}
|
||||
key: {{ .Values.existingSecret.key }}
|
||||
{{ end }}
|
||||
{{- end }}
|
||||
74
charts/redis-replication/values.yaml
Normal file
74
charts/redis-replication/values.yaml
Normal file
@@ -0,0 +1,74 @@
|
||||
# -- Override the name of the resources
|
||||
replicationNameOverride: ""
|
||||
sentinelNameOverride: ""
|
||||
|
||||
# -- Override the namespace of the chart
|
||||
namespaceOverride: ""
|
||||
|
||||
# -- Password
|
||||
existingSecret:
|
||||
enabled: false
|
||||
name: secret-name
|
||||
key: password
|
||||
|
||||
# -- Add additional labels
|
||||
additionalLabels: {}
|
||||
|
||||
# -- Redis Replication settings
|
||||
redisReplication:
|
||||
clusterSize: 3
|
||||
|
||||
# -- Security
|
||||
podSecurityContext:
|
||||
runAsUser: 1000
|
||||
fsGroup: 1000
|
||||
|
||||
# -- Image
|
||||
image:
|
||||
repository: quay.io/opstree/redis
|
||||
tag: v8.4.0
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
# -- Resources
|
||||
resources:
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 128Mi
|
||||
|
||||
# -- Storage
|
||||
volumeClaimTemplate:
|
||||
spec:
|
||||
storageClassName: ceph-block
|
||||
accessModes: ["ReadWriteOnce"]
|
||||
resources:
|
||||
requests:
|
||||
storage: 1Gi
|
||||
|
||||
# -- Metrics
|
||||
redisExporter:
|
||||
enabled: true
|
||||
image:
|
||||
repository: quay.io/opstree/redis-exporter
|
||||
tag: v1.80.1
|
||||
|
||||
# -- Redis Sentinel settings
|
||||
redisSentinel:
|
||||
enabled: false
|
||||
clusterSize: 3
|
||||
|
||||
# -- Security
|
||||
podSecurityContext:
|
||||
runAsUser: 1000
|
||||
fsGroup: 1000
|
||||
|
||||
# -- Image
|
||||
image:
|
||||
repository: quay.io/opstree/redis-sentinel
|
||||
tag: v8.4.0
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
# -- Resources
|
||||
resources:
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 128Mi
|
||||
@@ -6,7 +6,6 @@
|
||||
":rebaseStalePrs"
|
||||
],
|
||||
"timezone": "US/Central",
|
||||
"schedule": ["* */1 * * *"],
|
||||
"labels": [],
|
||||
"prHourlyLimit": 0,
|
||||
"prConcurrentLimit": 0,
|
||||
|
||||
Reference in New Issue
Block a user