declare tools (#1)
Reviewed-on: https://gitea.arcodange.duckdns.org/arcodange-org/tools/pulls/1 Co-authored-by: Gabriel Radureau <arcodange@gmail.com> Co-committed-by: Gabriel Radureau <arcodange@gmail.com>
This commit is contained in:
178
.gitea/workflows/helmcharts.yaml
Normal file
178
.gitea/workflows/helmcharts.yaml
Normal file
@@ -0,0 +1,178 @@
|
|||||||
|
---
|
||||||
|
# template source: https://github.com/bretfisher/docker-build-workflow/blob/main/templates/call-docker-build.yaml
|
||||||
|
name: Helm Charts
|
||||||
|
|
||||||
|
on: [push,pull_request]
|
||||||
|
# push: &helmPaths # turns out gitea don't handle well the paths filter
|
||||||
|
# paths:
|
||||||
|
# - '*/\.yaml'
|
||||||
|
# - '*/\.tpl'
|
||||||
|
# - '*/NOTES.txt'
|
||||||
|
# - '*/\.helmignore'
|
||||||
|
# pull_request: *helmPaths
|
||||||
|
|
||||||
|
# cancel any previously-started, yet still active runs of this workflow on the same branch
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.ref }}-${{ github.workflow }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
.helm_install_dependencies_sh: &helm_install_dependencies_sh |-
|
||||||
|
helm_install_dependencies() {
|
||||||
|
chart_file="$1/Chart.yaml"
|
||||||
|
[[ ! -f "$chart_file" ]] && echo "Chart.yaml not found in $1" && return 1
|
||||||
|
|
||||||
|
yq eval '.dependencies[]' "$chart_file" -o=json | jq -c '.' | while IFS= read -r dep; do
|
||||||
|
name=$(jq -r '.name' <<< "$dep")
|
||||||
|
version=$(jq -r '.version' <<< "$dep")
|
||||||
|
repo=$(jq -r '.repository' <<< "$dep")
|
||||||
|
url=$(curl -s "${repo}/index.yaml" | yq eval ".entries.${name}[] | select(.version == \"${version}\") | .urls[0]" -)
|
||||||
|
|
||||||
|
echo "Dependency: $name, Version: $version, URL: $url"
|
||||||
|
mkdir -p "$1/charts" && curl -sL "$url" -o "$1/charts/${name}-${version}.tgz"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
helm_install_dependencies $chart
|
||||||
|
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
filter-chart:
|
||||||
|
name: Detect changed charts
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
library_charts: ${{steps.filter-charts.outputs.library_charts}}
|
||||||
|
application_charts: ${{steps.filter-charts.outputs.application_charts}}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Get changed files
|
||||||
|
id: changed-files
|
||||||
|
uses: tj-actions/changed-files@v45
|
||||||
|
|
||||||
|
- name: Filter modified charts
|
||||||
|
id: filter-charts
|
||||||
|
run: |
|
||||||
|
echo "Changed files:"
|
||||||
|
echo "${{ steps.changed-files.outputs.all_changed_files }}"
|
||||||
|
|
||||||
|
# Find unique directories that contain Chart.yaml among the changed files
|
||||||
|
modified_dirs=$(echo "${{ steps.changed-files.outputs.all_changed_files }}" | tr ' ' '\n' | xargs -n1 dirname | sort -u || true)
|
||||||
|
|
||||||
|
# Initialize an array to store directories that contain Chart.yaml
|
||||||
|
helm_chart_dirs=()
|
||||||
|
|
||||||
|
# Function to find the closest directory containing Chart.yaml
|
||||||
|
find_chart_root() {
|
||||||
|
dir="$1"
|
||||||
|
while [[ "$dir" != "/" && "$dir" != "." ]]; do
|
||||||
|
if [[ -f "$dir/Chart.yaml" ]]; then
|
||||||
|
echo "$dir"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
dir=$(dirname "$dir")
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Iterate over each modified directory and find the root chart directory
|
||||||
|
for dir in $modified_dirs; do
|
||||||
|
chart_dir=$(find_chart_root "$dir")
|
||||||
|
if [[ -n "$chart_dir" && ! " ${helm_chart_dirs[*]} " =~ " ${chart_dir} " ]]; then
|
||||||
|
helm_chart_dirs+=("$chart_dir")
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Initialize arrays for library and application charts
|
||||||
|
library_dirs=()
|
||||||
|
application_dirs=()
|
||||||
|
|
||||||
|
# Iterate over each modified directory and check the 'type' field in Chart.yaml
|
||||||
|
for dir in ${helm_chart_dirs[@]}; do
|
||||||
|
chart_type=$(yq eval '.type' "$dir/Chart.yaml" || echo "undefined")
|
||||||
|
|
||||||
|
# Add directories to corresponding arrays based on the 'type'
|
||||||
|
if [[ "$chart_type" == "library" ]]; then
|
||||||
|
library_dirs+=("$dir")
|
||||||
|
elif [[ "$chart_type" == "application" ]]; then
|
||||||
|
application_dirs+=("$dir")
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Convert the arrays to JSON format
|
||||||
|
library_json=$(printf '%s\n' "${library_dirs[@]}" | jq -R . | jq -cs 'map(select(. != ""))')
|
||||||
|
application_json=$(printf '%s\n' "${application_dirs[@]}" | jq -R . | jq -cs 'map(select(. != ""))')
|
||||||
|
|
||||||
|
# Output the JSON arrays
|
||||||
|
echo "Modified Helm library charts directories: $library_json"
|
||||||
|
echo "library_charts=$library_json" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
echo "Modified Helm application charts directories: $application_json"
|
||||||
|
echo "application_charts=$application_json" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
library-charts: &charts-matrix-job
|
||||||
|
name: Library charts ${{ matrix.chart }}
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: filter-chart
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
chart: [tool] # turns out gitea doesn't support dynamic matrix
|
||||||
|
# chart: ${{ fromJson(needs.filter-chart.outputs.library_charts) }}
|
||||||
|
type: [library]
|
||||||
|
if: >-
|
||||||
|
${{
|
||||||
|
always() && !contains(needs.*.result, 'failure') && needs.filter-chart.result == 'success'
|
||||||
|
&& (
|
||||||
|
contains(fromJson(needs.filter-chart.outputs.library_charts), matrix.chart)
|
||||||
|
|| contains(fromJson(needs.filter-chart.outputs.application_charts), matrix.chart)
|
||||||
|
)
|
||||||
|
&& (
|
||||||
|
contains(fromJSON('["","pull_request"]'), github.event_name)
|
||||||
|
|| github.ref == 'refs/heads/main'
|
||||||
|
) }}
|
||||||
|
env:
|
||||||
|
chart: ${{ matrix.chart }}
|
||||||
|
steps:
|
||||||
|
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- run: *helm_install_dependencies_sh
|
||||||
|
|
||||||
|
- name: Install Helm for test
|
||||||
|
if: >-
|
||||||
|
${{
|
||||||
|
matrix.type != 'library'
|
||||||
|
&& (
|
||||||
|
contains(fromJSON('["","pull_request"]'), github.event_name)
|
||||||
|
|| github.ref != 'refs/heads/main'
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
uses: azure/setup-helm@v4
|
||||||
|
- name: Helm template
|
||||||
|
if: >-
|
||||||
|
${{
|
||||||
|
matrix.type != 'library'
|
||||||
|
&& (
|
||||||
|
contains(fromJSON('["","pull_request"]'), github.event_name)
|
||||||
|
|| github.ref != 'refs/heads/main'
|
||||||
|
)
|
||||||
|
}}
|
||||||
|
run: helm template $chart --debug
|
||||||
|
|
||||||
|
- name: publish ${{ matrix.chart }} helm chart
|
||||||
|
if: ${{ contains(fromJSON('["","push"]'), github.event_name) && github.ref == 'refs/heads/main' }}
|
||||||
|
run: |
|
||||||
|
set -x
|
||||||
|
chart=${chart:-tool}
|
||||||
|
chart_version=`yq eval .version ${chart}/Chart.yaml`
|
||||||
|
chart_package=${chart}-${chart_version}.tgz
|
||||||
|
# helm package ${chart}
|
||||||
|
tar -X ${chart}/.helmignore -czf ${chart_package} ${chart}
|
||||||
|
curl --user ${{ github.actor }}:${{ secrets.PACKAGES_TOKEN }} -X POST --upload-file ./${chart_package} https://gitea.arcodange.duckdns.org/api/packages/${{ github.repository_owner }}/helm/api/charts
|
||||||
|
|
||||||
|
application-charts:
|
||||||
|
<<: *charts-matrix-job
|
||||||
|
name: Application charts ${{ matrix.chart }}
|
||||||
|
needs: [filter-chart,library-charts]
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
# chart: ${{ fromJson(needs.filter-chart.outputs.application_charts) }}
|
||||||
|
chart: [pgcat]
|
||||||
|
type: [application]
|
||||||
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
.DS_Store
|
||||||
|
Chart.lock
|
||||||
|
*/charts/*.tgz
|
||||||
10
README.md
10
README.md
@@ -1,7 +1,17 @@
|
|||||||
# Tools
|
# Tools
|
||||||
|
|
||||||
|
```txt
|
||||||
|
CICD:
|
||||||
|
pousser la library helm dans le registre helm de gitea
|
||||||
|
|
||||||
|
pour chaque dossier de premier niveau contenant un fichier Chart.yaml (sauf les dossier library et chart)
|
||||||
|
le pousser dans le registre helm de gitea
|
||||||
|
```
|
||||||
|
|
||||||
## pgbouncer
|
## pgbouncer
|
||||||
|
|
||||||
## prometheus
|
## prometheus
|
||||||
|
|
||||||
## hashicorp vault
|
## hashicorp vault
|
||||||
|
|
||||||
|
### experiment with [sops](https://github.com/getsops/sops)
|
||||||
23
chart/.helmignore
Normal file
23
chart/.helmignore
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
# Patterns to ignore when building packages.
|
||||||
|
# This supports shell glob matching, relative path matching, and
|
||||||
|
# negation (prefixed with !). Only one pattern per line.
|
||||||
|
.DS_Store
|
||||||
|
# Common VCS dirs
|
||||||
|
.git/
|
||||||
|
.gitignore
|
||||||
|
.bzr/
|
||||||
|
.bzrignore
|
||||||
|
.hg/
|
||||||
|
.hgignore
|
||||||
|
.svn/
|
||||||
|
# Common backup files
|
||||||
|
*.swp
|
||||||
|
*.bak
|
||||||
|
*.tmp
|
||||||
|
*.orig
|
||||||
|
*~
|
||||||
|
# Various IDEs
|
||||||
|
.project
|
||||||
|
.idea/
|
||||||
|
*.tmproj
|
||||||
|
.vscode/
|
||||||
24
chart/Chart.yaml
Normal file
24
chart/Chart.yaml
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: chart
|
||||||
|
description: A Helm chart for Kubernetes
|
||||||
|
|
||||||
|
# A chart can be either an 'application' or a 'library' chart.
|
||||||
|
#
|
||||||
|
# Application charts are a collection of templates that can be packaged into versioned archives
|
||||||
|
# to be deployed.
|
||||||
|
#
|
||||||
|
# Library charts provide useful utilities or functions for the chart developer. They're included as
|
||||||
|
# a dependency of application charts to inject those utilities and functions into the rendering
|
||||||
|
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
|
||||||
|
type: application
|
||||||
|
|
||||||
|
# This is the chart version. This version number should be incremented each time you make changes
|
||||||
|
# to the chart and its templates, including the app version.
|
||||||
|
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
||||||
|
version: 0.1.0
|
||||||
|
|
||||||
|
# This is the version number of the application being deployed. This version number should be
|
||||||
|
# incremented each time you make changes to the application. Versions are not expected to
|
||||||
|
# follow Semantic Versioning. They should reflect the version the application is using.
|
||||||
|
# It is recommended to use it with quotes.
|
||||||
|
appVersion: "1.16.0"
|
||||||
25
chart/templates/apps.yaml
Normal file
25
chart/templates/apps.yaml
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
{{- range $app_name := .Values.tools -}}
|
||||||
|
---
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: {{ $app_name }}
|
||||||
|
namespace: argocd
|
||||||
|
finalizers:
|
||||||
|
- resources-finalizer.argocd.argoproj.io
|
||||||
|
spec:
|
||||||
|
project: tools
|
||||||
|
source:
|
||||||
|
repoURL: https://gitea.arcodange.duckdns.org/arcodange-org/tools
|
||||||
|
targetRevision: HEAD
|
||||||
|
path: {{ $app_name }}
|
||||||
|
destination:
|
||||||
|
server: https://kubernetes.default.svc
|
||||||
|
namespace: tools
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
selfHeal: true
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
|
{{ end }}
|
||||||
17
chart/templates/project.yaml
Normal file
17
chart/templates/project.yaml
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
# https://argo-cd.readthedocs.io/en/stable/operator-manual/declarative-setup/#projects
|
||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: AppProject
|
||||||
|
metadata:
|
||||||
|
name: tools
|
||||||
|
namespace: argocd
|
||||||
|
# Finalizer that ensures that project is not deleted until it is not referenced by any application
|
||||||
|
finalizers:
|
||||||
|
- resources-finalizer.argocd.argoproj.io
|
||||||
|
spec:
|
||||||
|
description: Arcodange tools (monitoring, cache, connection pool, secret management...)
|
||||||
|
sourceRepos:
|
||||||
|
- 'https://gitea.arcodange.duckdns.org/arcodange-org/tools'
|
||||||
|
# Only permit applications to deploy to the tools namespace in the same cluster
|
||||||
|
destinations:
|
||||||
|
- namespace: tools
|
||||||
|
server: https://kubernetes.default.svc
|
||||||
5
chart/values.yaml
Normal file
5
chart/values.yaml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
tools:
|
||||||
|
- pgbouncer
|
||||||
|
#- pgcat # trop contraignant: lister tous les databases/users et auth_type md5 uniquement
|
||||||
|
# - prometheus
|
||||||
|
# - hashicorp_vault
|
||||||
23
pgbouncer/.helmignore
Normal file
23
pgbouncer/.helmignore
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
# Patterns to ignore when building packages.
|
||||||
|
# This supports shell glob matching, relative path matching, and
|
||||||
|
# negation (prefixed with !). Only one pattern per line.
|
||||||
|
.DS_Store
|
||||||
|
# Common VCS dirs
|
||||||
|
.git/
|
||||||
|
.gitignore
|
||||||
|
.bzr/
|
||||||
|
.bzrignore
|
||||||
|
.hg/
|
||||||
|
.hgignore
|
||||||
|
.svn/
|
||||||
|
# Common backup files
|
||||||
|
*.swp
|
||||||
|
*.bak
|
||||||
|
*.tmp
|
||||||
|
*.orig
|
||||||
|
*~
|
||||||
|
# Various IDEs
|
||||||
|
.project
|
||||||
|
.idea/
|
||||||
|
*.tmproj
|
||||||
|
.vscode/
|
||||||
32
pgbouncer/Chart.yaml
Normal file
32
pgbouncer/Chart.yaml
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: pgbouncer
|
||||||
|
description: A Helm chart for Kubernetes
|
||||||
|
|
||||||
|
dependencies:
|
||||||
|
- name: tool
|
||||||
|
version: 0.1.0
|
||||||
|
repository: https://gitea.arcodange.duckdns.org/api/packages/arcodange-org/helm
|
||||||
|
- name: pgbouncer
|
||||||
|
version: 2.3.1
|
||||||
|
repository: https://icoretech.github.io/helm
|
||||||
|
|
||||||
|
# A chart can be either an 'application' or a 'library' chart.
|
||||||
|
#
|
||||||
|
# Application charts are a collection of templates that can be packaged into versioned archives
|
||||||
|
# to be deployed.
|
||||||
|
#
|
||||||
|
# Library charts provide useful utilities or functions for the chart developer. They're included as
|
||||||
|
# a dependency of application charts to inject those utilities and functions into the rendering
|
||||||
|
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
|
||||||
|
type: application
|
||||||
|
|
||||||
|
# This is the chart version. This version number should be incremented each time you make changes
|
||||||
|
# to the chart and its templates, including the app version.
|
||||||
|
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
||||||
|
version: 0.1.0
|
||||||
|
|
||||||
|
# This is the version number of the application being deployed. This version number should be
|
||||||
|
# incremented each time you make changes to the application. Versions are not expected to
|
||||||
|
# follow Semantic Versioning. They should reflect the version the application is using.
|
||||||
|
# It is recommended to use it with quotes.
|
||||||
|
# appVersion: "1.16.0"
|
||||||
7
pgbouncer/NOTES.txt
Normal file
7
pgbouncer/NOTES.txt
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
Try connectivity with
|
||||||
|
|
||||||
|
kubectl run --rm -i postgres --image=postgres --env PGCONNECT_TIMEOUT=2 --env PGPASSWORD=pgbouncer_auth --restart=Never -- psql -h pgbouncer.tools -p 5432 -U 'pgbouncer_auth' -d postgres -tc "SELECT 1;"
|
||||||
|
|
||||||
|
kubectl run --rm -i postgres --image=postgres --env PGCONNECT_TIMEOUT=2 --env PGPASSWORD=admin --restart=Never -- psql -h pgbouncer.tools -p 5432 -U 'admin' -d pgbouncer -tc "SHOW DATABASES;"
|
||||||
|
|
||||||
|
kubectl run --rm -i postgres --image=postgres --env PGCONNECT_TIMEOUT=2 --env PGPASSWORD=pgbouncer_auth --restart=Never -- psql -h 192.168.1.202 -p 5432 -U 'pgbouncer_auth' -d postgres -tc "SELECT 1;"
|
||||||
3
pgbouncer/templates/helm-chart-config.yaml
Normal file
3
pgbouncer/templates/helm-chart-config.yaml
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{{- if eq .Values.tool.kind "HelmChart" -}}
|
||||||
|
{{- include "tool.helm-chart-config.tpl" . -}}
|
||||||
|
{{- end -}}
|
||||||
3
pgbouncer/templates/helm-chart.yaml
Normal file
3
pgbouncer/templates/helm-chart.yaml
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{{- if eq .Values.tool.kind "HelmChart" -}}
|
||||||
|
{{- include "tool.helm-chart.tpl" . -}}
|
||||||
|
{{- end -}}
|
||||||
24
pgbouncer/values.yaml
Normal file
24
pgbouncer/values.yaml
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
pgbouncer: &pgbouncer_config
|
||||||
|
nodeSelector: kubernetes.io/hostname=pi2 # close to postgres instance
|
||||||
|
config:
|
||||||
|
adminUser: "admin"
|
||||||
|
adminPassword: "admin"
|
||||||
|
authUser: &authUser pgbouncer_auth
|
||||||
|
authPassword: *authUser
|
||||||
|
databases:
|
||||||
|
"*":
|
||||||
|
host: "192.168.1.202" # kubernetes.io/hostname=pi2 ip
|
||||||
|
port: 5432
|
||||||
|
pgbouncer:
|
||||||
|
auth_type: scram-sha-256
|
||||||
|
auth_query: SELECT uname, phash FROM user_lookup($1)
|
||||||
|
pgbouncerExporter:
|
||||||
|
enabled: false
|
||||||
|
|
||||||
|
tool:
|
||||||
|
# kind: 'SubChart' or 'HelmChart', if subchart then uncomment Chart.yaml dependency, else comment and use tool library with helm chart template
|
||||||
|
kind: 'SubChart'
|
||||||
|
repo: https://icoretech.github.io/helm
|
||||||
|
chart: pgbouncer
|
||||||
|
version: 2.3.1
|
||||||
|
values: *pgbouncer_config
|
||||||
23
pgcat/.helmignore
Normal file
23
pgcat/.helmignore
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
# Patterns to ignore when building packages.
|
||||||
|
# This supports shell glob matching, relative path matching, and
|
||||||
|
# negation (prefixed with !). Only one pattern per line.
|
||||||
|
.DS_Store
|
||||||
|
# Common VCS dirs
|
||||||
|
.git/
|
||||||
|
.gitignore
|
||||||
|
.bzr/
|
||||||
|
.bzrignore
|
||||||
|
.hg/
|
||||||
|
.hgignore
|
||||||
|
.svn/
|
||||||
|
# Common backup files
|
||||||
|
*.swp
|
||||||
|
*.bak
|
||||||
|
*.tmp
|
||||||
|
*.orig
|
||||||
|
*~
|
||||||
|
# Various IDEs
|
||||||
|
.project
|
||||||
|
.idea/
|
||||||
|
*.tmproj
|
||||||
|
.vscode/
|
||||||
32
pgcat/Chart.yaml
Normal file
32
pgcat/Chart.yaml
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: pgbouncer
|
||||||
|
description: A Helm chart for Kubernetes
|
||||||
|
|
||||||
|
dependencies:
|
||||||
|
- name: tool
|
||||||
|
version: 0.1.0
|
||||||
|
repository: https://gitea.arcodange.duckdns.org/api/packages/arcodange-org/helm
|
||||||
|
- name: pgcat
|
||||||
|
version: 0.1.0
|
||||||
|
repository: https://improwised.github.io/charts/
|
||||||
|
|
||||||
|
# A chart can be either an 'application' or a 'library' chart.
|
||||||
|
#
|
||||||
|
# Application charts are a collection of templates that can be packaged into versioned archives
|
||||||
|
# to be deployed.
|
||||||
|
#
|
||||||
|
# Library charts provide useful utilities or functions for the chart developer. They're included as
|
||||||
|
# a dependency of application charts to inject those utilities and functions into the rendering
|
||||||
|
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
|
||||||
|
type: application
|
||||||
|
|
||||||
|
# This is the chart version. This version number should be incremented each time you make changes
|
||||||
|
# to the chart and its templates, including the app version.
|
||||||
|
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
||||||
|
version: 0.1.0
|
||||||
|
|
||||||
|
# This is the version number of the application being deployed. This version number should be
|
||||||
|
# incremented each time you make changes to the application. Versions are not expected to
|
||||||
|
# follow Semantic Versioning. They should reflect the version the application is using.
|
||||||
|
# It is recommended to use it with quotes.
|
||||||
|
# appVersion: "1.16.0"
|
||||||
5
pgcat/NOTES.txt
Normal file
5
pgcat/NOTES.txt
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
Try connectivity with
|
||||||
|
|
||||||
|
kubectl run --rm -i postgres --image=postgres --env PGCONNECT_TIMEOUT=2 --env PGPASSWORD=pgcat_auth --restart=Never -- psql -h pgcat.tools -p 6432 -U 'pgcat_auth' -d postgres -tc "SELECT 1;"
|
||||||
|
|
||||||
|
kubectl run --rm -i postgres --image=postgres --env PGCONNECT_TIMEOUT=2 --env PGPASSWORD=pgcat_auth --restart=Never -- psql -h 192.168.1.202 -p 5432 -U 'pgcat_auth' -d postgres -tc "SELECT 1;"
|
||||||
3
pgcat/templates/helm-chart-config.yaml
Normal file
3
pgcat/templates/helm-chart-config.yaml
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{{- if eq .Values.tool.kind "HelmChart" -}}
|
||||||
|
{{- include "tool.helm-chart-config.tpl" . -}}
|
||||||
|
{{- end -}}
|
||||||
3
pgcat/templates/helm-chart.yaml
Normal file
3
pgcat/templates/helm-chart.yaml
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{{- if eq .Values.tool.kind "HelmChart" -}}
|
||||||
|
{{- include "tool.helm-chart.tpl" . -}}
|
||||||
|
{{- end -}}
|
||||||
236
pgcat/values.yaml
Normal file
236
pgcat/values.yaml
Normal file
@@ -0,0 +1,236 @@
|
|||||||
|
pgcat: &pgcat_config
|
||||||
|
image:
|
||||||
|
tag: latest #default tag main doesn't support arm64
|
||||||
|
service:
|
||||||
|
port: 6432
|
||||||
|
nodeSelector: {}
|
||||||
|
|
||||||
|
configuration:
|
||||||
|
## General pooler settings
|
||||||
|
## @param [object]
|
||||||
|
general:
|
||||||
|
## @param configuration.general.host What IP to run on, 0.0.0.0 means accessible from everywhere.
|
||||||
|
host: "0.0.0.0"
|
||||||
|
|
||||||
|
## @param configuration.general.port Port to run on, same as PgBouncer used in this example.
|
||||||
|
port: 6432
|
||||||
|
|
||||||
|
## @param configuration.general.enable_prometheus_exporter Whether to enable prometheus exporter or not.
|
||||||
|
enable_prometheus_exporter: false
|
||||||
|
|
||||||
|
## @param configuration.general.prometheus_exporter_port Port at which prometheus exporter listens on.
|
||||||
|
prometheus_exporter_port: 9930
|
||||||
|
|
||||||
|
# @param configuration.general.connect_timeout How long to wait before aborting a server connection (ms).
|
||||||
|
connect_timeout: 5000
|
||||||
|
|
||||||
|
# How long an idle connection with a server is left open (ms).
|
||||||
|
idle_timeout: 30000 # milliseconds
|
||||||
|
|
||||||
|
# Max connection lifetime before it's closed, even if actively used.
|
||||||
|
server_lifetime: 86400000 # 24 hours
|
||||||
|
|
||||||
|
# How long a client is allowed to be idle while in a transaction (ms).
|
||||||
|
idle_client_in_transaction_timeout: 0 # milliseconds
|
||||||
|
|
||||||
|
# @param configuration.general.healthcheck_timeout How much time to give `SELECT 1` health check query to return with a result (ms).
|
||||||
|
healthcheck_timeout: 1000
|
||||||
|
|
||||||
|
# @param configuration.general.healthcheck_delay How long to keep connection available for immediate re-use, without running a healthcheck query on it
|
||||||
|
healthcheck_delay: 30000
|
||||||
|
|
||||||
|
# @param configuration.general.shutdown_timeout How much time to give clients during shutdown before forcibly killing client connections (ms).
|
||||||
|
shutdown_timeout: 60000
|
||||||
|
|
||||||
|
# @param configuration.general.ban_time For how long to ban a server if it fails a health check (seconds).
|
||||||
|
ban_time: 60 # seconds
|
||||||
|
|
||||||
|
# @param configuration.general.log_client_connections If we should log client connections
|
||||||
|
log_client_connections: false
|
||||||
|
|
||||||
|
# @param configuration.general.log_client_disconnections If we should log client disconnections
|
||||||
|
log_client_disconnections: false
|
||||||
|
|
||||||
|
# TLS
|
||||||
|
# tls_certificate: "server.cert"
|
||||||
|
# tls_private_key: "server.key"
|
||||||
|
tls_certificate: "-"
|
||||||
|
tls_private_key: "-"
|
||||||
|
|
||||||
|
# Credentials to access the virtual administrative database (pgbouncer or pgcat)
|
||||||
|
# Connecting to that database allows running commands like `SHOW POOLS`, `SHOW DATABASES`, etc..
|
||||||
|
admin_username: "postgres"
|
||||||
|
admin_password: "postgres"
|
||||||
|
|
||||||
|
# Query to be sent to servers to obtain the hash used for md5 authentication. The connection will be
|
||||||
|
# established using the database configured in the pool. This parameter is inherited by every pool and
|
||||||
|
# can be redefined in pool configuration.
|
||||||
|
auth_query: SELECT usename, passwd FROM user_search($1)
|
||||||
|
|
||||||
|
# User to be used for connecting to servers to obtain the hash used for md5 authentication by sending
|
||||||
|
# the query specified in auth_query_user. The connection will be established using the database configured
|
||||||
|
# in the pool. This parameter is inherited by every pool and can be redefined in pool configuration.
|
||||||
|
#
|
||||||
|
# @param configuration.general.auth_query_user
|
||||||
|
auth_query_user: pgcat_auth
|
||||||
|
|
||||||
|
# Password to be used for connecting to servers to obtain the hash used for md5 authentication by sending
|
||||||
|
# the query specified in auth_query_user. The connection will be established using the database configured
|
||||||
|
# in the pool. This parameter is inherited by every pool and can be redefined in pool configuration.
|
||||||
|
#
|
||||||
|
# @param configuration.general.auth_query_password
|
||||||
|
auth_query_password: pgcat_auth
|
||||||
|
|
||||||
|
# Number of seconds of connection idleness to wait before sending a keepalive packet to the server.
|
||||||
|
tcp_keepalives_idle: 5
|
||||||
|
|
||||||
|
# Number of unacknowledged keepalive packets allowed before giving up and closing the connection.
|
||||||
|
tcp_keepalives_count: 5
|
||||||
|
|
||||||
|
# Number of seconds between keepalive packets.
|
||||||
|
tcp_keepalives_interval: 5
|
||||||
|
|
||||||
|
## pool
|
||||||
|
## configs are structured as pool.<pool_name>
|
||||||
|
## the pool_name is what clients use as database name when connecting
|
||||||
|
## For the example below a client can connect using "postgres://sharding_user:sharding_user@pgcat_host:pgcat_port/sharded"
|
||||||
|
## @param [object]
|
||||||
|
pools:
|
||||||
|
- name: passthrough
|
||||||
|
users:
|
||||||
|
- username: "" # required et pas vide
|
||||||
|
password: "" # requis par le chart. Préférer md5 plutot qu'en clair
|
||||||
|
pool_size: 9
|
||||||
|
statement_timeout: 0
|
||||||
|
shards:
|
||||||
|
- servers:
|
||||||
|
- host: "198.168.1.202"
|
||||||
|
port: 5432
|
||||||
|
role: "primary"
|
||||||
|
database: "" # required et pas vide
|
||||||
|
# - ## default values
|
||||||
|
# ##
|
||||||
|
# ##
|
||||||
|
# ##
|
||||||
|
# name: "db"
|
||||||
|
|
||||||
|
# ## Pool mode (see PgBouncer docs for more).
|
||||||
|
# ## session: one server connection per connected client
|
||||||
|
# ## transaction: one server connection per client transaction
|
||||||
|
# ## @param configuration.poolsPostgres.pool_mode
|
||||||
|
# pool_mode: "transaction"
|
||||||
|
|
||||||
|
# ## Load balancing mode
|
||||||
|
# ## `random` selects the server at random
|
||||||
|
# ## `loc` selects the server with the least outstanding busy connections
|
||||||
|
# ##
|
||||||
|
# ## @param configuration.poolsPostgres.load_balancing_mode
|
||||||
|
# load_balancing_mode: "random"
|
||||||
|
|
||||||
|
# ## Prepared statements cache size.
|
||||||
|
# ## TODO: update documentation
|
||||||
|
# ##
|
||||||
|
# ## @param configuration.poolsPostgres.prepared_statements_cache_size
|
||||||
|
# prepared_statements_cache_size: 500
|
||||||
|
|
||||||
|
# ## If the client doesn't specify, route traffic to
|
||||||
|
# ## this role by default.
|
||||||
|
# ##
|
||||||
|
# ## any: round-robin between primary and replicas,
|
||||||
|
# ## replica: round-robin between replicas only without touching the primary,
|
||||||
|
# ## primary: all queries go to the primary unless otherwise specified.
|
||||||
|
# ## @param configuration.poolsPostgres.default_role
|
||||||
|
# default_role: "any"
|
||||||
|
|
||||||
|
# ## Query parser. If enabled, we'll attempt to parse
|
||||||
|
# ## every incoming query to determine if it's a read or a write.
|
||||||
|
# ## If it's a read query, we'll direct it to a replica. Otherwise, if it's a write,
|
||||||
|
# ## we'll direct it to the primary.
|
||||||
|
# ## @param configuration.poolsPostgres.query_parser_enabled
|
||||||
|
# query_parser_enabled: true
|
||||||
|
|
||||||
|
# ## If the query parser is enabled and this setting is enabled, we'll attempt to
|
||||||
|
# ## infer the role from the query itself.
|
||||||
|
# ## @param configuration.poolsPostgres.query_parser_read_write_splitting
|
||||||
|
# query_parser_read_write_splitting: true
|
||||||
|
|
||||||
|
# ## If the query parser is enabled and this setting is enabled, the primary will be part of the pool of databases used for
|
||||||
|
# ## load balancing of read queries. Otherwise, the primary will only be used for write
|
||||||
|
# ## queries. The primary can always be explicitly selected with our custom protocol.
|
||||||
|
# ## @param configuration.poolsPostgres.primary_reads_enabled
|
||||||
|
# primary_reads_enabled: true
|
||||||
|
|
||||||
|
# ## So what if you wanted to implement a different hashing function,
|
||||||
|
# ## or you've already built one and you want this pooler to use it?
|
||||||
|
# ##
|
||||||
|
# ## Current options:
|
||||||
|
# ##
|
||||||
|
# ## pg_bigint_hash: PARTITION BY HASH (Postgres hashing function)
|
||||||
|
# ## sha1: A hashing function based on SHA1
|
||||||
|
# ##
|
||||||
|
# ## @param configuration.poolsPostgres.sharding_function
|
||||||
|
# sharding_function: "pg_bigint_hash"
|
||||||
|
|
||||||
|
# ## Credentials for users that may connect to this cluster
|
||||||
|
# ## @param users [array]
|
||||||
|
# ## @param users[0].username Name of the env var (required)
|
||||||
|
# ## @param users[0].password Value for the env var (required)
|
||||||
|
# ## @param users[0].pool_size Maximum number of server connections that can be established for this user
|
||||||
|
# ## @param users[0].statement_timeout Maximum query duration. Dangerous, but protects against DBs that died in a non-obvious way.
|
||||||
|
# users: []
|
||||||
|
# # - username: "user"
|
||||||
|
# # password: "pass"
|
||||||
|
# #
|
||||||
|
# # # The maximum number of connection from a single Pgcat process to any database in the cluster
|
||||||
|
# # # is the sum of pool_size across all users.
|
||||||
|
# # pool_size: 9
|
||||||
|
# #
|
||||||
|
# # # Maximum query duration. Dangerous, but protects against DBs that died in a non-obvious way.
|
||||||
|
# # statement_timeout: 0
|
||||||
|
# #
|
||||||
|
# # # PostgreSQL username used to connect to the server.
|
||||||
|
# # server_username: "postgres
|
||||||
|
# #
|
||||||
|
# # # PostgreSQL password used to connect to the server.
|
||||||
|
# # server_password: "postgres
|
||||||
|
|
||||||
|
# ## @param shards [array]
|
||||||
|
# ## @param shards[0].server[0].host Host for this shard
|
||||||
|
# ## @param shards[0].server[0].port Port for this shard
|
||||||
|
# ## @param shards[0].server[0].role Role for this shard
|
||||||
|
# shards: []
|
||||||
|
# # [ host, port, role ]
|
||||||
|
# # - servers:
|
||||||
|
# # - host: "postgres"
|
||||||
|
# # port: 5432
|
||||||
|
# # role: "primary"
|
||||||
|
# # - host: "postgres"
|
||||||
|
# # port: 5432
|
||||||
|
# # role: "replica"
|
||||||
|
# # database: "postgres"
|
||||||
|
# # # [ host, port, role ]
|
||||||
|
# # - servers:
|
||||||
|
# # - host: "postgres"
|
||||||
|
# # port: 5432
|
||||||
|
# # role: "primary"
|
||||||
|
# # - host: "postgres"
|
||||||
|
# # port: 5432
|
||||||
|
# # role: "replica"
|
||||||
|
# # database: "postgres"
|
||||||
|
# # # [ host, port, role ]
|
||||||
|
# # - servers:
|
||||||
|
# # - host: "postgres"
|
||||||
|
# # port: 5432
|
||||||
|
# # role: "primary"
|
||||||
|
# # - host: "postgres"
|
||||||
|
# # port: 5432
|
||||||
|
# # role: "replica"
|
||||||
|
# # database: "postgres"
|
||||||
|
|
||||||
|
tool:
|
||||||
|
# kind: 'SubChart' or 'HelmChart', if subchart then uncomment Chart.yaml dependency, else comment and use tool library with helm chart template
|
||||||
|
kind: 'SubChart'
|
||||||
|
repo: https://improwised.github.io/charts/
|
||||||
|
chart: pgcat
|
||||||
|
version: 0.1.0
|
||||||
|
values: *pgcat_config
|
||||||
23
tool/.helmignore
Normal file
23
tool/.helmignore
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
# Patterns to ignore when building packages.
|
||||||
|
# This supports shell glob matching, relative path matching, and
|
||||||
|
# negation (prefixed with !). Only one pattern per line.
|
||||||
|
.DS_Store
|
||||||
|
# Common VCS dirs
|
||||||
|
.git/
|
||||||
|
.gitignore
|
||||||
|
.bzr/
|
||||||
|
.bzrignore
|
||||||
|
.hg/
|
||||||
|
.hgignore
|
||||||
|
.svn/
|
||||||
|
# Common backup files
|
||||||
|
*.swp
|
||||||
|
*.bak
|
||||||
|
*.tmp
|
||||||
|
*.orig
|
||||||
|
*~
|
||||||
|
# Various IDEs
|
||||||
|
.project
|
||||||
|
.idea/
|
||||||
|
*.tmproj
|
||||||
|
.vscode/
|
||||||
24
tool/Chart.yaml
Normal file
24
tool/Chart.yaml
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: tool
|
||||||
|
description: A Helm chart for Kubernetes
|
||||||
|
|
||||||
|
# A chart can be either an 'application' or a 'library' chart.
|
||||||
|
#
|
||||||
|
# Application charts are a collection of templates that can be packaged into versioned archives
|
||||||
|
# to be deployed.
|
||||||
|
#
|
||||||
|
# Library charts provide useful utilities or functions for the chart developer. They're included as
|
||||||
|
# a dependency of application charts to inject those utilities and functions into the rendering
|
||||||
|
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
|
||||||
|
type: library
|
||||||
|
|
||||||
|
# This is the chart version. This version number should be incremented each time you make changes
|
||||||
|
# to the chart and its templates, including the app version.
|
||||||
|
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
||||||
|
version: 0.1.0
|
||||||
|
|
||||||
|
# This is the version number of the application being deployed. This version number should be
|
||||||
|
# incremented each time you make changes to the application. Versions are not expected to
|
||||||
|
# follow Semantic Versioning. They should reflect the version the application is using.
|
||||||
|
# It is recommended to use it with quotes.
|
||||||
|
# appVersion: "1.16.0"
|
||||||
13
tool/templates/_helm-chart-config.yaml
Normal file
13
tool/templates/_helm-chart-config.yaml
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{{- define "tool.helm-chart-config.tpl" -}}
|
||||||
|
{{- $name := .Release.Name -}}
|
||||||
|
{{ with ( .Values.values ) }}
|
||||||
|
apiVersion: helm.cattle.io/v1
|
||||||
|
kind: HelmChartConfig
|
||||||
|
metadata:
|
||||||
|
name: {{ $name }}
|
||||||
|
namespace: tools
|
||||||
|
spec:
|
||||||
|
valuesContent: |-
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
14
tool/templates/_helm-chart.yaml
Normal file
14
tool/templates/_helm-chart.yaml
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
{{- define "tool.helm-chart.tpl" -}}
|
||||||
|
apiVersion: helm.cattle.io/v1
|
||||||
|
kind: HelmChart
|
||||||
|
metadata:
|
||||||
|
name: {{ .Release.Name }}
|
||||||
|
namespace: tools
|
||||||
|
spec:
|
||||||
|
repo: {{ .Values.repo }}
|
||||||
|
chart: {{ .Values.chart }}
|
||||||
|
{{ with .Values.version -}}
|
||||||
|
version: {{ . }}
|
||||||
|
{{ end -}}
|
||||||
|
targetNamespace: tools
|
||||||
|
{{- end -}}
|
||||||
3
tool/templates/helm-chart-config.yaml
Normal file
3
tool/templates/helm-chart-config.yaml
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# {{- if eq .Values.kind "HelmChart" -}}
|
||||||
|
# {{- include "tool.helm-chart-config.tpl" . -}}
|
||||||
|
# {{- end -}}
|
||||||
3
tool/templates/helm-chart.yaml
Normal file
3
tool/templates/helm-chart.yaml
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# {{- if eq .Values.kind "HelmChart" -}}
|
||||||
|
# {{- include "tool.helm-chart.tpl" . -}}
|
||||||
|
# {{- end -}}
|
||||||
4
tool/values.yaml
Normal file
4
tool/values.yaml
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
# kind: HelmChart or SubChart, optionnal. SubChart means another chart is being used instead
|
||||||
|
kind: 'SubChart'
|
||||||
|
repo: '' # required
|
||||||
|
chart: '' # required
|
||||||
Reference in New Issue
Block a user