├── .gitignore ├── .circleci └── config.yml ├── Chart.yaml ├── templates ├── configmap.yaml ├── pvc.yaml ├── secrets.yaml ├── ingress.yaml ├── service.yaml ├── _helpers.tpl ├── NOTES.txt └── deployment.yaml ├── .helmignore ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md └── PULL_REQUEST_TEMPLATE.md ├── certs ├── server.cert └── server.key ├── publish.sh ├── values.yaml ├── README.md └── LICENSE.md /.gitignore: -------------------------------------------------------------------------------- 1 | *.tgz 2 | .idea 3 | -------------------------------------------------------------------------------- /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | jobs: 3 | build: 4 | docker: 5 | - image: alpine 6 | steps: 7 | - checkout 8 | - run: 9 | name: helm-github-pages 10 | environment: 11 | - GITHUB_PAGES_REPO: cetic/helm-charts 12 | - HELM_CHART: pgadmin 13 | command: wget -O - https://raw.githubusercontent.com/cetic/helm-pgadmin/develop/publish.sh | sh 14 | -------------------------------------------------------------------------------- /Chart.yaml: -------------------------------------------------------------------------------- 1 | name: pgadmin 2 | version: 0.1.12 3 | appVersion: 4.13.0 4 | description: pgAdmin is a web based administration tool for the PostgreSQL database. 5 | keywords: 6 | - pgadmin 7 | - postgres 8 | - database 9 | - sql 10 | home: https://www.pgadmin.org/ 11 | icon: https://wiki.postgresql.org/images/3/30/PostgreSQL_logo.3colors.120x120.png 12 | source: 13 | - https://github.com/cetic/helm-chart 14 | maintainers: 15 | - name: alexnuttinck 16 | -------------------------------------------------------------------------------- /templates/configmap.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | {{- if .Values.servers.enabled }} 3 | apiVersion: v1 4 | kind: ConfigMap 5 | metadata: 6 | name: {{ template "pgadmin.fullname" . }} 7 | labels: 8 | app: {{ template "pgadmin.name" . }} 9 | chart: {{ template "pgadmin.chart" . }} 10 | release: {{ .Release.Name | quote }} 11 | heritage: {{ .Release.Service | quote }} 12 | data: 13 | servers.json: |- 14 | {{ toJson .Values.servers.config | indent 4 }} 15 | {{- end }} 16 | -------------------------------------------------------------------------------- /.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | 6 | # Common VCS dirs 7 | .git/ 8 | .gitignore 9 | .bzr/ 10 | .bzrignore 11 | .hg/ 12 | .hgignore 13 | .svn/ 14 | 15 | # Common backup files 16 | *.swp 17 | *.bak 18 | *.tmp 19 | *~ 20 | 21 | # Various IDEs 22 | .project 23 | .idea/ 24 | *.tmproj 25 | 26 | .circleci/ 27 | 28 | -------------------------------------------------------------------------------- /templates/pvc.yaml: -------------------------------------------------------------------------------- 1 | {{- if and .Values.persistence.enabled (not .Values.persistence.existingClaim) }} 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: {{ template "pgadmin.fullname" . }} 6 | labels: 7 | app: {{ template "pgadmin.fullname" . }} 8 | chart: {{ template "pgadmin.chart" . }} 9 | release: "{{ .Release.Name }}" 10 | heritage: "{{ .Release.Service }}" 11 | annotations: 12 | {{- if .Values.persistence.storageClass }} 13 | volume.beta.kubernetes.io/storage-class: {{ .Values.persistence.storageClass | quote }} 14 | {{- else }} 15 | volume.alpha.kubernetes.io/storage-class: default 16 | {{- end }} 17 | spec: 18 | accessModes: 19 | - {{ .Values.persistence.accessMode | quote }} 20 | resources: 21 | requests: 22 | storage: {{ .Values.persistence.size | quote }} 23 | {{- end }} 24 | -------------------------------------------------------------------------------- /templates/secrets.yaml: -------------------------------------------------------------------------------- 1 | {{- if (not .Values.pgadmin.existingPasswordSecret) }} 2 | apiVersion: v1 3 | kind: Secret 4 | metadata: 5 | name: {{ template "pgadmin.passwordSecret" . }} 6 | labels: 7 | app: {{ template "pgadmin.fullname" . }} 8 | chart: {{ template "pgadmin.chart" . }} 9 | release: "{{ .Release.Name }}" 10 | heritage: "{{ .Release.Service }}" 11 | type: Opaque 12 | data: 13 | pgadmin-password: {{ default "admin" .Values.pgadmin.password | b64enc | quote }} 14 | {{- end }} 15 | --- 16 | {{- if .Values.pgadmin.tls }} 17 | apiVersion: v1 18 | kind: Secret 19 | metadata: 20 | name: {{ template "pgadmin.fullname" . }}-tls 21 | labels: 22 | app: {{ template "pgadmin.fullname" . }} 23 | chart: {{ template "pgadmin.chart" . }} 24 | release: "{{ .Release.Name }}" 25 | heritage: "{{ .Release.Service }}" 26 | type: Opaque 27 | data: 28 | server.cert: {{ .Files.Get "certs/server.cert" | b64enc }} 29 | server.key: {{ .Files.Get "certs/server.key" | b64enc }} 30 | {{- end }} 31 | -------------------------------------------------------------------------------- /templates/ingress.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.ingress.enabled }} 2 | {{- $fullName := include "pgadmin.fullname" . -}} 3 | {{- $ingressPath := .Values.ingress.path -}} 4 | apiVersion: extensions/v1beta1 5 | kind: Ingress 6 | metadata: 7 | name: {{ template "pgadmin.fullname" . }} 8 | labels: 9 | app: {{ template "pgadmin.name" . }} 10 | chart: {{ template "pgadmin.chart" . }} 11 | release: {{ .Release.Name }} 12 | heritage: {{ .Release.Service }} 13 | {{- with .Values.ingress.annotations }} 14 | annotations: 15 | {{ toYaml . | indent 4 }} 16 | {{- end }} 17 | spec: 18 | {{- if .Values.ingress.tls }} 19 | tls: 20 | {{- range .Values.ingress.tls }} 21 | - hosts: 22 | {{- range .hosts }} 23 | - {{ . | quote }} 24 | {{- end }} 25 | secretName: {{ .secretName }} 26 | {{- end }} 27 | {{- end }} 28 | rules: 29 | {{- range .Values.ingress.hosts }} 30 | - host: {{ . }} 31 | http: 32 | paths: 33 | - path: {{ $ingressPath }} 34 | backend: 35 | serviceName: {{ $fullName }} 36 | servicePort: http 37 | {{- end }} 38 | {{- end }} 39 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '[cetic/pgadmin] issue title' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | 16 | 17 | **Describe the bug** 18 | A clear and concise description of what the bug is. 19 | 20 | **Version of Helm and Kubernetes**: 21 | 22 | 23 | **What happened**: 24 | 25 | 26 | **What you expected to happen**: 27 | 28 | 29 | **How to reproduce it** (as minimally and precisely as possible): 30 | 31 | 32 | **Anything else we need to know**: 33 | 34 | 35 | -------------------------------------------------------------------------------- /templates/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ template "pgadmin.fullname" . }} 5 | labels: 6 | app: {{ template "pgadmin.name" . }} 7 | chart: {{ template "pgadmin.chart" . }} 8 | release: {{ .Release.Name }} 9 | heritage: {{ .Release.Service }} 10 | {{- if .Values.service.annotations }} 11 | annotations: 12 | {{ toYaml .Values.service.annotations | indent 4 }} 13 | {{- end }} 14 | spec: 15 | type: {{ .Values.service.type }} 16 | {{- if and .Values.service.loadBalancerIP (eq .Values.service.type "LoadBalancer") }} 17 | loadBalancerIP: {{ .Values.service.loadBalancerIP }} 18 | {{- end }} 19 | {{- if and (eq .Values.service.type "LoadBalancer") .Values.service.loadBalancerSourceRanges }} 20 | loadBalancerSourceRanges: 21 | {{ with .Values.service.loadBalancerSourceRanges }} 22 | {{ toYaml . | indent 4 }} 23 | {{- end }} 24 | {{- end }} 25 | ports: 26 | - port: {{ .Values.service.port }} 27 | targetPort: http 28 | protocol: TCP 29 | name: http 30 | {{- if .Values.pgadmin.tls }} 31 | - port: {{ .Values.service.tlsport }} 32 | targetPort: https 33 | protocol: TCP 34 | name: https 35 | {{- end }} 36 | selector: 37 | app: {{ template "pgadmin.name" . }} 38 | release: {{ .Release.Name }} 39 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '[cetic/pgadmin] issue title' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | 16 | 17 | **Is your feature request related to a problem? Please describe.** 18 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 19 | 20 | **Describe the solution you'd like** 21 | A clear and concise description of what you want to happen. 22 | 23 | **Describe alternatives you've considered** 24 | A clear and concise description of any alternative solutions or features you've considered. 25 | 26 | **Additional context** 27 | Add any other context or screenshots about the feature request here. 28 | 29 | -------------------------------------------------------------------------------- /templates/_helpers.tpl: -------------------------------------------------------------------------------- 1 | {{/* vim: set filetype=mustache: */}} 2 | {{/* 3 | Expand the name of the chart. 4 | */}} 5 | {{- define "pgadmin.name" -}} 6 | {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} 7 | {{- end -}} 8 | {{/* 9 | Return the appropriate apiVersion for deployment. 10 | */}} 11 | {{- define "pgadmin.deployment.apiVersion" -}} 12 | {{- if semverCompare "<1.9-0" .Capabilities.KubeVersion.GitVersion -}} 13 | {{- print "extensions/v1beta1" -}} 14 | {{- else if semverCompare "^1.9-0" .Capabilities.KubeVersion.GitVersion -}} 15 | {{- print "apps/v1" -}} 16 | {{- end -}} 17 | {{- end -}} 18 | {{/* 19 | Create a default fully qualified app name. 20 | We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). 21 | If release name contains chart name it will be used as a full name. 22 | */}} 23 | {{- define "pgadmin.fullname" -}} 24 | {{- if .Values.fullnameOverride -}} 25 | {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} 26 | {{- else -}} 27 | {{- $name := default .Chart.Name .Values.nameOverride -}} 28 | {{- if contains $name .Release.Name -}} 29 | {{- .Release.Name | trunc 63 | trimSuffix "-" -}} 30 | {{- else -}} 31 | {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} 32 | {{- end -}} 33 | {{- end -}} 34 | {{- end -}} 35 | 36 | {{/* 37 | Create chart name and version as used by the chart label. 38 | */}} 39 | {{- define "pgadmin.chart" -}} 40 | {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} 41 | {{- end -}} 42 | 43 | {{/* 44 | Create the name for the admin password secret. 45 | */}} 46 | {{- define "pgadmin.passwordSecret" -}} 47 | {{- if .Values.pgadmin.existingPasswordSecret -}} 48 | {{- .Values.pgadmin.existingPasswordSecret -}} 49 | {{- else -}} 50 | {{- template "pgadmin.fullname" . }}-password 51 | {{- end -}} 52 | {{- end -}} -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 27 | 28 | #### What this PR does / why we need it: 29 | 30 | #### Which issue this PR fixes 31 | *(optional, in `fixes #(, fixes #, ...)` format, will close that issue when PR gets merged)* 32 | - fixes # 33 | 34 | #### Special notes for your reviewer: 35 | 36 | #### Checklist 37 | [Place an '[x]' (no spaces) in all applicable fields. Please remove unrelated fields.] 38 | - [ ] [DCO](https://github.com/helm/charts/blob/master/CONTRIBUTING.md#sign-your-work) signed 39 | - [ ] Chart Version bumped 40 | - [ ] Variables are documented in the README.md 41 | -------------------------------------------------------------------------------- /templates/NOTES.txt: -------------------------------------------------------------------------------- 1 | 1. Get the application URL by running these commands: 2 | {{- if .Values.ingress.enabled }} 3 | You should be able to access your new pgAdmin installation through 4 | http{{ if $.Values.ingress.tls }}s{{ end }}://{{ if $.Values.ingress.host }}{{.Values.ingress.host}}{{else}}your-cluster-ip{{end}}{{ $.Values.ingress.path }} 5 | {{if not $.Values.ingress.host}} 6 | 7 | Find out your cluster ip address by running: 8 | $ kubectl cluster-info 9 | {{ end }} 10 | 11 | {{- else if contains "NodePort" .Values.service.type }} 12 | export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ template "pgadmin.fullname" . }}) 13 | export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") 14 | echo "pgAdmin URL: http://$NODE_IP:$NODE_PORT" 15 | 16 | {{- else if contains "LoadBalancer" .Values.service.type }} 17 | NOTE: It may take a few minutes for the LoadBalancer IP to be available. 18 | You can watch the status of by running 'kubectl get svc -w {{ template "pgadmin.fullname" . }}' 19 | 20 | export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "pgadmin.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") 21 | echo "pgAdmin URL: http://$SERVICE_IP:{{ .Values.service.port }}" 22 | 23 | {{- else if contains "ClusterIP" .Values.service.type }} 24 | export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "pgadmin.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") 25 | echo "pgAdmin URL: http://127.0.0.1:8080" 26 | kubectl port-forward --namespace {{ .Release.Namespace }} svc/{{ template "pgadmin.fullname" . }} 8080:{{ .Values.service.port }} 27 | {{- end }} 28 | 29 | ** Please be patient while the chart is being deployed ** 30 | 31 | -------------------------------------------------------------------------------- /certs/server.cert: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | 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 34 | QBLdhJFPh7+08NtECzOrEtBrEDxPqxhznQ== 35 | -----END CERTIFICATE----- 36 | -------------------------------------------------------------------------------- /publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -o pipefail 4 | 5 | WORKING_DIRECTORY="$PWD" 6 | 7 | [ "$GITHUB_PAGES_REPO" ] || { 8 | echo "ERROR: Environment variable GITHUB_PAGES_REPO is required" 9 | exit 1 10 | } 11 | [ "$HELM_CHART" ] || { 12 | echo "ERROR: Environment variable HELM_CHART is required" 13 | exit 1 14 | } 15 | [ -z "$GITHUB_PAGES_BRANCH" ] && GITHUB_PAGES_BRANCH=gh-pages 16 | [ -z "$HELM_CHARTS_SOURCE" ] && HELM_CHARTS_SOURCE="$WORKING_DIRECTORY/$HELM_CHART" 17 | [ -d "$WORKING_DIRECTORY" ] || { 18 | echo "ERROR: Could not find Helm charts in $WORKING_DIRECTORY" 19 | exit 1 20 | } 21 | [ -z "$HELM_VERSION" ] && HELM_VERSION=2.8.1 22 | [ "$CIRCLE_BRANCH" ] || { 23 | echo "ERROR: Environment variable CIRCLE_BRANCH is required" 24 | exit 1 25 | } 26 | 27 | echo "GITHUB_PAGES_REPO=$GITHUB_PAGES_REPO" 28 | echo "GITHUB_PAGES_BRANCH=$GITHUB_PAGES_BRANCH" 29 | echo "HELM_CHARTS_SOURCE=$HELM_CHARTS_SOURCE" 30 | echo "HELM_VERSION=$HELM_VERSION" 31 | echo "CIRCLE_BRANCH=$CIRCLE_BRANCH" 32 | 33 | echo ">>> Create Chart Directory" 34 | 35 | mkdir -p $HELM_CHARTS_SOURCE/ 36 | mkdir -p /tmp/helm-tmp/ 37 | 38 | mv $WORKING_DIRECTORY/* /tmp/helm-tmp/ 39 | mv /tmp/helm-tmp/ $HELM_CHARTS_SOURCE/ 40 | 41 | echo '>> Prepare...' 42 | mkdir -p /tmp/helm/bin 43 | mkdir -p /tmp/helm/publish 44 | apk update 45 | apk add ca-certificates git openssh 46 | 47 | echo '>> Installing Helm...' 48 | cd /tmp/helm/bin 49 | wget "https://storage.googleapis.com/kubernetes-helm/helm-v${HELM_VERSION}-linux-amd64.tar.gz" 50 | tar -zxf "helm-v${HELM_VERSION}-linux-amd64.tar.gz" 51 | chmod +x linux-amd64/helm 52 | alias helm=/tmp/helm/bin/linux-amd64/helm 53 | helm version -c 54 | helm init -c 55 | 56 | echo ">> Checking out $GITHUB_PAGES_BRANCH branch from $GITHUB_PAGES_REPO" 57 | cd /tmp/helm/publish 58 | mkdir -p "$HOME/.ssh" 59 | ssh-keyscan -H github.com >> "$HOME/.ssh/known_hosts" 60 | git clone -b "$GITHUB_PAGES_BRANCH" "git@github.com:$GITHUB_PAGES_REPO.git" . 61 | 62 | echo '>> Building chart...' 63 | echo ">>> helm lint $HELM_CHARTS_SOURCE" 64 | helm lint "$HELM_CHARTS_SOURCE" 65 | echo ">>> helm package -d $HELM_CHART $HELM_CHARTS_SOURCE" 66 | mkdir -p "$HELM_CHART" 67 | helm package -d "$HELM_CHART" "$HELM_CHARTS_SOURCE" 68 | 69 | echo '>>> helm repo index' 70 | helm repo index . 71 | 72 | if [ "$CIRCLE_BRANCH" != "master" ]; then 73 | echo "Current branch is not master and do not publish" 74 | exit 0 75 | fi 76 | 77 | echo ">> Publishing to $GITHUB_PAGES_BRANCH branch of $GITHUB_PAGES_REPO" 78 | git config user.email "$CIRCLE_USERNAME@users.noreply.github.com" 79 | git config user.name CircleCI 80 | git add . 81 | git status 82 | git commit -m "Published by CircleCI $CIRCLE_BUILD_URL" 83 | git push origin "$GITHUB_PAGES_BRANCH" 84 | 85 | -------------------------------------------------------------------------------- /certs/server.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | 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 51 | kZ7mTxpW0256Kt+FzVnpb7TJSpUGyhwoMA== 52 | -----END PRIVATE KEY----- 53 | -------------------------------------------------------------------------------- /templates/deployment.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: {{ template "pgadmin.deployment.apiVersion" . }} 3 | kind: Deployment 4 | metadata: 5 | name: {{ template "pgadmin.fullname" . }} 6 | labels: 7 | app: {{ template "pgadmin.name" . }} 8 | chart: {{ template "pgadmin.chart" . }} 9 | release: {{ .Release.Name }} 10 | heritage: {{ .Release.Service }} 11 | spec: 12 | replicas: 1 13 | selector: 14 | matchLabels: 15 | app: {{ template "pgadmin.name" . }} 16 | release: {{ .Release.Name }} 17 | template: 18 | metadata: 19 | labels: 20 | app: {{ template "pgadmin.name" . }} 21 | release: {{ .Release.Name }} 22 | spec: 23 | containers: 24 | - name: {{ .Chart.Name }} 25 | image: "{{ .Values.image.repository }}" 26 | imagePullPolicy: {{ .Values.image.pullPolicy }} 27 | env: 28 | - name: PGADMIN_DEFAULT_EMAIL 29 | value: {{ .Values.pgadmin.username }} 30 | - name: PGADMIN_DEFAULT_PASSWORD 31 | valueFrom: 32 | secretKeyRef: 33 | name: {{ template "pgadmin.passwordSecret" . }} 34 | key: pgadmin-password 35 | {{- if .Values.pgadmin.tls }} 36 | - name: PGADMIN_ENABLE_TLS 37 | value: {{ .Values.pgadmin.tls | quote }} 38 | {{- end }} 39 | - name: PGADMIN_PORT 40 | value: {{ .Values.service.port | quote }} 41 | {{- if .Values.pgadmin.scriptname }} 42 | - name: SCRIPT_NAME 43 | value: {{ .Values.pgadmin.scriptname }} 44 | {{- end }} 45 | {{- range .Values.pgadmin.config }} 46 | - name: {{ .name | upper }} 47 | value: {{ .value | quote }} 48 | {{- end }} 49 | ports: 50 | - name: http 51 | containerPort: 80 52 | protocol: TCP 53 | - name: https 54 | containerPort: 443 55 | protocol: TCP 56 | volumeMounts: 57 | - name: pgadmin-data 58 | mountPath: /var/lib/pgadmin 59 | {{- if .Values.pgadmin.tls }} 60 | - name: tls-cert 61 | mountPath: /certs/server.cert 62 | subPath: server.cert 63 | - name: tls-private-key 64 | mountPath: /certs/server.key 65 | subPath: server.key 66 | {{- end }} 67 | {{- if .Values.servers.enabled }} 68 | - name: servers-config 69 | mountPath: /pgadmin4/servers.json 70 | subPath: servers.json 71 | {{- end}} 72 | resources: 73 | {{ toYaml .Values.resources | indent 12 }} 74 | livenessProbe: 75 | {{ toYaml .Values.livenessProbe | indent 12 }} 76 | readinessProbe: 77 | {{ toYaml .Values.readinessProbe | indent 12 }} 78 | volumes: 79 | - name: pgadmin-data 80 | {{- if .Values.persistence.enabled }} 81 | persistentVolumeClaim: 82 | claimName: {{ .Values.persistence.existingClaim | default (include "pgadmin.fullname" .) }} 83 | {{- else }} 84 | emptyDir: {} 85 | {{- end }} 86 | {{- if .Values.pgadmin.tls }} 87 | - name: tls-private-key 88 | secret: 89 | secretName: {{ template "pgadmin.fullname" . }}-tls 90 | items: 91 | - key: server.key 92 | path: server.key 93 | - name: tls-cert 94 | secret: 95 | secretName: {{ template "pgadmin.fullname" . }}-tls 96 | items: 97 | - key: server.cert 98 | path: server.cert 99 | {{- end }} 100 | {{- if .Values.servers.enabled }} 101 | - name: servers-config 102 | configMap: 103 | name: {{ template "pgadmin.fullname" . }} 104 | items: 105 | - key: servers.json 106 | path: servers.json 107 | {{- end }} 108 | {{- if .Values.nodeSelector }} 109 | nodeSelector: 110 | {{ toYaml .Values.nodeSelector | indent 8 }} 111 | {{- end }} 112 | -------------------------------------------------------------------------------- /values.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | ## Set default image, imageTag, and imagePullPolicy. mode is used to indicate the 3 | ## 4 | image: 5 | repository: dpage/pgadmin4 6 | tag: 4.13 7 | pullPolicy: IfNotPresent 8 | 9 | pgadmin: 10 | ## pgadmin admin user 11 | username: pgadmin4@pgadmin.org 12 | ## pgadmin admin password 13 | # existingPasswordSecret: "" 14 | password: admin 15 | tls: false 16 | ## See https://www.pgadmin.org/docs/pgadmin4/latest/container_deployment.html 17 | # scriptname: /pgadmin 18 | 19 | ## pgadmin config, Any custom environment variabls. Settings in config.py can be overriden with an environment variable using the prefix: PGADMIN_CONFIG_ 20 | ## eg turn off enhanced cookie protection for default AKS, loadbalancer installation 21 | #config: 22 | # - name: "PGADMIN_CONFIG_ENHANCED_COOKIE_PROTECTION" 23 | # value: "False" 24 | 25 | ## Enable persistence using Persistent Volume Claims 26 | ## ref: http://kubernetes.io/docs/user-guide/persistent-volumes/ 27 | ## 28 | persistence: 29 | enabled: true 30 | 31 | ## A manually managed Persistent Volume and Claim 32 | ## Requires persistence.enabled: true 33 | ## If defined, PVC must be created manually before volume will be bound 34 | # existingClaim: 35 | 36 | ## pgAdmin data Persistent Volume Storage Class 37 | ## If defined, storageClassName: 38 | ## If set to "-", storageClassName: "", which disables dynamic provisioning 39 | ## If undefined (the default) or set to null, no storageClassName spec is 40 | ## set, choosing the default provisioner. (gp2 on AWS, standard on 41 | ## GKE, AWS & OpenStack) 42 | ## 43 | ## Storage class of PV to bind. By default it looks for standard storage class. 44 | ## If the PV uses a different storage class, specify that here. 45 | # storageClass: standard 46 | # VolumeName: "" 47 | accessMode: ReadWriteOnce 48 | size: 4Gi 49 | 50 | ## Expose the pgAdmin service to be accessed from outside the cluster (LoadBalancer service). 51 | ## or access it from within the cluster (ClusterIP service). Set the service type and the port to serve it. 52 | ## ref: http://kubernetes.io/docs/user-guide/services/ 53 | ## 54 | service: 55 | name: pgadmin 56 | type: LoadBalancer 57 | port: 80 58 | tlsport: 443 59 | annotations: {} 60 | 61 | ## Set the LoadBalancer service type to internal only. 62 | ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#internal-load-balancer 63 | ## 64 | # loadBalancerIP: 65 | 66 | ## Load Balancer sources 67 | ## https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/#restrict-access-for-loadbalancer-service 68 | ## 69 | # loadBalancerSourceRanges: 70 | # - 10.10.10.0/24 71 | 72 | ## Configure Ingress based on the documentation here: https://kubernetes.io/docs/concepts/services-networking/ingress/ 73 | ## 74 | ingress: 75 | enabled: false 76 | annotations: {} 77 | path: / 78 | hosts: [] 79 | tls: [] 80 | 81 | ## Configure servers.json: https://www.pgadmin.org/docs/pgadmin4/latest/import_export_servers.html 82 | ## 83 | servers: 84 | enabled: false 85 | config: 86 | Servers: 87 | 1: 88 | Name: "Test" 89 | Group: "Server Group 1" 90 | Port: 5432 91 | Username: "postgres" 92 | Host: "postgres" 93 | SSLMode: "prefer" 94 | MaintenanceDB: "postgres" 95 | 96 | ## Configure liveness and readiness probes 97 | ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/ 98 | ## 99 | #readinessProbe: 100 | # httpGet: 101 | # path: / 102 | # port: http 103 | # initialDelaySeconds: 60 104 | # periodSeconds: 15 105 | # timeoutSeconds: 10 106 | #livenessProbe: 107 | # httpGet: 108 | # path: / 109 | # port: http 110 | # initialDelaySeconds: 60 111 | # periodSeconds: 30 112 | # timeoutSeconds: 10 113 | 114 | ## Configure resource requests and limits 115 | ## ref: http://kubernetes.io/docs/user-guide/compute-resources/ 116 | ## 117 | resources: {} 118 | # We usually recommend not to specify default resources and to leave this as a conscious 119 | # choice for the user. This also increases chances charts run on environments with little 120 | # resources, such as Minikube. If you do want to specify resources, uncomment the following 121 | # lines, adjust them as necessary, and remove the curly braces after 'resources:'. 122 | # limits: 123 | # cpu: 100m 124 | # memory: 128Mi 125 | # requests: 126 | # cpu: 100m 127 | # memory: 128Mi 128 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | :warning: As explained in Issue [#18](https://github.com/cetic/helm-pgadmin/issues/18), this repository is now archived. Please use https://github.com/helm/charts/tree/master/stable/pgadmin instead. Thanks you all for the contributions made to this Helm Chart! :warning: 2 | 3 | # Helm Chart for pgAdmin 4 | 5 | [![CircleCI](https://circleci.com/gh/cetic/helm-pgadmin.svg?style=svg)](https://circleci.com/gh/cetic/helm-pgadmin/tree/master) [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) ![version](https://img.shields.io/github/tag/cetic/helm-pgadmin.svg?label=release) 6 | 7 | ## Introduction 8 | 9 | This [Helm](https://github.com/kubernetes/helm) chart installs [pgAdmin](https://github.com/postgres/pgadmin4) in a Kubernetes cluster. 10 | 11 | ## Prerequisites 12 | 13 | - Kubernetes cluster 1.10+ 14 | - Helm 2.8.0+ 15 | - PV provisioner support in the underlying infrastructure. 16 | 17 | ## Installation 18 | 19 | ### Add Helm repository 20 | 21 | ```bash 22 | helm repo add cetic https://cetic.github.io/helm-charts 23 | helm repo update 24 | ``` 25 | 26 | ### Configure the chart 27 | 28 | The following items can be set via `--set` flag during installation or configured by editing the `values.yaml` directly (need to download the chart first). 29 | 30 | #### Configure the way how to expose pgAdmin service: 31 | 32 | - **Ingress**: The ingress controller must be installed in the Kubernetes cluster. 33 | - **ClusterIP**: Exposes the service on a cluster-internal IP. Choosing this value makes the service only reachable from within the cluster. 34 | - **NodePort**: Exposes the service on each Node’s IP at a static port (the NodePort). You’ll be able to contact the NodePort service, from outside the cluster, by requesting `NodeIP:NodePort`. 35 | - **LoadBalancer**: Exposes the service externally using a cloud provider’s load balancer. 36 | 37 | #### Configure the way how to persistent data: 38 | 39 | - **Disable**: The data does not survive the termination of a pod. 40 | - **Persistent Volume Claim(default)**: A default `StorageClass` is needed in the Kubernetes cluster to dynamic provision the volumes. Specify another StorageClass in the `storageClass` or set `existingClaim` if you have already existing persistent volumes to use. 41 | 42 | ### Install the chart 43 | 44 | Install the pgAdmin helm chart with a release name `my-release`: 45 | 46 | ```bash 47 | helm install --name my-release cetic/pgadmin 48 | ``` 49 | 50 | ## Uninstallation 51 | 52 | To uninstall/delete the `my-release` deployment: 53 | 54 | ```bash 55 | helm delete --purge my-release 56 | ``` 57 | 58 | ## Configuration 59 | 60 | The following table lists the configurable parameters of the pgAdmin chart and the default values. 61 | 62 | | Parameter | Description | Default | 63 | | --------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------| ------------------------------- | 64 | | **Image** | 65 | | `image.repository` | pgAdmin Image name | `dpage/pgadmin4` | 66 | | `image.tag` | pgAdmin Image tag | `4.13` | 67 | | `image.pullPolicy` | pgAdmin Image pull policy | `IfNotPresent` | 68 | | **PgAdmin** | 69 | | `pgadmin.username` | pgAdmin admin user | `pgadmin4@pgadmin.org` | 70 | | `pgadmin.password` | pgAdmin admin password | `admin` | 71 | | `pgadmin.existingPasswordSecret` | existing secret containing pgAdmin admin password | `nil` | 72 | | `pgadmin.tls` | pgAdmin admin TLS. the container will listen on port 80 for connections in plain text. If set to any value, the container will listen on port 443 for TLS connections. When TLS is enabled, a certificate and key must be provided. See [secrets file](/templates/secrets.yaml)| `false` | 73 | | `pgadmin.scriptname` | pgAdmin ScriptName Env, See https://www.pgadmin.org/docs/pgadmin4/latest/container_deployment.html | `nil` | 74 | | `pgadmin.config` | pgAdmin configuration override(s) Env, config.py entries can be overriden by environment variables with the prefix: 'PGADMIN_CONFIG_' | `nil` | 75 | | **Persistence** | 76 | | `persistence.enabled` | Enable the data persistence or not | `true` | 77 | | `persistence.existingClaim` | Provide an existing PersistentVolumeClaim, the value is evaluated as a template | `nil` | 78 | | `persistence.storageClass` | PVC Storage Class for PostgreSQL volume | `nil` | 79 | | `persistence.accessMode` | The access mode of the volume | `ReadWriteOnce` | 80 | | `persistence.size` | The size of the volume | `4Gi` | 81 | | **Service** | 82 | | `service.type` | Type of service for pgAdmin frontend | `LoadBalancer` | 83 | | `service.port` | Port to expose service | `80` | 84 | | `service.tlsport` | Port to expose service in tls, `pgadmin.tls`must be enabled | `443` | 85 | | `service.loadBalancerIP` | LoadBalancerIP if service type is `LoadBalancer` | `nil` | 86 | | `service.loadBalancerSourceRanges` | Address that are allowed when svc is `LoadBalancer` | `[]` | 87 | | `service.annotations` | Service annotations | `{}` | 88 | | **Ingress** | 89 | | `ingress.enabled` | Enables Ingress | `false` | 90 | | `ingress.annotations` | Ingress annotations | `{}` | 91 | | `ingress.path` | Path to access frontend | `/` | 92 | | `ingress.hosts` | Ingress hosts | `[]` | 93 | | `ingress.tls` | Ingress TLS configuration | `[]` | 94 | | **Servers** | 95 | | `servers.enabled` | Enable the servers configuration. If enabled, server definitions found in `servers.config` will be loaded at launch time.| `true` | 96 | | `servers.config` | Server definitions | `See the values.yaml` | 97 | | **ReadinessProbe** | 98 | | `readinessProbe` | Rediness Probe settings | `nil` | 99 | | **LivenessProbe** | 100 | | `livenessProbe` | Liveness Probe settings | `nil` | 101 | | **Resources** | 102 | | `resources` | CPU/Memory resource requests/limits | `{}` | 103 | 104 | ## Credits 105 | 106 | Initially inspired from https://github.com/jjcollinge/pgadmin-chart, which is archived. 107 | 108 | ## Contributing 109 | 110 | Feel free to contribute by making a [pull request](https://github.com/cetic/helm-pgadmin/pull/new/master). 111 | 112 | Please read the official [Contribution Guide](https://github.com/helm/charts/blob/master/CONTRIBUTING.md) from Helm for more information on how you can contribute to this Chart. 113 | 114 | ## License 115 | 116 | [Apache License 2.0](/LICENSE.md) 117 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | --------------------------------------------------------------------------------