Compare commits
438 Commits
gh-pages
...
postgres-c
Author | SHA1 | Date | |
---|---|---|---|
74c2bca3ae | |||
e1a2ee71f8 | |||
37478087d4 | |||
9af2f7d52a | |||
ab89f723a7 | |||
884cae31a3 | |||
9c2afe436d | |||
e0b707fa32 | |||
2b02da90fd | |||
225ffc6c7e | |||
fa470296b9 | |||
336a6f2815 | |||
406737ed6a | |||
ffcd5139ef | |||
69a554bd9d | |||
2aacb4115a | |||
56d7b063bd | |||
1ca985edc7 | |||
47d7604aac | |||
ecf6e80a20 | |||
f6bc5f42a5 | |||
1b28dbf3db | |||
0f2d18fc7a | |||
0c093bd754 | |||
0c8d26e3eb | |||
82d93fc450 | |||
2657f162c4 | |||
b7d53203da | |||
21a646dabd | |||
0d15a1dadd | |||
a7fe403702 | |||
34957e0c18 | |||
a9286227f7 | |||
3f6faacaa1 | |||
5817f674f4 | |||
2786520504 | |||
c93f608874 | |||
4164f50bce | |||
c060846f7b | |||
673a8c686f | |||
707cb159b9 | |||
90a61573bc | |||
ad1fa6786a | |||
28ed0e8735 | |||
0e3de3cca7 | |||
53f37bc75a | |||
01d96d9a25 | |||
76823dc414 | |||
f97b6ab657 | |||
4bee2a675c | |||
0094b5611f | |||
bb7fb1eadb | |||
99ed8cce53 | |||
02bec682c2 | |||
c549882df9 | |||
e28f44b697 | |||
78afcf24d3 | |||
86e87dbbba | |||
39134cbd95 | |||
9f66bd588c | |||
81aac4790e | |||
|
94b6b4b0fb | ||
|
27edd0a1ef | ||
94184ea569 | |||
08473fc265 | |||
81d3ecf237 | |||
8392d67790 | |||
3f06bf148c | |||
5259488c05 | |||
09c693d371 | |||
ec6f44c6bc | |||
35f331e29a | |||
3b0481fcb1 | |||
e2dfd70dc4 | |||
ffc253ef7d | |||
77dd85362e | |||
d5bb83bf84 | |||
11d3dd927b | |||
1b67b5cbb6 | |||
56fe199fb9 | |||
8ec7f590b2 | |||
d2444fb544 | |||
202a534e8e | |||
c36e4e371f | |||
1ac9444bb2 | |||
275fcd8568 | |||
158d4ca676 | |||
32e232d8e2 | |||
93d2f916fb | |||
b1a6a2fd39 | |||
d3307d4f70 | |||
1b7018d3bd | |||
b75721ae1d | |||
|
e0e4f6ee8a | ||
|
7dd80d4528 | ||
24af841f19 | |||
16211d4c62 | |||
513c46c957 | |||
3fad4e4ff0 | |||
1f867e0276 | |||
601790ab7a | |||
16ebdda6a4 | |||
dbf8f14512 | |||
22dcd7a14c | |||
8862d97c27 | |||
1f4cd543c0 | |||
4aac272e98 | |||
b8602fb919 | |||
fb34897269 | |||
ec27eff4da | |||
2b31df483e | |||
53191f1d68 | |||
172526fb79 | |||
5d5aad265a | |||
84af71da49 | |||
ab3ca49103 | |||
8b2342d1c2 | |||
9107020db2 | |||
3ecef5f8d1 | |||
|
e5b1b733fe | ||
843e37e233 | |||
ee944a6b83 | |||
|
5fe95ea7ad | ||
6a33a670e1 | |||
27cdfd742e | |||
9f68b30a31 | |||
668d50dfdb | |||
93a232947e | |||
667236239d | |||
875f0c143c | |||
670b6e600c | |||
6f5b5ffcb4 | |||
|
295a7296bc | ||
f1b4020287 | |||
969357a664 | |||
5685190e43 | |||
5e88f116fc | |||
f99ebfaa44 | |||
64e3612762 | |||
a6821995ca | |||
4291c3d18c | |||
|
3f1fc33123 | ||
fad13607e6 | |||
a1811097c0 | |||
6b850205ad | |||
d075a47f03 | |||
0a437d983d | |||
7058201439 | |||
42cd8834b9 | |||
2cda957b4c | |||
238d01c5e4 | |||
9f0fae9fdf | |||
d2f062e3db | |||
a1c9367b6d | |||
9857d61093 | |||
cfe7ebea99 | |||
aface2b57d | |||
8158d1689c | |||
276921cf8a | |||
e420e092c9 | |||
e20049fc8c | |||
37ba06acc7 | |||
02228e31cc | |||
6708443275 | |||
987cedb98a | |||
7f0fd5d5c7 | |||
d381bdee39 | |||
ed4a43cd31 | |||
1b01ed0ba2 | |||
58151e21aa | |||
3f2615097f | |||
a8bbc84740 | |||
a8b3615f2f | |||
590b095a32 | |||
5d2cdc9648 | |||
99c106bd63 | |||
e6938fe645 | |||
7f5d870579 | |||
6cf2db87f4 | |||
537d9bd125 | |||
9627287f30 | |||
dd724b5b32 | |||
cd91a16c75 | |||
69900d3931 | |||
f80cec8c82 | |||
f3d629fe00 | |||
4d3574ffa8 | |||
f98268fd25 | |||
7514ea022e | |||
a65a0dbcec | |||
6bc5aea01f | |||
80940910a9 | |||
6895b078b5 | |||
27e70a1786 | |||
de21d07a5d | |||
58cc48724b | |||
8a357574e9 | |||
220e9e011b | |||
9483523eb8 | |||
ca205a8802 | |||
36267ada6f | |||
153b7a1ad2 | |||
9b30408661 | |||
947120d73c | |||
a62e24142c | |||
03c825e816 | |||
38c2be01f9 | |||
|
5ac88f9aa8 | ||
|
3c3f1bdb76 | ||
|
718acdc607 | ||
|
71a5d81c09 | ||
|
e2d4c395e5 | ||
fd611813b7 | |||
ab5da15b10 | |||
e584566dde | |||
f06aa3a175 | |||
9abeba8f9d | |||
1f498323a4 | |||
646e3a2c36 | |||
197ca6ef81 | |||
b8780a7339 | |||
b90968ea85 | |||
d3275f8067 | |||
649f362824 | |||
732761d73b | |||
0e7627cb7d | |||
d81c246b35 | |||
|
b97dd1f892 | ||
0b8374753d | |||
cb29afdcb2 | |||
4f366535c3 | |||
f32ef77551 | |||
d02f649164 | |||
3b50ca2bfe | |||
17796a1183 | |||
512b1d4243 | |||
a2b0cdd5b6 | |||
e79af169b9 | |||
661f9342b9 | |||
9d1244c7a1 | |||
0dc50bf88f | |||
75accbbf87 | |||
19fbd95a79 | |||
d73c42fd42 | |||
|
6399a8ca97 | ||
|
580c7da73a | ||
|
11d47799f1 | ||
|
7d825da72d | ||
|
adf49292bd | ||
|
63e69df14a | ||
7bd8a4525a | |||
a860789056 | |||
58f89640a8 | |||
132e086d6d | |||
617505ee99 | |||
34a21702ab | |||
15d3253af9 | |||
90970ef172 | |||
0d6f789ffd | |||
f968776cd0 | |||
0b2beb08b7 | |||
8fae31a679 | |||
f67ac05610 | |||
7803519d04 | |||
55e63c2c72 | |||
6e083293bb | |||
60e427826c | |||
f905b4ccfe | |||
487786455c | |||
585d39657a | |||
e5e2812ed5 | |||
506218210e | |||
a7a08ef9f3 | |||
0fe94afd2a | |||
|
73262aa60a | ||
a322553210 | |||
09aae9e79d | |||
c72c25a74d | |||
9c93b1dc4a | |||
cfd426f657 | |||
93f4991a05 | |||
ce0f3c7b07 | |||
58c5443de1 | |||
b3acbf3cbc | |||
3270a3102b | |||
acc9710c72 | |||
756ef9b0c6 | |||
|
8baec6fd41 | ||
c1ab4afc46 | |||
bdcd63284a | |||
|
e8a951405d | ||
|
93caa67bad | ||
|
0dfaebdb7f | ||
|
2f721343aa | ||
270b62be53 | |||
0984e40cc8 | |||
4e26a7c727 | |||
17d146a444 | |||
323955129b | |||
d4eaeb7c21 | |||
725e83af07 | |||
|
d58fbbd819 | ||
bab4c95580 | |||
536b133850 | |||
ead44d21f7 | |||
ff7fb92c19 | |||
46effc5599 | |||
0f7a0d658f | |||
08b0782645 | |||
9f7f83a40a | |||
b3f9c93fcb | |||
b6bcae462f | |||
|
70cbd7b60d | ||
|
ba065b36b2 | ||
|
cfc4d78b9f | ||
|
34e96804f4 | ||
|
3a8354635b | ||
|
fcba2d6011 | ||
|
8db4555032 | ||
|
f22b33deba | ||
f73b754d9c | |||
f2e3dba5e2 | |||
e89bd04a8d | |||
6f2550cf79 | |||
0c94180823 | |||
f59d77f8bc | |||
57983912f5 | |||
8a6cfef4c5 | |||
7c9a06dcee | |||
580f9efa06 | |||
c0b41a6d6c | |||
4efdc15832 | |||
2dc9f33109 | |||
d0255ca5d1 | |||
790ad5b440 | |||
9539635918 | |||
7c61825d5f | |||
c2446ab6e2 | |||
120fbe05e6 | |||
e686771ce3 | |||
a5bd0b724a | |||
35c7223d40 | |||
32bda525a1 | |||
42231a40f4 | |||
76c6016a9e | |||
d8e6ac1d7b | |||
03d0cab454 | |||
b149fbd85e | |||
97528e845d | |||
f04f777ec2 | |||
|
688d6498b0 | ||
7d8c554354 | |||
b31dab5a46 | |||
c485eb9682 | |||
627f2ca6b6 | |||
2b9ea0bcdb | |||
ba0c6fe7d2 | |||
6c11bf51b2 | |||
8ffe5fd408 | |||
773ff53432 | |||
81ab282822 | |||
8fb910383d | |||
1fe5c07c36 | |||
eadbf37ce5 | |||
f7f210a905 | |||
a6d3eaf404 | |||
72f5ebc567 | |||
e52c5dc8c8 | |||
f08ae85e5c | |||
4988c82be2 | |||
f4c15191dc | |||
678ce1aec5 | |||
99e958bd6f | |||
879ca58606 | |||
f9df889a0a | |||
28c909317d | |||
97e58e4113 | |||
|
796b9e6865 | ||
541cc18889 | |||
64986858b1 | |||
7dfb883a8f | |||
|
9abc2a1f98 | ||
8b615f4780 | |||
1f3a4d3042 | |||
7c4601835c | |||
|
401871daa1 | ||
b53ba2b073 | |||
3191e4ed53 | |||
72ea1faa67 | |||
751a1d4143 | |||
81bd94a1db | |||
e49b1482a1 | |||
ba4273041d | |||
d45a5f6084 | |||
e3627d3531 | |||
f12bb5a879 | |||
f4c2938d95 | |||
7a8c6e7b3c | |||
c0ca3a909c | |||
792e4c018c | |||
e51e4e34dc | |||
e429bc51f7 | |||
6adb00b442 | |||
9a5bc849bc | |||
9ef96af4a5 | |||
66a5099f75 | |||
f2e1dabf24 | |||
39b46177ea | |||
c69d61a07d | |||
1236a200cd | |||
|
24845fb336 | ||
|
a398abdf63 | ||
|
5bbd6db883 | ||
9e2d2a7503 | |||
|
ea662406ed | ||
06661efd7e | |||
ec95fd84f9 | |||
86d7e9f156 | |||
5a3cb20dcb | |||
1cb675e7c3 | |||
438ceef98b | |||
0be01806dd | |||
639f7a4031 | |||
ba3e6551e2 | |||
d12db5479a | |||
e44c961258 | |||
0999f6272f | |||
7bfb8f5920 | |||
eb79c0ba68 | |||
466b67581f | |||
031b1dec3a | |||
41282e79e8 | |||
ffcaf51b66 | |||
30d69f695c | |||
c5feb14abc | |||
5665d7a99f | |||
5158f9f66c | |||
e9bed237bf |
38
.gitea/workflows/lint-test.yaml
Normal file
38
.gitea/workflows/lint-test.yaml
Normal file
@@ -0,0 +1,38 @@
|
||||
name: lint-and-test-charts
|
||||
|
||||
on: pull_request
|
||||
|
||||
jobs:
|
||||
lint-test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Set up Helm
|
||||
uses: azure/setup-helm@v4
|
||||
with:
|
||||
version: latest
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: "3.13"
|
||||
check-latest: true
|
||||
|
||||
- name: Set up Chart Testing
|
||||
uses: helm/chart-testing-action@v2.7.0
|
||||
|
||||
- name: Run Chart Testing (list-changed)
|
||||
id: list-changed
|
||||
run: |
|
||||
changed=$(ct list-changed --target-branch ${{ gitea.event.repository.default_branch }})
|
||||
if [[ -n "$changed" ]]; then
|
||||
echo "changed=true" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Run Chart Testing (lint)
|
||||
if: steps.list-changed.outputs.changed == 'true'
|
||||
run: ct lint --target-branch ${{ gitea.event.repository.default_branch }}
|
66
.gitea/workflows/release-charts-cloudflared.yml
Normal file
66
.gitea/workflows/release-charts-cloudflared.yml
Normal file
@@ -0,0 +1,66 @@
|
||||
name: release-charts-cloudflared
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- "charts/cloudflared/**"
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
env:
|
||||
WORKFLOW_DIR: "charts/cloudflared"
|
||||
|
||||
jobs:
|
||||
release:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Helm
|
||||
uses: azure/setup-helm@v4
|
||||
with:
|
||||
token: ${{ secrets.GITEA_TOKEN }}
|
||||
version: latest
|
||||
|
||||
- name: Package Helm Chart
|
||||
run: |
|
||||
cd $WORKFLOW_DIR
|
||||
helm dependency build
|
||||
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
|
||||
|
||||
- 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
|
||||
|
||||
- name: Extract Chart Metadata
|
||||
run: |
|
||||
cd $WORKFLOW_DIR
|
||||
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: Actions Ntfy
|
||||
run: |
|
||||
curl \
|
||||
-H "Authorization: Bearer ${{ secrets.NTFY_CRED }}" \
|
||||
-H "Title: Chart Released: ${{ env.CHART_NAME }}-${{ env.CHART_VERSION }}" \
|
||||
-H "Content-Type: text/plain" \
|
||||
-d $'Repo: ${{ gitea.repository }}\nCommit: ${{ gitea.sha }}\nRef: ${{ gitea.ref }}\nStatus: ${{ job.status}}' \
|
||||
${{ secrets.NTFY_URL }}
|
66
.gitea/workflows/release-charts-generic-device-plugin.yml
Normal file
66
.gitea/workflows/release-charts-generic-device-plugin.yml
Normal file
@@ -0,0 +1,66 @@
|
||||
name: release-charts-generic-device-plugin
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- "charts/generic-device-plugin/**"
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
env:
|
||||
WORKFLOW_DIR: "charts/generic-device-plugin"
|
||||
|
||||
jobs:
|
||||
release:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Helm
|
||||
uses: azure/setup-helm@v4
|
||||
with:
|
||||
token: ${{ secrets.GITEA_TOKEN }}
|
||||
version: latest
|
||||
|
||||
- name: Package Helm Chart
|
||||
run: |
|
||||
cd $WORKFLOW_DIR
|
||||
helm dependency build
|
||||
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
|
||||
|
||||
- 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
|
||||
|
||||
- name: Extract Chart Metadata
|
||||
run: |
|
||||
cd $WORKFLOW_DIR
|
||||
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: Actions Ntfy
|
||||
run: |
|
||||
curl \
|
||||
-H "Authorization: Bearer ${{ secrets.NTFY_CRED }}" \
|
||||
-H "Title: Chart Released: ${{ env.CHART_NAME }}-${{ env.CHART_VERSION }}" \
|
||||
-H "Content-Type: text/plain" \
|
||||
-d $'Repo: ${{ gitea.repository }}\nCommit: ${{ gitea.sha }}\nRef: ${{ gitea.ref }}\nStatus: ${{ job.status}}' \
|
||||
${{ secrets.NTFY_URL }}
|
66
.gitea/workflows/release-charts-postgres-cluster.yml
Normal file
66
.gitea/workflows/release-charts-postgres-cluster.yml
Normal file
@@ -0,0 +1,66 @@
|
||||
name: release-charts-postgres-cluster
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- "charts/postgres-cluster/**"
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
env:
|
||||
WORKFLOW_DIR: "charts/postgres-cluster"
|
||||
|
||||
jobs:
|
||||
release:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Helm
|
||||
uses: azure/setup-helm@v4
|
||||
with:
|
||||
token: ${{ secrets.GITEA_TOKEN }}
|
||||
version: latest
|
||||
|
||||
- name: Package Helm Chart
|
||||
run: |
|
||||
cd $WORKFLOW_DIR
|
||||
helm dependency build
|
||||
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
|
||||
|
||||
- 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
|
||||
|
||||
- name: Extract Chart Metadata
|
||||
run: |
|
||||
cd $WORKFLOW_DIR
|
||||
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: Actions Ntfy
|
||||
run: |
|
||||
curl \
|
||||
-H "Authorization: Bearer ${{ secrets.NTFY_CRED }}" \
|
||||
-H "Title: Chart Released: ${{ env.CHART_NAME }}-${{ env.CHART_VERSION }}" \
|
||||
-H "Content-Type: text/plain" \
|
||||
-d $'Repo: ${{ gitea.repository }}\nCommit: ${{ gitea.sha }}\nRef: ${{ gitea.ref }}\nStatus: ${{ job.status}}' \
|
||||
${{ secrets.NTFY_URL }}
|
29
.github/workflows/release-charts.yml
vendored
Normal file
29
.github/workflows/release-charts.yml
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
name: release-charts
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- "charts/**"
|
||||
|
||||
jobs:
|
||||
release:
|
||||
permissions:
|
||||
contents: write
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Configure Git
|
||||
run: |
|
||||
git config user.name "$GITHUB_ACTOR"
|
||||
git config user.email "$GITHUB_ACTOR@users.noreply.github.com"
|
||||
|
||||
- name: Run chart-releaser
|
||||
uses: helm/chart-releaser-action@v1.7.0
|
||||
env:
|
||||
CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
|
12
.gitignore
vendored
Normal file
12
.gitignore
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
# Archived
|
||||
charts/**/archive
|
||||
|
||||
# Compiled Helm chart dependencies
|
||||
charts/**/Chart.lock
|
||||
charts/**/charts/
|
||||
|
||||
# Testing
|
||||
__snapshot__/
|
||||
|
||||
# Docs
|
||||
_site/
|
19
.pre-commit-config.yaml
Normal file
19
.pre-commit-config.yaml
Normal file
@@ -0,0 +1,19 @@
|
||||
repos:
|
||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||
rev: v2.3.0
|
||||
hooks:
|
||||
- id: end-of-file-fixer
|
||||
- id: trailing-whitespace
|
||||
- id: check-added-large-files
|
||||
- id: check-yaml
|
||||
exclude: 'charts/'
|
||||
args:
|
||||
- --multi
|
||||
- repo: https://github.com/norwoodj/helm-docs
|
||||
rev: v1.14.2
|
||||
hooks:
|
||||
- id: helm-docs
|
||||
args:
|
||||
- --chart-search-root=charts
|
||||
- --template-files=./_templates.gotmpl
|
||||
- --template-files=README.md.gotmpl
|
201
LICENSE
Normal file
201
LICENSE
Normal file
@@ -0,0 +1,201 @@
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
@@ -1 +0,0 @@
|
||||
theme: jekyll-theme-cayman
|
18
charts/cloudflared/Chart.yaml
Normal file
18
charts/cloudflared/Chart.yaml
Normal file
@@ -0,0 +1,18 @@
|
||||
apiVersion: v2
|
||||
name: cloudflared
|
||||
version: 1.15.0
|
||||
description: Cloudflared Tunnel
|
||||
keywords:
|
||||
- cloudflare
|
||||
- tunnel
|
||||
sources:
|
||||
- https://github.com/cloudflare/cloudflared
|
||||
- https://github.com/bjw-s-labs/helm-charts/tree/main/charts/library/common
|
||||
maintainers:
|
||||
- name: alexlebens
|
||||
dependencies:
|
||||
- name: common
|
||||
repository: https://bjw-s-labs.github.io/helm-charts/
|
||||
version: 4.0.1
|
||||
icon: https://avatars.githubusercontent.com/u/314135?s=48&v=4
|
||||
appVersion: "2025.5.0"
|
35
charts/cloudflared/README.md
Normal file
35
charts/cloudflared/README.md
Normal file
@@ -0,0 +1,35 @@
|
||||
# cloudflared
|
||||
|
||||
 
|
||||
|
||||
Cloudflared Tunnel
|
||||
|
||||
## Maintainers
|
||||
|
||||
| Name | Email | Url |
|
||||
| ---- | ------ | --- |
|
||||
| alexlebens | | |
|
||||
|
||||
## Source Code
|
||||
|
||||
* <https://github.com/cloudflare/cloudflared>
|
||||
* <https://github.com/bjw-s-labs/helm-charts/tree/main/charts/library/common>
|
||||
|
||||
## Requirements
|
||||
|
||||
| Repository | Name | Version |
|
||||
|------------|------|---------|
|
||||
| https://bjw-s-labs.github.io/helm-charts/ | common | 4.0.1 |
|
||||
|
||||
## Values
|
||||
|
||||
| Key | Type | Default | Description |
|
||||
|-----|------|---------|-------------|
|
||||
| existingSecretKey | string | `"cf-tunnel-token"` | Name of key that contains the token in the existingSecret |
|
||||
| existingSecretName | string | `"cloudflared-secret"` | Name of existing secret that contains Cloudflare token |
|
||||
| image | object | `{"pullPolicy":"IfNotPresent","repository":"cloudflare/cloudflared","tag":"2025.5.0"}` | Default image |
|
||||
| name | string | `"cloudflared"` | Name override of release |
|
||||
| resources | object | `{"requests":{"cpu":"10m","memory":"128Mi"}}` | Default resources |
|
||||
|
||||
----------------------------------------------
|
||||
Autogenerated from chart metadata using [helm-docs v1.14.2](https://github.com/norwoodj/helm-docs/releases/v1.14.2)
|
41
charts/cloudflared/templates/common.yaml
Normal file
41
charts/cloudflared/templates/common.yaml
Normal file
@@ -0,0 +1,41 @@
|
||||
{{- include "bjw-s.common.loader.init" . }}
|
||||
|
||||
{{- define "cloudflared.hardcodedValues" -}}
|
||||
{{ if not .Values.global.nameOverride }}
|
||||
global:
|
||||
nameOverride: {{ .Values.name }}
|
||||
{{ end }}
|
||||
controllers:
|
||||
main:
|
||||
type: deployment
|
||||
strategy: Recreate
|
||||
containers:
|
||||
main:
|
||||
image:
|
||||
repository: {{ .Values.image.repository }}
|
||||
tag: {{ .Values.image.tag }}
|
||||
pullPolicy: {{ .Values.image.pullPolicy }}
|
||||
args:
|
||||
- tunnel
|
||||
- --protocol
|
||||
- http2
|
||||
- --no-autoupdate
|
||||
- run
|
||||
- --token
|
||||
- $(CF_MANAGED_TUNNEL_TOKEN)
|
||||
env:
|
||||
- name: CF_MANAGED_TUNNEL_TOKEN
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: {{ .Values.existingSecretName }}
|
||||
key: {{ .Values.existingSecretKey }}
|
||||
resources:
|
||||
{{- with .Values.resources }}
|
||||
resources:
|
||||
{{- toYaml . | nindent 10 }}
|
||||
{{ end }}
|
||||
{{- end -}}
|
||||
{{- $_ := mergeOverwrite .Values (include "cloudflared.hardcodedValues" . | fromYaml) -}}
|
||||
|
||||
{{/* Render the templates */}}
|
||||
{{ include "bjw-s.common.loader.generate" . }}
|
20
charts/cloudflared/values.yaml
Normal file
20
charts/cloudflared/values.yaml
Normal file
@@ -0,0 +1,20 @@
|
||||
# -- Name override of release
|
||||
name: cloudflared
|
||||
|
||||
# -- Name of existing secret that contains Cloudflare token
|
||||
existingSecretName: cloudflared-secret
|
||||
|
||||
# -- Name of key that contains the token in the existingSecret
|
||||
existingSecretKey: cf-tunnel-token
|
||||
|
||||
# -- Default image
|
||||
image:
|
||||
repository: cloudflare/cloudflared
|
||||
tag: "2025.5.0"
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
# -- Default resources
|
||||
resources:
|
||||
requests:
|
||||
cpu: 10m
|
||||
memory: 128Mi
|
18
charts/generic-device-plugin/Chart.yaml
Normal file
18
charts/generic-device-plugin/Chart.yaml
Normal file
@@ -0,0 +1,18 @@
|
||||
apiVersion: v2
|
||||
name: generic-device-plugin
|
||||
version: 0.1.10
|
||||
description: Generic Device Plugin
|
||||
keywords:
|
||||
- generic-device-plugin
|
||||
- device
|
||||
- plugin
|
||||
sources:
|
||||
- https://github.com/squat/generic-device-plugin
|
||||
- https://github.com/bjw-s/helm-charts/tree/main/charts/library/common
|
||||
maintainers:
|
||||
- name: alexlebens
|
||||
dependencies:
|
||||
- name: common
|
||||
repository: https://bjw-s.github.io/helm-charts/
|
||||
version: 3.7.3
|
||||
appVersion: 0.1.10
|
37
charts/generic-device-plugin/README.md
Normal file
37
charts/generic-device-plugin/README.md
Normal file
@@ -0,0 +1,37 @@
|
||||
# generic-device-plugin
|
||||
|
||||
 
|
||||
|
||||
Generic Device Plugin
|
||||
|
||||
## Maintainers
|
||||
|
||||
| Name | Email | Url |
|
||||
| ---- | ------ | --- |
|
||||
| alexlebens | | |
|
||||
|
||||
## Source Code
|
||||
|
||||
* <https://github.com/squat/generic-device-plugin>
|
||||
* <https://github.com/bjw-s/helm-charts/tree/main/charts/library/common>
|
||||
|
||||
## Requirements
|
||||
|
||||
| Repository | Name | Version |
|
||||
|------------|------|---------|
|
||||
| https://bjw-s.github.io/helm-charts/ | common | 3.7.3 |
|
||||
|
||||
## Values
|
||||
|
||||
| Key | Type | Default | Description |
|
||||
|-----|------|---------|-------------|
|
||||
| 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 | `"squat.ai"` | Domain used by devices for identifcation |
|
||||
| image | object | `{"pullPolicy":"Always","repository":"ghcr.io/squat/generic-device-plugin","tag":"latest@sha256:d7d0951df7f11479185fd9fba1c1cb4d9c8f3232d38a5468d6fe80074f2b45d5"}` | Default image |
|
||||
| name | string | `"generic-device-plugin"` | Name override of release |
|
||||
| resources | object | `{"limit":{"cpu":"100m","memory":"20Mi"},"requests":{"cpu":"50m","memory":"10Mi"}}` | Default resources |
|
||||
| service | object | `{"listenPort":8080}` | Service port |
|
||||
|
||||
----------------------------------------------
|
||||
Autogenerated from chart metadata using [helm-docs v1.14.2](https://github.com/norwoodj/helm-docs/releases/v1.14.2)
|
82
charts/generic-device-plugin/templates/common.yaml
Normal file
82
charts/generic-device-plugin/templates/common.yaml
Normal file
@@ -0,0 +1,82 @@
|
||||
{{ include "bjw-s.common.loader.init" . }}
|
||||
|
||||
{{ define "genericDevicePlugin.hardcodedValues" }}
|
||||
{{ if not .Values.global.nameOverride }}
|
||||
global:
|
||||
nameOverride: {{ .Values.name }}
|
||||
{{ end }}
|
||||
controllers:
|
||||
main:
|
||||
type: daemonset
|
||||
pod:
|
||||
priorityClassName: system-node-critical
|
||||
tolerations:
|
||||
- operator: "Exists"
|
||||
effect: "NoExecute"
|
||||
- operator: "Exists"
|
||||
effect: "NoSchedule"
|
||||
containers:
|
||||
main:
|
||||
image:
|
||||
repository: {{ .Values.image.repository }}
|
||||
tag: {{ .Values.image.tag }}
|
||||
pullPolicy: {{ .Values.image.pullPolicy }}
|
||||
args:
|
||||
- --config=/config/config.yaml
|
||||
env:
|
||||
- name: LISTEN
|
||||
value: :{{ .Values.service.listenPort }}
|
||||
- name: PLUGIN_DIRECTORY
|
||||
value: /var/lib/kubelet/device-plugins
|
||||
- name: DOMAIN
|
||||
value: {{ .Values.deviceDomain }}
|
||||
probes:
|
||||
liveness:
|
||||
type: HTTP
|
||||
path: /health
|
||||
readiness:
|
||||
type: HTTP
|
||||
path: /health
|
||||
startup:
|
||||
type: HTTP
|
||||
path: /health
|
||||
securityContext:
|
||||
privileged: True
|
||||
configMaps:
|
||||
config:
|
||||
enabled: {{ .Values.config.enabled }}
|
||||
data:
|
||||
config.yaml: {{ toYaml .Values.config.data | nindent 8 }}
|
||||
service:
|
||||
main:
|
||||
controller: main
|
||||
ports:
|
||||
http:
|
||||
port: {{ .Values.service.listenPort }}
|
||||
persistence:
|
||||
config:
|
||||
enabled: true
|
||||
type: configMap
|
||||
name: {{ .Values.name }}-config
|
||||
device-plugins:
|
||||
enabled: true
|
||||
type: hostPath
|
||||
hostPath: /var/lib/kubelet/device-plugins
|
||||
dev:
|
||||
enabled: true
|
||||
type: hostPath
|
||||
hostPath: /dev
|
||||
serviceMonitor:
|
||||
main:
|
||||
serviceName: generic-device-plugin
|
||||
endpoints:
|
||||
- port: http
|
||||
scheme: http
|
||||
path: /metrics
|
||||
interval: 30s
|
||||
scrapeTimeout: 10s
|
||||
{{ end }}
|
||||
{{ $_ := mergeOverwrite .Values (include "genericDevicePlugin.hardcodedValues" . | fromYaml) }}
|
||||
|
||||
{{/* Render the templates */}}
|
||||
{{ include "bjw-s.common.loader.generate" . }}
|
80
charts/generic-device-plugin/values.yaml
Normal file
80
charts/generic-device-plugin/values.yaml
Normal file
@@ -0,0 +1,80 @@
|
||||
# -- Name override of release
|
||||
name: generic-device-plugin
|
||||
|
||||
# -- Default image
|
||||
image:
|
||||
repository: ghcr.io/squat/generic-device-plugin
|
||||
tag: latest@sha256:d7d0951df7f11479185fd9fba1c1cb4d9c8f3232d38a5468d6fe80074f2b45d5
|
||||
pullPolicy: Always
|
||||
|
||||
# -- Domain used by devices for identifcation
|
||||
deviceDomain: squat.ai
|
||||
|
||||
# -- Service port
|
||||
service:
|
||||
listenPort: 8080
|
||||
|
||||
# -- Default resources
|
||||
resources:
|
||||
limit:
|
||||
cpu: 100m
|
||||
memory: 20Mi
|
||||
requests:
|
||||
cpu: 50m
|
||||
memory: 10Mi
|
||||
|
||||
# -- Config map
|
||||
config:
|
||||
enabled: true
|
||||
# -- generic-device-plugin config file [[ref]](https://github.com/squat/generic-device-plugin#usage)
|
||||
# @default -- See [values.yaml](./values.yaml)
|
||||
data: |
|
||||
devices:
|
||||
- name: serial
|
||||
groups:
|
||||
- paths:
|
||||
- path: /dev/ttyUSB*
|
||||
- paths:
|
||||
- path: /dev/ttyACM*
|
||||
- paths:
|
||||
- path: /dev/tty.usb*
|
||||
- paths:
|
||||
- path: /dev/cu.*
|
||||
- paths:
|
||||
- path: /dev/cuaU*
|
||||
- paths:
|
||||
- path: /dev/rfcomm*
|
||||
- name: video
|
||||
groups:
|
||||
- paths:
|
||||
- path: /dev/video0
|
||||
- name: fuse
|
||||
groups:
|
||||
- count: 10
|
||||
paths:
|
||||
- path: /dev/fuse
|
||||
- name: audio
|
||||
groups:
|
||||
- count: 10
|
||||
paths:
|
||||
- path: /dev/snd
|
||||
- name: capture
|
||||
groups:
|
||||
- paths:
|
||||
- path: /dev/snd/controlC0
|
||||
- path: /dev/snd/pcmC0D0c
|
||||
- paths:
|
||||
- path: /dev/snd/controlC1
|
||||
mountPath: /dev/snd/controlC0
|
||||
- path: /dev/snd/pcmC1D0c
|
||||
mountPath: /dev/snd/pcmC0D0c
|
||||
- paths:
|
||||
- path: /dev/snd/controlC2
|
||||
mountPath: /dev/snd/controlC0
|
||||
- path: /dev/snd/pcmC2D0c
|
||||
mountPath: /dev/snd/pcmC0D0c
|
||||
- paths:
|
||||
- path: /dev/snd/controlC3
|
||||
mountPath: /dev/snd/controlC0
|
||||
- path: /dev/snd/pcmC3D0c
|
||||
mountPath: /dev/snd/pcmC0D0c
|
14
charts/postgres-cluster/Chart.yaml
Normal file
14
charts/postgres-cluster/Chart.yaml
Normal file
@@ -0,0 +1,14 @@
|
||||
apiVersion: v2
|
||||
name: postgres-cluster
|
||||
version: 6.0.5
|
||||
description: Cloudnative-pg Cluster
|
||||
keywords:
|
||||
- database
|
||||
- postgres
|
||||
sources:
|
||||
- https://github.com/cloudnative-pg/cloudnative-pg
|
||||
- https://github.com/cloudnative-pg/charts/tree/main/charts/cluster
|
||||
maintainers:
|
||||
- name: alexlebens
|
||||
icon: https://avatars.githubusercontent.com/u/100373852?s=48&v=4
|
||||
appVersion: v1.26.0
|
137
charts/postgres-cluster/README.md
Normal file
137
charts/postgres-cluster/README.md
Normal file
@@ -0,0 +1,137 @@
|
||||
# postgres-cluster
|
||||
|
||||
 
|
||||
|
||||
Cloudnative-pg Cluster
|
||||
|
||||
## Maintainers
|
||||
|
||||
| Name | Email | Url |
|
||||
| ---- | ------ | --- |
|
||||
| alexlebens | | |
|
||||
|
||||
## Source Code
|
||||
|
||||
* <https://github.com/cloudnative-pg/cloudnative-pg>
|
||||
* <https://github.com/cloudnative-pg/charts/tree/main/charts/cluster>
|
||||
|
||||
## Values
|
||||
|
||||
| Key | Type | Default | Description |
|
||||
|-----|------|---------|-------------|
|
||||
| backup | object | `{"enabled":false,"method":"objectStore","objectStore":[{"clusterName":"","data":{"compression":"snappy","encryption":"","jobs":1},"destinationPath":"","endpointCA":{"create":false,"key":"","name":""},"endpointCredentials":"","endpointURL":"","index":1,"isWALArchiver":true,"name":"external","retentionPolicy":"30d","wal":{"compression":"snappy","encryption":"","maxParallel":1}}],"scheduledBackups":[{"backupName":"external","backupOwnerReference":"self","name":"daily-backup","plugin":"barman-cloud.cloudnative-pg.io","schedule":"0 0 */3 * *","suspend":false}]}` | Backup settings |
|
||||
| backup.enabled | bool | `false` | You need to configure backups manually, so backups are disabled by default. |
|
||||
| backup.method | string | `"objectStore"` | Method to create backups, options currently are only objectStore |
|
||||
| backup.objectStore | list | `[{"clusterName":"","data":{"compression":"snappy","encryption":"","jobs":1},"destinationPath":"","endpointCA":{"create":false,"key":"","name":""},"endpointCredentials":"","endpointURL":"","index":1,"isWALArchiver":true,"name":"external","retentionPolicy":"30d","wal":{"compression":"snappy","encryption":"","maxParallel":1}}]` | Options for object store backups |
|
||||
| backup.objectStore[0].clusterName | string | `""` | Override the name of the backup cluster, defaults to "cluster.name" |
|
||||
| backup.objectStore[0].data.compression | string | `"snappy"` | Data compression method. One of `` (for no compression), `gzip`, `bzip2` or `snappy`. |
|
||||
| backup.objectStore[0].data.encryption | string | `""` | Whether to instruct the storage provider to encrypt data files. One of `` (use the storage container default), `AES256` or `aws:kms`. |
|
||||
| backup.objectStore[0].data.jobs | int | `1` | Number of data files to be archived or restored in parallel. |
|
||||
| backup.objectStore[0].destinationPath | string | `""` | Overrides the provider specific default path. Defaults to: S3: s3://<bucket><path> Azure: https://<storageAccount>.<serviceName>.core.windows.net/<containerName><path> Google: gs://<bucket><path> |
|
||||
| backup.objectStore[0].endpointCA | object | `{"create":false,"key":"","name":""}` | Specifies a CA bundle to validate a privately signed certificate. |
|
||||
| backup.objectStore[0].endpointCA.create | bool | `false` | Creates a secret with the given value if true, otherwise uses an existing secret. |
|
||||
| backup.objectStore[0].endpointCredentials | string | `""` | Specifies secret that contains S3 credentials, should contain the keys ACCESS_KEY_ID and ACCESS_SECRET_KEY |
|
||||
| backup.objectStore[0].endpointURL | string | `""` | Overrides the provider specific default endpoint. Defaults to: S3: https://s3.<region>.amazonaws.com" |
|
||||
| backup.objectStore[0].index | int | `1` | Generate external cluster name, uses: {{ .Release.Name }}-postgresql-<major version>-backup-index-{{ index }} |
|
||||
| backup.objectStore[0].isWALArchiver | bool | `true` | Specificies if this backup will do WALs |
|
||||
| backup.objectStore[0].name | string | `"external"` | Object store backup name |
|
||||
| backup.objectStore[0].retentionPolicy | string | `"30d"` | Retention policy for backups |
|
||||
| backup.objectStore[0].wal | object | `{"compression":"snappy","encryption":"","maxParallel":1}` | Storage |
|
||||
| backup.objectStore[0].wal.compression | string | `"snappy"` | WAL compression method. One of `` (for no compression), `gzip`, `bzip2` or `snappy`. |
|
||||
| backup.objectStore[0].wal.encryption | string | `""` | Whether to instruct the storage provider to encrypt WAL files. One of `` (use the storage container default), `AES256` or `aws:kms`. |
|
||||
| backup.objectStore[0].wal.maxParallel | int | `1` | Number of WAL files to be archived or restored in parallel. |
|
||||
| backup.scheduledBackups[0].backupName | string | `"external"` | Name of backup target |
|
||||
| backup.scheduledBackups[0].backupOwnerReference | string | `"self"` | Backup owner reference |
|
||||
| backup.scheduledBackups[0].name | string | `"daily-backup"` | Scheduled backup name |
|
||||
| backup.scheduledBackups[0].plugin | string | `"barman-cloud.cloudnative-pg.io"` | Backup method, can be `barman-cloud.cloudnative-pg.io` (default) |
|
||||
| backup.scheduledBackups[0].schedule | string | `"0 0 */3 * *"` | Schedule in cron format |
|
||||
| backup.scheduledBackups[0].suspend | bool | `false` | Temporarily stop scheduled backups from running |
|
||||
| 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.5-1-bullseye"},"imagePullPolicy":"IfNotPresent","imagePullSecrets":[],"initdb":{},"instances":3,"logLevel":"info","monitoring":{"customQueries":[],"customQueriesSecret":[],"disableDefaultQueries":false,"enabled":false,"podMonitor":{"enabled":true,"metricRelabelings":[],"relabelings":[]},"prometheusRule":{"enabled":false,"excludeRules":[]}},"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.5-1-bullseye"}` | 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.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":[]}}` | 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.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.excludeRules | list | `[]` | 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 |
|
||||
| cluster.postgresql.ldap | object | `{}` | PostgreSQL LDAP configuration (see https://cloudnative-pg.io/documentation/current/postgresql_conf/#ldap-configuration) |
|
||||
| cluster.postgresql.parameters | object | `{"hot_standby_feedback":"on","max_slot_wal_keep_size":"2000MB","shared_buffers":"128MB"}` | PostgreSQL configuration options (postgresql.conf) |
|
||||
| cluster.postgresql.pg_hba | list | `[]` | PostgreSQL Host Based Authentication rules (lines to be appended to the pg_hba.conf file) |
|
||||
| cluster.postgresql.pg_ident | list | `[]` | PostgreSQL User Name Maps rules (lines to be appended to the pg_ident.conf file) |
|
||||
| cluster.postgresql.shared_preload_libraries | list | `[]` | Lists of shared preload libraries to add to the default ones |
|
||||
| cluster.postgresql.synchronous | object | `{}` | Quorum-based Synchronous Replication |
|
||||
| cluster.primaryUpdateMethod | string | `"switchover"` | Method to follow to upgrade the primary server during a rolling update procedure, after all replicas have been successfully updated. It can be switchover (default) or restart. |
|
||||
| cluster.primaryUpdateStrategy | string | `"unsupervised"` | Strategy to follow to upgrade the primary server during a rolling update procedure, after all replicas have been successfully updated: it can be automated (unsupervised - default) or manual (supervised) |
|
||||
| cluster.resources | object | `{"limits":{"hugepages-2Mi":"256Mi"},"requests":{"cpu":"100m","memory":"256Mi"}}` | Resources requirements of every generated Pod. Please refer to https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ for more information. We strongly advise you use the same setting for limits and requests so that your cluster pods are given a Guaranteed QoS. See: https://kubernetes.io/docs/concepts/workloads/pods/pod-qos/ |
|
||||
| cluster.roles | list | `[]` | This feature enables declarative management of existing roles, as well as the creation of new roles if they are not already present in the database. See: https://cloudnative-pg.io/documentation/current/declarative_role_management/ |
|
||||
| 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 |
|
||||
| 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":"","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.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. |
|
||||
| recovery.backup.pitrTarget | object | `{"time":""}` | Point in time recovery target. Specify one of the following: |
|
||||
| recovery.backup.pitrTarget.time | string | `""` | Time in RFC3339 format |
|
||||
| recovery.import.databases | list | `[]` | Databases to import |
|
||||
| recovery.import.pgDumpExtraOptions | list | `[]` | List of custom options to pass to the `pg_dump` command. IMPORTANT: Use these options with caution and at your own risk, as the operator does not validate their content. Be aware that certain options may conflict with the operator's intended functionality or design. |
|
||||
| recovery.import.pgRestoreExtraOptions | list | `[]` | List of custom options to pass to the `pg_restore` command. IMPORTANT: Use these options with caution and at your own risk, as the operator does not validate their content. Be aware that certain options may conflict with the operator's intended functionality or design. |
|
||||
| recovery.import.postImportApplicationSQL | list | `[]` | List of SQL queries to be executed as a superuser in the application database right after is imported. To be used with extreme care. Only available in microservice type. |
|
||||
| recovery.import.roles | list | `[]` | Roles to import |
|
||||
| recovery.import.schemaOnly | bool | `false` | When set to true, only the pre-data and post-data sections of pg_restore are invoked, avoiding data import. |
|
||||
| recovery.import.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":"app"}` | Configuration for the source database |
|
||||
| recovery.import.source.passwordSecret.create | bool | `false` | Whether to create a secret for the password |
|
||||
| recovery.import.source.passwordSecret.key | string | `"password"` | The key in the secret containing the password |
|
||||
| recovery.import.source.passwordSecret.name | string | `""` | Name of the secret containing the password |
|
||||
| recovery.import.source.passwordSecret.value | string | `""` | The password value to use when creating the secret |
|
||||
| recovery.import.type | string | `"microservice"` | One of `microservice` or `monolith.` See: https://cloudnative-pg.io/documentation/current/database_import/#how-it-works |
|
||||
| recovery.method | string | `"backup"` | Available recovery methods: * `backup` - Recovers a CNPG cluster from a CNPG backup (PITR supported) Needs to be on the same cluster in the same namespace. * `objectStore` - Recovers a CNPG cluster from a barman object store (PITR supported). * `pgBaseBackup` - Recovers a CNPG cluster viaa streaming replication protocol. Useful if you want to migrate databases to CloudNativePG, even from outside Kubernetes. * `import` - Import one or more databases from an existing Postgres cluster. |
|
||||
| recovery.objectStore.clusterName | string | `""` | Override the name of the backup cluster, defaults to "cluster.name" |
|
||||
| recovery.objectStore.data.compression | string | `"snappy"` | Data compression method. One of `` (for no compression), `gzip`, `bzip2` or `snappy`. |
|
||||
| recovery.objectStore.data.encryption | string | `""` | Whether to instruct the storage provider to encrypt data files. One of `` (use the storage container default), `AES256` or `aws:kms`. |
|
||||
| recovery.objectStore.data.jobs | int | `1` | Number of data files to be archived or restored in parallel. |
|
||||
| recovery.objectStore.database | string | `"app"` | Name of the database used by the application. Default: `app`. |
|
||||
| recovery.objectStore.destinationPath | string | `""` | Overrides the provider specific default path. Defaults to: S3: s3://<bucket><path> Azure: https://<storageAccount>.<serviceName>.core.windows.net/<containerName><path> Google: gs://<bucket><path> |
|
||||
| recovery.objectStore.endpointCA | object | `{"create":false,"key":"","name":""}` | Specifies a CA bundle to validate a privately signed certificate. |
|
||||
| recovery.objectStore.endpointCA.create | bool | `false` | Creates a secret with the given value if true, otherwise uses an existing secret. |
|
||||
| recovery.objectStore.endpointCredentials | string | `""` | Specifies secret that contains S3 credentials, should contain the keys ACCESS_KEY_ID and ACCESS_SECRET_KEY |
|
||||
| recovery.objectStore.endpointURL | string | `""` | Overrides the provider specific default endpoint. Defaults to: S3: https://s3.<region>.amazonaws.com" Leave empty if using the default S3 endpoint |
|
||||
| recovery.objectStore.index | int | `1` | Generate external cluster name, uses: {{ .Release.Name }}-postgresql-<major version>-backup-index-{{ index }} |
|
||||
| recovery.objectStore.name | string | `"recovery"` | Object store backup name |
|
||||
| recovery.objectStore.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.objectStore.pitrTarget | object | `{"time":""}` | Point in time recovery target. Specify one of the following: |
|
||||
| recovery.objectStore.pitrTarget.time | string | `""` | Time in RFC3339 format |
|
||||
| recovery.objectStore.wal | object | `{"compression":"snappy","encryption":"","maxParallel":1}` | Storage |
|
||||
| recovery.objectStore.wal.compression | string | `"snappy"` | WAL compression method. One of `` (for no compression), `gzip`, `bzip2` or `snappy`. |
|
||||
| recovery.objectStore.wal.encryption | string | `""` | Whether to instruct the storage provider to encrypt WAL files. One of `` (use the storage container default), `AES256` or `aws:kms`. |
|
||||
| recovery.objectStore.wal.maxParallel | int | `1` | Number of WAL files to be archived or restored in parallel. |
|
||||
| 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.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 |
|
||||
| recovery.pgBaseBackup.source.passwordSecret.value | string | `""` | The password value to use when creating the secret |
|
||||
| type | string | `"postgresql"` | Type of the CNPG database. Available types: * `postgresql` * `tensorchord` |
|
||||
|
||||
----------------------------------------------
|
||||
Autogenerated from chart metadata using [helm-docs v1.14.2](https://github.com/norwoodj/helm-docs/releases/v1.14.2)
|
@@ -0,0 +1,16 @@
|
||||
{{- $alert := "CNPGClusterBackendsWaitingWarning" -}}
|
||||
{{- if not (has $alert .excludeRules) -}}
|
||||
alert: {{ $alert }}
|
||||
annotations:
|
||||
summary: CNPG Cluster a backend is waiting for longer than 5 minutes.
|
||||
description: |-
|
||||
Pod {{`{{`}} $labels.pod {{`}}`}}
|
||||
has been waiting for longer than 5 minutes
|
||||
expr: |
|
||||
cnpg_backends_waiting_total > 300
|
||||
for: 1m
|
||||
labels:
|
||||
severity: warning
|
||||
namespace: {{ .namespace }}
|
||||
cnpg_cluster: {{ .cluster }}
|
||||
{{- end -}}
|
@@ -0,0 +1,16 @@
|
||||
{{- $alert := "CNPGClusterDatabaseDeadlockConflictsWarning" -}}
|
||||
{{- if not (has $alert .excludeRules) -}}
|
||||
alert: {{ $alert }}
|
||||
annotations:
|
||||
summary: CNPG Cluster has over 10 deadlock conflicts.
|
||||
description: |-
|
||||
There are over 10 deadlock conflicts in
|
||||
{{`{{`}} $labels.pod {{`}}`}}
|
||||
expr: |
|
||||
cnpg_pg_stat_database_deadlocks > 10
|
||||
for: 1m
|
||||
labels:
|
||||
severity: warning
|
||||
namespace: {{ .namespace }}
|
||||
cnpg_cluster: {{ .cluster }}
|
||||
{{- end -}}
|
@@ -0,0 +1,26 @@
|
||||
{{- $alert := "CNPGClusterHACritical" -}}
|
||||
{{- if not (has $alert .excludeRules) -}}
|
||||
alert: {{ $alert }}
|
||||
annotations:
|
||||
summary: CNPG Cluster has no standby replicas!
|
||||
description: |-
|
||||
CloudNativePG Cluster "{{ .labels.job }}" has no ready standby replicas. Your cluster at a severe
|
||||
risk of data loss and downtime if the primary instance fails.
|
||||
|
||||
The primary instance is still online and able to serve queries, although connections to the `-ro` endpoint
|
||||
will fail. The `-r` endpoint os operating at reduced capacity and all traffic is being served by the main.
|
||||
|
||||
This can happen during a normal fail-over or automated minor version upgrades in a cluster with 2 or less
|
||||
instances. The replaced instance may need some time to catch-up with the cluster primary instance.
|
||||
|
||||
This alarm will be always trigger if your cluster is configured to run with only 1 instance. In this
|
||||
case you may want to silence it.
|
||||
runbook_url: https://github.com/cloudnative-pg/charts/blob/main/charts/cluster/docs/runbooks/CNPGClusterHACritical.md
|
||||
expr: |
|
||||
max by (job) (cnpg_pg_replication_streaming_replicas{namespace="{{ .namespace }}"} - cnpg_pg_replication_is_wal_receiver_up{namespace="{{ .namespace }}"}) < 1
|
||||
for: 5m
|
||||
labels:
|
||||
severity: critical
|
||||
namespace: {{ .namespace }}
|
||||
cnpg_cluster: {{ .cluster }}
|
||||
{{- end -}}
|
@@ -0,0 +1,24 @@
|
||||
{{- $alert := "CNPGClusterHAWarning" -}}
|
||||
{{- if not (has $alert .excludeRules) -}}
|
||||
alert: {{ $alert }}
|
||||
annotations:
|
||||
summary: CNPG Cluster less than 2 standby replicas.
|
||||
description: |-
|
||||
CloudNativePG Cluster "{{ .labels.job }}" has only {{ .value }} standby replicas, putting
|
||||
your cluster at risk if another instance fails. The cluster is still able to operate normally, although
|
||||
the `-ro` and `-r` endpoints operate at reduced capacity.
|
||||
|
||||
This can happen during a normal fail-over or automated minor version upgrades. The replaced instance may
|
||||
need some time to catch-up with the cluster primary instance.
|
||||
|
||||
This alarm will be constantly triggered if your cluster is configured to run with less than 3 instances.
|
||||
In this case you may want to silence it.
|
||||
runbook_url: https://github.com/cloudnative-pg/charts/blob/main/charts/cluster/docs/runbooks/CNPGClusterHAWarning.md
|
||||
expr: |
|
||||
max by (job) (cnpg_pg_replication_streaming_replicas{namespace="{{ .namespace }}"} - cnpg_pg_replication_is_wal_receiver_up{namespace="{{ .namespace }}"}) < 2
|
||||
for: 5m
|
||||
labels:
|
||||
severity: warning
|
||||
namespace: {{ .namespace }}
|
||||
cnpg_cluster: {{ .cluster }}
|
||||
{{- end -}}
|
@@ -0,0 +1,17 @@
|
||||
{{- $alert := "CNPGClusterHighConnectionsCritical" -}}
|
||||
{{- if not (has $alert .excludeRules) -}}
|
||||
alert: {{ $alert }}
|
||||
annotations:
|
||||
summary: CNPG Instance maximum number of connections critical!
|
||||
description: |-
|
||||
CloudNativePG Cluster "{{ .namespace }}/{{ .cluster }}" instance {{ .labels.pod }} is using {{ .value }}% of
|
||||
the maximum number of connections.
|
||||
runbook_url: https://github.com/cloudnative-pg/charts/blob/main/charts/cluster/docs/runbooks/CNPGClusterHighConnectionsCritical.md
|
||||
expr: |
|
||||
sum by (pod) (cnpg_backends_total{namespace="{{ .namespace }}", pod=~"{{ .podSelector }}"}) / max by (pod) (cnpg_pg_settings_setting{name="max_connections", namespace="{{ .namespace }}", pod=~"{{ .podSelector }}"}) * 100 > 95
|
||||
for: 5m
|
||||
labels:
|
||||
severity: critical
|
||||
namespace: {{ .namespace }}
|
||||
cnpg_cluster: {{ .cluster }}
|
||||
{{- end -}}
|
@@ -0,0 +1,17 @@
|
||||
{{- $alert := "CNPGClusterHighConnectionsWarning" -}}
|
||||
{{- if not (has $alert .excludeRules) -}}
|
||||
alert: {{ $alert }}
|
||||
annotations:
|
||||
summary: CNPG Instance is approaching the maximum number of connections.
|
||||
description: |-
|
||||
CloudNativePG Cluster "{{ .namespace }}/{{ .cluster }}" instance {{ .labels.pod }} is using {{ .value }}% of
|
||||
the maximum number of connections.
|
||||
runbook_url: https://github.com/cloudnative-pg/charts/blob/main/charts/cluster/docs/runbooks/CNPGClusterHighConnectionsWarning.md
|
||||
expr: |
|
||||
sum by (pod) (cnpg_backends_total{namespace="{{ .namespace }}", pod=~"{{ .podSelector }}"}) / max by (pod) (cnpg_pg_settings_setting{name="max_connections", namespace="{{ .namespace }}", pod=~"{{ .podSelector }}"}) * 100 > 80
|
||||
for: 5m
|
||||
labels:
|
||||
severity: warning
|
||||
namespace: {{ .namespace }}
|
||||
cnpg_cluster: {{ .cluster }}
|
||||
{{- end -}}
|
@@ -0,0 +1,19 @@
|
||||
{{- $alert := "CNPGClusterHighReplicationLag" -}}
|
||||
{{- if not (has $alert .excludeRules) -}}
|
||||
alert: {{ $alert }}
|
||||
annotations:
|
||||
summary: CNPG Cluster high replication lag
|
||||
description: |-
|
||||
CloudNativePG Cluster "{{ .namespace }}/{{ .cluster }}" is experiencing a high replication lag of
|
||||
{{ .value }}ms.
|
||||
|
||||
High replication lag indicates network issues, busy instances, slow queries or suboptimal configuration.
|
||||
runbook_url: https://github.com/cloudnative-pg/charts/blob/main/charts/cluster/docs/runbooks/CNPGClusterHighReplicationLag.md
|
||||
expr: |
|
||||
max(cnpg_pg_replication_lag{namespace="{{ .namespace }}",pod=~"{{ .podSelector }}"}) * 1000 > 1000
|
||||
for: 5m
|
||||
labels:
|
||||
severity: warning
|
||||
namespace: {{ .namespace }}
|
||||
cnpg_cluster: {{ .cluster }}
|
||||
{{- end -}}
|
@@ -0,0 +1,19 @@
|
||||
{{- $alert := "CNPGClusterInstancesOnSameNode" -}}
|
||||
{{- if not (has $alert .excludeRules) -}}
|
||||
alert: {{ $alert }}
|
||||
annotations:
|
||||
summary: CNPG Cluster instances are located on the same node.
|
||||
description: |-
|
||||
CloudNativePG Cluster "{{ .namespace }}/{{ .cluster }}" has {{ .value }}
|
||||
instances on the same node {{ .labels.node }}.
|
||||
|
||||
A failure or scheduled downtime of a single node will lead to a potential service disruption and/or data loss.
|
||||
runbook_url: https://github.com/cloudnative-pg/charts/blob/main/charts/cluster/docs/runbooks/CNPGClusterInstancesOnSameNode.md
|
||||
expr: |
|
||||
count by (node) (kube_pod_info{namespace="{{ .namespace }}", pod=~"{{ .podSelector }}"}) > 1
|
||||
for: 5m
|
||||
labels:
|
||||
severity: warning
|
||||
namespace: {{ .namespace }}
|
||||
cnpg_cluster: {{ .cluster }}
|
||||
{{- end -}}
|
@@ -0,0 +1,15 @@
|
||||
{{- $alert := "CNPGClusterLastFailedArchiveTimeWarning" -}}
|
||||
{{- if not (has $alert .excludeRules) -}}
|
||||
alert: {{ $alert }}
|
||||
annotations:
|
||||
summary: CNPG Cluster last time archiving failed.
|
||||
description: |-
|
||||
Archiving failed for {{`{{`}} $labels.pod {{`}}`}}
|
||||
expr: |
|
||||
(cnpg_pg_stat_archiver_last_failed_time - cnpg_pg_stat_archiver_last_archived_time) > 1
|
||||
for: 1m
|
||||
labels:
|
||||
severity: warning
|
||||
namespace: {{ .namespace }}
|
||||
cnpg_cluster: {{ .cluster }}
|
||||
{{- end -}}
|
@@ -0,0 +1,16 @@
|
||||
{{- $alert := "CNPGClusterLongRunningTransactionWarning" -}}
|
||||
{{- if not (has $alert .excludeRules) -}}
|
||||
alert: {{ $alert }}
|
||||
annotations:
|
||||
summary: CNPG Cluster query is taking longer than 5 minutes.
|
||||
description: |-
|
||||
CloudNativePG Cluster Pod {{`{{`}} $labels.pod {{`}}`}}
|
||||
is taking more than 5 minutes (300 seconds) for a query.
|
||||
expr: |-
|
||||
cnpg_backends_max_tx_duration_seconds > 300
|
||||
for: 1m
|
||||
labels:
|
||||
severity: warning
|
||||
namespace: {{ .namespace }}
|
||||
cnpg_cluster: {{ .cluster }}
|
||||
{{- end -}}
|
@@ -0,0 +1,24 @@
|
||||
{{- $alert := "CNPGClusterLowDiskSpaceCritical" -}}
|
||||
{{- if not (has $alert .excludeRules) -}}
|
||||
alert: {{ $alert }}
|
||||
annotations:
|
||||
summary: CNPG Instance is running out of disk space!
|
||||
description: |-
|
||||
CloudNativePG Cluster "{{ .namespace }}/{{ .cluster }}" is running extremely low on disk space. Check attached PVCs!
|
||||
runbook_url: https://github.com/cloudnative-pg/charts/blob/main/charts/cluster/docs/runbooks/CNPGClusterLowDiskSpaceCritical.md
|
||||
expr: |
|
||||
max(max by(persistentvolumeclaim) (1 - kubelet_volume_stats_available_bytes{namespace="{{ .namespace }}", persistentvolumeclaim=~"{{ .podSelector }}"} / kubelet_volume_stats_capacity_bytes{namespace="{{ .namespace }}", persistentvolumeclaim=~"{{ .podSelector }}"})) > 0.9 OR
|
||||
max(max by(persistentvolumeclaim) (1 - kubelet_volume_stats_available_bytes{namespace="{{ .namespace }}", persistentvolumeclaim=~"{{ .podSelector }}-wal"} / kubelet_volume_stats_capacity_bytes{namespace="{{ .namespace }}", persistentvolumeclaim=~"{{ .podSelector }}-wal"})) > 0.9 OR
|
||||
max(sum by (namespace,persistentvolumeclaim) (kubelet_volume_stats_used_bytes{namespace="{{ .namespace }}", persistentvolumeclaim=~"{{ .podSelector }}-tbs.*"})
|
||||
/
|
||||
sum by (namespace,persistentvolumeclaim) (kubelet_volume_stats_capacity_bytes{namespace="{{ .namespace }}", persistentvolumeclaim=~"{{ .podSelector }}-tbs.*"})
|
||||
*
|
||||
on(namespace, persistentvolumeclaim) group_left(volume)
|
||||
kube_pod_spec_volumes_persistentvolumeclaims_info{pod=~"{{ .podSelector }}"}
|
||||
) > 0.9
|
||||
for: 5m
|
||||
labels:
|
||||
severity: critical
|
||||
namespace: {{ .namespace }}
|
||||
cnpg_cluster: {{ .cluster }}
|
||||
{{- end -}}
|
@@ -0,0 +1,24 @@
|
||||
{{- $alert := "CNPGClusterLowDiskSpaceWarning" -}}
|
||||
{{- if not (has $alert .excludeRules) -}}
|
||||
alert: {{ $alert }}
|
||||
annotations:
|
||||
summary: CNPG Instance is running out of disk space.
|
||||
description: |-
|
||||
CloudNativePG Cluster "{{ .namespace }}/{{ .cluster }}" is running low on disk space. Check attached PVCs.
|
||||
runbook_url: https://github.com/cloudnative-pg/charts/blob/main/charts/cluster/docs/runbooks/CNPGClusterLowDiskSpaceWarning.md
|
||||
expr: |
|
||||
max(max by(persistentvolumeclaim) (1 - kubelet_volume_stats_available_bytes{namespace="{{ .namespace }}", persistentvolumeclaim=~"{{ .podSelector }}"} / kubelet_volume_stats_capacity_bytes{namespace="{{ .namespace }}", persistentvolumeclaim=~"{{ .podSelector }}"})) > 0.7 OR
|
||||
max(max by(persistentvolumeclaim) (1 - kubelet_volume_stats_available_bytes{namespace="{{ .namespace }}", persistentvolumeclaim=~"{{ .podSelector }}-wal"} / kubelet_volume_stats_capacity_bytes{namespace="{{ .namespace }}", persistentvolumeclaim=~"{{ .podSelector }}-wal"})) > 0.7 OR
|
||||
max(sum by (namespace,persistentvolumeclaim) (kubelet_volume_stats_used_bytes{namespace="{{ .namespace }}", persistentvolumeclaim=~"{{ .podSelector }}-tbs.*"})
|
||||
/
|
||||
sum by (namespace,persistentvolumeclaim) (kubelet_volume_stats_capacity_bytes{namespace="{{ .namespace }}", persistentvolumeclaim=~"{{ .podSelector }}-tbs.*"})
|
||||
*
|
||||
on(namespace, persistentvolumeclaim) group_left(volume)
|
||||
kube_pod_spec_volumes_persistentvolumeclaims_info{pod=~"{{ .podSelector }}"}
|
||||
) > 0.7
|
||||
for: 5m
|
||||
labels:
|
||||
severity: warning
|
||||
namespace: {{ .namespace }}
|
||||
cnpg_cluster: {{ .cluster }}
|
||||
{{- end -}}
|
@@ -0,0 +1,19 @@
|
||||
{{- $alert := "CNPGClusterOffline" -}}
|
||||
{{- if not (has $alert .excludeRules) -}}
|
||||
alert: {{ $alert }}
|
||||
annotations:
|
||||
summary: CNPG Cluster has no running instances!
|
||||
description: |-
|
||||
CloudNativePG Cluster "{{ .namespace }}/{{ .cluster }}" has no ready instances.
|
||||
|
||||
Having an offline cluster means your applications will not be able to access the database, leading to
|
||||
potential service disruption and/or data loss.
|
||||
runbook_url: https://github.com/cloudnative-pg/charts/blob/main/charts/cluster/docs/runbooks/CNPGClusterOffline.md
|
||||
expr: |
|
||||
(count(cnpg_collector_up{namespace="{{ .namespace }}",pod=~"{{ .podSelector }}"}) OR on() vector(0)) == 0
|
||||
for: 5m
|
||||
labels:
|
||||
severity: critical
|
||||
namespace: {{ .namespace }}
|
||||
cnpg_cluster: {{ .cluster }}
|
||||
{{- end -}}
|
@@ -0,0 +1,16 @@
|
||||
{{- $alert := "CNPGClusterPGDatabaseXidAgeWarning" -}}
|
||||
{{- if not (has $alert .excludeRules) -}}
|
||||
alert: {{ $alert }}
|
||||
annotations:
|
||||
summary: CNPG Cluster has a number of transactions from the frozen XID to the current one.
|
||||
description: |-
|
||||
Over 300,000,000 transactions from frozen xid
|
||||
on pod {{`{{`}} $labels.pod {{`}}`}}
|
||||
expr: |
|
||||
cnpg_pg_database_xid_age > 300000000
|
||||
for: 1m
|
||||
labels:
|
||||
severity: warning
|
||||
namespace: {{ .namespace }}
|
||||
cnpg_cluster: {{ .cluster }}
|
||||
{{- end -}}
|
@@ -0,0 +1,15 @@
|
||||
{{- $alert := "CNPGClusterPGReplicationWarning" -}}
|
||||
{{- if not (has $alert .excludeRules) -}}
|
||||
alert: {{ $alert }}
|
||||
annotations:
|
||||
summary: CNPG Cluster standby is lagging behind the primary.
|
||||
description: |-
|
||||
Standby is lagging behind by over 300 seconds (5 minutes)
|
||||
expr: |
|
||||
cnpg_pg_replication_lag > 300
|
||||
for: 1m
|
||||
labels:
|
||||
severity: warning
|
||||
namespace: {{ .namespace }}
|
||||
cnpg_cluster: {{ .cluster }}
|
||||
{{- end -}}
|
@@ -0,0 +1,16 @@
|
||||
{{- $alert := "CNPGClusterReplicaFailingReplicationWarning" -}}
|
||||
{{- if not (has $alert .excludeRules) -}}
|
||||
alert: {{ $alert }}
|
||||
annotations:
|
||||
summary: CNPG Cluster has a replica is failing to replicate.
|
||||
description: |-
|
||||
Replica {{`{{`}} $labels.pod {{`}}`}}
|
||||
is failing to replicate
|
||||
expr: |
|
||||
cnpg_pg_replication_in_recovery > cnpg_pg_replication_is_wal_receiver_up
|
||||
for: 1m
|
||||
labels:
|
||||
severity: warning
|
||||
namespace: {{ .namespace }}
|
||||
cnpg_cluster: {{ .cluster }}
|
||||
{{- end -}}
|
@@ -0,0 +1,18 @@
|
||||
{{- $alert := "CNPGClusterZoneSpreadWarning" -}}
|
||||
{{- if not (has $alert .excludeRules) -}}
|
||||
alert: {{ $alert }}
|
||||
annotations:
|
||||
summary: CNPG Cluster instances in the same zone.
|
||||
description: |-
|
||||
CloudNativePG Cluster "{{ .namespace }}/{{ .cluster }}" has instances in the same availability zone.
|
||||
|
||||
A disaster in one availability zone will lead to a potential service disruption and/or data loss.
|
||||
runbook_url: https://github.com/cloudnative-pg/charts/blob/main/charts/cluster/docs/runbooks/CNPGClusterZoneSpreadWarning.md
|
||||
expr: |
|
||||
{{ .Values.cluster.instances }} > count(count by (label_topology_kubernetes_io_zone) (kube_pod_info{namespace="{{ .namespace }}", pod=~"{{ .podSelector }}"} * on(node,instance) group_left(label_topology_kubernetes_io_zone) kube_node_labels)) < 3
|
||||
for: 5m
|
||||
labels:
|
||||
severity: warning
|
||||
namespace: {{ .namespace }}
|
||||
cnpg_cluster: {{ .cluster }}
|
||||
{{- end -}}
|
146
charts/postgres-cluster/templates/_bootstrap.tpl
Normal file
146
charts/postgres-cluster/templates/_bootstrap.tpl
Normal file
@@ -0,0 +1,146 @@
|
||||
{{- define "cluster.bootstrap" -}}
|
||||
|
||||
{{- if eq .Values.mode "standalone" }}
|
||||
bootstrap:
|
||||
initdb:
|
||||
{{- with .Values.cluster.initdb }}
|
||||
{{- with (omit . "postInitApplicationSQL" "owner" "import") }}
|
||||
{{- . | toYaml | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- if .Values.cluster.initdb.owner }}
|
||||
owner: {{ tpl .Values.cluster.initdb.owner . }}
|
||||
{{- end }}
|
||||
{{- if eq .Values.type "tensorchord" }}
|
||||
dataChecksums: true
|
||||
{{- end }}
|
||||
{{- if or (eq .Values.type "tensorchord") (.Values.cluster.initdb.postInitApplicationSQL) }}
|
||||
postInitApplicationSQL:
|
||||
{{- if eq .Values.type "tensorchord" }}
|
||||
- ALTER SYSTEM SET search_path TO "$user", public, vectors;
|
||||
- SET search_path TO "$user", public, vectors;
|
||||
- CREATE EXTENSION IF NOT EXISTS "vectors";
|
||||
- CREATE EXTENSION IF NOT EXISTS "cube";
|
||||
- CREATE EXTENSION IF NOT EXISTS "earthdistance";
|
||||
- ALTER SCHEMA vectors OWNER TO "app";
|
||||
- GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA vectors TO "app";
|
||||
- GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO "app";
|
||||
{{- end }}
|
||||
{{- with .Values.cluster.initdb }}
|
||||
{{- range .postInitApplicationSQL }}
|
||||
{{- printf "- %s" . | nindent 6 }}
|
||||
{{- end -}}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{- else if eq .Values.mode "recovery" -}}
|
||||
bootstrap:
|
||||
|
||||
{{- if eq .Values.recovery.method "pgBaseBackup" }}
|
||||
pg_basebackup:
|
||||
source: pgBaseBackupSource
|
||||
{{ with .Values.recovery.pgBaseBackup.database }}
|
||||
database: {{ . }}
|
||||
{{- end }}
|
||||
{{ with .Values.recovery.pgBaseBackup.owner }}
|
||||
owner: {{ . }}
|
||||
{{- end }}
|
||||
{{ with .Values.recovery.pgBaseBackup.secret }}
|
||||
secret:
|
||||
{{- toYaml . | nindent 6 }}
|
||||
{{- end }}
|
||||
externalClusters:
|
||||
{{- include "cluster.externalSourceCluster" (list "pgBaseBackupSource" .Values.recovery.pgBaseBackup.source) | nindent 2 }}
|
||||
|
||||
{{- else if eq .Values.recovery.method "import" }}
|
||||
initdb:
|
||||
{{- with .Values.cluster.initdb }}
|
||||
{{- with (omit . "owner" "import" "postInitApplicationSQL") }}
|
||||
{{- . | toYaml | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- if .Values.cluster.initdb.owner }}
|
||||
owner: {{ tpl .Values.cluster.initdb.owner . }}
|
||||
{{- end }}
|
||||
import:
|
||||
source:
|
||||
externalCluster: importSource
|
||||
type: {{ .Values.recovery.import.type }}
|
||||
databases:
|
||||
{{- if and (gt (len .Values.recovery.import.databases) 1) (eq .Values.recovery.import.type "microservice") }}
|
||||
{{ fail "Too many databases in import type of microservice!" }}
|
||||
{{- else}}
|
||||
{{- with .Values.recovery.import.databases }}
|
||||
{{- . | toYaml | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- if eq .Values.recovery.import.type "monolith" }}
|
||||
roles:
|
||||
{{- with .Values.replica.importRoles }}
|
||||
{{- . | toYaml | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- if and (.Values.recovery.import.postImportApplicationSQL) (eq .Values.recovery.import.type "microservice") }}
|
||||
postImportApplicationSQL:
|
||||
{{- with .Values.recovery.import.postImportApplicationSQL }}
|
||||
{{- . | toYaml | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
schemaOnly: {{ .Values.recovery.import.schemaOnly }}
|
||||
{{ with .Values.recovery.import.pgDumpExtraOptions }}
|
||||
pgDumpExtraOptions:
|
||||
{{- . | toYaml | nindent 8 }}
|
||||
{{- end }}
|
||||
{{ with .Values.recovery.import.pgRestoreExtraOptions }}
|
||||
pgRestoreExtraOptions:
|
||||
{{- . | toYaml | nindent 8 }}
|
||||
{{- end }}
|
||||
externalClusters:
|
||||
{{- include "cluster.externalSourceCluster" (list "importSource" .Values.recovery.import.source) | nindent 2 }}
|
||||
|
||||
{{- else if eq .Values.recovery.method "backup" }}
|
||||
recovery:
|
||||
{{- with .Values.recovery.backup.pitrTarget.time }}
|
||||
recoveryTarget:
|
||||
targetTime: {{ . }}
|
||||
{{- end }}
|
||||
{{ with .Values.recovery.backup.database }}
|
||||
database: {{ . }}
|
||||
{{- end }}
|
||||
{{ with .Values.recovery.backup.owner }}
|
||||
owner: {{ . }}
|
||||
{{- end }}
|
||||
backup:
|
||||
name: {{ .Values.recovery.backup.backupName }}
|
||||
|
||||
{{- else if eq .Values.recovery.method "objectStore" }}
|
||||
recovery:
|
||||
{{- with .Values.recovery.objectStore.pitrTarget.time }}
|
||||
recoveryTarget:
|
||||
targetTime: {{ . }}
|
||||
{{- end }}
|
||||
{{ with .Values.recovery.objectStore.database }}
|
||||
database: {{ . }}
|
||||
{{- end }}
|
||||
{{ with .Values.recovery.objectStore.owner }}
|
||||
owner: {{ . }}
|
||||
{{- end }}
|
||||
source: {{ include "cluster.recoveryServerName" . }}
|
||||
|
||||
externalClusters:
|
||||
- name: {{ include "cluster.recoveryServerName" . }}
|
||||
plugin:
|
||||
name: barman-cloud.cloudnative-pg.io
|
||||
parameters:
|
||||
barmanObjectName: "{{ include "cluster.name" . }}-{{ .Values.recovery.objectStore.name }}"
|
||||
serverName: {{ include "cluster.recoveryServerName" . }}
|
||||
|
||||
{{- else }}
|
||||
{{ fail "Invalid recovery mode!" }}
|
||||
{{- end }}
|
||||
|
||||
{{- else }}
|
||||
{{ fail "Invalid cluster mode!" }}
|
||||
{{- end }}
|
||||
|
||||
{{- end }}
|
12
charts/postgres-cluster/templates/_colorize.tpl
Normal file
12
charts/postgres-cluster/templates/_colorize.tpl
Normal file
@@ -0,0 +1,12 @@
|
||||
{{- define "cluster.color-error" }}
|
||||
{{- printf "\033[0;31m%s\033[0m" . -}}
|
||||
{{- end }}
|
||||
{{- define "cluster.color-ok" }}
|
||||
{{- printf "\033[0;32m%s\033[0m" . -}}
|
||||
{{- end }}
|
||||
{{- define "cluster.color-warning" }}
|
||||
{{- printf "\033[0;33m%s\033[0m" . -}}
|
||||
{{- end }}
|
||||
{{- define "cluster.color-info" }}
|
||||
{{- printf "\033[0;34m%s\033[0m" . -}}
|
||||
{{- end }}
|
@@ -0,0 +1,33 @@
|
||||
{{- define "cluster.externalSourceCluster" -}}
|
||||
{{- $name := first . -}}
|
||||
{{- $config := last . -}}
|
||||
- name: {{ first . }}
|
||||
connectionParameters:
|
||||
host: {{ $config.host | quote }}
|
||||
port: {{ $config.port | quote }}
|
||||
user: {{ $config.username | quote }}
|
||||
{{- with $config.database }}
|
||||
dbname: {{ . | quote }}
|
||||
{{- end }}
|
||||
sslmode: {{ $config.sslMode | quote }}
|
||||
{{- if $config.passwordSecret.name }}
|
||||
password:
|
||||
name: {{ $config.passwordSecret.name }}
|
||||
key: {{ $config.passwordSecret.key }}
|
||||
{{- end }}
|
||||
{{- if $config.sslKeySecret.name }}
|
||||
sslKey:
|
||||
name: {{ $config.sslKeySecret.name }}
|
||||
key: {{ $config.sslKeySecret.key }}
|
||||
{{- end }}
|
||||
{{- if $config.sslCertSecret.name }}
|
||||
sslCert:
|
||||
name: {{ $config.sslCertSecret.name }}
|
||||
key: {{ $config.sslCertSecret.key }}
|
||||
{{- end }}
|
||||
{{- if $config.sslRootCertSecret.name }}
|
||||
sslRootCert:
|
||||
name: {{ $config.sslRootCertSecret.name }}
|
||||
key: {{ $config.sslRootCertSecret.key }}
|
||||
{{- end }}
|
||||
{{- end }}
|
96
charts/postgres-cluster/templates/_helpers.tpl
Normal file
96
charts/postgres-cluster/templates/_helpers.tpl
Normal file
@@ -0,0 +1,96 @@
|
||||
{{/*
|
||||
Expand the name of the chart.
|
||||
*/}}
|
||||
{{- define "cluster.name" -}}
|
||||
{{- if not (empty .Values.nameOverride ) }}
|
||||
{{- .Values.nameOverride | trunc 63 | trimSuffix "-" }}
|
||||
{{- else }}
|
||||
{{- printf "%s-postgresql-%s" .Release.Name ((semver .Values.cluster.image.tag).Major | toString) | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Create chart name and version as used by the chart label.
|
||||
*/}}
|
||||
{{- define "cluster.chart" -}}
|
||||
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Common labels
|
||||
*/}}
|
||||
{{- define "cluster.labels" -}}
|
||||
helm.sh/chart: {{ include "cluster.chart" $ }}
|
||||
{{ include "cluster.selectorLabels" $ }}
|
||||
{{- if .Chart.AppVersion }}
|
||||
app.kubernetes.io/version: {{ .Chart.Version | quote }}
|
||||
{{- end }}
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||
{{- with .Values.cluster.additionalLabels }}
|
||||
{{ toYaml . }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Selector labels
|
||||
*/}}
|
||||
{{- define "cluster.selectorLabels" -}}
|
||||
app.kubernetes.io/name: {{ include "cluster.name" $ }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
app.kubernetes.io/part-of: {{ .Release.Name }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Allow the release namespace to be overridden for multi-namespace deployments in combined charts
|
||||
*/}}
|
||||
{{- define "cluster.namespace" -}}
|
||||
{{- if .Values.namespaceOverride -}}
|
||||
{{- .Values.namespaceOverride -}}
|
||||
{{- else -}}
|
||||
{{- .Release.Namespace -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Postgres UID
|
||||
*/}}
|
||||
{{- define "cluster.postgresUID" -}}
|
||||
{{- if ge (int .Values.cluster.postgresUID) 0 -}}
|
||||
{{- .Values.cluster.postgresUID }}
|
||||
{{- else -}}
|
||||
{{- 26 -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Postgres GID
|
||||
*/}}
|
||||
{{- define "cluster.postgresGID" -}}
|
||||
{{- if ge (int .Values.cluster.postgresGID) 0 -}}
|
||||
{{- .Values.cluster.postgresGID }}
|
||||
{{- else -}}
|
||||
{{- 26 -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Generate recovery server name
|
||||
*/}}
|
||||
{{- define "cluster.recoveryServerName" -}}
|
||||
{{- if .Values.recovery.recoveryServerName -}}
|
||||
{{- .Values.recovery.recoveryServerName -}}
|
||||
{{- else -}}
|
||||
{{- printf "%s-backup-%s" (include "cluster.name" .) (toString .Values.recovery.recoveryIndex) | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Generate name for recovery object store credentials
|
||||
*/}}
|
||||
{{- define "cluster.recoveryCredentials" -}}
|
||||
{{- if .Values.recovery.endpointCredentials -}}
|
||||
{{- .Values.recovery.endpointCredentials -}}
|
||||
{{- else -}}
|
||||
{{- printf "%s-backup-secret" (include "cluster.name" .) | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end }}
|
||||
{{- end }}
|
152
charts/postgres-cluster/templates/cluster.yaml
Normal file
152
charts/postgres-cluster/templates/cluster.yaml
Normal file
@@ -0,0 +1,152 @@
|
||||
apiVersion: postgresql.cnpg.io/v1
|
||||
kind: Cluster
|
||||
metadata:
|
||||
name: {{ include "cluster.name" . }}-cluster
|
||||
namespace: {{ include "cluster.namespace" . }}
|
||||
{{- with .Values.cluster.annotations }}
|
||||
annotations:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
labels:
|
||||
{{- include "cluster.labels" . | nindent 4 }}
|
||||
spec:
|
||||
instances: {{ .Values.cluster.instances }}
|
||||
imageName: "{{ .Values.cluster.image.repository }}:{{ .Values.cluster.image.tag }}"
|
||||
imagePullPolicy: {{ .Values.cluster.imagePullPolicy }}
|
||||
{{- with .Values.cluster.imagePullSecrets }}
|
||||
imagePullSecrets:
|
||||
{{- . | toYaml | nindent 4 }}
|
||||
{{- end }}
|
||||
postgresUID: {{ include "cluster.postgresUID" . }}
|
||||
postgresGID: {{ include "cluster.postgresGID" . }}
|
||||
{{ if or (and (.Values.backup.enabled) (eq .Values.backup.method "objectStore")) (eq .Values.recovery.method "objectStore") }}
|
||||
plugins:
|
||||
{{ end }}
|
||||
{{ if and (.Values.backup.enabled) (eq .Values.backup.method "objectStore") }}
|
||||
{{ $context := . -}}
|
||||
{{ range .Values.backup.objectStore -}}
|
||||
- name: barman-cloud.cloudnative-pg.io
|
||||
isWALArchiver: {{ $context.isWALArchiver }}
|
||||
parameters:
|
||||
barmanObjectName: "{{ include "cluster.name" . }}-{{ $context.name }}-backup"
|
||||
{{ end -}}
|
||||
{{ end }}
|
||||
{{ if eq .Values.recovery.method "objectStore" }}
|
||||
- name: barman-cloud.cloudnative-pg.io
|
||||
parameters:
|
||||
barmanObjectName: "{{ include "cluster.name" . }}-{{ .Values.recovery.objectStore.name }}"
|
||||
{{ end }}
|
||||
storage:
|
||||
size: {{ .Values.cluster.storage.size }}
|
||||
{{- if not (empty .Values.cluster.storage.storageClass) }}
|
||||
storageClass: {{ .Values.cluster.storage.storageClass }}
|
||||
{{- end }}
|
||||
{{- if .Values.cluster.walStorage.enabled }}
|
||||
walStorage:
|
||||
size: {{ .Values.cluster.walStorage.size }}
|
||||
{{- if not (empty .Values.cluster.walStorage.storageClass) }}
|
||||
storageClass: {{ .Values.cluster.walStorage.storageClass }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- with .Values.cluster.resources }}
|
||||
resources:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{ end }}
|
||||
{{- with .Values.cluster.affinity }}
|
||||
affinity:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- if .Values.cluster.priorityClassName }}
|
||||
priorityClassName: {{ .Values.cluster.priorityClassName }}
|
||||
{{- end }}
|
||||
|
||||
primaryUpdateMethod: {{ .Values.cluster.primaryUpdateMethod }}
|
||||
primaryUpdateStrategy: {{ .Values.cluster.primaryUpdateStrategy }}
|
||||
logLevel: {{ .Values.cluster.logLevel }}
|
||||
{{- with .Values.cluster.certificates }}
|
||||
certificates:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{ end }}
|
||||
enableSuperuserAccess: {{ .Values.cluster.enableSuperuserAccess }}
|
||||
{{- with .Values.cluster.superuserSecret }}
|
||||
superuserSecret:
|
||||
name: {{ . }}
|
||||
{{ end }}
|
||||
enablePDB: {{ .Values.cluster.enablePDB }}
|
||||
|
||||
postgresql:
|
||||
{{- if or (eq .Values.type "tensorchord") (not (empty .Values.cluster.postgresql.shared_preload_libraries)) }}
|
||||
shared_preload_libraries:
|
||||
{{- if eq .Values.type "tensorchord" }}
|
||||
- vectors.so
|
||||
{{- end }}
|
||||
{{- with .Values.cluster.postgresql.shared_preload_libraries }}
|
||||
{{- toYaml . | nindent 6 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- with .Values.cluster.postgresql.pg_hba }}
|
||||
pg_hba:
|
||||
{{- toYaml . | nindent 6 }}
|
||||
{{- end }}
|
||||
{{- with .Values.cluster.postgresql.pg_ident }}
|
||||
pg_ident:
|
||||
{{- toYaml . | nindent 6 }}
|
||||
{{- end }}
|
||||
{{- with .Values.cluster.postgresql.ldap }}
|
||||
ldap:
|
||||
{{- toYaml . | nindent 6 }}
|
||||
{{- end}}
|
||||
{{- with .Values.cluster.postgresql.synchronous }}
|
||||
synchronous:
|
||||
{{- toYaml . | nindent 6 }}
|
||||
{{ end }}
|
||||
{{- with .Values.cluster.postgresql.parameters }}
|
||||
parameters:
|
||||
{{- toYaml . | nindent 6 }}
|
||||
{{- end }}
|
||||
|
||||
{{- if not (and (empty .Values.cluster.roles) (empty .Values.cluster.services)) }}
|
||||
managed:
|
||||
{{- with .Values.cluster.services }}
|
||||
services:
|
||||
{{- toYaml . | nindent 6 }}
|
||||
{{ end }}
|
||||
{{- with .Values.cluster.roles }}
|
||||
roles:
|
||||
{{- toYaml . | nindent 6 }}
|
||||
{{ end }}
|
||||
{{- end }}
|
||||
|
||||
{{- with .Values.cluster.serviceAccountTemplate }}
|
||||
serviceAccountTemplate:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
|
||||
monitoring:
|
||||
enablePodMonitor: {{ and .Values.cluster.monitoring.enabled .Values.cluster.monitoring.podMonitor.enabled }}
|
||||
disableDefaultQueries: {{ .Values.cluster.monitoring.disableDefaultQueries }}
|
||||
{{- if not (empty .Values.cluster.monitoring.customQueries) }}
|
||||
customQueriesConfigMap:
|
||||
- name: {{ include "cluster.name" . }}-monitoring
|
||||
key: custom-queries
|
||||
{{- end }}
|
||||
{{- if not (empty .Values.cluster.monitoring.customQueriesSecret) }}
|
||||
{{- with .Values.cluster.monitoring.customQueriesSecret }}
|
||||
customQueriesSecret:
|
||||
{{- toYaml . | nindent 6 }}
|
||||
{{ end }}
|
||||
{{- end }}
|
||||
{{- if not (empty .Values.cluster.monitoring.podMonitor.relabelings) }}
|
||||
{{- with .Values.cluster.monitoring.podMonitor.relabelings }}
|
||||
podMonitorRelabelings:
|
||||
{{- toYaml . | nindent 6 }}
|
||||
{{ end }}
|
||||
{{- end }}
|
||||
{{- if not (empty .Values.cluster.monitoring.podMonitor.metricRelabelings) }}
|
||||
{{- with .Values.cluster.monitoring.podMonitor.metricRelabelings }}
|
||||
podMonitorMetricRelabelings:
|
||||
{{- toYaml . | nindent 6 }}
|
||||
{{ end }}
|
||||
{{- end }}
|
||||
|
||||
{{ include "cluster.bootstrap" . | nindent 2 }}
|
18
charts/postgres-cluster/templates/config-map.yaml
Normal file
18
charts/postgres-cluster/templates/config-map.yaml
Normal file
@@ -0,0 +1,18 @@
|
||||
{{- if not (empty .Values.cluster.monitoring.customQueries) }}
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: {{ include "cluster.name" $ }}-monitoring
|
||||
namespace: {{ include "cluster.namespace" $ }}
|
||||
labels:
|
||||
cnpg.io/reload: ""
|
||||
{{- include "cluster.labels" $ | nindent 4 }}
|
||||
data:
|
||||
custom-queries: |
|
||||
{{- range .Values.cluster.monitoring.customQueries }}
|
||||
{{ .name }}:
|
||||
query: {{ .query | quote }}
|
||||
metrics:
|
||||
{{- .metrics | toYaml | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
95
charts/postgres-cluster/templates/object-store.yaml
Normal file
95
charts/postgres-cluster/templates/object-store.yaml
Normal file
@@ -0,0 +1,95 @@
|
||||
{{ if and (.Values.backup.enabled) (eq .Values.backup.method "objectStore") }}
|
||||
{{ $context := . -}}
|
||||
{{ range .Values.backup.objectStore -}}
|
||||
---
|
||||
apiVersion: barmancloud.cnpg.io/v1
|
||||
kind: ObjectStore
|
||||
metadata:
|
||||
name: "{{ include "cluster.name" $context }}-{{ $context.name }}-backup"
|
||||
namespace: {{ include "cluster.namespace" $context }}
|
||||
labels:
|
||||
{{- include "cluster.labels" $context | nindent 4 }}
|
||||
spec:
|
||||
retentionPolicy: {{ $context.retentionPolicy }}
|
||||
configuration:
|
||||
destinationPath: {{ $context.destinationPath }}
|
||||
endpointURL: {{ $context.endpointURL }}
|
||||
{{- if not (empty $context.endpointCA.name) }}
|
||||
endpointCA:
|
||||
name: {{ $context.endpointCA.name }}
|
||||
key: {{ $context.endpointCA.key }}
|
||||
{{- end }}
|
||||
{{- if not (empty $context.clusterName) }}
|
||||
serverName: "{{ $context.clusterName }}-backup-{{ $context.index }}"
|
||||
{{- else }}
|
||||
serverName: "{{ include "cluster.name" $context }}-backup-{{ $context.index }}"
|
||||
{{- end }}
|
||||
wal:
|
||||
compression: {{ $context.wal.compression }}
|
||||
{{- with $context.wal.encryption}}
|
||||
encryption: {{ . }}
|
||||
{{- end }}
|
||||
maxParallel: {{ $context.wal.maxParallel }}
|
||||
data:
|
||||
compression: {{ $context.data.compression }}
|
||||
{{- with $context.data.encryption }}
|
||||
encryption: {{ . }}
|
||||
{{- end }}
|
||||
jobs: {{ $context.data.jobs }}
|
||||
s3Credentials:
|
||||
accessKeyId:
|
||||
{{- if not (empty $context.endpointCredentials) }}
|
||||
name: {{ $context.endpointCredentials }}
|
||||
{{- else }}
|
||||
name: {{- printf "%s-backup-secret" (include "cluster.name" $context) | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end }}
|
||||
key: ACCESS_KEY_ID
|
||||
secretAccessKey:
|
||||
{{- if not (empty $context.endpointCredentials) }}
|
||||
name: {{ $context.endpointCredentials }}
|
||||
{{- else }}
|
||||
name: {{- printf "%s-backup-secret" (include "cluster.name" $context) | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end }}
|
||||
key: ACCESS_SECRET_KEY
|
||||
{{ end -}}
|
||||
{{ end }}
|
||||
|
||||
{{ if eq .Values.recovery.method "objectStore" }}
|
||||
---
|
||||
apiVersion: barmancloud.cnpg.io/v1
|
||||
kind: ObjectStore
|
||||
metadata:
|
||||
name: "{{ include "cluster.name" . }}-{{ .Values.recovery.objectStore.name }}"
|
||||
namespace: {{ include "cluster.namespace" . }}
|
||||
labels:
|
||||
{{- include "cluster.labels" . | nindent 4 }}
|
||||
spec:
|
||||
configuration:
|
||||
destinationPath: {{ .Values.recovery.objectStore.destinationPath }}
|
||||
endpointURL: {{ .Values.recovery.objectStore.endpointURL }}
|
||||
{{- if not (empty .Values.recovery.objectStore.endpointCA.name) }}
|
||||
endpointCA:
|
||||
name: {{ .Values.recovery.objectStore.endpointCA.name }}
|
||||
key: {{ .Values.recovery.objectStore.endpointCA.key }}
|
||||
{{- end }}
|
||||
serverName: {{ include "cluster.recoveryServerName" . }}
|
||||
wal:
|
||||
compression: {{ .Values.recovery.objectStore.wal.compression }}
|
||||
{{- with .Values.recovery.objectStore.wal.encryption}}
|
||||
encryption: {{ . }}
|
||||
{{- end }}
|
||||
maxParallel: {{ .Values.recovery.objectStore.wal.maxParallel }}
|
||||
data:
|
||||
compression: {{ .Values.recovery.objectStore.data.compression }}
|
||||
{{- with .Values.recovery.objectStore.data.encryption }}
|
||||
encryption: {{ . }}
|
||||
{{- end }}
|
||||
jobs: {{ .Values.recovery.objectStore.data.jobs }}
|
||||
s3Credentials:
|
||||
accessKeyId:
|
||||
name: {{ include "cluster.recoveryCredentials" . }}
|
||||
key: ACCESS_KEY_ID
|
||||
secretAccessKey:
|
||||
name: {{ include "cluster.recoveryCredentials" . }}
|
||||
key: ACCESS_SECRET_KEY
|
||||
{{ end }}
|
51
charts/postgres-cluster/templates/poolers.yaml
Normal file
51
charts/postgres-cluster/templates/poolers.yaml
Normal file
@@ -0,0 +1,51 @@
|
||||
{{- range .Values.poolers }}
|
||||
---
|
||||
apiVersion: postgresql.cnpg.io/v1
|
||||
kind: Pooler
|
||||
metadata:
|
||||
name: {{ include "cluster.name" $ }}-pooler-{{ .name }}
|
||||
namespace: {{ include "cluster.namespace" $ }}
|
||||
labels:
|
||||
{{- include "cluster.labels" $ | nindent 4 }}
|
||||
spec:
|
||||
cluster:
|
||||
name: {{ include "cluster.name" $ }}
|
||||
instances: {{ .instances }}
|
||||
type: {{ default "rw" .type }}
|
||||
pgbouncer:
|
||||
poolMode: {{ default "session" .poolMode }}
|
||||
{{- with .authQuerySecret }}
|
||||
authQuerySecret:
|
||||
{{- toYaml . | nindent 6 }}
|
||||
{{- end }}
|
||||
{{- with .authQuery }}
|
||||
authQuery:
|
||||
{{- toYaml . | nindent 6 }}
|
||||
{{- end }}
|
||||
{{- with .parameters }}
|
||||
parameters:
|
||||
{{- toYaml . | nindent 6 }}
|
||||
{{- end }}
|
||||
{{- with .pg_hba }}
|
||||
pg_hba:
|
||||
{{- toYaml . | nindent 6 }}
|
||||
{{- end }}
|
||||
{{ with .monitoring }}
|
||||
monitoring:
|
||||
{{- if not (empty .podMonitor) }}
|
||||
enablePodMonitor: {{ and .enabled .podMonitor.enabled }}
|
||||
{{- with .podMonitor.relabelings }}
|
||||
podMonitorRelabelings:
|
||||
{{- toYaml . | nindent 6 }}
|
||||
{{ end }}
|
||||
{{- with .podMonitor.metricRelabelings }}
|
||||
podMonitorMetricRelabelings:
|
||||
{{- toYaml . | nindent 6 }}
|
||||
{{ end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- with .template }}
|
||||
template:
|
||||
{{- . | toYaml | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
27
charts/postgres-cluster/templates/prometheus-rule.yaml
Normal file
27
charts/postgres-cluster/templates/prometheus-rule.yaml
Normal file
@@ -0,0 +1,27 @@
|
||||
{{- if and .Values.cluster.monitoring.enabled .Values.cluster.monitoring.prometheusRule.enabled -}}
|
||||
apiVersion: monitoring.coreos.com/v1
|
||||
kind: PrometheusRule
|
||||
metadata:
|
||||
name: {{ include "cluster.name" $ }}-alert-rules
|
||||
namespace: {{ include "cluster.namespace" $ }}
|
||||
labels:
|
||||
{{- include "cluster.labels" $ | nindent 4 }}
|
||||
spec:
|
||||
groups:
|
||||
- name: cloudnative-pg/{{ include "cluster.name" . }}
|
||||
rules:
|
||||
{{- $dict := dict "excludeRules" .Values.cluster.monitoring.prometheusRule.excludeRules -}}
|
||||
{{- $_ := set $dict "value" "{{`{{`}} $value {{`}}`}}" -}}
|
||||
{{- $_ := set $dict "namespace" .Release.Namespace -}}
|
||||
{{- $_ := set $dict "cluster" (printf "%s-cluster" (include "cluster.name" .) ) -}}
|
||||
{{- $_ := set $dict "labels" (dict "job" "{{`{{`}} $labels.job {{`}}`}}" "node" "{{`{{`}} $labels.node {{`}}`}}" "pod" "{{`{{`}} $labels.pod {{`}}`}}") -}}
|
||||
{{- $_ := set $dict "podSelector" (printf "%s-cluster-([1-9][0-9]*)$" (include "cluster.name" .) ) -}}
|
||||
{{- $_ := set $dict "Values" .Values -}}
|
||||
{{- $_ := set $dict "Template" .Template -}}
|
||||
{{- range $path, $_ := .Files.Glob "prometheus_rules/**.yaml" }}
|
||||
{{- $tpl := tpl ($.Files.Get $path) $dict | nindent 10 | trim -}}
|
||||
{{- with $tpl }}
|
||||
- {{ $tpl }}
|
||||
{{- end -}}
|
||||
{{- end }}
|
||||
{{ end }}
|
25
charts/postgres-cluster/templates/scheduled-backup.yaml
Normal file
25
charts/postgres-cluster/templates/scheduled-backup.yaml
Normal file
@@ -0,0 +1,25 @@
|
||||
{{ if .Values.backup.enabled }}
|
||||
{{ $context := . -}}
|
||||
{{ range .Values.backup.scheduledBackups -}}
|
||||
---
|
||||
apiVersion: postgresql.cnpg.io/v1
|
||||
kind: ScheduledBackup
|
||||
metadata:
|
||||
name: "{{ include "cluster.name" $context }}-{{ $context.name }}-scheduled-backup"
|
||||
namespace: {{ include "cluster.namespace" $context }}
|
||||
labels:
|
||||
{{- include "cluster.labels" $context | nindent 4 }}
|
||||
spec:
|
||||
immediate: true
|
||||
suspend: {{ $context.suspend }}
|
||||
schedule: {{ $context.schedule | quote }}
|
||||
backupOwnerReference: {{ $context.backupOwnerReference }}
|
||||
cluster:
|
||||
name: {{ include "cluster.name" $context }}-cluster
|
||||
method: plugin
|
||||
pluginConfiguration:
|
||||
name: {{ $context.plugin }}
|
||||
parameters:
|
||||
barmanObjectName: "{{ include "cluster.name" $context }}-{{ $context.backupName }}-backup"
|
||||
{{ end -}}
|
||||
{{ end }}
|
551
charts/postgres-cluster/values.yaml
Normal file
551
charts/postgres-cluster/values.yaml
Normal file
@@ -0,0 +1,551 @@
|
||||
# -- Override the name of the cluster
|
||||
nameOverride: ""
|
||||
|
||||
# -- Override the namespace of the chart
|
||||
namespaceOverride: ""
|
||||
|
||||
# -- Type of the CNPG database. Available types:
|
||||
# * `postgresql`
|
||||
# * `tensorchord`
|
||||
type: postgresql
|
||||
|
||||
# -- 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
|
||||
mode: standalone
|
||||
|
||||
# -- Cluster settings
|
||||
cluster:
|
||||
instances: 3
|
||||
|
||||
# -- Default image
|
||||
image:
|
||||
repository: ghcr.io/cloudnative-pg/postgresql
|
||||
tag: "17.5-1-bullseye"
|
||||
|
||||
# -- 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
|
||||
imagePullPolicy: IfNotPresent
|
||||
|
||||
# -- 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
|
||||
imagePullSecrets: []
|
||||
|
||||
# -- Default storage size
|
||||
storage:
|
||||
size: 10Gi
|
||||
storageClass: ""
|
||||
|
||||
walStorage:
|
||||
enabled: true
|
||||
size: 2Gi
|
||||
storageClass: ""
|
||||
|
||||
# -- The UID and GID of the postgres user inside the image, defaults to 26
|
||||
postgresUID: -1
|
||||
postgresGID: -1
|
||||
|
||||
# -- Customization of service definitions. Please refer to https://cloudnative-pg.io/documentation/current/service_management/
|
||||
services: {}
|
||||
|
||||
# -- Resources requirements of every generated Pod.
|
||||
# Please refer to https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ for more information.
|
||||
# We strongly advise you use the same setting for limits and requests so that your cluster pods are given a Guaranteed QoS.
|
||||
# See: https://kubernetes.io/docs/concepts/workloads/pods/pod-qos/
|
||||
resources:
|
||||
requests:
|
||||
memory: 256Mi
|
||||
cpu: 100m
|
||||
limits:
|
||||
hugepages-2Mi: 256Mi
|
||||
|
||||
priorityClassName: ""
|
||||
|
||||
# -- Method to follow to upgrade the primary server during a rolling update procedure, after all replicas have been
|
||||
# successfully updated. It can be switchover (default) or restart.
|
||||
primaryUpdateMethod: switchover
|
||||
|
||||
# -- Strategy to follow to upgrade the primary server during a rolling update procedure, after all replicas have been
|
||||
# successfully updated: it can be automated (unsupervised - default) or manual (supervised)
|
||||
primaryUpdateStrategy: unsupervised
|
||||
|
||||
# -- The instances' log level, one of the following values: error, warning, info (default), debug, trace
|
||||
logLevel: "info"
|
||||
|
||||
# -- Affinity/Anti-affinity rules for Pods.
|
||||
# See: https://cloudnative-pg.io/documentation/current/cloudnative-pg.v1/#postgresql-cnpg-io-v1-AffinityConfiguration
|
||||
affinity:
|
||||
enablePodAntiAffinity: true
|
||||
topologyKey: kubernetes.io/hostname
|
||||
|
||||
# -- The configuration for the CA and related certificates.
|
||||
# See: https://cloudnative-pg.io/documentation/current/cloudnative-pg.v1/#postgresql-cnpg-io-v1-CertificatesConfiguration
|
||||
certificates: {}
|
||||
|
||||
# -- 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.
|
||||
enableSuperuserAccess: false
|
||||
superuserSecret: ""
|
||||
|
||||
# -- 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
|
||||
enablePDB: true
|
||||
|
||||
# -- This feature enables declarative management of existing roles, as well as the creation of new roles if they are not
|
||||
# already present in the database.
|
||||
# See: https://cloudnative-pg.io/documentation/current/declarative_role_management/
|
||||
roles: []
|
||||
# - name: dante
|
||||
# ensure: present
|
||||
# comment: Dante Alighieri
|
||||
# login: true
|
||||
# superuser: false
|
||||
# inRoles:
|
||||
# - pg_monitor
|
||||
# - pg_signal_backend
|
||||
|
||||
# -- Enable default monitoring and alert rules
|
||||
monitoring:
|
||||
|
||||
# -- Whether to enable monitoring
|
||||
enabled: false
|
||||
|
||||
podMonitor:
|
||||
|
||||
# -- Whether to enable the PodMonitor
|
||||
enabled: true
|
||||
|
||||
# --The list of relabelings for the PodMonitor.
|
||||
# Applied to samples before scraping.
|
||||
relabelings: []
|
||||
|
||||
# -- The list of metric relabelings for the PodMonitor.
|
||||
# Applied to samples before ingestion.
|
||||
metricRelabelings: []
|
||||
|
||||
prometheusRule:
|
||||
|
||||
# -- Whether to enable the PrometheusRule automated alerts
|
||||
enabled: false
|
||||
|
||||
# -- Exclude specified rules
|
||||
excludeRules: []
|
||||
|
||||
# -- Whether the default queries should be injected.
|
||||
# Set it to true if you don't want to inject default queries into the cluster.
|
||||
disableDefaultQueries: false
|
||||
|
||||
# -- Custom Prometheus metrics
|
||||
# Will be stored in the ConfigMap
|
||||
customQueries: []
|
||||
# - name: "pg_cache_hit_ratio"
|
||||
# query: "SELECT current_database() as datname, sum(heap_blks_hit) / (sum(heap_blks_hit) + sum(heap_blks_read)) as ratio FROM pg_statio_user_tables;"
|
||||
# metrics:
|
||||
# - datname:
|
||||
# usage: "LABEL"
|
||||
# description: "Name of the database"
|
||||
# - ratio:
|
||||
# usage: GAUGE
|
||||
# description: "Cache hit ratio"
|
||||
|
||||
# -- The list of secrets containing the custom queries
|
||||
customQueriesSecret: []
|
||||
# - name: custom-queries-secret
|
||||
# key: custom-queries
|
||||
|
||||
# -- Parameters to be set for the database itself
|
||||
# See: https://cloudnative-pg.io/documentation/current/cloudnative-pg.v1/#postgresql-cnpg-io-v1-PostgresConfiguration
|
||||
postgresql:
|
||||
|
||||
# -- PostgreSQL configuration options (postgresql.conf)
|
||||
parameters:
|
||||
shared_buffers: 128MB
|
||||
max_slot_wal_keep_size: 2000MB
|
||||
hot_standby_feedback: "on"
|
||||
|
||||
# -- Quorum-based Synchronous Replication
|
||||
synchronous: {}
|
||||
# method: any
|
||||
# number: 1
|
||||
|
||||
# -- PostgreSQL Host Based Authentication rules (lines to be appended to the pg_hba.conf file)
|
||||
pg_hba: []
|
||||
# - host all all 10.244.0.0/16 md5
|
||||
|
||||
# -- PostgreSQL User Name Maps rules (lines to be appended to the pg_ident.conf file)
|
||||
pg_ident: []
|
||||
# - mymap /^(.*)@mydomain\.com$ \1
|
||||
|
||||
# -- Lists of shared preload libraries to add to the default ones
|
||||
shared_preload_libraries: []
|
||||
# - pgaudit
|
||||
|
||||
# -- PostgreSQL LDAP configuration (see https://cloudnative-pg.io/documentation/current/postgresql_conf/#ldap-configuration)
|
||||
ldap: {}
|
||||
# https://cloudnative-pg.io/documentation/current/postgresql_conf/#ldap-configuration
|
||||
# server: 'openldap.default.svc.cluster.local'
|
||||
# bindSearchAuth:
|
||||
# baseDN: 'ou=org,dc=example,dc=com'
|
||||
# bindDN: 'cn=admin,dc=example,dc=com'
|
||||
# bindPassword:
|
||||
# name: 'ldapBindPassword'
|
||||
# key: 'data'
|
||||
# searchAttribute: 'uid'
|
||||
|
||||
# -- 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
|
||||
# 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: []
|
||||
# encoding: UTF8
|
||||
# postInitSQL:
|
||||
# - CREATE EXTENSION IF NOT EXISTS vector;
|
||||
# postInitApplicationSQL: []
|
||||
# postInitTemplateSQL: []
|
||||
|
||||
# -- Configure the metadata of the generated service account
|
||||
serviceAccountTemplate: {}
|
||||
|
||||
additionalLabels: {}
|
||||
annotations: {}
|
||||
|
||||
# -- Recovery settings when booting cluster from external cluster
|
||||
recovery:
|
||||
|
||||
# -- Available recovery methods:
|
||||
# * `backup` - Recovers a CNPG cluster from a CNPG backup (PITR supported) Needs to be on the same cluster in the same namespace.
|
||||
# * `objectStore` - Recovers a CNPG cluster from a barman object store (PITR supported).
|
||||
# * `pgBaseBackup` - Recovers a CNPG cluster viaa streaming replication protocol. Useful if you want to
|
||||
# migrate databases to CloudNativePG, even from outside Kubernetes.
|
||||
# * `import` - Import one or more databases from an existing Postgres cluster.
|
||||
method: backup
|
||||
|
||||
# See https://cloudnative-pg.io/documentation/current/recovery/#recovery-from-a-backup-object
|
||||
backup:
|
||||
|
||||
# -- Point in time recovery target. Specify one of the following:
|
||||
pitrTarget:
|
||||
|
||||
# -- Time in RFC3339 format
|
||||
time: ""
|
||||
|
||||
# -- Name of the database used by the application. Default: `app`.
|
||||
database: app
|
||||
|
||||
# -- Name of the owner of the database in the instance to be used by applications. Defaults to the value of the `database` key.
|
||||
owner: ""
|
||||
|
||||
# -- Name of the backup to recover from.
|
||||
backupName: ""
|
||||
|
||||
# See https://cloudnative-pg.io/documentation/current/recovery/#recovery-from-an-object-store
|
||||
objectStore:
|
||||
|
||||
# -- Point in time recovery target. Specify one of the following:
|
||||
pitrTarget:
|
||||
|
||||
# -- Time in RFC3339 format
|
||||
time: ""
|
||||
|
||||
# -- Name of the database used by the application. Default: `app`.
|
||||
database: app
|
||||
|
||||
# -- Name of the owner of the database in the instance to be used by applications. Defaults to the value of the `database` key.
|
||||
owner: ""
|
||||
|
||||
# -- Object store backup name
|
||||
name: recovery
|
||||
|
||||
# -- Overrides the provider specific default path. Defaults to:
|
||||
# S3: s3://<bucket><path>
|
||||
# Azure: https://<storageAccount>.<serviceName>.core.windows.net/<containerName><path>
|
||||
# Google: gs://<bucket><path>
|
||||
destinationPath: ""
|
||||
|
||||
# -- Overrides the provider specific default endpoint. Defaults to:
|
||||
# S3: https://s3.<region>.amazonaws.com"
|
||||
# Leave empty if using the default S3 endpoint
|
||||
endpointURL: ""
|
||||
|
||||
# -- Specifies a CA bundle to validate a privately signed certificate.
|
||||
endpointCA:
|
||||
|
||||
# -- Creates a secret with the given value if true, otherwise uses an existing secret.
|
||||
create: false
|
||||
name: ""
|
||||
key: ""
|
||||
|
||||
# -- Generate external cluster name, uses: {{ .Release.Name }}-postgresql-<major version>-backup-index-{{ index }}
|
||||
index: 1
|
||||
|
||||
# -- Override the name of the backup cluster, defaults to "cluster.name"
|
||||
clusterName: ""
|
||||
|
||||
# -- Specifies secret that contains S3 credentials, should contain the keys ACCESS_KEY_ID and ACCESS_SECRET_KEY
|
||||
endpointCredentials: ""
|
||||
|
||||
# -- Storage
|
||||
wal:
|
||||
|
||||
# -- WAL compression method. One of `` (for no compression), `gzip`, `bzip2` or `snappy`.
|
||||
compression: snappy
|
||||
|
||||
# -- Whether to instruct the storage provider to encrypt WAL files. One of `` (use the storage container default), `AES256` or `aws:kms`.
|
||||
encryption: ""
|
||||
|
||||
# -- Number of WAL files to be archived or restored in parallel.
|
||||
maxParallel: 1
|
||||
|
||||
data:
|
||||
# -- Data compression method. One of `` (for no compression), `gzip`, `bzip2` or `snappy`.
|
||||
compression: snappy
|
||||
|
||||
# -- Whether to instruct the storage provider to encrypt data files. One of `` (use the storage container default), `AES256` or `aws:kms`.
|
||||
encryption: ""
|
||||
|
||||
# -- Number of data files to be archived or restored in parallel.
|
||||
jobs: 1
|
||||
|
||||
# See https://cloudnative-pg.io/documentation/current/bootstrap/#bootstrap-from-a-live-cluster-pg_basebackup
|
||||
pgBaseBackup:
|
||||
|
||||
# -- Name of the database used by the application. Default: `app`.
|
||||
database: app
|
||||
|
||||
# -- 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
|
||||
secret: ""
|
||||
|
||||
# -- Name of the owner of the database in the instance to be used by applications. Defaults to the value of the `database` key.
|
||||
owner: ""
|
||||
|
||||
# -- Configuration for the source database
|
||||
source:
|
||||
host: ""
|
||||
port: 5432
|
||||
username: ""
|
||||
database: "app"
|
||||
sslMode: "verify-full"
|
||||
passwordSecret:
|
||||
|
||||
# -- Whether to create a secret for the password
|
||||
create: false
|
||||
|
||||
# -- Name of the secret containing the password
|
||||
name: ""
|
||||
|
||||
# -- The key in the secret containing the password
|
||||
key: "password"
|
||||
|
||||
# -- The password value to use when creating the secret
|
||||
value: ""
|
||||
sslKeySecret:
|
||||
name: ""
|
||||
key: ""
|
||||
sslCertSecret:
|
||||
name: ""
|
||||
key: ""
|
||||
sslRootCertSecret:
|
||||
name: ""
|
||||
key: ""
|
||||
|
||||
# See: https://cloudnative-pg.io/documentation/current/cloudnative-pg.v1/#postgresql-cnpg-io-v1-Import
|
||||
import:
|
||||
|
||||
# -- One of `microservice` or `monolith.`
|
||||
# See: https://cloudnative-pg.io/documentation/current/database_import/#how-it-works
|
||||
type: "microservice"
|
||||
|
||||
# -- Databases to import
|
||||
databases: []
|
||||
|
||||
# -- Roles to import
|
||||
roles: []
|
||||
|
||||
# -- List of SQL queries to be executed as a superuser in the application database right after is imported.
|
||||
# To be used with extreme care. Only available in microservice type.
|
||||
postImportApplicationSQL: []
|
||||
|
||||
# -- When set to true, only the pre-data and post-data sections of pg_restore are invoked, avoiding data import.
|
||||
schemaOnly: false
|
||||
|
||||
# -- List of custom options to pass to the `pg_dump` command. IMPORTANT: Use these options with caution and at your
|
||||
# own risk, as the operator does not validate their content. Be aware that certain options may conflict with the
|
||||
# operator's intended functionality or design.
|
||||
pgDumpExtraOptions: []
|
||||
|
||||
# -- List of custom options to pass to the `pg_restore` command. IMPORTANT: Use these options with caution and at
|
||||
# your own risk, as the operator does not validate their content. Be aware that certain options may conflict with the
|
||||
# operator's intended functionality or design.
|
||||
pgRestoreExtraOptions: []
|
||||
|
||||
# -- Configuration for the source database
|
||||
source:
|
||||
host: ""
|
||||
port: 5432
|
||||
username: app
|
||||
database: app
|
||||
sslMode: "verify-full"
|
||||
passwordSecret:
|
||||
|
||||
# -- Whether to create a secret for the password
|
||||
create: false
|
||||
|
||||
# -- Name of the secret containing the password
|
||||
name: ""
|
||||
|
||||
# -- The key in the secret containing the password
|
||||
key: "password"
|
||||
|
||||
# -- The password value to use when creating the secret
|
||||
value: ""
|
||||
sslKeySecret:
|
||||
name: ""
|
||||
key: ""
|
||||
sslCertSecret:
|
||||
name: ""
|
||||
key: ""
|
||||
sslRootCertSecret:
|
||||
name: ""
|
||||
key: ""
|
||||
|
||||
# -- Backup settings
|
||||
backup:
|
||||
|
||||
# -- You need to configure backups manually, so backups are disabled by default.
|
||||
enabled: false
|
||||
|
||||
# -- Method to create backups, options currently are only objectStore
|
||||
method: objectStore
|
||||
|
||||
# -- Options for object store backups
|
||||
objectStore:
|
||||
-
|
||||
# -- Object store backup name
|
||||
name: external
|
||||
|
||||
# -- Overrides the provider specific default path. Defaults to:
|
||||
# S3: s3://<bucket><path>
|
||||
# Azure: https://<storageAccount>.<serviceName>.core.windows.net/<containerName><path>
|
||||
# Google: gs://<bucket><path>
|
||||
destinationPath: ""
|
||||
|
||||
# -- Overrides the provider specific default endpoint. Defaults to:
|
||||
# S3: https://s3.<region>.amazonaws.com"
|
||||
endpointURL: "" # Leave empty if using the default S3 endpoint
|
||||
|
||||
# -- Specifies a CA bundle to validate a privately signed certificate.
|
||||
endpointCA:
|
||||
# -- Creates a secret with the given value if true, otherwise uses an existing secret.
|
||||
create: false
|
||||
name: ""
|
||||
key: ""
|
||||
|
||||
# -- Generate external cluster name, uses: {{ .Release.Name }}-postgresql-<major version>-backup-index-{{ index }}
|
||||
index: 1
|
||||
|
||||
# -- Override the name of the backup cluster, defaults to "cluster.name"
|
||||
clusterName: ""
|
||||
|
||||
# -- Specifies secret that contains S3 credentials, should contain the keys ACCESS_KEY_ID and ACCESS_SECRET_KEY
|
||||
endpointCredentials: ""
|
||||
|
||||
# -- Retention policy for backups
|
||||
retentionPolicy: "30d"
|
||||
|
||||
# -- Specificies if this backup will do WALs
|
||||
isWALArchiver: true
|
||||
|
||||
# -- Storage
|
||||
wal:
|
||||
|
||||
# -- WAL compression method. One of `` (for no compression), `gzip`, `bzip2` or `snappy`.
|
||||
compression: snappy
|
||||
|
||||
# -- Whether to instruct the storage provider to encrypt WAL files. One of `` (use the storage container default), `AES256` or `aws:kms`.
|
||||
encryption: ""
|
||||
|
||||
# -- Number of WAL files to be archived or restored in parallel.
|
||||
maxParallel: 1
|
||||
|
||||
data:
|
||||
# -- Data compression method. One of `` (for no compression), `gzip`, `bzip2` or `snappy`.
|
||||
compression: snappy
|
||||
|
||||
# -- Whether to instruct the storage provider to encrypt data files. One of `` (use the storage container default), `AES256` or `aws:kms`.
|
||||
encryption: ""
|
||||
|
||||
# -- Number of data files to be archived or restored in parallel.
|
||||
jobs: 1
|
||||
|
||||
scheduledBackups:
|
||||
-
|
||||
# -- Scheduled backup name
|
||||
name: daily-backup
|
||||
|
||||
# -- Schedule in cron format
|
||||
schedule: "0 0 */3 * *"
|
||||
|
||||
# -- Temporarily stop scheduled backups from running
|
||||
suspend: false
|
||||
|
||||
# -- Backup owner reference
|
||||
backupOwnerReference: self
|
||||
|
||||
# -- Backup method, can be `barman-cloud.cloudnative-pg.io` (default)
|
||||
plugin: barman-cloud.cloudnative-pg.io
|
||||
|
||||
# -- Name of backup target
|
||||
backupName: external
|
||||
|
||||
# -- List of PgBouncer poolers
|
||||
poolers: []
|
||||
# -
|
||||
# # -- Pooler name
|
||||
# name: rw
|
||||
# # -- PgBouncer type of service to forward traffic to.
|
||||
# type: rw
|
||||
# # -- PgBouncer pooling mode
|
||||
# poolMode: transaction
|
||||
# # -- Number of PgBouncer instances
|
||||
# instances: 3
|
||||
# # -- PgBouncer configuration parameters
|
||||
# parameters:
|
||||
# max_client_conn: "1000"
|
||||
# default_pool_size: "25"
|
||||
# monitoring:
|
||||
# # -- Whether to enable monitoring
|
||||
# enabled: false
|
||||
# podMonitor:
|
||||
# # -- Whether to enable the PodMonitor
|
||||
# enabled: true
|
||||
# # -- Custom PgBouncer deployment template.
|
||||
# # Use to override image, specify resources, etc.
|
||||
# template: {}
|
||||
# -
|
||||
# # -- Pooler name
|
||||
# name: ro
|
||||
# # -- PgBouncer type of service to forward traffic to.
|
||||
# type: ro
|
||||
# # -- PgBouncer pooling mode
|
||||
# poolMode: transaction
|
||||
# # -- Number of PgBouncer instances
|
||||
# instances: 3
|
||||
# # -- PgBouncer configuration parameters
|
||||
# parameters:
|
||||
# max_client_conn: "1000"
|
||||
# default_pool_size: "25"
|
||||
# monitoring:
|
||||
# # -- Whether to enable monitoring
|
||||
# enabled: false
|
||||
# podMonitor:
|
||||
# # -- Whether to enable the PodMonitor
|
||||
# enabled: true
|
||||
# # -- Custom PgBouncer deployment template.
|
||||
# # Use to override image, specify resources, etc.
|
||||
# template: {}
|
6017
index.yaml
6017
index.yaml
File diff suppressed because it is too large
Load Diff
49
renovate.json
Normal file
49
renovate.json
Normal file
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||
"extends": [
|
||||
"config:recommended",
|
||||
"mergeConfidence:all-badges",
|
||||
":rebaseStalePrs"
|
||||
],
|
||||
"timezone": "US/Central",
|
||||
"schedule": [ "* */1 * * *" ],
|
||||
"labels": [],
|
||||
"prHourlyLimit": 0,
|
||||
"prConcurrentLimit": 0,
|
||||
"packageRules": [
|
||||
{
|
||||
"description": "Label charts",
|
||||
"matchDatasources": [
|
||||
"helm"
|
||||
],
|
||||
"addLabels": [
|
||||
"chart"
|
||||
],
|
||||
"automerge": false
|
||||
},
|
||||
{
|
||||
"description": "Label images",
|
||||
"matchDatasources": [
|
||||
"docker"
|
||||
],
|
||||
"addLabels": [
|
||||
"image"
|
||||
],
|
||||
"automerge": false
|
||||
},
|
||||
{
|
||||
"description": "CNPG image",
|
||||
"matchDepNames": [
|
||||
"ghcr.io/cloudnative-pg/postgresql"
|
||||
],
|
||||
"matchDatasources": [
|
||||
"docker"
|
||||
],
|
||||
"addLabels": [
|
||||
"image"
|
||||
],
|
||||
"automerge": false,
|
||||
"versioning": "deb"
|
||||
}
|
||||
]
|
||||
}
|
Reference in New Issue
Block a user