149 Commits
0.1.1 ... 0.5.1

Author SHA1 Message Date
3c8fb86231 fix(deployment): define annotations to automatically roll deployments
All checks were successful
Helm / helm-lint (push) Successful in 11s
Helm / helm-unittest (push) Successful in 27s
Release / publish-chart (push) Successful in 7s
The following patch extends the chart to automatically roll the deployment, when
one of the configurations, stored in a config map or secret, has been changed.

The implementation add annotations which triggers `helm update` or ArgoCD to
roll the deployment. Further information can be found on the official helm
website:

  https://helm.sh/docs/howto/charts_tips_and_tricks/#automatically-roll-deployments
2025-05-29 11:22:05 +02:00
0cf63593e9 revert: automatically roll deployments
The annotations must be defined as part of the Pod and not the Deployment.
2025-05-29 11:13:46 +02:00
81fb535128 feat: automatically roll deployments
All checks were successful
Helm / helm-lint (push) Successful in 25s
Helm / helm-unittest (push) Successful in 24s
Release / publish-chart (push) Successful in 26s
The following patch extends the chart to automatically roll the deployment, when
one of the configurations, stored in a config map or secret, has been changed.

The implementation add annotations which triggers `helm update` or ArgoCD to
roll the deployment. Further information can be found on the official helm
website:

  https://helm.sh/docs/howto/charts_tips_and_tricks/#automatically-roll-deployments
2025-05-29 11:01:13 +02:00
e5b0965373 Merge pull request 'chore(deps): update docker.io/library/node docker tag to v24' (#50) from renovate/docker.io-library-node-24.x into master
All checks were successful
Helm / helm-lint (push) Successful in 12s
Helm / helm-unittest (push) Successful in 14s
Reviewed-on: #50
2025-05-28 07:06:14 +00:00
40712d3c7f chore(deps): update docker.io/library/node docker tag to v24
All checks were successful
Generate README / generate-parameters (push) Successful in 9s
Helm / helm-unittest (push) Successful in 6s
Markdown linter / markdown-lint (push) Successful in 8s
Helm / helm-lint (push) Successful in 16s
Helm / helm-lint (pull_request) Successful in 6s
Helm / helm-unittest (pull_request) Successful in 14s
Markdown linter / markdown-link-checker (push) Successful in 48s
2025-05-27 22:11:34 +00:00
1ebde5500d chore(renovate): merge library/node packages
All checks were successful
Helm / helm-unittest (push) Successful in 6s
Helm / helm-lint (push) Successful in 22s
2025-05-27 22:54:45 +02:00
99ac3e0b6b docs(README): be compliant with markdownlint MD044
All checks were successful
Generate README / generate-parameters (push) Successful in 9s
Helm / helm-unittest (push) Successful in 16s
Markdown linter / markdown-link-checker (push) Successful in 11s
Helm / helm-lint (push) Successful in 22s
Markdown linter / markdown-lint (push) Successful in 28s
2025-05-27 22:21:43 +02:00
3cea56ef58 docs(README): remove drone badge
Some checks failed
Generate README / generate-parameters (push) Successful in 14s
Helm / helm-unittest (push) Successful in 14s
Markdown linter / markdown-link-checker (push) Successful in 10s
Helm / helm-lint (push) Successful in 25s
Markdown linter / markdown-lint (push) Failing after 39s
2025-05-27 16:53:40 +02:00
608ded18c7 chore(deps): update container images
All checks were successful
Helm / helm-unittest (pull_request) Successful in 7s
Helm / helm-lint (pull_request) Successful in 14s
Helm / helm-unittest (push) Successful in 14s
Helm / helm-lint (push) Successful in 25s
2025-05-21 19:12:45 +00:00
d62cc4beae chore(deps): update docker.io/volkerraschek/helm docker tag to v3.18.0
All checks were successful
Helm / helm-unittest (pull_request) Successful in 6s
Helm / helm-lint (pull_request) Successful in 25s
Helm / helm-lint (push) Successful in 6s
Helm / helm-unittest (push) Successful in 16s
2025-05-21 16:11:50 +00:00
89ef3c929e chore(deps): update dependency markdownlint-cli to ^0.45.0
All checks were successful
Helm / helm-lint (pull_request) Successful in 5s
Helm / helm-unittest (pull_request) Successful in 6s
Helm / helm-lint (push) Successful in 6s
Helm / helm-unittest (push) Successful in 14s
2025-05-18 01:12:53 +00:00
9840520b71 chore(deps): update library/node docker tag to v22.15.1
All checks were successful
Helm / helm-lint (pull_request) Successful in 6s
Helm / helm-unittest (pull_request) Successful in 24s
Helm / helm-lint (push) Successful in 6s
Helm / helm-unittest (push) Successful in 16s
2025-05-15 19:12:56 +00:00
3940ea39c5 chore(deps): update docker.io/library/node docker tag to v23.11.1
All checks were successful
Helm / helm-lint (pull_request) Successful in 6s
Helm / helm-unittest (pull_request) Successful in 17s
Helm / helm-lint (push) Successful in 16s
Helm / helm-unittest (push) Successful in 17s
2025-05-15 16:11:42 +00:00
a6ec076ce6 chore(deps): update volkerraschek/helm docker tag to v3.17.3
All checks were successful
Helm / helm-lint (pull_request) Successful in 15s
Helm / helm-unittest (pull_request) Successful in 19s
Helm / helm-lint (push) Successful in 18s
Helm / helm-unittest (push) Successful in 19s
2025-05-09 16:12:13 +00:00
12970b3820 chore(deps): update docker.io/volkerraschek/helm docker tag to v3.17.3
All checks were successful
Helm / helm-lint (pull_request) Successful in 23s
Helm / helm-unittest (pull_request) Successful in 19s
Helm / helm-lint (push) Successful in 16s
Helm / helm-unittest (push) Successful in 19s
2025-05-09 13:11:15 +00:00
dbd6b83218 chore(deps): update volkerraschek/helm docker tag to v3.17.2
All checks were successful
Helm / helm-lint (pull_request) Successful in 15s
Helm / helm-unittest (pull_request) Successful in 17s
Helm / helm-lint (push) Successful in 14s
Helm / helm-unittest (push) Successful in 19s
2025-05-09 01:11:37 +00:00
e466c50e35 chore(deps): update docker.io/volkerraschek/helm docker tag to v3.17.2
All checks were successful
Helm / helm-lint (pull_request) Successful in 16s
Helm / helm-unittest (pull_request) Successful in 17s
Helm / helm-lint (push) Successful in 18s
Helm / helm-unittest (push) Successful in 17s
2025-05-08 22:13:05 +00:00
19d683d712 style: avoid control operator of toYaml
All checks were successful
Helm / helm-lint (push) Successful in 15s
Helm / helm-unittest (push) Successful in 16s
2025-04-26 22:59:11 +02:00
69f068c406 chore(deps): update library/node docker tag to v22.15.0
All checks were successful
Helm / helm-lint (pull_request) Successful in 19s
Helm / helm-unittest (pull_request) Successful in 17s
Helm / helm-lint (push) Successful in 20s
Helm / helm-unittest (push) Successful in 20s
2025-04-23 16:28:19 +00:00
1edd96e3e1 chore(deps): update docker.io/library/node docker tag to v23.11.0
All checks were successful
Helm / helm-lint (pull_request) Successful in 26s
Helm / helm-unittest (pull_request) Successful in 28s
Helm / helm-lint (push) Successful in 19s
Helm / helm-unittest (push) Successful in 17s
2025-04-01 19:51:43 +00:00
80819f16ef chore(deps): update container images
All checks were successful
Helm / helm-lint (pull_request) Successful in 17s
Helm / helm-unittest (pull_request) Successful in 17s
Helm / helm-lint (push) Successful in 17s
Helm / helm-unittest (push) Successful in 16s
2025-03-30 22:29:59 +00:00
3dcb8173e3 chore(renovate): use configuration preset
All checks were successful
Helm / helm-lint (push) Successful in 16s
Helm / helm-unittest (push) Successful in 18s
2025-03-30 22:53:14 +02:00
5c20ed5f31 chore(deps): lock file maintenance
All checks were successful
Helm / helm-lint (pull_request) Successful in 16s
Helm / helm-unittest (pull_request) Successful in 17s
Helm / helm-lint (push) Successful in 16s
Helm / helm-unittest (push) Successful in 17s
2025-03-17 02:29:51 +00:00
39534a06dc chore(deps): update docker.io/library/node docker tag to v23.10.0
All checks were successful
Helm / helm-lint (pull_request) Successful in 15s
Helm / helm-unittest (pull_request) Successful in 18s
Helm / helm-lint (push) Successful in 16s
Helm / helm-unittest (push) Successful in 22s
2025-03-14 17:27:23 +00:00
34b5e27456 chore(deps): update dependency markdown-link-check to v3.13.7
All checks were successful
Helm / helm-lint (pull_request) Successful in 20s
Helm / helm-unittest (pull_request) Successful in 17s
Helm / helm-lint (push) Successful in 23s
Helm / helm-unittest (push) Successful in 18s
2025-03-11 08:29:54 +00:00
74b6ddf46d chore(deps): lock file maintenance
All checks were successful
Helm / helm-lint (pull_request) Successful in 16s
Helm / helm-unittest (pull_request) Successful in 18s
Helm / helm-lint (push) Successful in 16s
Helm / helm-unittest (push) Successful in 22s
2025-03-10 02:27:48 +00:00
7323ba09bf chore(deps): lock file maintenance
All checks were successful
Helm / helm-lint (pull_request) Successful in 17s
Helm / helm-unittest (pull_request) Successful in 17s
Helm / helm-lint (push) Successful in 15s
Helm / helm-unittest (push) Successful in 16s
2025-03-03 02:28:16 +00:00
3f4c459d43 chore(deps): update dependency volker.raschek/prometheus-postgres-exporter to v0.4.2
All checks were successful
Generate README / generate-parameters (pull_request) Successful in 30s
Helm / helm-lint (pull_request) Successful in 15s
Helm / helm-unittest (pull_request) Successful in 17s
Markdown linter / markdown-link-checker (pull_request) Successful in 33s
Markdown linter / markdown-lint (pull_request) Successful in 28s
Generate README / generate-parameters (push) Successful in 30s
Helm / helm-lint (push) Successful in 16s
Helm / helm-unittest (push) Successful in 18s
Markdown linter / markdown-link-checker (push) Successful in 33s
Markdown linter / markdown-lint (push) Successful in 29s
2025-03-02 14:25:15 +00:00
304139cb6d Merge pull request 'chore(deps): update prometheuscommunity/postgres-exporter docker tag to v0.17.1' (#32) from renovate/prometheuscommunity-postgres-exporter-0.x into master
All checks were successful
Helm / helm-lint (push) Successful in 16s
Helm / helm-unittest (push) Successful in 17s
Release / publish-chart (push) Successful in 18s
Reviewed-on: #32
2025-03-02 12:26:19 +00:00
08ca70c65c chore(deps): update prometheuscommunity/postgres-exporter docker tag to v0.17.1
All checks were successful
Helm / helm-lint (push) Successful in 17s
Helm / helm-unittest (push) Successful in 17s
Helm / helm-lint (pull_request) Successful in 16s
Helm / helm-unittest (pull_request) Successful in 25s
2025-02-27 02:28:17 +00:00
6f954dfdf6 chore(deps): update docker.io/library/node docker tag to v23.9.0
All checks were successful
Helm / helm-lint (pull_request) Successful in 16s
Helm / helm-unittest (pull_request) Successful in 17s
Helm / helm-lint (push) Successful in 16s
Helm / helm-unittest (push) Successful in 17s
2025-02-26 23:27:28 +00:00
b88ae944e6 chore(deps): lock file maintenance
All checks were successful
Helm / helm-lint (pull_request) Successful in 15s
Helm / helm-unittest (pull_request) Successful in 17s
Helm / helm-lint (push) Successful in 19s
Helm / helm-unittest (push) Successful in 28s
2025-02-24 02:30:49 +00:00
29b908f8da chore(deps): update dependency volker.raschek/prometheus-postgres-exporter to v0.4.1
All checks were successful
Helm / helm-lint (pull_request) Successful in 17s
Helm / helm-unittest (pull_request) Successful in 17s
Markdown linter / markdown-link-checker (pull_request) Successful in 33s
Markdown linter / markdown-lint (pull_request) Successful in 29s
Generate README / generate-parameters (pull_request) Successful in 29s
Generate README / generate-parameters (push) Successful in 33s
Helm / helm-lint (push) Successful in 15s
Helm / helm-unittest (push) Successful in 20s
Markdown linter / markdown-link-checker (push) Successful in 33s
Markdown linter / markdown-lint (push) Successful in 29s
2025-02-22 23:26:34 +00:00
76134921b8 Merge pull request 'chore(deps): update prometheuscommunity/postgres-exporter docker tag to v0.17.0' (#29) from renovate/prometheuscommunity-postgres-exporter-0.x into master
All checks were successful
Helm / helm-lint (push) Successful in 15s
Helm / helm-unittest (push) Successful in 17s
Release / publish-chart (push) Successful in 18s
Reviewed-on: #29
2025-02-22 21:49:33 +00:00
7ebfd12593 chore(deps): update prometheuscommunity/postgres-exporter docker tag to v0.17.0
All checks were successful
Helm / helm-lint (push) Successful in 17s
Helm / helm-unittest (push) Successful in 18s
Helm / helm-lint (pull_request) Successful in 15s
Helm / helm-unittest (pull_request) Successful in 20s
2025-02-22 02:25:18 +00:00
74ef3835f4 docs(README): hint of CPU limit lower than 1000m
All checks were successful
Generate README / generate-parameters (push) Successful in 41s
Helm / helm-lint (push) Successful in 17s
Helm / helm-unittest (push) Successful in 18s
Markdown linter / markdown-link-checker (push) Successful in 34s
Markdown linter / markdown-lint (push) Successful in 29s
2025-02-15 18:06:36 +01:00
80c8ff0d3b chore(deps): update docker.io/volkerraschek/helm docker tag to v3.17.1
All checks were successful
Helm / helm-lint (pull_request) Successful in 16s
Helm / helm-unittest (pull_request) Successful in 17s
Helm / helm-lint (push) Successful in 15s
Helm / helm-unittest (push) Successful in 18s
2025-02-14 20:30:39 +00:00
de379ec1ef chore(deps): update dependency volker.raschek/prometheus-postgres-exporter to v0.4.0
All checks were successful
Generate README / generate-parameters (pull_request) Successful in 30s
Helm / helm-lint (pull_request) Successful in 16s
Helm / helm-unittest (pull_request) Successful in 17s
Markdown linter / markdown-link-checker (pull_request) Successful in 32s
Markdown linter / markdown-lint (pull_request) Successful in 31s
Generate README / generate-parameters (push) Successful in 29s
Helm / helm-lint (push) Successful in 16s
Helm / helm-unittest (push) Successful in 19s
Markdown linter / markdown-link-checker (push) Successful in 33s
Markdown linter / markdown-lint (push) Successful in 29s
2025-02-14 17:42:10 +00:00
9275bca045 chore(renovate): automerge lockFileMaintenance
All checks were successful
Helm / helm-lint (push) Successful in 15s
Helm / helm-unittest (push) Successful in 16s
2025-02-14 18:27:22 +01:00
a33f92e63d test(deployment): typo of RollingUpdate
All checks were successful
Helm / helm-lint (push) Successful in 51s
Helm / helm-unittest (push) Successful in 18s
2025-02-14 18:04:58 +01:00
db3fbb9497 doc(README): adapt description of network policy section
Some checks failed
Generate README / generate-parameters (push) Successful in 30s
Helm / helm-lint (push) Successful in 16s
Helm / helm-unittest (push) Failing after 17s
Markdown linter / markdown-link-checker (push) Successful in 32s
Markdown linter / markdown-lint (push) Successful in 28s
Release / publish-chart (push) Successful in 20s
2025-02-14 17:55:34 +01:00
4d349c36ff chore(deps): lock file maintenance
Some checks failed
Helm / helm-lint (push) Successful in 15s
Helm / helm-unittest (push) Failing after 19s
2025-02-14 17:52:58 +01:00
a3038a75c8 feat(networkPolicies): template custom network policies
Some checks failed
Generate README / generate-parameters (push) Successful in 31s
Helm / helm-lint (push) Successful in 16s
Helm / helm-unittest (push) Failing after 18s
Markdown linter / markdown-link-checker (push) Successful in 33s
Markdown linter / markdown-lint (push) Successful in 31s
2025-02-14 17:51:04 +01:00
c497a31ecc chore(deps): update docker.io/library/node docker tag to v23.8.0
All checks were successful
Helm / helm-lint (pull_request) Successful in 17s
Helm / helm-unittest (pull_request) Successful in 18s
Helm / helm-lint (push) Successful in 20s
Helm / helm-unittest (push) Successful in 18s
2025-02-13 23:34:28 +00:00
c7a07eb7d1 chore(renovate): update renovate configuration
All checks were successful
Helm / helm-lint (push) Successful in 16s
Helm / helm-unittest (push) Successful in 17s
2025-02-13 22:48:39 +01:00
4b19f57ac5 chore(deps): update docker.io/library/node docker tag to v23.7.0
All checks were successful
Helm / helm-lint (pull_request) Successful in 16s
Helm / helm-unittest (pull_request) Successful in 20s
Helm / helm-lint (push) Successful in 15s
Helm / helm-unittest (push) Successful in 17s
2025-02-02 23:34:35 +00:00
310cdfaffe chore(deps): update dependency @bitnami/readme-generator-for-helm to v2.7.0
All checks were successful
Helm / helm-lint (pull_request) Successful in 16s
Helm / helm-unittest (pull_request) Successful in 19s
Helm / helm-lint (push) Successful in 16s
Helm / helm-unittest (push) Successful in 17s
2025-02-02 20:34:12 +00:00
8c2665fdc6 chore(renovate): add lockFileMaintenance
All checks were successful
Helm / helm-lint (push) Successful in 17s
Helm / helm-unittest (push) Successful in 18s
2025-02-02 18:51:25 +01:00
bb9d71d233 chore(deps): update dependency markdownlint-cli to ^0.44.0
All checks were successful
Helm / helm-lint (pull_request) Successful in 16s
Helm / helm-unittest (pull_request) Successful in 17s
2025-01-25 02:38:21 +00:00
ded6c55521 chore(deps): update docker.io/library/node docker tag to v23.6.1
All checks were successful
Helm / helm-lint (pull_request) Successful in 16s
Helm / helm-unittest (pull_request) Successful in 19s
2025-01-22 17:41:47 +00:00
b3a9ddd487 chore(deps): update dependency volker.raschek/prometheus-postgres-exporter to v0.3.2
All checks were successful
Generate README / generate-parameters (pull_request) Successful in 29s
Helm / helm-lint (pull_request) Successful in 16s
Helm / helm-unittest (pull_request) Successful in 19s
Markdown linter / markdown-link-checker (pull_request) Successful in 37s
Markdown linter / markdown-lint (pull_request) Successful in 28s
Generate README / generate-parameters (push) Successful in 29s
Helm / helm-lint (push) Successful in 17s
Helm / helm-unittest (push) Successful in 17s
Markdown linter / markdown-link-checker (push) Successful in 32s
Markdown linter / markdown-lint (push) Successful in 27s
2025-01-19 21:17:50 +00:00
f87d417e73 doc(README): typo
All checks were successful
Generate README / generate-parameters (push) Successful in 28s
Helm / helm-lint (push) Successful in 15s
Helm / helm-unittest (push) Successful in 18s
Markdown linter / markdown-link-checker (push) Successful in 33s
Markdown linter / markdown-lint (push) Successful in 28s
2025-01-19 22:06:27 +01:00
fb218484d0 fix(deployment): add missing rolling release strategy
All checks were successful
Generate README / generate-parameters (push) Successful in 28s
Helm / helm-lint (push) Successful in 16s
Helm / helm-unittest (push) Successful in 18s
Markdown linter / markdown-link-checker (push) Successful in 30s
Markdown linter / markdown-lint (push) Successful in 26s
Release / publish-chart (push) Successful in 20s
2025-01-19 21:45:16 +01:00
b29f79370c doc(values): add missing dot
All checks were successful
Generate README / generate-parameters (push) Successful in 42s
Helm / helm-lint (push) Successful in 18s
Helm / helm-unittest (push) Successful in 19s
2025-01-19 21:39:56 +01:00
814dd01995 fix(ci): run on all branches
All checks were successful
Helm / helm-lint (push) Successful in 27s
Helm / helm-unittest (push) Successful in 17s
2025-01-19 21:22:54 +01:00
75292a54ca Merge pull request 'chore(deps): update docker.io/library/node docker tag to v23' (#17) from renovate/docker.io-library-node-23.x into master
Reviewed-on: #17
2025-01-19 15:04:34 +00:00
744e0141e4 chore(deps): update docker.io/library/node docker tag to v23
All checks were successful
Helm / helm-lint (pull_request) Successful in 15s
Helm / helm-unittest (pull_request) Successful in 18s
2025-01-16 02:32:52 +00:00
cc61720a11 chore(deps): update dependency volker.raschek/prometheus-postgres-exporter to v0.3.1
All checks were successful
Generate README / generate-parameters (pull_request) Successful in 45s
Helm / helm-lint (pull_request) Successful in 17s
Helm / helm-unittest (pull_request) Successful in 17s
Markdown linter / markdown-link-checker (pull_request) Successful in 33s
Markdown linter / markdown-lint (pull_request) Successful in 28s
2025-01-15 23:33:05 +00:00
90d48f8450 fix(renovate): adapt configuration to update README 2025-01-15 22:09:05 +01:00
ad69f02f8f fix(deployment): set resourceFieldRef.divisor
All checks were successful
Release / publish-chart (push) Successful in 28s
2025-01-15 21:13:30 +01:00
3ea3f94429 chore(deps): update docker.io/library/node docker tag to v22.13.0
All checks were successful
Helm / helm-lint (pull_request) Successful in 22s
Helm / helm-unittest (pull_request) Successful in 19s
Release / publish-chart (push) Successful in 21s
2025-01-14 23:38:20 +00:00
11c58d99fa chore(deps): update docker.io/volkerraschek/helm docker tag to v3.16.4
All checks were successful
Helm / helm-lint (pull_request) Successful in 18s
Helm / helm-unittest (pull_request) Successful in 18s
2025-01-14 22:22:29 +00:00
2958540cf7 fix(renovate): add automerge of public container images 2025-01-14 22:36:18 +01:00
b0a16dc214 fix(renovate): remove droneci config 2025-01-14 22:28:19 +01:00
2a04fb1966 fix(deployment): automatically set GOMAXPROCS 2025-01-14 22:26:28 +01:00
fcf64a215d fix(renovate): adapt automerge config 2025-01-12 22:57:59 +01:00
2b6f0dbda4 fix(renovate): adapt configuration 2025-01-12 18:13:25 +01:00
93884a4f51 chore(ci): install npm 2025-01-12 16:55:02 +01:00
42ca0a7370 chore(ci): typo in vi variable
All checks were successful
Release / publish-chart (push) Successful in 17s
2025-01-12 16:43:50 +01:00
a4875f9488 chore(ci): replace drone-ci with act
Some checks failed
Release / publish-chart (push) Failing after 14s
2025-01-12 16:40:07 +01:00
a976273cbc fix(drone): disable release pipeline
All checks were successful
continuous-integration/drone/push Build is passing
2025-01-12 15:27:12 +01:00
5646ebfa8c chore(deps): update docker.io/library/node docker tag to v23.6.0
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2025-01-08 02:22:25 +00:00
4a4650cdc2 fix(Makefile): remove markdownlink-check target
All checks were successful
continuous-integration/drone/push Build is passing
2025-01-04 22:28:02 +01:00
b73455b657 doc(values): add affinity example
All checks were successful
continuous-integration/drone/tag Build is passing
continuous-integration/drone/push Build is passing
2025-01-04 21:54:50 +01:00
79062bc1c3 chore(deps): update docker.io/library/node docker tag to v23.5.0
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-12-20 17:23:19 +00:00
3b0a815203 chore(deps): update git.cryptic.systems/volker.raschek/helm docker tag to v3.16.4
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-12-17 11:27:45 +00:00
ffa8271684 chore(deps): update docker.io/library/node docker tag to v23.4.0
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-12-10 20:23:17 +00:00
f59f6aa94d doc(README): update parameters
All checks were successful
continuous-integration/drone/tag Build is passing
continuous-integration/drone/push Build is passing
2024-12-06 23:58:57 +01:00
ce4065bda8 fix(deployment): template affinity
Some checks failed
continuous-integration/drone/tag Build is passing
continuous-integration/drone/push Build is failing
2024-12-06 23:57:09 +01:00
1581617daf fix(deployment): number of replicas 2024-12-06 23:45:36 +01:00
a3e4c0c0e7 core(renovate): use packageNameTemplate
All checks were successful
continuous-integration/drone/push Build is passing
2024-12-05 23:24:59 +01:00
2e8bc16f1e core(renovate): update regexp
All checks were successful
continuous-integration/drone/push Build is passing
2024-12-05 23:18:47 +01:00
a07c602c44 core(renocate): use gitea-tags
All checks were successful
continuous-integration/drone/push Build is passing
2024-12-05 22:36:21 +01:00
b96736bc69 core(renovate): use lookupNameTemplate
All checks were successful
continuous-integration/drone/push Build is passing
2024-12-05 22:31:53 +01:00
4cd6988b38 core(renovate): update config
All checks were successful
continuous-integration/drone/push Build is passing
2024-12-05 22:19:07 +01:00
b5fc1b7575 doc(values): remove obsolete line
All checks were successful
continuous-integration/drone/push Build is passing
2024-12-03 09:48:30 +01:00
316b9b236b doc(README): apply proper names
All checks were successful
continuous-integration/drone/push Build is passing
2024-12-03 09:41:52 +01:00
5bf8a132eb chore(ci): execute markdown-link-check as npm module in single step
Some checks failed
continuous-integration/drone/push Build is failing
2024-12-03 09:37:55 +01:00
489c616e9a chore(ci): execute markdown-link-check as npm module
Some checks failed
continuous-integration/drone/push Build is failing
2024-12-03 09:34:39 +01:00
631bd72480 chore(ci): add markdown-link-check
Some checks failed
continuous-integration/drone/push Build is failing
2024-12-03 09:23:44 +01:00
33cf9e8fc0 chore(markdown-link-check): adapt FQIN
All checks were successful
continuous-integration/drone/push Build is passing
2024-12-03 09:21:10 +01:00
e462e5a002 doc(README): Avoid deploying on same node / bare metal host
All checks were successful
continuous-integration/drone/push Build is passing
2024-12-03 09:18:14 +01:00
76ec5a66ff chore(deps): update git.cryptic.systems/volker.raschek/helm docker tag to v3.16.3
All checks were successful
continuous-integration/drone/push Build is passing
2024-12-02 12:59:54 +00:00
686e43668c core(markdownlint): add proper name
All checks were successful
continuous-integration/drone/push Build is passing
2024-12-02 13:56:04 +01:00
7ce70de51c doc(README): deploy Grafana dashboard
Some checks failed
continuous-integration/drone/push Build is failing
2024-12-02 13:54:02 +01:00
3434c5a737 fix(dashboards): rename postgresExporter.yaml to .json
All checks were successful
continuous-integration/drone/tag Build is passing
continuous-integration/drone/push Build is passing
2024-12-02 13:33:06 +01:00
1e9aeb802d feat(grafana): support dashboard deployment
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
2024-12-02 13:10:15 +01:00
2e9eae9888 feat(values.schema): init
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
2024-11-27 18:46:35 +01:00
0dcea5cfc4 core(Makefile): remove deploy to chart server
All checks were successful
continuous-integration/drone/push Build is passing
2024-11-27 18:35:52 +01:00
e38c4fbdfe doc(CONTRIBUTING): init 2024-11-27 18:35:37 +01:00
0a4d677938 fix(helmignore): extend ignore list
All checks were successful
continuous-integration/drone/push Build is passing
2024-11-27 18:03:06 +01:00
171d9a695e chore(deps): update dependency markdownlint-cli to ^0.43.0
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-11-27 11:26:12 +00:00
853c65a8ef Merge pull request 'chore(deps): update docker.io/library/node docker tag to v23' (#7) from renovate/docker.io-library-node-23.x into master
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #7
2024-11-27 10:02:29 +00:00
c93c4dd4eb chore(deps): update docker.io/library/node docker tag to v23
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-11-26 23:25:34 +00:00
4105bb9e0f doc(README): add badge of artifacthub.com
All checks were successful
continuous-integration/drone/push Build is passing
2024-11-26 22:44:58 +01:00
7ea826a2a1 fix(prometheusRule): use the fullname as group name
All checks were successful
continuous-integration/drone/tag Build is passing
continuous-integration/drone/push Build is passing
2024-11-26 22:30:48 +01:00
aa8c279fe0 doc(README): update link of the exporterConfig.yaml documentation
Some checks failed
continuous-integration/drone/push Build is failing
2024-11-26 22:19:52 +01:00
dfd4c1f991 doc(README): update introduction
All checks were successful
continuous-integration/drone/push Build is passing
2024-11-26 22:14:27 +01:00
d6c2e4f992 doc(README): wrong order of helm install arguments
All checks were successful
continuous-integration/drone/push Build is passing
2024-11-26 22:10:00 +01:00
ae7652a335 doc(README): update default value of enableHttp2
All checks were successful
continuous-integration/drone/push Build is passing
2024-11-26 22:03:07 +01:00
16cfa36fda fix(podMonitor,serviceMonitor): enable http2 by default
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone/tag Build is passing
2024-11-26 21:49:49 +01:00
94fbc5e38f fix(deployment): concat lists correctly
Some checks failed
continuous-integration/drone/push Build is failing
continuous-integration/drone/tag Build is passing
2024-11-26 21:01:45 +01:00
dcc7bae921 fix(secret): adapt of the web config secret
Some checks failed
continuous-integration/drone/tag Build is passing
continuous-integration/drone/push Build is failing
2024-11-26 20:39:41 +01:00
503c622df5 fix(deployment): adapt projected volume spec 2024-11-26 20:35:32 +01:00
bf9bd4853f fix(deployment): use correct webconfig filename
Some checks failed
continuous-integration/drone/tag Build is passing
continuous-integration/drone/push Build is failing
2024-11-26 20:24:58 +01:00
80a8e8096d fix(pod,podMonitor,service): avoid error of immutable labels
Some checks failed
continuous-integration/drone/tag Build is passing
continuous-integration/drone/push Build is failing
2024-11-26 20:13:53 +01:00
79b61b0035 core(renovate): update configuration
Some checks failed
continuous-integration/drone/push Build is failing
2024-11-26 20:06:18 +01:00
d33b17b973 Merge pull request 'chore(deps): update prometheus-postgres-exporter docker tag to v0.16.0' (#5) from renovate/prometheus-postgres-exporter-0.x into master
Some checks failed
continuous-integration/drone/push Build is failing
Reviewed-on: #5
2024-11-26 19:01:45 +00:00
a0d241c90c doc(README): adapt bookmark
Some checks failed
continuous-integration/drone/push Build is failing
2024-11-26 20:00:46 +01:00
1d061fe95f fix(serviceMonitor): bind the port always to the port of the service
Some checks failed
continuous-integration/drone/tag Build is passing
continuous-integration/drone/push Build is failing
2024-11-26 19:59:11 +01:00
bb4a5d48b4 test(deployment): topologySpreadConstraints
All checks were successful
continuous-integration/drone/push Build is passing
2024-11-26 19:55:26 +01:00
1f6550d169 test(deployment): tolerations 2024-11-26 19:55:26 +01:00
a01c7d8c45 test(deployment): terminationGracePeriodSeconds 2024-11-26 19:55:26 +01:00
2dd99e8b13 fix(deployment): restartPolicy 2024-11-26 19:55:26 +01:00
4945cd1c2e test(deployment): imagePullSecrets 2024-11-26 19:55:26 +01:00
ed10c5362a test(deployment): hostNetwork, hostname, subdomain 2024-11-26 19:55:26 +01:00
70abc21fb4 test(deployment): dnsPolicy 2024-11-26 19:55:26 +01:00
8618b52ef6 test(deployment): dnsConfig 2024-11-26 19:55:26 +01:00
967d36cafb test(deployment): priorityClassName 2024-11-26 19:55:26 +01:00
8f36f688d0 test(deployment): nodeSelector 2024-11-26 19:55:26 +01:00
8d1f6622b8 doc(README): adapt key name of exporterConfig secret 2024-11-26 19:55:26 +01:00
bd04d4a349 fix(values): suppres warning of overwriting table with non-table 2024-11-26 19:55:26 +01:00
3105f2a408 test(deployment): securityContext 2024-11-26 19:55:26 +01:00
3a96e4ac5d test(deployment): resources 2024-11-26 19:55:26 +01:00
abd73d82f2 test(deployment,secrets): volume and volumeMounts 2024-11-26 19:55:26 +01:00
19b5ac5969 test(deployment,secrets): imageRegistry, imageRepository, imagePullPolicy 2024-11-26 19:55:26 +01:00
7b98e68b03 fix(deployment,secrets): deploy always the web-config secret 2024-11-26 19:55:26 +01:00
6c30756f8d fix(deployment): extend arguments 2024-11-26 19:55:26 +01:00
688718008f chore(deps): update prometheus-postgres-exporter docker tag to v0.16.0
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2024-11-26 05:27:13 +00:00
be0e152de8 chore(deps): update docker.io/library/node docker tag to v22.11.0
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-11-26 02:40:29 +00:00
4edf2660de chore(deps): update git.cryptic.systems/volker.raschek/git docker tag to v1.4.0
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-11-25 23:41:05 +00:00
c1a2a098c8 doc(README): adapt warning blockquote
All checks were successful
continuous-integration/drone/push Build is passing
2024-11-25 23:25:03 +01:00
085a68c60c revert(README): adapt warning blockquote
This reverts commit 98fe8fe2a4.
2024-11-25 23:24:04 +01:00
98fe8fe2a4 doc(README): adapt warning blockquote
Some checks failed
continuous-integration/drone/push Build is failing
2024-11-25 23:17:33 +01:00
7d02c5f7b3 doc(README): adapt warning blockquote
All checks were successful
continuous-integration/drone/push Build is passing
2024-11-25 23:14:39 +01:00
cbdf696a4e chore(deps): update git.cryptic.systems/volker.raschek/markdownlint docker tag to v0.42.0
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-11-25 20:26:07 +00:00
42af0f9739 fix(serviceAccount): remove top level dict .spec
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
2024-11-25 19:35:46 +01:00
5c0f2fb310 core(chart): add further chart labels for search engine
All checks were successful
continuous-integration/drone/push Build is passing
2024-11-25 19:08:36 +01:00
c211bd7a61 fix: rename chart repository
Some checks failed
continuous-integration/drone/tag Build is passing
continuous-integration/drone/push Build is failing
2024-11-25 19:01:37 +01:00
36 changed files with 7393 additions and 594 deletions

View File

@ -1,208 +0,0 @@
---
kind: pipeline
type: kubernetes
name: Linters
clone:
disable: true
platform:
os: linux
arch: amd64
steps:
- name: clone repository
image: git.cryptic.systems/volker.raschek/git:1.3.1
- name: helm lint
commands:
- helm lint
image: git.cryptic.systems/volker.raschek/helm:3.16.1
resources:
limits:
cpu: 150
memory: 150M
- name: markdown lint
commands:
- markdownlint *.md
image: git.cryptic.systems/volker.raschek/markdownlint:0.41.0
resources:
limits:
cpu: 150
memory: 150M
- name: email-notification
environment:
SMTP_FROM_ADDRESS:
from_secret: smtp_from_address
SMTP_FROM_NAME:
from_secret: smtp_from_name
SMTP_HOST:
from_secret: smtp_host
SMTP_USERNAME:
from_secret: smtp_username
SMTP_PASSWORD:
from_secret: smtp_password
image: git.cryptic.systems/volker.raschek/drone-email:0.1.5
resources:
limits:
cpu: 150
memory: 150M
when:
status:
- changed
- failure
trigger:
event:
exclude:
- tag
---
kind: pipeline
type: kubernetes
name: Unit tests
clone:
disable: true
platform:
os: linux
arch: amd64
steps:
- name: clone repository
image: git.cryptic.systems/volker.raschek/git:1.3.1
- name: helm unittest
commands:
- helm unittest --strict --file 'unittests/**/*.yaml' ./
image: git.cryptic.systems/volker.raschek/helm:3.16.1
resources:
limits:
cpu: 150
memory: 150M
- name: email-notification
environment:
SMTP_FROM_ADDRESS:
from_secret: smtp_from_address
SMTP_FROM_NAME:
from_secret: smtp_from_name
SMTP_HOST:
from_secret: smtp_host
SMTP_USERNAME:
from_secret: smtp_username
SMTP_PASSWORD:
from_secret: smtp_password
image: git.cryptic.systems/volker.raschek/drone-email:0.1.5
resources:
limits:
cpu: 150
memory: 150M
when:
status:
- changed
- failure
trigger:
event:
exclude:
- tag
---
kind: pipeline
type: kubernetes
name: Generate README.md
clone:
disable: true
platform:
os: linux
arch: amd64
steps:
- name: clone repository
image: git.cryptic.systems/volker.raschek/git:1.3.1
- name: generate README
commands:
- npm install
- npm run readme:parameters
- npm run readme:lint
image: docker.io/library/node:22.9.0-alpine
resources:
limits:
cpu: 150
memory: 150M
- name: detect diff
commands:
- git diff --exit-code --name-only README.md
image: git.cryptic.systems/volker.raschek/git:1.3.1
- name: email-notification
environment:
SMTP_FROM_ADDRESS:
from_secret: smtp_from_address
SMTP_FROM_NAME:
from_secret: smtp_from_name
SMTP_HOST:
from_secret: smtp_host
SMTP_USERNAME:
from_secret: smtp_username
SMTP_PASSWORD:
from_secret: smtp_password
image: git.cryptic.systems/volker.raschek/drone-email:0.1.5
resources:
limits:
cpu: 150
memory: 150M
when:
status:
- changed
- failure
trigger:
event:
exclude:
- tag
---
kind: pipeline
type: kubernetes
name: Release
clone:
disable: true
platform:
os: linux
steps:
- name: clone repository
image: git.cryptic.systems/volker.raschek/git:1.3.1
- name: release-helm-chart
commands:
- helm repo add prometheus-exporters https://charts.cryptic.systems/prometheus-exporter
- helm package --version ${DRONE_TAG} .
- helm cm-push ${DRONE_REPO_NAME}-${DRONE_TAG}.tgz prometheus-exporters
environment:
HELM_REPO_PASSWORD:
from_secret: helm_repo_password
HELM_REPO_USERNAME:
from_secret: helm_repo_username
image: git.cryptic.systems/volker.raschek/helm:3.16.1
resources:
limits:
cpu: 150
memory: 150M
trigger:
event:
- tag
repo:
- volker.raschek/prometheus-postgres-exporter

View File

@ -0,0 +1,32 @@
name: Generate README
on:
pull_request:
paths: [ "README.md", "values.yaml" ]
types: [ "opened", "reopened", "synchronize" ]
push:
branches:
- '**'
paths: [ "README.md", "values.yaml" ]
tags-ignore:
- '**'
workflow_dispatch: {}
jobs:
generate-parameters:
container:
image: docker.io/library/node:24.1.0-alpine
runs-on:
- ubuntu-latest
steps:
- name: Install tooling
run: |
apk update
apk add git npm
- uses: actions/checkout@v4.2.2
- name: Generate parameter section in README
run: |
npm install
npm run readme:parameters
- name: Compare diff
run: git diff --exit-code --name-only README.md

View File

@ -0,0 +1,42 @@
name: Helm
on:
pull_request:
types: [ "opened", "reopened", "synchronize" ]
push:
branches:
- '**'
tags-ignore:
- '**'
workflow_dispatch: {}
jobs:
helm-lint:
container:
image: docker.io/volkerraschek/helm:3.18.0
runs-on:
- ubuntu-latest
steps:
- name: Install tooling
run: |
apk update
apk add git npm
- uses: actions/checkout@v4.2.2
- name: Lint helm files
run: |
helm lint --values values.yaml .
helm-unittest:
container:
image: docker.io/volkerraschek/helm:3.18.0
runs-on:
- ubuntu-latest
steps:
- name: Install tooling
run: |
apk update
apk add git npm
- uses: actions/checkout@v4.2.2
- name: Unittest
run: |
helm unittest --strict --file 'unittests/**/*.yaml' ./

View File

@ -0,0 +1,46 @@
name: Markdown linter
on:
pull_request:
paths: [ "**/*.md" ]
types: [ "opened", "reopened", "synchronize" ]
push:
branches:
- '**'
paths: [ "**/*.md" ]
tags-ignore:
- '**'
workflow_dispatch: {}
jobs:
markdown-link-checker:
container:
image: docker.io/library/node:24.1.0-alpine
runs-on:
- ubuntu-latest
steps:
- name: Install tooling
run: |
apk update
apk add git npm
- uses: actions/checkout@v4.2.2
- name: Verify links in markdown files
run: |
npm install
npm run readme:link
markdown-lint:
container:
image: docker.io/library/node:24.1.0-alpine
runs-on:
- ubuntu-latest
steps:
- name: Install tooling
run: |
apk update
apk add git
- uses: actions/checkout@v4.2.2
- name: Lint markdown files
run: |
npm install
npm run readme:lint

View File

@ -0,0 +1,46 @@
name: Release
on:
push:
tags:
- "**"
jobs:
publish-chart:
container:
image: docker.io/volkerraschek/helm:3.18.0
runs-on: ubuntu-latest
steps:
- name: Install tooling
run: |
apk update
apk add git npm
- uses: actions/checkout@v4
- name: Package chart
env:
HELM_REPO_NAME: upload
CHARTMUSEUM_PASSWORD: ${{ secrets.CHARTMUSEUM_PASSWORD }}
CHARTMUSEUM_REPOSITORY: ${{ vars.CHARTMUSEUM_REPOSITORY }}
CHARTMUSEUM_USERNAME: ${{ secrets.CHARTMUSEUM_USERNAME }}
CHARTMUSEUM_HOSTNAME: ${{ vars.CHARTMUSEUM_HOSTNAME }}
GITEA_PACKAGE_REGISTRY_TOKEN: ${{ secrets.GIT_CRYPTIC_SYSTEMS_PACKAGE_REGISTRY_TOKEN }}
GITEA_SERVER_URL: ${{ github.server_url }}
run: |
PACKAGE_VERSION=${GITHUB_REF#refs/tags/}
REPOSITORY_NAME=$(echo ${GITHUB_REPOSITORY} | cut -d '/' -f 2)
REPOSITORY_OWNER=$(echo ${GITHUB_REPOSITORY} | cut -d '/' -f 1)
helm dependency build
helm package --version "${PACKAGE_VERSION}" ./
# chart-museum
helm repo add --username ${CHARTMUSEUM_USERNAME} --password ${CHARTMUSEUM_PASSWORD} chartmuseum https://${CHARTMUSEUM_HOSTNAME}/${CHARTMUSEUM_REPOSITORY}
helm cm-push ${REPOSITORY_NAME}-${PACKAGE_VERSION}.tgz chartmuseum
helm repo remove chartmuseum
# gitea
helm repo add --username ${REPOSITORY_OWNER} --password ${GITEA_PACKAGE_REGISTRY_TOKEN} gitea ${GITEA_SERVER_URL}/api/packages/${REPOSITORY_OWNER}/helm
helm cm-push ${REPOSITORY_NAME}-${PACKAGE_VERSION}.tgz gitea
helm repo remove gitea

View File

@ -26,7 +26,7 @@
.vscode/
# drone
.drone.ya?ml
.drone.yml
# editorconfig
.editorconfig
@ -37,13 +37,24 @@ values2.yaml
# helm packages
*.tgz
.helmignore
unittests
# markdownlint
.markdownlint.yml
.markdownlint.yaml
.markdownlintignore
# maven
target
# npm
.prettierignore
.npmrc
package*
# serviceDescriptor (uctl-cluster)
serviceDescriptor.yaml
# yamllint
.yamllint.yaml
# Others
CONTRIBUTING.md
CODEOWNERS
Makefile
renovate.json

View File

@ -128,16 +128,18 @@ MD044:
# List of proper names
names:
- Git
- Gitea
- GitDevOps
- Gitea
- GitHub
- GitLab
- GitOps
- kube-prometheus-stack
- Memcached
- Oracle
- ORBIS U
- PostgreSQL
- Prometheus
- prometheus-exporter
- SSL
- TLS
# Include code blocks

View File

@ -1 +1,82 @@
# Contribution Guidelines
# Contributing
I am very happy if you would like to provide a pull request 👍
The content of this file describes which requirements contributors should fulfill before submitting a pull request (PR).
1. [Valid Git commits](#valid-git-commits)
## Valid Git commits
### Commit message
The repository is subject to a strict commit message template. This states that there are several types of commits. For
example, `fix`, `chore`, `refac`, `test` or `doc`. All types are described in more detail below.
| type | description |
| ------------------- | ----------------------------------------------------------------- |
| `feat` | New feature. |
| `fix` | Fixes a bug. |
| `refac` | Refactoring production code. |
| `style` | Fixes formatting issues. No production code change. |
| `docs` | Adapt documentation. No production code change. |
| `test` | Adds new or modifies existing tests. No production code change. |
| `chore` | Updating grunt tasks. Is everything which the user does not see. |
Based on these types, commit messaged can then be created. Here are a few examples:
```text
style(README): Wrong indentation
feat(deployment): support restartPolicy
fix(my-app): Add missing volume
docs(CONTRIBUTING): Describe how to commit correctly
```
This type of commit message makes it easier for me as maintainer to keep an overview and does not cause the commits of a
pull request PR to be combined into one commit (squashing).
### Smart commits
Smart commits are excellent when it comes to tracking bugs or issues. In this repository, however, the rebasing of
commits is prohibited, which means that only merge commits are possible. This means that a smart commit message only
needs to be added to the merge commit.
This has the advantage that the maintainer can use the smart commit to find the merge commit and undo the entire history
of a merge without having to select individual commits. The following history illustrates the correct use of smart commits.
```text
* 823edbc7 Volker Raschek (G) | [Close #2] feat(deployment): support additional containers
|\
| * 321aebc3 Volker Raschek (G) | doc(README): generate README with new deployment attributes
| * 8d101dd3 Volker Raschek (G) | test(deployment): Extend unittest of additional containers
| * 6f2abd93 Volker Raschek (G) | fix(deployment): Extend deployment of additional containers
|/
* aa5ebda bob (N) | [Close #1] feat(deployment): support initContainers
```
### Commit signing
Another problem with Git is the chain of trust. Git allows the configuration of any name and e-mail address. An attacker
can impersonate any person and submit pull requests under a false identity. For as Linux Torvalds, the maintainer of the
Linux kernel.
```bash
git config --global user.name 'Linux Torvalds'
git config --global user.email 'torvalds@linux-foundation.org'
```
To avoid this, some Git repositories expect signed commits. In particular, repositories that are subject to direct
delivery to customers. For this reason, the repository is subject to a branch protection rule that only allows signed
commits. *Until* there is *no verified* and *no signed* commit, the pull request is blocked.
The following articles describes how Git can be configured to sign commits. Please keep in mind, that the e-mail
address, which is used as UID of the GPG keyring must also be defined in the profile settings of your GitHub account.
Otherwise will be marked the Git commit as *Unverified*.
1. [Signing Commits](https://docs.github.com/en/authentication/managing-commit-signature-verification/signing-commits)
2. [Tell Git about your signing key](https://docs.github.com/en/authentication/managing-commit-signature-verification/telling-git-about-your-signing-key)
Inspect your Git commit via `git log`. There should be mentioned, that your commit is signed.
Furthermore, the GPG key is unique. **Don't loose your private GPG key**. Backup your private key on a safe device. For
example an external USB drive.

View File

@ -4,14 +4,15 @@ description: Prometheus metric exporter for PostgreSQL
type: application
kubeVersion: ">=1.20.0"
version: "0.1.0"
appVersion: "0.15.0"
appVersion: "0.17.1"
# icon: https://annotations.example.com/icon.png
keywords:
- prometheus
- prometheus exporter
- postgres
- prometheus-exporter
- postgres-postgres-exporter
- postgres-exporter
sources:
- https://github.com/prometheus-community/postgres_exporter

View File

@ -3,43 +3,49 @@ CONTAINER_RUNTIME?=$(shell which podman)
# HELM_IMAGE
HELM_IMAGE_REGISTRY_HOST?=docker.io
HELM_IMAGE_REPOSITORY=volkerraschek/helm
HELM_IMAGE_VERSION?=3.16.1 # renovate: datasource=docker registryUrl=https://docker.io depName=volkerraschek/helm
HELM_IMAGE_REPOSITORY?=volkerraschek/helm
HELM_IMAGE_VERSION?=3.18.0 # renovate: datasource=docker registryUrl=https://docker.io depName=volkerraschek/helm
HELM_IMAGE_FULLY_QUALIFIED=${HELM_IMAGE_REGISTRY_HOST}/${HELM_IMAGE_REPOSITORY}:${HELM_IMAGE_VERSION}
# MARKDOWNLINKCHECKER_IMAGE
MARKDOWNLINKCHECK_IMAGE_REGISTRY_HOST?=ghcr.io
MARKDOWNLINKCHECK_IMAGE_REPOSITORY=tcort/markdown-link-check
MARKDOWNLINKCHECK_IMAGE_VERSION?=3.12.2 # renovate: datasource=docker registryUrl=https://ghcr.io depName=tcort/markdown-link-check
MARKDOWNLINKCHECK_IMAGE_FULLY_QUALIFIED=${MARKDOWNLINT_IMAGE_REGISTRY_HOST}/${MARKDOWNLINT_IMAGE_REPOSITORY}:${MARKDOWNLINT_IMAGE_VERSION}
# NODE_IMAGE
NODE_IMAGE_REGISTRY_HOST?=docker.io
NODE_IMAGE_REPOSITORY=library/node
NODE_IMAGE_VERSION?=22.9.0-alpine # renovate: datasource=docker registryUrl=https://docker.io depName=library/node
NODE_IMAGE_REPOSITORY?=library/node
NODE_IMAGE_VERSION?=24.1.0-alpine # renovate: datasource=docker registryUrl=https://docker.io depName=docker.io/library/node packageName=library/node
NODE_IMAGE_FULLY_QUALIFIED=${NODE_IMAGE_REGISTRY_HOST}/${NODE_IMAGE_REPOSITORY}:${NODE_IMAGE_VERSION}
# CHART_SERVER
CHART_SERVER_HOST?=charts.u.orbis-healthcare.com
CHART_SERVER_NAMESPACE?=orbis-u
CHART_SERVER_REPOSITORY?=qu-seed
CHART_VERSION?=0.1.0
# MISSING DOT
# ==============================================================================
missing-dot:
grep --perl-regexp '## @(param|skip).*[^.]$$' values.yaml
# CONTAINER RUN - PREPARE ENVIRONMENT
# CONTAINER RUN - README
# ==============================================================================
PHONY+=container-run/readme
container-run/readme:
container-run/readme: container-run/readme/link container-run/readme/lint container-run/readme/parameters
container-run/readme/link:
${CONTAINER_RUNTIME} run \
--rm \
--volume $(shell pwd):$(shell pwd) \
--workdir $(shell pwd) \
${NODE_IMAGE_FULLY_QUALIFIED} \
npm install && npm run readme:parameters && npm run readme:lint
npm install && npm run readme:link
container-run/readme/lint:
${CONTAINER_RUNTIME} run \
--rm \
--volume $(shell pwd):$(shell pwd) \
--workdir $(shell pwd) \
${NODE_IMAGE_FULLY_QUALIFIED} \
npm install && npm run readme:lint
container-run/readme/parameters:
${CONTAINER_RUNTIME} run \
--rm \
--volume $(shell pwd):$(shell pwd) \
--workdir $(shell pwd) \
${NODE_IMAGE_FULLY_QUALIFIED} \
npm install && npm run readme:parameters
# CONTAINER RUN - HELM UNITTESTS
# ==============================================================================
@ -67,19 +73,6 @@ container-run/helm-update-dependencies:
${HELM_IMAGE_FULLY_QUALIFIED} \
dependency update
# CONTAINER RUN - DEPLOY2CHART-REPO
# ==============================================================================
container-run/deploy2chart-repo:
${CONTAINER_RUNTIME} run \
--env HELM_REPO_PASSWORD=${CHART_SERVER_PASSWORD} \
--env HELM_REPO_USERNAME=${CHART_SERVER_USERNAME} \
--entrypoint /bin/bash \
--rm \
--volume $(shell pwd):$(shell pwd) \
--workdir $(shell pwd) \
${HELM_IMAGE_FULLY_QUALIFIED} \
-c "helm repo add ${CHART_SERVER_NAMESPACE} http://${CHART_SERVER_HOST}/${CHART_SERVER_NAMESPACE} && helm package --version ${CHART_VERSION} . && helm cm-push ./${CHART_SERVER_REPOSITORY}-${CHART_VERSION}.tgz ${CHART_SERVER_NAMESPACE}"
# CONTAINER RUN - MARKDOWN-LINT
# ==============================================================================
PHONY+=container-run/helm-lint
@ -91,16 +84,6 @@ container-run/helm-lint:
${HELM_IMAGE_FULLY_QUALIFIED} \
lint --values values.yaml .
# CONTAINER RUN - MARKDOWN-LINK-CHECK
# ==============================================================================
PHONY+=container-run/markdown-link-check
container-run/markdown-link-check:
${CONTAINER_RUNTIME} run \
--rm \
--volume $(shell pwd):/work \
${MARKDOWNLINKCHECK_IMAGE_FULLY_QUALIFIED} \
*.md
# PHONY
# ==============================================================================
# Declare the contents of the PHONY variable as phony. We keep that information

260
README.md
View File

@ -1,25 +1,27 @@
# Prometheus PostgreSQL exporter
[![Build Status](https://drone.cryptic.systems/api/badges/volker.raschek/prometheus-postgres-exporter/status.svg)](https://drone.cryptic.systems/volker.raschek/prometheus-postgres-exporter)
[![Artifact Hub](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/prometheus-exporters)](https://artifacthub.io/packages/search?repo=prometheus-exporters)
> [!NOTE]
> This is not the official *community* helm chart of the Prometheus metric exporter for PostgreSQL databases. If you are
> looking for the official helm chart, checkout the GitHub project
> [helm-charts](https://github.com/prometheus-community/helm-charts) of the [Prometheus
> community](https://github.com/prometheus-community).
This helm chart enables the deployment of a Prometheus metrics exporter for PostgreSQL databases and allows the
individual configuration of additional containers/initContainers, mounting of volumes, defining additional environment
variables, apply a user-defined web-config.yaml and much more.
variables, apply a user-defined `webConfig.yaml` and much more.
Chapter [configuration and installation](#helm-configuration-and-installation) describes the basics how to configure helm
and use it to deploy the exporter. It also contains further configuration examples.
Furthermore, this helm chart unit tests to detect regressions and stabilize the deployment. Additionally, this helm
chart is tested for deployment scenarios with ArgoCD.
> ![NOTE]
> This is not the official *community* helm chart of the Prometheus metric exporter for PostgreSQL databases. You can
> find the official community chart [here](https://github.com/prometheus-community/helm-charts).
Furthermore, this helm chart contains unit tests to detect regressions and stabilize the deployment. Additionally, this
helm chart is tested for deployment scenarios with **ArgoCD**.
## Helm: configuration and installation
1. A helm chart repository must be configured, to pull the helm charts from.
2. All available parameters are [here](#parameters) in detail document. The parameters can be defined via the helm
2. All available [parameters](#parameters) are documented in detail below. The parameters can be defined via the helm
`--set` flag or directly as part of a `values.yaml` file. The following example defines the `prometheus-exporter`
repository and use the `--set` flag for a basic deployment.
@ -29,9 +31,9 @@ chart is tested for deployment scenarios with ArgoCD.
> time is not possible.
```bash
helm repo add prometheus-exporter https://charts.cryptic.systems/prometheus-exporter
helm repo add prometheus-exporters https://charts.cryptic.systems/prometheus-exporters
helm repo update
helm install prometheus-exporter/prometheus-postgres-exporter prometheus-postgres-exporter \
helm install prometheus-postgres-exporter prometheus-exporters/prometheus-postgres-exporter \
--set 'config.database.secret.databaseUsername=postgres' \
--set 'config.database.secret.databasePassword=postgres' \
--set 'config.database.secret.databaseConnectionUrl="postgres.example.local:5432/postgres?ssl=disable"' \
@ -45,7 +47,8 @@ version of the chart must be in sync with the `values.yaml`. Newer *minor* versi
versions can break something!
```bash
helm show values prometheus-exporter/prometheus-postgres-exporter --version 0.1.0 > values.yaml
CHART_VERSION=0.4.2
helm show values prometheus-exporters/prometheus-postgres-exporter --version "${CHART_VERSION}" > values.yaml
```
A complete list of available helm chart versions can be displayed via the following command:
@ -61,17 +64,49 @@ for customizations. These can be configured in more detail via `values.yaml`.
The following examples serve as individual configurations and as inspiration for how deployment problems can be solved.
### TLS authentication and encryption
#### Avoid CPU throttling by defining a CPU limit
If the application is deployed with a CPU resource limit, Prometheus may throw a CPU throttling warning for the
application. This has more or less to do with the fact that the application finds the number of CPUs of the host, but
cannot use the available CPU time to perform computing operations.
The application must be informed that despite several CPUs only a part (limit) of the available computing time is
available. As this is a Golang application, this can be implemented using `GOMAXPROCS`. The following example is one way
of defining `GOMAXPROCS` automatically based on the defined CPU limit like `1000m`. Please keep in mind, that the CFS
rate of `100ms` - default on each kubernetes node, is also very important to avoid CPU throttling.
Further information about this topic can be found in one of Kanishk's blog
[posts](https://kanishk.io/posts/cpu-throttling-in-containerized-go-apps/).
> [!NOTE]
> The environment variable `GOMAXPROCS` is set automatically, when a CPU limit is defined. An explicit configuration is
> not anymore required.
>
> Please take care the a CPU limit < `1000m` can also lead to CPU throttling. Please read the linked documentation carefully.
```bash
helm install prometheus-postgres-exporter prometheus-exporters/prometheus-postgres-exporter \
--set 'config.database.secret.databaseUsername=postgres' \
--set 'config.database.secret.databasePassword=postgres' \
--set 'config.database.secret.databaseConnectionUrl="postgres.example.local:5432/postgres?ssl=disable"' \
--set 'prometheus.metrics.enabled=true' \
--set 'prometheus.metrics.serviceMonitor.enabled=true' \
--set 'deployment.postgresExporter.env.name=GOMAXPROCS' \
--set 'deployment.postgresExporter.env.valueFrom.resourceFieldRef.resource=limits.cpu' \
--set 'deployment.postgresExporter.resources.limits.cpu=1000m'
```
#### TLS authentication and encryption
The first example shows how to deploy the metric exporter with TLS encryption. The verification of the custom TLS
certification will be skipped by Prometheus.
> [!WARN]
> A TLS secret with the name `prometheus-postgresql-exporter-http` containing a `ca.crt`, `tls.key` and `tls.crt` is
> already present.
> [!WARNING]
> The secret `prometheus-postgresql-exporter-http` containing the TLS certificate is already present. The keys `ca.crt`,
> `tls.key` and `tls.crt` of the secret can be mounted into the container filesystem for TLS authentication / encryption.
```bash
helm install prometheus-exporter/prometheus-postgres-exporter prometheus-postgres-exporter \
helm install prometheus-postgres-exporter prometheus-exporters/prometheus-postgres-exporter \
--set 'config.database.secret.databaseUsername=postgres' \
--set 'config.database.secret.databasePassword=postgres' \
--set 'config.database.secret.databaseConnectionUrl="postgres.example.local:5432/postgres?ssl=disable"' \
@ -94,7 +129,7 @@ certificate for the metrics exporter - TLS certificate verification can be enabl
replaced:
```diff
helm install prometheus-exporter/prometheus-postgres-exporter prometheus-postgres-exporter \
helm install prometheus-postgres-exporter prometheus-exporters/prometheus-postgres-exporter \
--set 'config.database.secret.databaseUsername=postgres' \
--set 'config.database.secret.databasePassword=postgres' \
--set 'config.database.secret.databaseConnectionUrl="postgres.example.local:5432/postgres?ssl=disable"' \
@ -115,6 +150,116 @@ replaced:
+ --set 'prometheus.metrics.serviceMonitor.tlsConfig.keyFile=/etc/prometheus/tls/tls.key'
```
#### Grafana dashboard
The helm chart includes Grafana dashboards. These can be deployed as a configMap by activating Grafana integration. It
is assumed that the dashboard is consumed by Grafana or a sidecar container itself and that the dashboard is stored in
the Grafana container file system so that it is subsequently available to the user. The
[kube-prometheus-stack](https://artifacthub.io/packages/helm/prometheus-community/kube-prometheus-stack) deployment
makes this possible.
```bash
helm install prometheus-postgres-exporter prometheus-exporters/prometheus-postgres-exporter \
--set 'config.database.secret.databaseUsername=postgres' \
--set 'config.database.secret.databasePassword=postgres' \
--set 'config.database.secret.databaseConnectionUrl="postgres.example.local:5432/postgres?ssl=disable"' \
--set 'grafana.enabled=true'
```
#### Avoid deploying on same node / bare metal host as PostgresDB
As a best practice, avoid running the postgres-exporter on the same node / bare-metal host as the PostgresDB. This is
because if the postgres-exporter is running on the same node and this node fails, Prometheus can send an alert about the
failure of the node or that the postgres-exporter cannot be reached. However, it is not possible to react based on the
metrics that the postgres-exporter explicitly provides. Depending on the configuration of alerts, this may mean that the
corresponding notifications are not sent to the right person or group of people.
The following example prevent the postgres-exporter from running on nodes with a PostgresDB. The PostgresDB nodes has an
additional label `database=postgres`. The configuration is carried out in `values.yaml`.
```yaml
deployment:
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
preference:
matchExpressions:
- key: database
operator: NotIn
values:
- postgres
```
### Network policies
Network policies can only take effect, when the used CNI plugin support network policies. The chart supports no custom
network policy implementation of CNI plugins. It's support only the official API resource of `networking.k8s.io/v1`.
The object networkPolicies can contains multiple networkPolicy definitions. There is currently only one example
predefined - it's named `default`. Further networkPolicy rules can easy be added by defining additional objects. For example:
> [!NOTE]
> The structure of each custom network policy must be equal like that of default. For this reason don't forget to define
> `annotations`, `labels` and the other properties as well.
```yaml
networkPolicies:
enabled: false
default: {}
my-custom-network-policy: {}
```
The example below is an excerpt of the `values.yaml` file. The network policy `default` contains ingress rules to allow
incoming traffic from Prometheus. Additionally two egress rules are defined, to allow the application outgoing access to
the internal running DNS server `core-dns` and the external running postgres database listen on `10.14.243.12`.
> [!IMPORTANT]
> Please keep in mind, that the namespace and pod selector labels can be different from environment to environment. For
> this reason, there is are not default network policy rules defined.
```yaml
networkPolicies:
enabled: true
default:
enabled: true
annotations: {}
labels: {}
policyTypes:
- Egress
- Ingress
egress:
- to:
- ipBlock:
cidr: 10.14.243.12/32
ports:
- port: 5432
protocol: TCP
- to:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: kube-system
podSelector:
matchLabels:
k8s-app: kube-dns
ports:
- port: 53
protocol: TCP
- port: 53
protocol: UDP
ingress:
- from:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: monitoring
podSelector:
matchLabels:
app.kubernetes.io/name: prometheus
ports:
- port: http
protocol: TCP
```
## Parameters
### Global
@ -126,32 +271,32 @@ replaced:
### Configuration
| Name | Description | Value |
| ------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------- |
| `config.database.existingSecret.enabled` | Mount an existing secret containing the application specific `DATA_SOURCE_` prefixed environment variables. | `false` |
| `config.database.existingSecret.secretName` | Name of the existing secret containing the application specific `DATA_SOURCE_` prefixed environment variables. | `""` |
| `config.database.secret.annotations` | Additional annotations of the secret containing the database credentials. | `{}` |
| `config.database.secret.labels` | Additional labels of the secret containing the database credentials. | `{}` |
| `config.database.secret.databaseUsername` | Database username. Will be defined as env `DATA_SOURCE_USER` as part of a secret. | `""` |
| `config.database.secret.databasePassword` | Database password. Will be defined as env `DATA_SOURCE_PASS` as part of a secret. | `""` |
| `config.database.secret.databaseConnectionUrl` | Complex database connection URL. Will be defined as env `DATA_SOURCE_URI` as part of a secret. | `""` |
| `config.exporterConfig.existingSecret.enabled` | Mount an existing secret containing the key `exporter_config.yaml`. | `false` |
| `config.exporterConfig.existingSecret.secretName` | Name of the existing secret containing the key `exporter_config.yaml`. | `""` |
| `config.exporterConfig.secret.annotations` | Additional annotations of the secret containing the `exporterConfig.yaml`. | `{}` |
| `config.exporterConfig.secret.labels` | Additional labels of the secret containing the `exporterConfig.yaml`. | `{}` |
| `config.exporterConfig.secret.exporterConfig` | Content of the `exporterConfig.yaml`. Further information can be found [here](https://prometheus.io/docs/prometheus/latest/configuration/https/). | `{}` |
| `config.webConfig.existingSecret.enabled` | Mount an existing secret containing the key `webConfig.yaml`. | `false` |
| `config.webConfig.existingSecret.secretName` | Name of the existing secret containing the key `webConfig.yaml`. | `""` |
| `config.webConfig.secret.annotations` | Additional annotations of the secret containing the `webConfig.yaml`. | `{}` |
| `config.webConfig.secret.labels` | Additional labels of the secret containing the `webConfig.yaml`. | `{}` |
| `config.webConfig.secret.webConfig` | Content of the `webConfig.yaml`. Further information can be found [here](https://prometheus.io/docs/prometheus/latest/configuration/https/). | `{}` |
| Name | Description | Value |
| ------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------- |
| `config.database.existingSecret.enabled` | Mount an existing secret containing the application specific `DATA_SOURCE_` prefixed environment variables. | `false` |
| `config.database.existingSecret.secretName` | Name of the existing secret containing the application specific `DATA_SOURCE_` prefixed environment variables. | `""` |
| `config.database.secret.annotations` | Additional annotations of the secret containing the database credentials. | `{}` |
| `config.database.secret.labels` | Additional labels of the secret containing the database credentials. | `{}` |
| `config.database.secret.databaseUsername` | Database username. Will be defined as env `DATA_SOURCE_USER` as part of a secret. | `""` |
| `config.database.secret.databasePassword` | Database password. Will be defined as env `DATA_SOURCE_PASS` as part of a secret. | `""` |
| `config.database.secret.databaseConnectionUrl` | Complex database connection URL. Will be defined as env `DATA_SOURCE_URI` as part of a secret. | `""` |
| `config.exporterConfig.existingSecret.enabled` | Mount an existing secret containing the key `exporterConfig.yaml`. | `false` |
| `config.exporterConfig.existingSecret.secretName` | Name of the existing secret containing the key `exporterConfig.yaml`. | `""` |
| `config.exporterConfig.secret.annotations` | Additional annotations of the secret containing the `exporterConfig.yaml`. | `{}` |
| `config.exporterConfig.secret.labels` | Additional labels of the secret containing the `exporterConfig.yaml`. | `{}` |
| `config.exporterConfig.secret.exporterConfig` | Content of the `exporterConfig.yaml`. Further information can be found in the [README](https://github.com/prometheus-community/postgres_exporter?tab=readme-ov-file#multi-target-support-beta) file of the Postgres exporter binary. | `{}` |
| `config.webConfig.existingSecret.enabled` | Mount an existing secret containing the key `webConfig.yaml`. | `false` |
| `config.webConfig.existingSecret.secretName` | Name of the existing secret containing the key `webConfig.yaml`. | `""` |
| `config.webConfig.secret.annotations` | Additional annotations of the secret containing the `webConfig.yaml`. | `{}` |
| `config.webConfig.secret.labels` | Additional labels of the secret containing the `webConfig.yaml`. | `{}` |
| `config.webConfig.secret.webConfig` | Content of the `webConfig.yaml`. Further [documentation](https://prometheus.io/docs/prometheus/latest/configuration/https/) is available on the official Prometheus website. | `{}` |
### Deployment
| Name | Description | Value |
| -------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | --------------------------------------- |
| `deployment.annotations` | Additional deployment annotations. | `{}` |
| `deployment.labels` | Additional ingress labels. | `{}` |
| `deployment.labels` | Additional deployment labels. | `{}` |
| `deployment.additionalContainers` | List of additional containers. | `[]` |
| `deployment.affinity` | Affinity for the postgres-exporter deployment. | `{}` |
| `deployment.initContainers` | List of additional init containers. | `[]` |
@ -170,25 +315,29 @@ replaced:
| `deployment.postgresExporter.image.pullPolicy` | Image pull policy. | `IfNotPresent` |
| `deployment.postgresExporter.resources` | CPU and memory resources of the pod. | `{}` |
| `deployment.postgresExporter.securityContext` | Security context of the container of the deployment. | `{}` |
| `deployment.postgresExporter.volumeMounts` | Additional volume mounts. | `{}` |
| `deployment.postgresExporter.volumeMounts` | Additional volume mounts. | `[]` |
| `deployment.nodeSelector` | NodeSelector of the postgres-exporter deployment. | `{}` |
| `deployment.priorityClassName` | PriorityClassName of the postgres-exporter deployment. | `""` |
| `deployment.replicaCount` | Number of replicas for the postgres-exporter deployment. | `1` |
| `deployment.replicas` | Number of replicas for the postgres-exporter deployment. | `1` |
| `deployment.restartPolicy` | Restart policy of the postgres-exporter deployment. | `""` |
| `deployment.securityContext` | Security context of the postgres-exporter deployment. | `{}` |
| `deployment.strategy.type` | Strategy type - `Recreate` or `Rollingupdate`. | `Recreate` |
| `deployment.strategy.type` | Strategy type - `Recreate` or `RollingUpdate`. | `RollingUpdate` |
| `deployment.strategy.rollingUpdate.maxSurge` | The maximum number of pods that can be scheduled above the desired number of pods during a rolling update. | `1` |
| `deployment.strategy.rollingUpdate.maxUnavailable` | The maximum number of pods that can be unavailable during a rolling update. | `1` |
| `deployment.terminationGracePeriodSeconds` | How long to wait until forcefully kill the pod. | `60` |
| `deployment.tolerations` | Tolerations of the postgres-exporter deployment. | `[]` |
| `deployment.topologySpreadConstraints` | TopologySpreadConstraints of the postgres-exporter deployment. | `[]` |
| `deployment.volumes` | Additional volumes to mount into the pods of the Prometheus-exporter deployment. | `[]` |
| `deployment.volumes` | Additional volumes to mount into the pods of the prometheus-exporter deployment. | `[]` |
### Grafana
| Name | Description | Value |
| ------------------------------------ | --------------------------------------------------------- | ------- |
| `grafana.enabled` | Enable integration into Grafana. | `false` |
| `grafana.dashboards.businessMetrics` | Enable deployment of Grafana dashboard `businessMetrics`. | `true` |
| Name | Description | Value |
| ------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | ----------- |
| `grafana.enabled` | Enable integration into Grafana. Require the Prometheus operator deployment. | `false` |
| `grafana.dashboardDiscoveryLabels` | Labels that Grafana uses to discover resources. The labels may vary depending on the Grafana deployment. | `undefined` |
| `grafana.dashboards.postgresExporter.enabled` | Enable deployment of Grafana dashboard `postgresExporter`. | `true` |
| `grafana.dashboards.postgresExporter.annotations` | Additional configmap annotations. | `{}` |
| `grafana.dashboards.postgresExporter.labels` | Additional configmap labels. | `{}` |
### Ingress
@ -207,11 +356,17 @@ replaced:
| --------------------- | ---------------------- | ----- |
| `podDisruptionBudget` | Pod disruption budget. | `{}` |
### Network
### NetworkPolicies
| Name | Description | Value |
| ----------------- | ------------------------------------------------------------------------------------------------------------------ | ----- |
| `networkPolicies` | Deploy network policies based on the used container network interface (CNI) implementation - like calico or weave. | `{}` |
| Name | Description | Value |
| ------------------------------------- | ----------------------------------------------------------------------------------------------------- | ------- |
| `networkPolicies.enabled` | Enable network policies in general. | `false` |
| `networkPolicies.default.enabled` | Enable the network policy for accessing the application by default. For example to scape the metrics. | `false` |
| `networkPolicies.default.annotations` | Additional network policy annotations. | `{}` |
| `networkPolicies.default.labels` | Additional network policy labels. | `{}` |
| `networkPolicies.default.policyTypes` | List of policy types. Supported is ingress, egress or ingress and egress. | `[]` |
| `networkPolicies.default.egress` | Concrete egress network policy implementation. | `[]` |
| `networkPolicies.default.ingress` | Concrete ingress network policy implementation. | `[]` |
### Prometheus
@ -220,7 +375,7 @@ replaced:
| `prometheus.metrics.enabled` | Enable of scraping metrics by Prometheus. | `true` |
| `prometheus.metrics.podMonitor.enabled` | Enable creation of a podMonitor. Excludes the existence of a serviceMonitor resource. | `false` |
| `prometheus.metrics.podMonitor.annotations` | Additional podMonitor annotations. | `{}` |
| `prometheus.metrics.podMonitor.enableHttp2` | Enable HTTP2. | `false` |
| `prometheus.metrics.podMonitor.enableHttp2` | Enable HTTP2. | `true` |
| `prometheus.metrics.podMonitor.followRedirects` | FollowRedirects configures whether scrape requests follow HTTP 3xx redirects. | `false` |
| `prometheus.metrics.podMonitor.honorLabels` | Honor labels. | `false` |
| `prometheus.metrics.podMonitor.labels` | Additional podMonitor labels. | `{}` |
@ -233,12 +388,11 @@ replaced:
| `prometheus.metrics.serviceMonitor.enabled` | Enable creation of a serviceMonitor. Excludes the existence of a podMonitor resource. | `false` |
| `prometheus.metrics.serviceMonitor.annotations` | Additional serviceMonitor annotations. | `{}` |
| `prometheus.metrics.serviceMonitor.labels` | Additional serviceMonitor labels. | `{}` |
| `prometheus.metrics.serviceMonitor.enableHttp2` | Enable HTTP2. | `false` |
| `prometheus.metrics.serviceMonitor.enableHttp2` | Enable HTTP2. | `true` |
| `prometheus.metrics.serviceMonitor.followRedirects` | FollowRedirects configures whether scrape requests follow HTTP 3xx redirects. | `false` |
| `prometheus.metrics.serviceMonitor.honorLabels` | Honor labels. | `false` |
| `prometheus.metrics.serviceMonitor.interval` | Interval at which metrics should be scraped. If not specified Prometheus' global scrape interval is used. | `60s` |
| `prometheus.metrics.serviceMonitor.path` | HTTP path for scraping Prometheus metrics. | `/metrics` |
| `prometheus.metrics.serviceMonitor.port` | HTTP port for scraping Prometheus metrics. | `9187` |
| `prometheus.metrics.serviceMonitor.relabelings` | RelabelConfigs to apply to samples before scraping. Prometheus Operator automatically adds relabelings for a few standard Kubernetes fields. | `[]` |
| `prometheus.metrics.serviceMonitor.scrapeTimeout` | Timeout after which the scrape is ended. If not specified, global Prometheus scrape timeout is used. | `30s` |
| `prometheus.metrics.serviceMonitor.scheme` | HTTP scheme to use for scraping. For example `http` or `https`. | `http` |

1996
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{
"name": "qu-seed-chart",
"homepage": "https://github.com/dedalus-cis4u/qu-seed-chart.git",
"name": "prometheus-postgres-exporter",
"homepage": "https://git.cryptic.systems/volker.raschek/prometheus-postgres-exporter.git",
"license": "MIT",
"private": true,
"engineStrict": true,
@ -9,11 +9,13 @@
"npm": ">=8.0.0"
},
"scripts": {
"readme:link": "markdown-link-check *.md",
"readme:lint": "markdownlint *.md -f",
"readme:parameters": "readme-generator -v values.yaml -r README.md"
},
"devDependencies": {
"@bitnami/readme-generator-for-helm": "^2.5.0",
"markdownlint-cli": "^0.41.0"
"markdown-link-check": "^3.13.6",
"markdownlint-cli": "^0.45.0"
}
}

View File

@ -1,9 +1,14 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"assignees": [ "volker.raschek" ],
"extends": [
"local>volker.raschek/renovate-config:default#master",
"local>volker.raschek/renovate-config:container#master",
"local>volker.raschek/renovate-config:actions#master",
"local>volker.raschek/renovate-config:npm#master",
"local>volker.raschek/renovate-config:regexp#master"
],
"customManagers": [
{
"description": "Update container image reference",
"fileMatch": [
"^Chart\\.yaml$"
],
@ -11,26 +16,53 @@
"appVersion: \"(?<currentValue>.*?)\"\\s+"
],
"datasourceTemplate": "docker",
"depNameTemplate": "prometheus-postgres-exporter",
"lookupNameTemplate": "quay.io/prometheuscommunity/postgres-exporter"
}
],
"labels": [ "renovate" ],
"packageRules": [
{
"addLabels": [ "renovate/droneci", "renovate/automerge" ],
"automerge": true,
"matchManagers": "droneci",
"matchUpdateTypes": [ "minor", "patch"]
"depNameTemplate": "prometheuscommunity/postgres-exporter",
"lookupNameTemplate": "quay.io/prometheuscommunity/postgres-exporter",
"versioningTemplate": "semver"
},
{
"addLabels": [ "renovate/prometheus-postgres-exporter", "renovate/automerge" ],
"automerge": true,
"matchPackageNames": [ "prometheus-postgres-exporter" ],
"matchManagers": [ "regex" ],
"matchUpdateTypes": [ "minor", "patch"]
"fileMatch": ["^README\\.md$"],
"matchStrings": [
"VERSION=(?<currentValue>.*)"
],
"depNameTemplate": "volker.raschek/prometheus-postgres-exporter",
"packageNameTemplate": "https://git.cryptic.systems/volker.raschek/prometheus-postgres-exporter",
"datasourceTemplate": "git-tags",
"versioningTemplate": "semver"
}
],
"rebaseLabel": "renovate/rebase",
"rebaseWhen": "behind-base-branch"
"packageRules": [
{
"addLabels": [
"renovate/automerge",
"renovate/container"
],
"automerge": true,
"excludePackagePatterns": [
"prometheuscommunity/postgres-exporter"
],
"matchDatasources": [
"docker"
],
"matchUpdateTypes": [
"minor",
"patch"
]
},
{
"addLabels": [
"renovate/automerge",
"renovate/documentation"
],
"automerge": true,
"matchDepNames": [
"volker.raschek/prometheus-postgres-exporter"
],
"matchUpdateTypes": [
"major",
"minor",
"patch"
]
}
]
}

View File

@ -0,0 +1,20 @@
{{/* vim: set filetype=mustache: */}}
{{/* annotations */}}
{{- define "prometheus-postgres-exporter.configMap.grafanaDashboards.postgresExporter.annotations" -}}
{{ include "prometheus-postgres-exporter.annotations" . }}
{{- if .Values.grafana.dashboards.postgresExporter.annotations }}
{{ toYaml .Values.grafana.dashboards.postgresExporter.annotations }}
{{- end }}
{{- end }}
{{/* labels */}}
{{- define "prometheus-postgres-exporter.configMap.grafanaDashboards.postgresExporter.labels" -}}
{{ include "prometheus-postgres-exporter.labels" . }}
{{- if .Values.grafana.dashboards.postgresExporter.labels }}
{{ toYaml .Values.grafana.dashboards.postgresExporter.labels }}
{{- end }}
{{ toYaml .Values.grafana.dashboardDiscoveryLabels }}
{{- end }}

View File

@ -9,6 +9,17 @@
{{- end }}
{{- end }}
{{/* env */}}
{{- define "prometheus-postgres-exporter.deployment.env" -}}
{{- $env := dict "env" (.Values.deployment.postgresExporter.env | default (list) ) }}
{{- if and (hasKey .Values.deployment.postgresExporter.resources "limits") (hasKey .Values.deployment.postgresExporter.resources.limits "cpu") }}
{{- $env = merge $env (dict "env" (list (dict "name" "GOMAXPROCS" "valueFrom" (dict "resourceFieldRef" (dict "divisor" "1" "resource" "limits.cpu"))))) }}
{{- end }}
{{ toYaml $env }}
{{- end -}}
{{/* envFrom */}}
{{- define "prometheus-postgres-exporter.deployment.envFrom" -}}
@ -52,19 +63,28 @@
{{/* volumeMounts */}}
{{- define "prometheus-postgres-exporter.deployment.volumeMounts" -}}
{{- $volumeMounts := dict "volumeMounts" (.Values.deployment.postgresExporter.volumeMounts | default (list) ) }}
{{- $volumeMounts = merge $volumeMounts (dict "volumeMounts" (list (dict "name" "exporter-config" "mountPath" "/etc/prometheus-postgres-exporter/config.d" ))) }}
{{ toYaml $volumeMounts }}
{{- $volumeMounts := .Values.deployment.postgresExporter.volumeMounts | default list }}
{{- $volumeMounts = concat $volumeMounts (list (dict "name" "config-d" "mountPath" "/etc/prometheus-postgres-exporter/config.d" )) }}
{{ toYaml (dict "volumeMounts" $volumeMounts) }}
{{- end -}}
{{/* volumes */}}
{{- define "prometheus-postgres-exporter.deployment.volumes" -}}
{{- $volumes := dict "volumes" (.Values.deployment.volumes | default (list) ) }}
{{- $secretName := .Values.config.exporterConfig.existingSecret.secretName -}}
{{- $volumes := .Values.deployment.volumes | default list }}
{{- $exporterSecretName := .Values.config.exporterConfig.existingSecret.secretName -}}
{{- if not .Values.config.exporterConfig.existingSecret.enabled }}
{{- $secretName = printf "%s-exporter-config" (include "prometheus-postgres-exporter.fullname" . ) }}
{{- $exporterSecretName = printf "%s-exporter-config" (include "prometheus-postgres-exporter.fullname" . ) }}
{{- end }}
{{- $volumes = merge $volumes (dict "volumes" (list (dict "name" "exporter-config" "secret" (dict "secretName" $secretName)))) }}
{{ toYaml $volumes }}
{{- $webConfigSecretName := .Values.config.webConfig.existingSecret.secretName -}}
{{- if not .Values.config.webConfig.existingSecret.enabled }}
{{- $webConfigSecretName = printf "%s-web-config" (include "prometheus-postgres-exporter.fullname" . ) }}
{{- end }}
{{- $volumes = concat $volumes (list (dict "name" "config-d" "projected" (dict "defaultMode" 444 "sources" (list (dict "secret" (dict "name" $exporterSecretName)) (dict "secret" (dict "name" $webConfigSecretName)))))) }}
{{ toYaml (dict "volumes" $volumes) }}
{{- end -}}

View File

@ -0,0 +1,19 @@
{{/* vim: set filetype=mustache: */}}
{{/* annotations */}}
{{- define "prometheus-postgres-exporter.networkPolicies.annotations" -}}
{{ include "prometheus-postgres-exporter.annotations" .context }}
{{- if .networkPolicy.annotations }}
{{ toYaml .networkPolicy.annotations }}
{{- end }}
{{- end }}
{{/* labels */}}
{{- define "prometheus-postgres-exporter.networkPolicies.labels" -}}
{{ include "prometheus-postgres-exporter.labels" .context }}
{{- if .networkPolicy.labels }}
{{ toYaml .networkPolicy.labels }}
{{- end }}
{{- end }}

View File

@ -4,6 +4,37 @@
{{- define "prometheus-postgres-exporter.pod.annotations" -}}
{{ include "prometheus-postgres-exporter.annotations" . }}
# The following annotations are required to trigger a rolling update. Further information can be found in the official
# documentation of helm:
#
# https://helm.sh/docs/howto/charts_tips_and_tricks/#automatically-roll-deployments
#
{{/* database */}}
{{- if and .Values.config.database.existingSecret.enabled .Values.config.database.existingSecret.secretName }}
{{- $secret := default (dict "data" (dict)) (lookup "v1" "Secret" .Release.Namespace .Values.config.database.existingSecret.secretName ) }}
checksum/secret-database: {{ print $secret.spec | sha256sum }}
{{- else }}
checksum/secret-database: {{ include (print $.Template.BasePath "/prometheus-postgres-exporter/secretDatabase.yaml") . | sha256sum }}
{{- end }}
{{/* exporter config */}}
{{- if and .Values.config.exporterConfig.existingSecret.enabled .Values.config.exporterConfig.existingSecret.secretName }}
{{- $secret := default (dict "data" (dict)) (lookup "v1" "Secret" .Release.Namespace .Values.config.exporterConfig.existingSecret.secretName ) }}
checksum/secret-exporter-config: {{ print $secret.spec | sha256sum }}
{{- else }}
checksum/secret-exporter-config: {{ include (print $.Template.BasePath "/prometheus-postgres-exporter/secretExporterConfig.yaml") . | sha256sum }}
{{- end }}
{{/* web config */}}
{{- if and .Values.config.webConfig.existingSecret.enabled .Values.config.webConfig.existingSecret.secretName }}
{{- $secret := default (dict "data" (dict)) (lookup "v1" "Secret" .Release.Namespace .Values.config.webConfig.existingSecret.secretName ) }}
checksum/secret-web-config: {{ print $secret.spec | sha256sum }}
{{- else }}
checksum/secret-web-config: {{ include (print $.Template.BasePath "/prometheus-postgres-exporter/secretWebConfig.yaml") . | sha256sum }}
{{- end }}
{{- end }}
{{/* labels */}}
@ -13,5 +44,5 @@
{{- end }}
{{- define "prometheus-postgres-exporter.pod.selectorLabels" -}}
{{ include "prometheus-postgres-exporter.pod.labels" . }}
{{ include "prometheus-postgres-exporter.selectorLabels" . }}
{{- end }}

View File

@ -3,7 +3,7 @@ kind: Deployment
metadata:
{{- with (include "prometheus-postgres-exporter.deployment.annotations" . | fromYaml) }}
annotations:
{{- tpl (. | toYaml) $ | nindent 4 }}
{{- tpl (toYaml .) $ | nindent 4 }}
{{- end }}
{{- with (include "prometheus-postgres-exporter.deployment.labels" . | fromYaml) }}
labels:
@ -12,25 +12,34 @@ metadata:
name: {{ include "prometheus-postgres-exporter.fullname" . }}
namespace: {{ .Release.Namespace }}
spec:
replicas: {{ .Values.deployment.replicas }}
selector:
matchLabels:
{{- include "prometheus-postgres-exporter.pod.selectorLabels" . | nindent 6 }}
template:
metadata:
annotations:
{{- include "prometheus-postgres-exporter.pod.annotations" . | nindent 8 }}
labels:
{{- include "prometheus-postgres-exporter.pod.labels" . | nindent 8 }}
spec:
{{- with .Values.deployment.affinity }}
affinity:
{{- toYaml . | nindent 8 }}
{{- end }}
containers:
- name: postgres-exporter
args:
- "--config.file=/etc/prometheus-postgres-exporter/config.d/exporterConfig.yaml"
- "--web.config.file=/etc/prometheus-postgres-exporter/config.d/webConfig.yaml"
- "--web.listen-address=:9187"
{{- range .Values.deployment.postgresExporter.args }}
- {{ . | quote }}
{{- end }}
{{- with .Values.deployment.postgresExporter.env }}
{{- $env := (include "prometheus-postgres-exporter.deployment.env" . | fromYaml) }}
{{- if and (hasKey $env "env") (gt (len $env.env) 0) }}
env:
{{- toYaml . | nindent 8 }}
{{- toYaml $env.env | nindent 8 }}
{{- end }}
{{- $envFrom := (include "prometheus-postgres-exporter.deployment.envFrom" . | fromYaml) }}
{{- if hasKey $envFrom "envFrom" }}
@ -59,7 +68,7 @@ spec:
- name: http
containerPort: 9187
protocol: TCP
{{- with .Values.deployment.containerResources }}
{{- with .Values.deployment.postgresExporter.resources }}
resources:
{{- toYaml . | nindent 10 }}
{{- end }}
@ -80,7 +89,7 @@ spec:
dnsPolicy: {{ .Values.deployment.dnsPolicy }}
{{- end }}
{{- if .Values.deployment.hostname }}
hostname: {{ .Values.batch.dbUpdate.hostname }}
hostname: {{ .Values.deployment.hostname }}
{{- end }}
hostNetwork: {{ .Values.deployment.hostNetwork }}
{{- with .Values.deployment.imagePullSecrets }}
@ -94,7 +103,9 @@ spec:
{{- if .Values.deployment.priorityClassName }}
priorityClassName: {{ .Values.deployment.priorityClassName }}
{{- end }}
{{- if .Values.deployment.restartPolicy }}
restartPolicy: {{ .Values.deployment.restartPolicy }}
{{- end }}
{{- with .Values.deployment.securityContext }}
securityContext:
{{- toYaml . | nindent 8 }}
@ -117,3 +128,7 @@ spec:
volumes:
{{- toYaml $volumes.volumes | nindent 6 }}
{{- end }}
{{- with .Values.deployment.strategy }}
strategy:
{{- toYaml . | nindent 4 }}
{{- end }}

View File

@ -5,7 +5,7 @@ kind: Ingress
metadata:
{{- with (include "prometheus-postgres-exporter.ingress.annotations" . | fromYaml) }}
annotations:
{{- tpl (. | toYaml) $ | nindent 4 }}
{{- tpl (toYaml .) $ | nindent 4 }}
{{- end }}
{{- with (include "prometheus-postgres-exporter.ingress.labels" . | fromYaml) }}
labels:

View File

@ -0,0 +1,36 @@
{{- if .Values.networkPolicies.enabled }}
{{- range $key, $value := .Values.networkPolicies -}}
{{- if and (not (eq $key "enabled")) $value.enabled }}
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
{{- with (include "prometheus-postgres-exporter.networkPolicies.annotations" (dict "networkPolicy" $value "context" $) | fromYaml) }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with (include "prometheus-postgres-exporter.networkPolicies.labels" (dict "networkPolicy" $value "context" $) | fromYaml) }}
labels:
{{- toYaml . | nindent 4 }}
{{- end }}
name: {{ printf "%s-%s" (include "prometheus-postgres-exporter.fullname" $ ) $key }}
namespace: {{ $.Release.Namespace }}
spec:
podSelector:
matchLabels:
{{- include "prometheus-postgres-exporter.pod.selectorLabels" $ | nindent 6 }}
{{- with $value.policyTypes }}
policyTypes:
{{- toYaml . | nindent 2 }}
{{- end }}
{{- with $value.egress }}
egress:
{{- toYaml . | nindent 2 }}
{{- end }}
{{- with $value.ingress }}
ingress:
{{- toYaml . | nindent 2 }}
{{- end }}
{{- end }}
{{- end }}
{{- end }}

View File

@ -16,7 +16,7 @@ metadata:
spec:
{{- with .Values.prometheus.rules }}
groups:
- name: {{ template "prometheus-postgres-exporter.name" $ }}
- name: {{ template "prometheus-postgres-exporter.fullname" $ }}
rules:
{{ toYaml . | nindent 4 }}
{{- end }}

View File

@ -1,4 +1,4 @@
{{- if and (not (.Values.config.webConfig.existingSecret.enabled)) .Values.config.webConfig.secret.webConfig }}
{{- if not .Values.config.webConfig.existingSecret.enabled }}
---
apiVersion: v1
kind: Secret
@ -11,7 +11,7 @@ metadata:
labels:
{{- toYaml . | nindent 4 }}
{{- end }}
name: {{ include "prometheus-postgres-exporter.fullname" . }}-webconfig
name: {{ include "prometheus-postgres-exporter.fullname" . }}-web-config
namespace: {{ .Release.Namespace }}
stringData:
webConfig.yaml: |

View File

@ -13,14 +13,13 @@ metadata:
{{- end }}
name: {{ include "prometheus-postgres-exporter.fullname" . }}
namespace: {{ .Release.Namespace }}
spec:
automountServiceAccountToken: {{ .Values.serviceAccount.new.automountServiceAccountToken }}
{{- with .Values.serviceAccount.new.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with .Values.serviceAccount.new.secrets }}
secrets:
{{- toYaml . | nindent 4 }}
{{- end }}
automountServiceAccountToken: {{ .Values.serviceAccount.new.automountServiceAccountToken }}
{{- with .Values.serviceAccount.new.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with .Values.serviceAccount.new.secrets }}
secrets:
{{- toYaml . | nindent 4 }}
{{- end }}
{{- end }}

View File

@ -25,8 +25,8 @@ spec:
{{- toYaml . | nindent 6 }}
{{- end }}
scrapeTimeout: {{ required "The scrape timeout of the serviceMonitor is not defined!" .Values.prometheus.metrics.serviceMonitor.scrapeTimeout }}
scheme: {{ required "The scheme of the serviceMonitor is not defined!" .Values.prometheus.metrics.serviceMonitor.scheme}}
targetPort: {{ required "The port of the serviceMonitor is not defined!" .Values.prometheus.metrics.serviceMonitor.port }}
scheme: {{ required "The scheme of the serviceMonitor is not defined!" .Values.prometheus.metrics.serviceMonitor.scheme }}
targetPort: {{ required "The port of the service is not defined!" .Values.services.http.port }}
{{- with .Values.prometheus.metrics.serviceMonitor.tlsConfig }}
tlsConfig:
{{- toYaml . | nindent 6 }}

View File

@ -0,0 +1,79 @@
chart:
appVersion: 0.1.0
version: 0.1.0
suite: ConfigMap template (Grafana Dashboard PostgresExporter)
release:
name: prometheus-postgres-exporter-unittest
namespace: testing
templates:
- templates/prometheus-postgres-exporter/configMapGrafanaDashboardPostgresExporter.yaml
tests:
- it: Rendering postgresExporter
asserts:
- hasDocuments:
count: 0
- it: Rendering
set:
grafana.enabled: true
asserts:
- hasDocuments:
count: 1
- containsDocument:
apiVersion: v1
kind: ConfigMap
name: prometheus-postgres-exporter-unittest-grafana-dashboard-postgres-exporter
namespace: testing
- notExists:
path: metadata.annotations
- equal:
path: metadata.labels
value:
app.kubernetes.io/instance: prometheus-postgres-exporter-unittest
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: prometheus-postgres-exporter
app.kubernetes.io/version: 0.1.0
grafana_dashboard: "1"
helm.sh/chart: prometheus-postgres-exporter-0.1.0
- exists:
path: data["postgresExporter.json"]
- it: Test custom annotations and labels
set:
grafana.enabled: true
grafana.dashboards.postgresExporter.annotations:
foo: bar
grafana.dashboards.postgresExporter.labels:
bar: foo
asserts:
- equal:
path: metadata.annotations
value:
foo: bar
- equal:
path: metadata.labels
value:
app.kubernetes.io/instance: prometheus-postgres-exporter-unittest
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: prometheus-postgres-exporter
app.kubernetes.io/version: 0.1.0
grafana_dashboard: "1"
helm.sh/chart: prometheus-postgres-exporter-0.1.0
bar: foo
- it: Test custom grafana discovery labels
set:
grafana.enabled: true
grafana.dashboardDiscoveryLabels:
grafana_dashboard: null
my-custom-discovery-label: my-value
asserts:
- equal:
path: metadata.labels
value:
app.kubernetes.io/instance: prometheus-postgres-exporter-unittest
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: prometheus-postgres-exporter
app.kubernetes.io/version: 0.1.0
my-custom-discovery-label: my-value
helm.sh/chart: prometheus-postgres-exporter-0.1.0

View File

@ -7,18 +7,29 @@ release:
namespace: testing
templates:
- templates/prometheus-postgres-exporter/deployment.yaml
- templates/prometheus-postgres-exporter/secretDatabase.yaml
- templates/prometheus-postgres-exporter/secretExporterConfig.yaml
- templates/prometheus-postgres-exporter/secretWebConfig.yaml
tests:
- it: Rendering default
set:
# Ensure that the secrets and config maps are well configured.
config.database.secret.databaseUsername: "postgres"
config.database.secret.databasePassword: "postgres"
config.database.secret.databaseConnectionUrl: "localhost:5432/postgres?sslmode=disable"
asserts:
- hasDocuments:
count: 1
template: templates/prometheus-postgres-exporter/deployment.yaml
- containsDocument:
apiVersion: apps/v1
kind: Deployment
name: prometheus-postgres-exporter-unittest
namespace: testing
template: templates/prometheus-postgres-exporter/deployment.yaml
- notExists:
path: metadata.annotations
path: metadata.annotations.checksum/secret-database
template: templates/prometheus-postgres-exporter/deployment.yaml
- equal:
path: metadata.labels
value:
@ -27,14 +38,228 @@ tests:
app.kubernetes.io/name: prometheus-postgres-exporter
app.kubernetes.io/version: 0.1.0
helm.sh/chart: prometheus-postgres-exporter-0.1.0
template: templates/prometheus-postgres-exporter/deployment.yaml
- equal:
path: spec.replicas
value: 1
template: templates/prometheus-postgres-exporter/deployment.yaml
- exists:
path: spec.template.metadata.annotations.checksum/secret-database
template: templates/prometheus-postgres-exporter/deployment.yaml
- exists:
path: spec.template.metadata.annotations.checksum/secret-exporter-config
template: templates/prometheus-postgres-exporter/deployment.yaml
- exists:
path: spec.template.metadata.annotations.checksum/secret-web-config
template: templates/prometheus-postgres-exporter/deployment.yaml
- equal:
path: spec.template.metadata.labels
value:
app.kubernetes.io/instance: prometheus-postgres-exporter-unittest
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: prometheus-postgres-exporter
app.kubernetes.io/version: 0.1.0
helm.sh/chart: prometheus-postgres-exporter-0.1.0
template: templates/prometheus-postgres-exporter/deployment.yaml
- notExists:
path: spec.template.spec.affinity
template: templates/prometheus-postgres-exporter/deployment.yaml
- contains:
path: spec.template.spec.containers[0].envFrom
content:
secretRef:
name: prometheus-postgres-exporter-unittest-database-env
template: templates/prometheus-postgres-exporter/deployment.yaml
- equal:
path: spec.template.spec.containers[0].args
value:
- --config.file=/etc/prometheus-postgres-exporter/config.d/exporterConfig.yaml
- --web.config.file=/etc/prometheus-postgres-exporter/config.d/webConfig.yaml
- --web.listen-address=:9187
template: templates/prometheus-postgres-exporter/deployment.yaml
- equal:
path: spec.template.spec.containers[0].volumeMounts
value:
- mountPath: /etc/prometheus-postgres-exporter/config.d
name: config-d
template: templates/prometheus-postgres-exporter/deployment.yaml
- equal:
path: spec.template.spec.volumes
value:
- name: config-d
projected:
defaultMode: 444
sources:
- secret:
name: prometheus-postgres-exporter-unittest-exporter-config
- secret:
name: prometheus-postgres-exporter-unittest-web-config
template: templates/prometheus-postgres-exporter/deployment.yaml
- equal:
path: spec.template.spec.containers[0].image
value: quay.io/prometheuscommunity/postgres-exporter:v0.1.0
template: templates/prometheus-postgres-exporter/deployment.yaml
- equal:
path: spec.template.spec.containers[0].imagePullPolicy
value: IfNotPresent
template: templates/prometheus-postgres-exporter/deployment.yaml
- notExists:
path: spec.template.spec.containers[0].resources
template: templates/prometheus-postgres-exporter/deployment.yaml
- notExists:
path: spec.template.spec.containers[0].securityContext
template: templates/prometheus-postgres-exporter/deployment.yaml
- notExists:
path: spec.template.spec.dnsConfig
template: templates/prometheus-postgres-exporter/deployment.yaml
- notExists:
path: spec.template.spec.dnsPolicy
template: templates/prometheus-postgres-exporter/deployment.yaml
- notExists:
path: spec.template.spec.hostname
template: templates/prometheus-postgres-exporter/deployment.yaml
- equal:
path: spec.template.spec.hostNetwork
value: false
template: templates/prometheus-postgres-exporter/deployment.yaml
- notExists:
path: spec.template.spec.imagePullSecrets
template: templates/prometheus-postgres-exporter/deployment.yaml
- notExists:
path: spec.template.spec.nodeSelector
template: templates/prometheus-postgres-exporter/deployment.yaml
- notExists:
path: spec.template.spec.priorityClassName
template: templates/prometheus-postgres-exporter/deployment.yaml
- notExists:
path: spec.template.spec.restartPolicy
template: templates/prometheus-postgres-exporter/deployment.yaml
- notExists:
path: spec.template.spec.subdomain
template: templates/prometheus-postgres-exporter/deployment.yaml
- equal:
path: spec.template.spec.terminationGracePeriodSeconds
value: 60
template: templates/prometheus-postgres-exporter/deployment.yaml
- notExists:
path: spec.template.spec.tolerations
template: templates/prometheus-postgres-exporter/deployment.yaml
- notExists:
path: spec.template.spec.topologySpreadConstraints
template: templates/prometheus-postgres-exporter/deployment.yaml
- equal:
path: spec.strategy
value:
type: "RollingUpdate"
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
template: templates/prometheus-postgres-exporter/deployment.yaml
- it: Test custom database secret
- it: Test custom replicas
set:
# Ensure that the secrets and config maps are well configured.
config.database.secret.databaseUsername: "postgres"
config.database.secret.databasePassword: "postgres"
config.database.secret.databaseConnectionUrl: "localhost:5432/postgres?sslmode=disable"
# Normal test values
deployment.replicas: 3
asserts:
- equal:
path: spec.replicas
value: 3
template: templates/prometheus-postgres-exporter/deployment.yaml
- it: Test custom affinity
set:
# Ensure that the secrets and config maps are well configured.
config.database.secret.databaseUsername: "postgres"
config.database.secret.databasePassword: "postgres"
config.database.secret.databaseConnectionUrl: "localhost:5432/postgres?sslmode=disable"
# Normal test values
deployment.affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: topology.kubernetes.io/zone
operator: In
values:
- antarctica-east1
- antarctica-west1
asserts:
- equal:
path: spec.template.spec.affinity
value:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: topology.kubernetes.io/zone
operator: In
values:
- antarctica-east1
- antarctica-west1
template: templates/prometheus-postgres-exporter/deployment.yaml
- it: Test additional arguments
set:
# Ensure that the secrets and config maps are well configured.
config.database.secret.databaseUsername: "postgres"
config.database.secret.databasePassword: "postgres"
config.database.secret.databaseConnectionUrl: "localhost:5432/postgres?sslmode=disable"
# Normal test values
deployment.postgresExporter.args:
- "--foo=bar"
- "--bar=foo"
asserts:
- equal:
path: spec.template.spec.containers[0].args
value:
- --config.file=/etc/prometheus-postgres-exporter/config.d/exporterConfig.yaml
- --web.config.file=/etc/prometheus-postgres-exporter/config.d/webConfig.yaml
- --web.listen-address=:9187
- --foo=bar
- --bar=foo
template: templates/prometheus-postgres-exporter/deployment.yaml
- it: Test custom imageRegistry and imageRepository
set:
# Ensure that the secrets and config maps are well configured.
config.database.secret.databaseUsername: "postgres"
config.database.secret.databasePassword: "postgres"
config.database.secret.databaseConnectionUrl: "localhost:5432/postgres?sslmode=disable"
# Normal test values
deployment.postgresExporter.image.registry: registry.example.local
deployment.postgresExporter.image.repository: path/special/prometheus-postgres-exporter
asserts:
- equal:
path: spec.template.spec.containers[0].image
value: registry.example.local/path/special/prometheus-postgres-exporter:v0.1.0
template: templates/prometheus-postgres-exporter/deployment.yaml
- it: Test custom imagePullPolicy
set:
# Ensure that the secrets and config maps are well configured.
config.database.secret.databaseUsername: "postgres"
config.database.secret.databasePassword: "postgres"
config.database.secret.databaseConnectionUrl: "localhost:5432/postgres?sslmode=disable"
# Normal test values
deployment.postgresExporter.image.pullPolicy: Always
asserts:
- equal:
path: spec.template.spec.containers[0].imagePullPolicy
value: Always
template: templates/prometheus-postgres-exporter/deployment.yaml
- it: Test config.database.existingSecret
set:
# Normal test values
config.database.existingSecret.enabled: true
config.database.existingSecret.secretName: custom-database-secret
asserts:
@ -43,3 +268,363 @@ tests:
content:
secretRef:
name: custom-database-secret
template: templates/prometheus-postgres-exporter/deployment.yaml
- it: Test config.exporterConfig.existingSecret
set:
# Ensure that the secrets and config maps are well configured.
config.database.secret.databaseUsername: "postgres"
config.database.secret.databasePassword: "postgres"
config.database.secret.databaseConnectionUrl: "localhost:5432/postgres?sslmode=disable"
# Normal test values
config.exporterConfig.existingSecret.enabled: true
config.exporterConfig.existingSecret.secretName: exporter-config-secret
asserts:
- equal:
path: spec.template.spec.containers[0].volumeMounts
value:
- mountPath: /etc/prometheus-postgres-exporter/config.d
name: config-d
template: templates/prometheus-postgres-exporter/deployment.yaml
- equal:
path: spec.template.spec.volumes
value:
- name: config-d
projected:
defaultMode: 444
sources:
- secret:
name: exporter-config-secret
- secret:
name: prometheus-postgres-exporter-unittest-web-config
template: templates/prometheus-postgres-exporter/deployment.yaml
- it: Test config.webConfig.existingSecret
set:
# Ensure that the secrets and config maps are well configured.
config.database.secret.databaseUsername: "postgres"
config.database.secret.databasePassword: "postgres"
config.database.secret.databaseConnectionUrl: "localhost:5432/postgres?sslmode=disable"
# Normal test values
config.webConfig.existingSecret.enabled: true
config.webConfig.existingSecret.secretName: web-config-secret
asserts:
- equal:
path: spec.template.spec.containers[0].volumeMounts
value:
- mountPath: /etc/prometheus-postgres-exporter/config.d
name: config-d
template: templates/prometheus-postgres-exporter/deployment.yaml
- equal:
path: spec.template.spec.volumes
value:
- name: config-d
projected:
defaultMode: 444
sources:
- secret:
name: prometheus-postgres-exporter-unittest-exporter-config
- secret:
name: web-config-secret
template: templates/prometheus-postgres-exporter/deployment.yaml
- it: Test custom resource limits and requests
set:
# Ensure that the secrets and config maps are well configured.
config.database.secret.databaseUsername: "postgres"
config.database.secret.databasePassword: "postgres"
config.database.secret.databaseConnectionUrl: "localhost:5432/postgres?sslmode=disable"
# Normal test values
deployment.postgresExporter.resources:
limits:
cpu: 100m
memory: 250MB
requests:
cpu: 25m
memory: 100MB
asserts:
- equal:
path: spec.template.spec.containers[0].env
value:
- name: GOMAXPROCS
valueFrom:
resourceFieldRef:
divisor: "1"
resource: limits.cpu
template: templates/prometheus-postgres-exporter/deployment.yaml
- equal:
path: spec.template.spec.containers[0].resources
value:
limits:
cpu: 100m
memory: 250MB
requests:
cpu: 25m
memory: 100MB
template: templates/prometheus-postgres-exporter/deployment.yaml
- it: Test custom securityContext
set:
# Ensure that the secrets and config maps are well configured.
config.database.secret.databaseUsername: "postgres"
config.database.secret.databasePassword: "postgres"
config.database.secret.databaseConnectionUrl: "localhost:5432/postgres?sslmode=disable"
# Normal test values
deployment.postgresExporter.securityContext:
capabilities:
add:
- NET_RAW
drop:
- ALL
privileged: false
readOnlyRootFilesystem: true
runAsNonRoot: true
runAsUser: 1000
asserts:
- equal:
path: spec.template.spec.containers[0].securityContext
value:
capabilities:
add:
- NET_RAW
drop:
- ALL
privileged: false
readOnlyRootFilesystem: true
runAsNonRoot: true
runAsUser: 1000
template: templates/prometheus-postgres-exporter/deployment.yaml
- it: Test dnsConfig
set:
# Ensure that the secrets and config maps are well configured.
config.database.secret.databaseUsername: "postgres"
config.database.secret.databasePassword: "postgres"
config.database.secret.databaseConnectionUrl: "localhost:5432/postgres?sslmode=disable"
# Normal test values
deployment.dnsConfig:
nameservers:
- "8.8.8.8"
- "8.8.4.4"
asserts:
- equal:
path: spec.template.spec.dnsConfig
value:
nameservers:
- "8.8.8.8"
- "8.8.4.4"
template: templates/prometheus-postgres-exporter/deployment.yaml
- it: Test dnsPolicy
set:
# Ensure that the secrets and config maps are well configured.
config.database.secret.databaseUsername: "postgres"
config.database.secret.databasePassword: "postgres"
config.database.secret.databaseConnectionUrl: "localhost:5432/postgres?sslmode=disable"
# Normal test values
deployment.dnsPolicy: ClusterFirst
asserts:
- equal:
path: spec.template.spec.dnsPolicy
value: ClusterFirst
template: templates/prometheus-postgres-exporter/deployment.yaml
- it: Test hostNetwork, hostname, subdomain
set:
# Ensure that the secrets and config maps are well configured.
config.database.secret.databaseUsername: "postgres"
config.database.secret.databasePassword: "postgres"
config.database.secret.databaseConnectionUrl: "localhost:5432/postgres?sslmode=disable"
# Normal test values
deployment.hostNetwork: true
deployment.hostname: pg-exporter
deployment.subdomain: exporters.internal
asserts:
- equal:
path: spec.template.spec.hostNetwork
value: true
template: templates/prometheus-postgres-exporter/deployment.yaml
- equal:
path: spec.template.spec.hostname
value: pg-exporter
template: templates/prometheus-postgres-exporter/deployment.yaml
- equal:
path: spec.template.spec.subdomain
value: exporters.internal
template: templates/prometheus-postgres-exporter/deployment.yaml
- it: Test imagePullSecrets
set:
# Ensure that the secrets and config maps are well configured.
config.database.secret.databaseUsername: "postgres"
config.database.secret.databasePassword: "postgres"
config.database.secret.databaseConnectionUrl: "localhost:5432/postgres?sslmode=disable"
# Normal test values
deployment.imagePullSecrets:
- name: my-pull-secret
- name: my-special-secret
asserts:
- equal:
path: spec.template.spec.imagePullSecrets
value:
- name: my-pull-secret
- name: my-special-secret
template: templates/prometheus-postgres-exporter/deployment.yaml
- it: Test nodeSelector
set:
# Ensure that the secrets and config maps are well configured.
config.database.secret.databaseUsername: "postgres"
config.database.secret.databasePassword: "postgres"
config.database.secret.databaseConnectionUrl: "localhost:5432/postgres?sslmode=disable"
# Normal test values
deployment.nodeSelector:
foo: bar
asserts:
- equal:
path: spec.template.spec.nodeSelector
value:
foo: bar
template: templates/prometheus-postgres-exporter/deployment.yaml
- it: Test priorityClassName
set:
# Ensure that the secrets and config maps are well configured.
config.database.secret.databaseUsername: "postgres"
config.database.secret.databasePassword: "postgres"
config.database.secret.databaseConnectionUrl: "localhost:5432/postgres?sslmode=disable"
# Normal test values
deployment.priorityClassName: my-priority
asserts:
- equal:
path: spec.template.spec.priorityClassName
value: my-priority
template: templates/prometheus-postgres-exporter/deployment.yaml
- it: Test restartPolicy
set:
# Ensure that the secrets and config maps are well configured.
config.database.secret.databaseUsername: "postgres"
config.database.secret.databasePassword: "postgres"
config.database.secret.databaseConnectionUrl: "localhost:5432/postgres?sslmode=disable"
# Normal test values
deployment.restartPolicy: Always
asserts:
- equal:
path: spec.template.spec.restartPolicy
value: Always
template: templates/prometheus-postgres-exporter/deployment.yaml
- it: Test terminationGracePeriodSeconds
set:
# Ensure that the secrets and config maps are well configured.
config.database.secret.databaseUsername: "postgres"
config.database.secret.databasePassword: "postgres"
config.database.secret.databaseConnectionUrl: "localhost:5432/postgres?sslmode=disable"
# Normal test values
deployment.terminationGracePeriodSeconds: 120
asserts:
- equal:
path: spec.template.spec.terminationGracePeriodSeconds
value: 120
template: templates/prometheus-postgres-exporter/deployment.yaml
- it: Test tolerations
set:
# Ensure that the secrets and config maps are well configured.
config.database.secret.databaseUsername: "postgres"
config.database.secret.databasePassword: "postgres"
config.database.secret.databaseConnectionUrl: "localhost:5432/postgres?sslmode=disable"
# Normal test values
deployment.tolerations:
- key: database/type
operator: Equal
value: postgres
effect: NoSchedule
asserts:
- equal:
path: spec.template.spec.tolerations
value:
- key: database/type
operator: Equal
value: postgres
effect: NoSchedule
template: templates/prometheus-postgres-exporter/deployment.yaml
- it: Test topologySpreadConstraints
set:
# Ensure that the secrets and config maps are well configured.
config.database.secret.databaseUsername: "postgres"
config.database.secret.databasePassword: "postgres"
config.database.secret.databaseConnectionUrl: "localhost:5432/postgres?sslmode=disable"
# Normal test values
deployment.topologySpreadConstraints:
- topologyKey: kubernetes.io/hostname
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
app.kubernetes.io/instance: prometheus-postgres-exporter
asserts:
- equal:
path: spec.template.spec.topologySpreadConstraints
value:
- topologyKey: kubernetes.io/hostname
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
app.kubernetes.io/instance: prometheus-postgres-exporter
template: templates/prometheus-postgres-exporter/deployment.yaml
- it: Test additional volumeMounts and volumes
set:
# Ensure that the secrets and config maps are well configured.
config.database.secret.databaseUsername: "postgres"
config.database.secret.databasePassword: "postgres"
config.database.secret.databaseConnectionUrl: "localhost:5432/postgres?sslmode=disable"
# Normal test values
deployment.postgresExporter.volumeMounts:
- name: data
mountPath: /usr/lib/prometheus-postgres-exporter/data
deployment.volumes:
- name: data
hostPath:
path: /usr/lib/prometheus-postgres-exporter/data
asserts:
- equal:
path: spec.template.spec.containers[0].volumeMounts
value:
- name: data
mountPath: /usr/lib/prometheus-postgres-exporter/data
- name: config-d
mountPath: /etc/prometheus-postgres-exporter/config.d
template: templates/prometheus-postgres-exporter/deployment.yaml
- equal:
path: spec.template.spec.volumes
value:
- name: data
hostPath:
path: /usr/lib/prometheus-postgres-exporter/data
- name: config-d
projected:
defaultMode: 444
sources:
- secret:
name: prometheus-postgres-exporter-unittest-exporter-config
- secret:
name: prometheus-postgres-exporter-unittest-web-config
template: templates/prometheus-postgres-exporter/deployment.yaml

View File

@ -0,0 +1,118 @@
chart:
appVersion: 0.1.0
version: 0.1.0
suite: NetworkPolicies template (basic)
release:
name: prometheus-postgres-exporter-unittest
namespace: testing
templates:
- templates/prometheus-postgres-exporter/networkPolicies.yaml
tests:
- it: Skip networkPolicies in general disabled.
set:
networkPolicies.enabled: false
asserts:
- hasDocuments:
count: 0
- it: Skip networkPolicy 'default' when disabled.
set:
networkPolicies.enabled: true
networkPolicies.default.enabled: false
asserts:
- hasDocuments:
count: 0
- it: Loop over networkPolicies
set:
networkPolicies.enabled: true
networkPolicies.default.enabled: false
networkPolicies.nginx.enabled: true
networkPolicies.prometheus.enabled: true
asserts:
- hasDocuments:
count: 2
- it: Template networkPolicy 'default' without policyTypes, egress and ingress configuration
set:
networkPolicies.enabled: true
networkPolicies.default.enabled: true
asserts:
- hasDocuments:
count: 1
- containsDocument:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
name: prometheus-postgres-exporter-unittest-default
namespace: testing
- notExists:
path: metadata.annotations
- equal:
path: metadata.labels
value:
app.kubernetes.io/instance: prometheus-postgres-exporter-unittest
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: prometheus-postgres-exporter
app.kubernetes.io/version: 0.1.0
helm.sh/chart: prometheus-postgres-exporter-0.1.0
- equal:
path: spec.podSelector.matchLabels
value:
app.kubernetes.io/instance: prometheus-postgres-exporter-unittest
app.kubernetes.io/name: prometheus-postgres-exporter
- notExists:
path: spec.policyTypes
- notExists:
path: spec.egress
- notExists:
path: spec.ingress
- it: Template networkPolicy 'default' with policyTypes, egress and ingress configuration
set:
networkPolicies.enabled: true
networkPolicies.default.enabled: true
networkPolicies.default.policyTypes:
- Egress
- Ingress
networkPolicies.default.ingress:
- from:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: khv-production
podSelector:
matchLabels:
app.kubernetes.io/name: prometheus
networkPolicies.default.egress:
- to:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: database
podSelector:
matchLabels:
app.kubernetes.io/name: oracle
asserts:
- equal:
path: spec.policyTypes
value:
- Egress
- Ingress
- equal:
path: spec.egress
value:
- to:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: database
podSelector:
matchLabels:
app.kubernetes.io/name: oracle
- equal:
path: spec.ingress
value:
- from:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: khv-production
podSelector:
matchLabels:
app.kubernetes.io/name: prometheus

View File

@ -58,7 +58,7 @@ tests:
helm.sh/chart: prometheus-postgres-exporter-0.1.0
- equal:
path: spec.podMetricsEndpoints[0].enableHttp2
value: false
value: true
- equal:
path: spec.podMetricsEndpoints[0].followRedirects
value: false
@ -90,10 +90,7 @@ tests:
path: spec.selector.matchLabels
value:
app.kubernetes.io/instance: prometheus-postgres-exporter-unittest
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: prometheus-postgres-exporter
app.kubernetes.io/version: 0.1.0
helm.sh/chart: prometheus-postgres-exporter-0.1.0
- it: Render podMonitor with custom annotations and labels.
set:
@ -122,7 +119,7 @@ tests:
set:
prometheus.metrics.enabled: true
prometheus.metrics.podMonitor.enabled: true
prometheus.metrics.podMonitor.enableHttp2: true
prometheus.metrics.podMonitor.enableHttp2: false
prometheus.metrics.podMonitor.followRedirects: true
prometheus.metrics.podMonitor.honorLabels: true
prometheus.metrics.podMonitor.interval: "180s"
@ -140,7 +137,7 @@ tests:
count: 1
- equal:
path: spec.podMetricsEndpoints[0].enableHttp2
value: true
value: false
- equal:
path: spec.podMetricsEndpoints[0].followRedirects
value: true

View File

@ -8,34 +8,14 @@ release:
templates:
- templates/prometheus-postgres-exporter/secretWebConfig.yaml
tests:
- it: Skip rendering by using existing secret.
set:
config.webConfig.existingSecret.enabled: true
asserts:
- hasDocuments:
count: 0
- it: Skip rendering when no webConfig.yaml is defined.
set:
config.webConfig.existingSecret.enabled: false
asserts:
- hasDocuments:
count: 0
- it: Rendering database secret.
set:
config.webConfig.secret.webConfig:
tls_server_config:
cert_file: /path/to/cert.pem
client_ca_file: /path/to/ca.pem
key_file: /path/to/key.pem
- it: Rendering default secret.
asserts:
- hasDocuments:
count: 1
- containsDocument:
apiVersion: v1
kind: Secret
name: prometheus-postgres-exporter-unittest-webconfig
name: prometheus-postgres-exporter-unittest-web-config
namespace: testing
- notExists:
path: metadata.annotations
@ -47,6 +27,19 @@ tests:
app.kubernetes.io/name: prometheus-postgres-exporter
app.kubernetes.io/version: 0.1.0
helm.sh/chart: prometheus-postgres-exporter-0.1.0
- equal:
path: stringData["webConfig.yaml"]
value: |
{}
- it: Rendering custom webconfig.
set:
config.webConfig.secret.webConfig:
tls_server_config:
cert_file: /path/to/cert.pem
client_ca_file: /path/to/ca.pem
key_file: /path/to/key.pem
asserts:
- equal:
path: stringData["webConfig.yaml"]
value: |

View File

@ -29,12 +29,12 @@ tests:
- notExists:
path: metadata.labels
- equal:
path: spec.automountServiceAccountToken
path: automountServiceAccountToken
value: true
- notExists:
path: spec.imagePullSecrets
path: imagePullSecrets
- notExists:
path: spec.secrets
path: secrets
- it: Rendering serviceAccount with custom values.
@ -65,14 +65,14 @@ tests:
path: metadata.name
value: prometheus-postgres-exporter-unittest
- equal:
path: spec.automountServiceAccountToken
path: automountServiceAccountToken
value: false
- equal:
path: spec.imagePullSecrets
path: imagePullSecrets
value:
- name: "my-pull-secret"
- equal:
path: spec.secrets
path: secrets
value:
- name: "my-secret"
namespace: "my-namespace"

View File

@ -59,7 +59,7 @@ tests:
helm.sh/chart: prometheus-postgres-exporter-0.1.0
- equal:
path: spec.endpoints[0].enableHttp2
value: false
value: true
- equal:
path: spec.endpoints[0].followRedirects
value: false
@ -121,7 +121,7 @@ tests:
set:
prometheus.metrics.enabled: true
prometheus.metrics.serviceMonitor.enabled: true
prometheus.metrics.serviceMonitor.enableHttp2: true
prometheus.metrics.serviceMonitor.enableHttp2: false
prometheus.metrics.serviceMonitor.followRedirects: true
prometheus.metrics.serviceMonitor.honorLabels: true
prometheus.metrics.serviceMonitor.interval: "180s"
@ -134,13 +134,12 @@ tests:
action: "drop"
prometheus.metrics.serviceMonitor.scrapeTimeout: "5s"
prometheus.metrics.serviceMonitor.scheme: "http"
prometheus.metrics.serviceMonitor.port: 10443
asserts:
- hasDocuments:
count: 1
- equal:
path: spec.endpoints[0].enableHttp2
value: true
value: false
- equal:
path: spec.endpoints[0].followRedirects
value: true
@ -166,7 +165,4 @@ tests:
value: 5s
- equal:
path: spec.endpoints[0].scheme
value: http
- equal:
path: spec.endpoints[0].targetPort
value: 10443
value: http

View File

@ -63,10 +63,7 @@ tests:
path: spec.selector
value:
app.kubernetes.io/instance: prometheus-postgres-exporter-unittest
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: prometheus-postgres-exporter
app.kubernetes.io/version: 0.1.0
helm.sh/chart: prometheus-postgres-exporter-0.1.0
- equal:
path: spec.sessionAffinity
value: None

700
values.schema.json Normal file
View File

@ -0,0 +1,700 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"nameOverride": {
"type": "string"
},
"fullnameOverride": {
"type": "string"
},
"config": {
"type": "object",
"properties": {
"database": {
"type": "object",
"properties": {
"existingSecret": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
},
"secretName": {
"type": "string"
}
},
"required": [
"enabled",
"secretName"
]
},
"secret": {
"type": "object",
"properties": {
"annotations": {
"type": "object"
},
"labels": {
"type": "object"
},
"databaseUsername": {
"type": "string"
},
"databasePassword": {
"type": "string"
},
"databaseConnectionUrl": {
"type": "string"
}
},
"required": [
"annotations",
"labels",
"databaseUsername",
"databasePassword",
"databaseConnectionUrl"
]
}
},
"required": [
"existingSecret",
"secret"
]
},
"exporterConfig": {
"type": "object",
"properties": {
"existingSecret": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
},
"secretName": {
"type": "string"
}
},
"required": [
"enabled",
"secretName"
]
},
"secret": {
"type": "object",
"properties": {
"annotations": {
"type": "object"
},
"labels": {
"type": "object"
},
"exporterConfig": {
"type": "object"
}
},
"required": [
"annotations",
"labels",
"exporterConfig"
]
}
},
"required": [
"existingSecret",
"secret"
]
},
"webConfig": {
"type": "object",
"properties": {
"existingSecret": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
},
"secretName": {
"type": "string"
}
},
"required": [
"enabled",
"secretName"
]
},
"secret": {
"type": "object",
"properties": {
"annotations": {
"type": "object"
},
"labels": {
"type": "object"
},
"webConfig": {
"type": "object"
}
},
"required": [
"annotations",
"labels",
"webConfig"
]
}
},
"required": [
"existingSecret",
"secret"
]
}
},
"required": [
"database",
"exporterConfig",
"webConfig"
]
},
"deployment": {
"type": "object",
"properties": {
"annotations": {
"type": "object"
},
"labels": {
"type": "object"
},
"additionalContainers": {
"type": "array",
"items": {}
},
"affinity": {
"type": "object"
},
"initContainers": {
"type": "array",
"items": {}
},
"dnsConfig": {
"type": "object"
},
"dnsPolicy": {
"type": "string"
},
"hostname": {
"type": "string"
},
"subdomain": {
"type": "string"
},
"hostNetwork": {
"type": "boolean"
},
"imagePullSecrets": {
"type": "array",
"items": {}
},
"postgresExporter": {
"type": "object",
"properties": {
"args": {
"type": "array",
"items": {}
},
"env": {
"type": "array",
"items": {}
},
"envFrom": {
"type": "array",
"items": {}
},
"image": {
"type": "object",
"properties": {
"registry": {
"type": "string"
},
"repository": {
"type": "string"
},
"tag": {
"type": "string"
},
"pullPolicy": {
"type": "string"
}
},
"required": [
"registry",
"repository",
"tag",
"pullPolicy"
]
},
"resources": {
"type": "object"
},
"securityContext": {
"type": "object"
},
"volumeMounts": {
"type": "array",
"items": {}
}
},
"required": [
"args",
"env",
"envFrom",
"image",
"resources",
"securityContext",
"volumeMounts"
]
},
"nodeSelector": {
"type": "object"
},
"priorityClassName": {
"type": "string"
},
"replicas": {
"type": "integer"
},
"restartPolicy": {
"type": "string"
},
"securityContext": {
"type": "object"
},
"strategy": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"rollingUpdate": {
"type": "object",
"properties": {
"maxSurge": {
"type": "integer"
},
"maxUnavailable": {
"type": "integer"
}
},
"required": [
"maxSurge",
"maxUnavailable"
]
}
},
"required": [
"type",
"rollingUpdate"
]
},
"terminationGracePeriodSeconds": {
"type": "integer"
},
"tolerations": {
"type": "array",
"items": {}
},
"topologySpreadConstraints": {
"type": "array",
"items": {}
},
"volumes": {
"type": "array",
"items": {}
}
},
"required": [
"annotations",
"labels",
"additionalContainers",
"affinity",
"initContainers",
"dnsConfig",
"dnsPolicy",
"hostname",
"subdomain",
"hostNetwork",
"imagePullSecrets",
"postgresExporter",
"nodeSelector",
"priorityClassName",
"replicas",
"restartPolicy",
"securityContext",
"strategy",
"terminationGracePeriodSeconds",
"tolerations",
"topologySpreadConstraints",
"volumes"
]
},
"grafana": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
},
"dashboardDiscoveryLabels": {
"type": "object"
},
"dashboards": {
"type": "object",
"properties": {
"postgresExporter": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
},
"annotations": {
"type": "object"
},
"labels": {
"type": "object"
}
},
"required": [
"enabled",
"annotations",
"labels"
]
}
},
"required": [
"postgresExporter"
]
}
},
"required": [
"enabled",
"dashboardDiscoveryLabels",
"dashboards"
]
},
"ingress": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
},
"className": {
"type": "string"
},
"annotations": {
"type": "object"
},
"labels": {
"type": "object"
},
"hosts": {
"type": "array",
"items": {}
},
"tls": {
"type": "array",
"items": {}
}
},
"required": [
"enabled",
"className",
"annotations",
"labels",
"hosts",
"tls"
]
},
"podDisruptionBudget": {
"type": "object"
},
"networkPolicies": {
"type": "object"
},
"prometheus": {
"type": "object",
"properties": {
"metrics": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
},
"podMonitor": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
},
"annotations": {
"type": "object"
},
"enableHttp2": {
"type": "boolean"
},
"followRedirects": {
"type": "boolean"
},
"honorLabels": {
"type": "boolean"
},
"labels": {
"type": "object"
},
"interval": {
"type": "string"
},
"path": {
"type": "string"
},
"relabelings": {
"type": "array",
"items": {}
},
"scrapeTimeout": {
"type": "string"
},
"scheme": {
"type": "string"
},
"tlsConfig": {
"type": "object"
}
},
"required": [
"enabled",
"annotations",
"enableHttp2",
"followRedirects",
"honorLabels",
"labels",
"interval",
"path",
"relabelings",
"scrapeTimeout",
"scheme",
"tlsConfig"
]
},
"serviceMonitor": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
},
"annotations": {
"type": "object"
},
"labels": {
"type": "object"
},
"enableHttp2": {
"type": "boolean"
},
"followRedirects": {
"type": "boolean"
},
"honorLabels": {
"type": "boolean"
},
"interval": {
"type": "string"
},
"path": {
"type": "string"
},
"relabelings": {
"type": "array",
"items": {}
},
"scrapeTimeout": {
"type": "string"
},
"scheme": {
"type": "string"
},
"tlsConfig": {
"type": "object"
}
},
"required": [
"enabled",
"annotations",
"labels",
"enableHttp2",
"followRedirects",
"honorLabels",
"interval",
"path",
"relabelings",
"scrapeTimeout",
"scheme",
"tlsConfig"
]
}
},
"required": [
"enabled",
"podMonitor",
"serviceMonitor"
]
},
"rules": {
"type": "array",
"items": {}
}
},
"required": [
"metrics",
"rules"
]
},
"services": {
"type": "object",
"properties": {
"http": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
},
"annotations": {
"type": "object"
},
"externalIPs": {
"type": "array",
"items": {}
},
"externalTrafficPolicy": {
"type": "string"
},
"internalTrafficPolicy": {
"type": "string"
},
"ipFamilies": {
"type": "array",
"items": {}
},
"labels": {
"type": "object"
},
"loadBalancerClass": {
"type": "string"
},
"loadBalancerIP": {
"type": "string"
},
"loadBalancerSourceRanges": {
"type": "array",
"items": {}
},
"port": {
"type": "integer"
},
"sessionAffinity": {
"type": "string"
},
"sessionAffinityConfig": {
"type": "object"
},
"type": {
"type": "string"
}
},
"required": [
"enabled",
"annotations",
"externalIPs",
"externalTrafficPolicy",
"internalTrafficPolicy",
"ipFamilies",
"labels",
"loadBalancerClass",
"loadBalancerIP",
"loadBalancerSourceRanges",
"port",
"sessionAffinity",
"sessionAffinityConfig",
"type"
]
}
},
"required": [
"http"
]
},
"serviceAccount": {
"type": "object",
"properties": {
"existing": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
},
"serviceAccountName": {
"type": "string"
}
},
"required": [
"enabled",
"serviceAccountName"
]
},
"new": {
"type": "object",
"properties": {
"annotations": {
"type": "object"
},
"labels": {
"type": "object"
},
"automountServiceAccountToken": {
"type": "boolean"
},
"imagePullSecrets": {
"type": "array",
"items": {}
},
"secrets": {
"type": "array",
"items": {}
}
},
"required": [
"annotations",
"labels",
"automountServiceAccountToken",
"imagePullSecrets",
"secrets"
]
}
},
"required": [
"existing",
"new"
]
}
},
"required": [
"nameOverride",
"fullnameOverride",
"config",
"deployment",
"grafana",
"ingress",
"podDisruptionBudget",
"networkPolicies",
"prometheus",
"services",
"serviceAccount"
]
}

View File

@ -1,6 +1,3 @@
# Default values for qu-seed.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.
## @section Global
## @param nameOverride Individual release name suffix.
@ -30,15 +27,15 @@ config:
databaseConnectionUrl: ""
exporterConfig:
## @param config.exporterConfig.existingSecret.enabled Mount an existing secret containing the key `exporter_config.yaml`.
## @param config.exporterConfig.existingSecret.secretName Name of the existing secret containing the key `exporter_config.yaml`.
## @param config.exporterConfig.existingSecret.enabled Mount an existing secret containing the key `exporterConfig.yaml`.
## @param config.exporterConfig.existingSecret.secretName Name of the existing secret containing the key `exporterConfig.yaml`.
existingSecret:
enabled: false
secretName: ""
## @param config.exporterConfig.secret.annotations Additional annotations of the secret containing the `exporterConfig.yaml`.
## @param config.exporterConfig.secret.labels Additional labels of the secret containing the `exporterConfig.yaml`.
## @param config.exporterConfig.secret.exporterConfig Content of the `exporterConfig.yaml`. Further information can be found [here](https://prometheus.io/docs/prometheus/latest/configuration/https/).
## @param config.exporterConfig.secret.exporterConfig Content of the `exporterConfig.yaml`. Further information can be found in the [README](https://github.com/prometheus-community/postgres_exporter?tab=readme-ov-file#multi-target-support-beta) file of the Postgres exporter binary.
## @skip config.exporterConfig.secret.exporterConfig Skip individual postgres exporter configuration.
secret:
annotations: {}
@ -62,7 +59,7 @@ config:
## @param config.webConfig.secret.annotations Additional annotations of the secret containing the `webConfig.yaml`.
## @param config.webConfig.secret.labels Additional labels of the secret containing the `webConfig.yaml`.
## @param config.webConfig.secret.webConfig Content of the `webConfig.yaml`. Further information can be found [here](https://prometheus.io/docs/prometheus/latest/configuration/https/).
## @param config.webConfig.secret.webConfig Content of the `webConfig.yaml`. Further [documentation](https://prometheus.io/docs/prometheus/latest/configuration/https/) is available on the official Prometheus website.
## @skip config.webConfig.secret.webConfig Skip individual web configuration.
secret:
annotations: {}
@ -84,7 +81,7 @@ config:
## @section Deployment
deployment:
## @param deployment.annotations Additional deployment annotations.
## @param deployment.labels Additional ingress labels.
## @param deployment.labels Additional deployment labels.
annotations: {}
labels: {}
@ -96,6 +93,22 @@ deployment:
## @param deployment.affinity Affinity for the postgres-exporter deployment.
affinity: {}
# nodeAffinity:
# requiredDuringSchedulingIgnoredDuringExecution:
# nodeSelectorTerms:
# - matchExpressions:
# - key: kubernetes.io/os
# operator: In
# values:
# - linux
# preferredDuringSchedulingIgnoredDuringExecution:
# - weight: 20
# preference:
# matchExpressions:
# - key: kubernetes.io/arch
# operator: In
# values:
# - amd64
## @param deployment.initContainers List of additional init containers.
initContainers: []
@ -190,7 +203,7 @@ deployment:
# runAsUser: 1000
## @param deployment.postgresExporter.volumeMounts Additional volume mounts.
volumeMounts: {}
volumeMounts: []
# - name: my-configmap-volume
# mountPath: /configmap
# readOnly: true
@ -201,18 +214,21 @@ deployment:
## @param deployment.priorityClassName PriorityClassName of the postgres-exporter deployment.
priorityClassName: ""
## @param deployment.replicaCount Number of replicas for the postgres-exporter deployment.
replicaCount: 1
## @param deployment.replicas Number of replicas for the postgres-exporter deployment.
replicas: 1
## @param deployment.restartPolicy Restart policy of the postgres-exporter deployment.
restartPolicy: ""
## @param deployment.securityContext Security context of the postgres-exporter deployment.
securityContext: {}
# fsGroup: 2000
## @param deployment.strategy.type Strategy type - `Recreate` or `Rollingupdate`.
## @param deployment.strategy.type Strategy type - `Recreate` or `RollingUpdate`.
## @param deployment.strategy.rollingUpdate.maxSurge The maximum number of pods that can be scheduled above the desired number of pods during a rolling update.
## @param deployment.strategy.rollingUpdate.maxUnavailable The maximum number of pods that can be unavailable during a rolling update.
strategy:
type: "Recreate"
type: "RollingUpdate"
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
@ -222,6 +238,10 @@ deployment:
## @param deployment.tolerations Tolerations of the postgres-exporter deployment.
tolerations: []
# - key: database/type
# operator: Equal
# value: postgres
# effect: NoSchedule
## @param deployment.topologySpreadConstraints TopologySpreadConstraints of the postgres-exporter deployment.
topologySpreadConstraints: []
@ -241,12 +261,23 @@ deployment:
# secretName: my-secret
## @section Grafana
## @param grafana.enabled Enable integration into Grafana.
## @param grafana.dashboards.businessMetrics Enable deployment of Grafana dashboard `businessMetrics`.
## @param grafana.enabled Enable integration into Grafana. Require the Prometheus operator deployment.
grafana:
enabled: false
## @param grafana.dashboardDiscoveryLabels Labels that Grafana uses to discover resources. The labels may vary depending on the Grafana deployment.
## @skip grafana.dashboardDiscoveryLabels Skip individual configuration.
dashboardDiscoveryLabels:
grafana_dashboard: "1"
dashboards:
businessMetrics: true
## @param grafana.dashboards.postgresExporter.enabled Enable deployment of Grafana dashboard `postgresExporter`.
## @param grafana.dashboards.postgresExporter.annotations Additional configmap annotations.
## @param grafana.dashboards.postgresExporter.labels Additional configmap labels.
postgresExporter:
enabled: true
annotations: {}
labels: {}
## @section Ingress
ingress:
@ -280,9 +311,77 @@ podDisruptionBudget: {}
# maxUnavailable: 1
# minAvailable: 1
## @section Network
## @param networkPolicies Deploy network policies based on the used container network interface (CNI) implementation - like calico or weave.
networkPolicies: {}
## @section NetworkPolicies
## @param networkPolicies.enabled Enable network policies in general.
networkPolicies:
enabled: false
## @param networkPolicies.default.enabled Enable the network policy for accessing the application by default. For example to scape the metrics.
## @param networkPolicies.default.annotations Additional network policy annotations.
## @param networkPolicies.default.labels Additional network policy labels.
## @param networkPolicies.default.policyTypes List of policy types. Supported is ingress, egress or ingress and egress.
## @param networkPolicies.default.egress Concrete egress network policy implementation.
## @skip networkPolicies.default.egress Skip individual egress configuration.
## @param networkPolicies.default.ingress Concrete ingress network policy implementation.
## @skip networkPolicies.default.ingress Skip individual ingress configuration.
default:
enabled: false
annotations: {}
labels: {}
policyTypes: []
# - Egress
# - Ingress
egress: []
# Allow outgoing traffic to database host
#
# - to:
# - ipBlock:
# cidr: 192.168.179.1/32
# ports:
# - port: 5432
# protocol: TCP
# Allow outgoing DNS traffic to the internal running DNS-Server. For example core-dns.
#
# - to:
# - namespaceSelector:
# matchLabels:
# kubernetes.io/metadata.name: kube-system
# podSelector:
# matchLabels:
# k8s-app: kube-dns
# ports:
# - port: 53
# protocol: TCP
# - port: 53
# protocol: UDP
ingress: []
# Allow incoming HTTP traffic from prometheus.
#
# - from:
# - namespaceSelector:
# matchLabels:
# kubernetes.io/metadata.name: monitoring
# podSelector:
# matchLabels:
# app.kubernetes.io/name: prometheus
# ports:
# - port: http
# protocol: TCP
# Allow incoming HTTP traffic from ingress-nginx.
#
# - from:
# - namespaceSelector:
# matchLabels:
# kubernetes.io/metadata.name: ingress-nginx
# podSelector:
# matchLabels:
# app.kubernetes.io/name: ingress-nginx
# ports:
# - port: http
# protocol: TCP
## @section Prometheus
prometheus:
@ -297,7 +396,7 @@ prometheus:
## @param prometheus.metrics.podMonitor.honorLabels Honor labels.
## @param prometheus.metrics.podMonitor.labels Additional podMonitor labels.
## @param prometheus.metrics.podMonitor.interval Interval at which metrics should be scraped. If not specified Prometheus' global scrape interval is used.
## @param prometheus.metrics.podMonitor.path HTTP path for scraping prometheus metrics.
## @param prometheus.metrics.podMonitor.path HTTP path for scraping Prometheus metrics.
## @param prometheus.metrics.podMonitor.relabelings RelabelConfigs to apply to samples before scraping. Prometheus Operator automatically adds relabelings for a few standard Kubernetes fields.
## @param prometheus.metrics.podMonitor.scrapeTimeout Timeout after which the scrape is ended. If not specified, global Prometheus scrape timeout is used.
## @param prometheus.metrics.podMonitor.scheme HTTP scheme to use for scraping. For example `http` or `https`.
@ -306,7 +405,7 @@ prometheus:
podMonitor:
enabled: false
annotations: {}
enableHttp2: false
enableHttp2: true
followRedirects: false
honorLabels: false
labels: {}
@ -324,8 +423,7 @@ prometheus:
## @param prometheus.metrics.serviceMonitor.followRedirects FollowRedirects configures whether scrape requests follow HTTP 3xx redirects.
## @param prometheus.metrics.serviceMonitor.honorLabels Honor labels.
## @param prometheus.metrics.serviceMonitor.interval Interval at which metrics should be scraped. If not specified Prometheus' global scrape interval is used.
## @param prometheus.metrics.serviceMonitor.path HTTP path for scraping prometheus metrics.
## @param prometheus.metrics.serviceMonitor.port HTTP port for scraping prometheus metrics.
## @param prometheus.metrics.serviceMonitor.path HTTP path for scraping Prometheus metrics.
## @param prometheus.metrics.serviceMonitor.relabelings RelabelConfigs to apply to samples before scraping. Prometheus Operator automatically adds relabelings for a few standard Kubernetes fields.
## @param prometheus.metrics.serviceMonitor.scrapeTimeout Timeout after which the scrape is ended. If not specified, global Prometheus scrape timeout is used.
## @param prometheus.metrics.serviceMonitor.scheme HTTP scheme to use for scraping. For example `http` or `https`.
@ -335,19 +433,18 @@ prometheus:
enabled: false
annotations: {}
labels: {}
enableHttp2: false
enableHttp2: true
followRedirects: false
honorLabels: false
interval: "60s"
path: "/metrics"
port: 9187
relabelings: []
scrapeTimeout: "30s"
scheme: "http"
tlsConfig: {}
## @param prometheus.rules Array of prometheus rules for monitoring the application and triggering alerts.
## @skip prometheus.rules Skip individual prometheus rules.
## @param prometheus.rules Array of Prometheus rules for monitoring the application and triggering alerts.
## @skip prometheus.rules Skip individual Prometheus rules.
rules: []
# - alert: ExporterErrors
# expr: pg_exporter_last_scrape_error == 1