From 134be191fd63c0c6542b1a538cb97db245bd0cc8 Mon Sep 17 00:00:00 2001 From: TrueCharts-Bot Date: Tue, 5 Mar 2024 20:46:32 +0000 Subject: [PATCH] Commit new Chart releases for TrueCharts Signed-off-by: TrueCharts-Bot --- enterprise/blocky/14.0.1/.helmignore | 30 + enterprise/blocky/14.0.1/CHANGELOG.md | 100 + enterprise/blocky/14.0.1/Chart.yaml | 47 + enterprise/blocky/14.0.1/LICENSE | 106 + enterprise/blocky/14.0.1/README.md | 28 + enterprise/blocky/14.0.1/app-changelog.md | 9 + enterprise/blocky/14.0.1/app-readme.md | 8 + .../blocky/14.0.1/charts/common-18.1.8.tgz | Bin 0 -> 99414 bytes .../blocky/14.0.1/charts/redis-11.2.1.tgz | Bin 0 -> 105426 bytes enterprise/blocky/14.0.1/dashboard.json | 1939 +++++++++ enterprise/blocky/14.0.1/dashboardpsql.json | 874 ++++ enterprise/blocky/14.0.1/ix_values.yaml | 380 ++ enterprise/blocky/14.0.1/questions.yaml | 3828 +++++++++++++++++ enterprise/blocky/14.0.1/templates/NOTES.txt | 1 + .../blocky/14.0.1/templates/_blockyConfig.tpl | 231 + .../blocky/14.0.1/templates/_k8sgateway.tpl | 90 + .../blocky/14.0.1/templates/common.yaml | 106 + enterprise/blocky/14.0.1/values.yaml | 0 enterprise/traefik/26.4.14/app-changelog.md | 9 - 19 files changed, 7777 insertions(+), 9 deletions(-) create mode 100644 enterprise/blocky/14.0.1/.helmignore create mode 100644 enterprise/blocky/14.0.1/CHANGELOG.md create mode 100644 enterprise/blocky/14.0.1/Chart.yaml create mode 100644 enterprise/blocky/14.0.1/LICENSE create mode 100644 enterprise/blocky/14.0.1/README.md create mode 100644 enterprise/blocky/14.0.1/app-changelog.md create mode 100644 enterprise/blocky/14.0.1/app-readme.md create mode 100644 enterprise/blocky/14.0.1/charts/common-18.1.8.tgz create mode 100644 enterprise/blocky/14.0.1/charts/redis-11.2.1.tgz create mode 100644 enterprise/blocky/14.0.1/dashboard.json create mode 100644 enterprise/blocky/14.0.1/dashboardpsql.json create mode 100644 enterprise/blocky/14.0.1/ix_values.yaml create mode 100755 enterprise/blocky/14.0.1/questions.yaml create mode 100644 enterprise/blocky/14.0.1/templates/NOTES.txt create mode 100644 enterprise/blocky/14.0.1/templates/_blockyConfig.tpl create mode 100644 enterprise/blocky/14.0.1/templates/_k8sgateway.tpl create mode 100644 enterprise/blocky/14.0.1/templates/common.yaml create mode 100644 enterprise/blocky/14.0.1/values.yaml delete mode 100644 enterprise/traefik/26.4.14/app-changelog.md diff --git a/enterprise/blocky/14.0.1/.helmignore b/enterprise/blocky/14.0.1/.helmignore new file mode 100644 index 00000000000..77ca5567b26 --- /dev/null +++ b/enterprise/blocky/14.0.1/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/enterprise/blocky/14.0.1/CHANGELOG.md b/enterprise/blocky/14.0.1/CHANGELOG.md new file mode 100644 index 00000000000..264c7efe306 --- /dev/null +++ b/enterprise/blocky/14.0.1/CHANGELOG.md @@ -0,0 +1,100 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + +## [blocky-14.0.1](https://github.com/truecharts/charts/compare/blocky-14.0.0...blocky-14.0.1) (2024-03-05) + +### Fix + + + +- bump common to fix some remaining loadbalancer issues + + +## [blocky-14.0.0](https://github.com/truecharts/charts/compare/blocky-13.6.3...blocky-14.0.0) (2024-03-05) + +### Feat + + + +- merge dns ports into a single service + + +## [blocky-13.6.3](https://github.com/truecharts/charts/compare/blocky-13.6.2...blocky-13.6.3) (2024-03-05) + +### Chore + + + +- bump everything to force helm release again + + +## [blocky-13.6.2](https://github.com/truecharts/charts/compare/blocky-13.6.0...blocky-13.6.2) (2024-03-05) + +### Chore + + + +- force rereleases + +- update container image common to v18.1.6[@904d84b](https://github.com/904d84b) by renovate ([#18835](https://github.com/truecharts/charts/issues/18835)) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## [blocky-12.2.7](https://github.com/truecharts/charts/compare/blocky-12.2.6...blocky-12.2.7) (2024-02-03) + +### Chore + + + +- update container image common to v17.2.30[@19ad5ec](https://github.com/19ad5ec) by renovate ([#17804](https://github.com/truecharts/charts/issues/17804)) + + +## [blocky-12.2.6](https://github.com/truecharts/charts/compare/blocky-12.2.5...blocky-12.2.6) (2024-01-27) + +### Chore + + + +- update helm general non-major by renovate ([#17525](https://github.com/truecharts/charts/issues/17525)) + + +## [blocky-12.2.5](https://github.com/truecharts/charts/compare/blocky-12.2.4...blocky-12.2.5) (2024-01-26) + +### Chore + + + +- update container image common to v17.2.29[@d7c41a3](https://github.com/d7c41a3) by renovate ([#17545](https://github.com/truecharts/charts/issues/17545)) \ No newline at end of file diff --git a/enterprise/blocky/14.0.1/Chart.yaml b/enterprise/blocky/14.0.1/Chart.yaml new file mode 100644 index 00000000000..c1d938ec988 --- /dev/null +++ b/enterprise/blocky/14.0.1/Chart.yaml @@ -0,0 +1,47 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: network + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.12" + truecharts.org/train: enterprise +apiVersion: v2 +appVersion: 0.23.0 +dependencies: + - name: common + version: 18.1.8 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] + - name: redis + version: 11.2.1 + repository: oci://tccr.io/truecharts + condition: redis.enabled + alias: "" + tags: [] + import-values: [] +deprecated: false +description: Blocky is a DNS proxy, DNS enhancer and ad-blocker for the local network written in Go +home: https://truecharts.org/charts/enterprise/blocky +icon: https://truecharts.org/img/hotlink-ok/chart-icons/blocky.png +keywords: + - dns + - blocky +kubeVersion: '>=1.24.0-0' +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: blocky +sources: + - https://github.com/Mozart409/blocky-frontend + - https://0xerr0r.github.io/blocky/ + - https://github.com/0xERR0R/blocky + - https://github.com/truecharts/charts/tree/master/charts/enterprise/blocky + - https://quay.io/oriedge/k8s_gateway + - https://hub.docker.com/r/spx01/blocky +type: application +version: 14.0.1 diff --git a/enterprise/blocky/14.0.1/LICENSE b/enterprise/blocky/14.0.1/LICENSE new file mode 100644 index 00000000000..33a8cbb23f0 --- /dev/null +++ b/enterprise/blocky/14.0.1/LICENSE @@ -0,0 +1,106 @@ +Business Source License 1.1 + +Parameters + +Licensor: The TrueCharts Project, it's owner and it's contributors +Licensed Work: The TrueCharts "Blocky" Helm Chart +Additional Use Grant: You may use the licensed work in production, as long + as it is directly sourced from a TrueCharts provided + official repository, catalog or source. You may also make private + modification to the directly sourced licenced work, + when used in production. + + The following cases are, due to their nature, also + defined as 'production use' and explicitly prohibited: + - Bundling, including or displaying the licensed work + with(in) another work intended for production use, + with the apparent intend of facilitating and/or + promoting production use by third parties in + violation of this license. + +Change Date: 2050-01-01 + +Change License: 3-clause BSD license + +For information about alternative licensing arrangements for the Software, +please contact: legal@truecharts.org + +Notice + +The Business Source License (this document, or the “License”) is not an Open +Source license. However, the Licensed Work will eventually be made available +under an Open Source License, as stated in this License. + +License text copyright (c) 2017 MariaDB Corporation Ab, All Rights Reserved. +“Business Source License” is a trademark of MariaDB Corporation Ab. + +----------------------------------------------------------------------------- + +Business Source License 1.1 + +Terms + +The Licensor hereby grants you the right to copy, modify, create derivative +works, redistribute, and make non-production use of the Licensed Work. The +Licensor may make an Additional Use Grant, above, permitting limited +production use. + +Effective on the Change Date, or the fourth anniversary of the first publicly +available distribution of a specific version of the Licensed Work under this +License, whichever comes first, the Licensor hereby grants you rights under +the terms of the Change License, and the rights granted in the paragraph +above terminate. + +If your use of the Licensed Work does not comply with the requirements +currently in effect as described in this License, you must purchase a +commercial license from the Licensor, its affiliated entities, or authorized +resellers, or you must refrain from using the Licensed Work. + +All copies of the original and modified Licensed Work, and derivative works +of the Licensed Work, are subject to this License. This License applies +separately for each version of the Licensed Work and the Change Date may vary +for each version of the Licensed Work released by Licensor. + +You must conspicuously display this License on each original or modified copy +of the Licensed Work. If you receive the Licensed Work in original or +modified form from a third party, the terms and conditions set forth in this +License apply to your use of that work. + +Any use of the Licensed Work in violation of this License will automatically +terminate your rights under this License for the current and all other +versions of the Licensed Work. + +This License does not grant you any right in any trademark or logo of +Licensor or its affiliates (provided that you may use a trademark or logo of +Licensor as expressly required by this License). + +TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON +AN “AS IS” BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, +EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND +TITLE. + +MariaDB hereby grants you permission to use this License’s text to license +your works, and to refer to it using the trademark “Business Source License”, +as long as you comply with the Covenants of Licensor below. + +Covenants of Licensor + +In consideration of the right to use this License’s text and the “Business +Source License” name and trademark, Licensor covenants to MariaDB, and to all +other recipients of the licensed work to be provided by Licensor: + +1. To specify as the Change License the GPL Version 2.0 or any later version, + or a license that is compatible with GPL Version 2.0 or a later version, + where “compatible” means that software provided under the Change License can + be included in a program with software provided under GPL Version 2.0 or a + later version. Licensor may specify additional Change Licenses without + limitation. + +2. To either: (a) specify an additional grant of rights to use that does not + impose any additional restriction on the right granted in this License, as + the Additional Use Grant; or (b) insert the text “None”. + +3. To specify a Change Date. + +4. Not to modify this License in any other way. diff --git a/enterprise/blocky/14.0.1/README.md b/enterprise/blocky/14.0.1/README.md new file mode 100644 index 00000000000..cbcb72e490e --- /dev/null +++ b/enterprise/blocky/14.0.1/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/enterprise/blocky) + +**This chart is not maintained by the upstream project and any issues with the chart should be raised [here](https://github.com/truecharts/charts/issues/new/choose)** + +## Support + +- Please check our [quick-start guides for TrueNAS SCALE](https://truecharts.org/manual/SCALE/guides/scale-intro). +- See the [Website](https://truecharts.org) +- Check our [Discord](https://discord.gg/tVsPTHWTtr) +- Open a [issue](https://github.com/truecharts/charts/issues/new/choose) + +--- + +## Sponsor TrueCharts + +TrueCharts can only exist due to the incredible effort of our staff. +Please consider making a [donation](https://truecharts.org/sponsor) or contributing back to the project any way you can! + +_All Rights Reserved - The TrueCharts Project_ diff --git a/enterprise/blocky/14.0.1/app-changelog.md b/enterprise/blocky/14.0.1/app-changelog.md new file mode 100644 index 00000000000..0621c265658 --- /dev/null +++ b/enterprise/blocky/14.0.1/app-changelog.md @@ -0,0 +1,9 @@ + + +## [blocky-14.0.1](https://github.com/truecharts/charts/compare/blocky-14.0.0...blocky-14.0.1) (2024-03-05) + +### Fix + + + +- bump common to fix some remaining loadbalancer issues \ No newline at end of file diff --git a/enterprise/blocky/14.0.1/app-readme.md b/enterprise/blocky/14.0.1/app-readme.md new file mode 100644 index 00000000000..8e6562892e4 --- /dev/null +++ b/enterprise/blocky/14.0.1/app-readme.md @@ -0,0 +1,8 @@ +Blocky is a DNS proxy, DNS enhancer and ad-blocker for the local network written in Go + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/enterprise/blocky](https://truecharts.org/charts/enterprise/blocky) + +--- + +TrueCharts can only exist due to the incredible effort of our staff. +Please consider making a [donation](https://truecharts.org/sponsor) or contributing back to the project any way you can! diff --git a/enterprise/blocky/14.0.1/charts/common-18.1.8.tgz b/enterprise/blocky/14.0.1/charts/common-18.1.8.tgz new file mode 100644 index 0000000000000000000000000000000000000000..fb4d86ffe5061ac8e81b795b471a76d04e808d25 GIT binary patch literal 99414 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 ZSGv-bu6)_${|f*B|NqD*;+Ozz3;>hDy(0hs literal 0 HcmV?d00001 diff --git a/enterprise/blocky/14.0.1/charts/redis-11.2.1.tgz b/enterprise/blocky/14.0.1/charts/redis-11.2.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..0a779a6f4f286ba29296ed1bdb76eb1631851644 GIT binary patch literal 105426 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 K$O9n&Dh&Xq9x%@U literal 0 HcmV?d00001 diff --git a/enterprise/blocky/14.0.1/dashboard.json b/enterprise/blocky/14.0.1/dashboard.json new file mode 100644 index 00000000000..847da7c67de --- /dev/null +++ b/enterprise/blocky/14.0.1/dashboard.json @@ -0,0 +1,1939 @@ +{ + "__inputs": [ + { + "name": "DS_PROMETHEUS", + "label": "Prometheus", + "description": "", + "type": "datasource", + "pluginId": "prometheus", + "pluginName": "Prometheus" + }, + { + "name": "VAR_BLOCKY_URL", + "type": "constant", + "label": "blocky API URL", + "value": "", + "description": "" + } + ], + "__elements": [], + "__requires": [ + { + "type": "grafana", + "id": "grafana", + "name": "Grafana", + "version": "8.3.3" + }, + { + "type": "panel", + "id": "heatmap", + "name": "Heatmap", + "version": "" + }, + { + "type": "panel", + "id": "piechart", + "name": "Pie chart", + "version": "" + }, + { + "type": "datasource", + "id": "prometheus", + "name": "Prometheus", + "version": "1.0.0" + }, + { + "type": "panel", + "id": "stat", + "name": "Stat", + "version": "" + }, + { + "type": "panel", + "id": "text", + "name": "Text", + "version": "" + }, + { + "type": "panel", + "id": "timeseries", + "name": "Time series", + "version": "" + } + ], + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": null, + "iteration": 1641070862290, + "links": [ + { + "icon": "external link", + "tags": [], + "title": "blocky @ GitHub", + "tooltip": "open GitHub repo", + "type": "link", + "url": "https://github.com/0xERR0R/blocky" + } + ], + "liveNow": false, + "panels": [ + { + "description": "current service state", + "fieldConfig": { + "defaults": { + "mappings": [ + { + "options": { + "0": { + "text": "down" + }, + "1": { + "text": "up" + } + }, + "type": "value" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "#d44a3a", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 1 + }, + { + "color": "#299c46", + "value": 1 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "id": 26, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": false, + "expr": "sum(up{job=~\"$job\"})", + "format": "table", + "instant": true, + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "State", + "transparent": true, + "type": "stat" + }, + { + "description": "Is blocking enabled?", + "fieldConfig": { + "defaults": { + "mappings": [ + { + "options": { + "0": { + "text": "off" + }, + "1": { + "text": "on" + } + }, + "type": "value" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "#d44a3a", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 1 + }, + { + "color": "#299c46", + "value": 1 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 6, + "y": 0 + }, + "id": 43, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "textMode": "value" + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": false, + "expr": "blocky_blocking_enabled", + "format": "table", + "instant": true, + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Blocking", + "transparent": true, + "type": "stat" + }, + { + "datasource": { + "uid": "${DS_PROMETHEUS}" + }, + "description": "Enable Ad disable blocking", + "gridPos": { + "h": 5, + "w": 12, + "x": 12, + "y": 0 + }, + "id": 42, + "options": { + "content": "\n
\n ×Done!\n
\n
\n \n \n \n
\n\n\n", + "mode": "html" + }, + "pluginVersion": "8.3.3", + "title": "Blocking status", + "transparent": true, + "type": "text" + }, + { + "description": "Blocky [version](https://github.com/0xERR0R/blocky) number", + "fieldConfig": { + "defaults": { + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 0, + "y": 3 + }, + "id": 55, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "orientation": "auto", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "/^version$/", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "8.3.3", + "repeatDirection": "v", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": false, + "expr": "blocky_build_info ", + "format": "table", + "instant": true, + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Version", + "transformations": [ + { + "id": "labelsToFields", + "options": {} + }, + { + "id": "merge", + "options": {} + } + ], + "transparent": true, + "type": "stat" + }, + { + "datasource": { + "uid": "${DS_PROMETHEUS}" + }, + "description": "Average query response time for all query types", + "fieldConfig": { + "defaults": { + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 6, + "y": 3 + }, + "id": 24, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "sum(increase(blocky_request_duration_ms_sum[$__range])) / sum(increase(blocky_request_duration_ms_count[$__range]))", + "format": "table", + "instant": false, + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Avg response time", + "transparent": true, + "type": "stat" + }, + { + "datasource": { + "uid": "${DS_PROMETHEUS}" + }, + "description": "Number of blacklist entries", + "fieldConfig": { + "defaults": { + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 12, + "y": 5 + }, + "id": 30, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "sum(blocky_blacklist_cache) / sum(up{job=~\"$job\"})", + "format": "table", + "instant": false, + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Blacklist entries total", + "transparent": true, + "type": "stat" + }, + { + "datasource": { + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "decimals": 2, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 6, + "y": 12 + }, + "id": 28, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "sum(go_memstats_sys_bytes{job=~\"$job\"})/sum(up{job=~\"$job\"})", + "format": "table", + "instant": false, + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Memory allocated", + "transparent": true, + "type": "stat" + }, + { + "datasource": { + "uid": "${DS_PROMETHEUS}" + }, + "description": "Percentage of blocked queries", + "fieldConfig": { + "defaults": { + "decimals": 2, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 6, + "y": 6 + }, + "id": 34, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "sum(increase(blocky_response_total{response_type=\"BLOCKED\"}[$__range])) / sum(increase(blocky_query_total[$__range])) ", + "format": "table", + "instant": false, + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Queries blocked", + "transparent": true, + "type": "stat" + }, + { + "datasource": { + "uid": "${DS_PROMETHEUS}" + }, + "description": "Number of all queries. Shows the last value", + "fieldConfig": { + "defaults": { + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 0, + "y": 6 + }, + "hideTimeOverride": true, + "id": 4, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "ceil(sum(increase(blocky_query_total[$__range]))) ", + "format": "table", + "instant": false, + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Query Count Total", + "transparent": true, + "type": "stat" + }, + { + "datasource": { + "uid": "${DS_PROMETHEUS}" + }, + "description": "Number of entries in the cache. Shows the last value", + "fieldConfig": { + "defaults": { + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 12, + "y": 8 + }, + "id": 45, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": ["last"], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "sum(blocky_cache_entry_count)/ sum(up{job=~\"$job\"})", + "format": "table", + "instant": false, + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Cache entries count", + "transparent": true, + "type": "stat" + }, + { + "datasource": { + "uid": "${DS_PROMETHEUS}" + }, + "description": "Cache Hit/Miss ratio. 100 % means, all queries could be answered from the cache, 0% - all queries must be resolved via external DNS", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 18, + "y": 8 + }, + "id": 47, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": ["mean"], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "sum(increase(blocky_cache_hit_count[$__range])) / (sum(increase(blocky_cache_hit_count[$__range])) + sum(increase(blocky_cache_miss_count[$__range])))", + "format": "table", + "instant": false, + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Cache Hit/Miss ratio", + "transparent": true, + "type": "stat" + }, + { + "datasource": { + "uid": "${DS_PROMETHEUS}" + }, + "description": "Number of occured errors", + "fieldConfig": { + "defaults": { + "decimals": 0, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "#299c46", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 1 + }, + { + "color": "#d44a3a" + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 0, + "y": 12 + }, + "id": 36, + "links": [], + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "sum(increase(blocky_error_total[$__range]))", + "format": "table", + "instant": false, + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Error count", + "transparent": true, + "type": "stat" + }, + { + "datasource": { + "uid": "${DS_PROMETHEUS}" + }, + "description": "Amount of performed DNS queries to prefetch cached queries", + "fieldConfig": { + "defaults": { + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 0, + "y": 9 + }, + "id": 53, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "ceil(sum(increase(blocky_prefetch_count[$__range])))", + "format": "table", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Prefetch count", + "transparent": true, + "type": "stat" + }, + { + "datasource": { + "uid": "${DS_PROMETHEUS}" + }, + "description": "Amount of prefetch queries per minute", + "fieldConfig": { + "defaults": { + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 12, + "y": 11 + }, + "id": 51, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "sum(rate(blocky_prefetch_count[5m])) * 60", + "format": "table", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Prefetch rate per min", + "transparent": true, + "type": "stat" + }, + { + "datasource": { + "uid": "${DS_PROMETHEUS}" + }, + "description": "How many of cached entries were prefetched automatically", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 18, + "y": 11 + }, + "id": 58, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": ["mean"], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "sum(increase(blocky_prefetch_hit_count[$__range])) / (sum(increase(blocky_cache_hit_count[$__range])))", + "format": "table", + "instant": false, + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Prefetch Hit ratio", + "transparent": true, + "type": "stat" + }, + { + "description": "Time since last list refresh", + "fieldConfig": { + "defaults": { + "decimals": 0, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 18, + "y": 5 + }, + "id": 57, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": false, + "expr": "sum(time() -blocky_last_list_group_refresh)/ sum(up{job=~\"$job\"})", + "format": "table", + "instant": true, + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Last list refresh", + "transparent": true, + "type": "stat" + }, + { + "datasource": { + "uid": "${DS_PROMETHEUS}" + }, + "description": "Amount of unique domains in the prefetched cache", + "fieldConfig": { + "defaults": { + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 6, + "x": 6, + "y": 9 + }, + "id": 49, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "sum(blocky_prefetch_domain_name_cache_count)/ sum(up{job=~\"$job\"})", + "format": "table", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Prefetch domain count", + "transparent": true, + "type": "stat" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "avg requests / min", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 24, + "x": 0, + "y": 15 + }, + "id": 10, + "options": { + "legend": { + "calcs": [], + "displayMode": "hidden", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "sum(rate(blocky_query_total[5m])) * 60", + "format": "time_series", + "instant": false, + "interval": "", + "legendFormat": " ", + "refId": "A" + } + ], + "title": "Request rate", + "transparent": true, + "type": "timeseries" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "avg requests / min", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "bars", + "fillOpacity": 100, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "links": [], + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 24, + "x": 0, + "y": 22 + }, + "id": 52, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.3.3", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "sum by (client) (rate(blocky_query_total[5m])) * 60", + "format": "time_series", + "instant": false, + "interval": "", + "legendFormat": " {{client}}", + "refId": "A" + } + ], + "title": "Request rate per client", + "transparent": true, + "type": "timeseries" + }, + { + "cards": {}, + "color": { + "cardColor": "#FADE2A", + "colorScale": "sqrt", + "colorScheme": "interpolateYlOrBr", + "exponent": 0.5, + "mode": "opacity" + }, + "dataFormat": "tsbuckets", + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 29 + }, + "heatmap": {}, + "hideZeroBuckets": false, + "highlightCards": true, + "id": 22, + "legend": { + "show": true + }, + "reverseYBuckets": false, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "sum(increase(blocky_request_duration_ms_bucket{response_type=\"RESOLVED\"}[$__range])) by (le)", + "format": "heatmap", + "instant": false, + "interval": "", + "legendFormat": "{{le}}", + "refId": "A" + } + ], + "title": "request duration (upstream)", + "tooltip": { + "show": true, + "showHistogram": false + }, + "transparent": true, + "type": "heatmap", + "xAxis": { + "show": true + }, + "yAxis": { + "format": "ms", + "logBase": 1, + "show": true + }, + "yBucketBound": "auto" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "decimals": 0, + "mappings": [], + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 38 + }, + "id": 2, + "links": [], + "maxDataPoints": 3, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "values": ["value", "percent"] + }, + "pieType": "donut", + "reduceOptions": { + "calcs": ["sum"], + "fields": "", + "values": false + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "6.6.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": false, + "expr": " sort_desc(sum by (type) (ceil(increase(blocky_query_total[$__range]))))", + "format": "time_series", + "instant": true, + "interval": "", + "legendFormat": "{{ type }}", + "refId": "A" + } + ], + "title": "Query by type", + "transparent": true, + "type": "piechart" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "decimals": 0, + "mappings": [], + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 38 + }, + "id": 8, + "links": [], + "maxDataPoints": 3, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "values": ["value", "percent"] + }, + "pieType": "donut", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "6.6.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": false, + "expr": "sort_desc(sum by (client) (ceil(increase(blocky_query_total[$__range]))))", + "format": "time_series", + "instant": true, + "interval": "", + "legendFormat": "{{ client }}", + "refId": "A" + } + ], + "title": "Query per Client", + "transparent": true, + "type": "piechart" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "decimals": 0, + "mappings": [], + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 46 + }, + "id": 32, + "links": [], + "maxDataPoints": 3, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "values": ["value"] + }, + "pieType": "donut", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "6.6.2", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": false, + "expr": "topk(1, blocky_blacklist_cache) by (group)", + "format": "time_series", + "instant": true, + "interval": "", + "legendFormat": "{{ group }}", + "refId": "A" + } + ], + "title": "Blacklist by group", + "transparent": true, + "type": "piechart" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "decimals": 0, + "mappings": [], + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 46 + }, + "id": 14, + "links": [], + "maxDataPoints": 3, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "values": ["value", "percent"] + }, + "pieType": "donut", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "tooltip": { + "mode": "single" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": false, + "expr": " sort_desc(sum by (reason) (ceil(increase(blocky_response_total[$__range]))))", + "format": "time_series", + "instant": true, + "interval": "", + "legendFormat": "{{reason}}", + "refId": "A" + } + ], + "title": "Response Reasons", + "transparent": true, + "type": "piechart" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "decimals": 0, + "mappings": [], + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 54 + }, + "id": 38, + "interval": "", + "links": [], + "maxDataPoints": 3, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "values": ["value", "percent"] + }, + "pieType": "donut", + "reduceOptions": { + "calcs": ["sum"], + "fields": "", + "values": false + }, + "tooltip": { + "mode": "single" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": false, + "expr": " sort_desc(sum by (response_type) (ceil(increase(blocky_response_total[$__range]))))", + "format": "time_series", + "instant": true, + "interval": "", + "legendFormat": "{{response_type}}", + "refId": "A" + } + ], + "title": "Response Type", + "transparent": true, + "type": "piechart" + }, + { + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "decimals": 0, + "mappings": [], + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 54 + }, + "id": 12, + "links": [], + "maxDataPoints": 3, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "values": ["value", "percent"] + }, + "pieType": "donut", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "tooltip": { + "mode": "single" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": false, + "expr": " sort_desc(sum by (response_code) (ceil(increase(blocky_response_total[$__range]))))", + "format": "time_series", + "instant": true, + "interval": "", + "legendFormat": "{{response_code}}", + "refId": "A" + } + ], + "title": "Response status", + "transparent": true, + "type": "piechart" + } + ], + "refresh": false, + "schemaVersion": 34, + "style": "dark", + "tags": [], + "templating": { + "list": [ + { + "current": { + "selected": false, + "text": "Prometheus", + "value": "Prometheus" + }, + "hide": 0, + "includeAll": false, + "multi": false, + "name": "DS_PROMETHEUS", + "label": "datasource", + "options": [], + "query": "prometheus", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "type": "datasource" + }, + { + "hide": 0, + "label": "blocky API URL", + "name": "blocky_url", + "query": "${VAR_BLOCKY_URL}", + "skipUrlSync": false, + "type": "constant", + "current": { + "value": "${VAR_BLOCKY_URL}", + "text": "${VAR_BLOCKY_URL}", + "selected": false + }, + "options": [ + { + "value": "${VAR_BLOCKY_URL}", + "text": "${VAR_BLOCKY_URL}", + "selected": false + } + ] + }, + { + "current": {}, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "definition": "label_values(blocky_blocking_enabled,job)", + "hide": 0, + "includeAll": true, + "label": "job", + "multi": false, + "name": "job", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(blocky_blocking_enabled,job)", + "refId": "PrometheusVariableQueryEditor-VariableQuery" + }, + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "type": "query" + } + ] + }, + "time": { + "from": "now-3h", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ] + }, + "timezone": "", + "title": "blocky", + "uid": "JvOqE4gRk", + "version": 1, + "weekStart": "" +} diff --git a/enterprise/blocky/14.0.1/dashboardpsql.json b/enterprise/blocky/14.0.1/dashboardpsql.json new file mode 100644 index 00000000000..203723f09d2 --- /dev/null +++ b/enterprise/blocky/14.0.1/dashboardpsql.json @@ -0,0 +1,874 @@ +{ + "__inputs": [ + { + "name": "DS_POSTGRES", + "label": "Postgres", + "description": "", + "type": "datasource", + "pluginId": "postgres", + "pluginName": "Postgres" + } + ], + "__requires": [ + { + "type": "panel", + "id": "barchart", + "name": "Bar chart", + "version": "" + }, + { + "type": "panel", + "id": "bargauge", + "name": "Bar gauge", + "version": "" + }, + { + "type": "grafana", + "id": "grafana", + "name": "Grafana", + "version": "8.1.2" + }, + { + "type": "datasource", + "id": "postgres", + "name": "Postgres", + "version": "1.0.0" + }, + { + "type": "panel", + "id": "piechart", + "name": "Pie chart", + "version": "" + }, + { + "type": "panel", + "id": "table", + "name": "Table", + "version": "" + }, + { + "type": "panel", + "id": "timeseries", + "name": "Time series", + "version": "" + } + ], + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": "-- Grafana --", + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "editable": true, + "gnetId": null, + "graphTooltip": 0, + "id": null, + "iteration": 1631130053746, + "links": [], + "panels": [ + { + "cacheTimeout": null, + "datasource": "${DS_POSTGRES}", + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "displayName": "${__field.labels.response_type}", + "mappings": [], + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 6, + "x": 0, + "y": 0 + }, + "id": 14, + "interval": null, + "links": [], + "options": { + "displayLabels": [], + "legend": { + "displayMode": "table", + "placement": "right", + "values": ["value"] + }, + "pieType": "pie", + "reduceOptions": { + "calcs": ["sum"], + "fields": "", + "values": false + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.2", + "repeatDirection": "v", + "targets": [ + { + "format": "time_series", + "group": [], + "metricColumn": "none", + "rawQuery": true, + "rawSql": "SELECT t.response_type, max(t.request_Ts) as time, count(*) as cnt from log_entries t \n WHERE $__timeFilter(t.request_Ts) and \n t.response_type in ($response_type) and \n t.client_name in ($client_name) and \n (length(''$question'') = 0 or POSITION(lower(''$question'') IN t.question_name) > 0)\n group by t.response_type\n order by time", + "refId": "A", + "select": [ + [ + { + "params": ["value"], + "type": "column" + } + ] + ], + "timeColumn": "time", + "where": [ + { + "name": "$__timeFilter", + "params": [], + "type": "macro" + } + ] + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Query count by response type", + "transformations": [], + "type": "piechart" + }, + { + "datasource": "${DS_POSTGRES}", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "mappings": [] + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 6, + "x": 6, + "y": 0 + }, + "id": 16, + "options": { + "displayLabels": [], + "legend": { + "displayMode": "table", + "placement": "right", + "values": ["value"] + }, + "pieType": "pie", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": false + }, + "tooltip": { + "mode": "single" + } + }, + "targets": [ + { + "format": "time_series", + "group": [], + "metricColumn": "none", + "rawQuery": true, + "rawSql": "SELECT max(t.request_ts) AS time,\n case when t.reason like ''BLOCKED%'' then SPLIT_PART(SPLIT_PART(t.reason,''('',-1), '')'',1) else '''' end AS metric,\n count(t.reason) AS cnt\nFROM log_entries t\nWHERE t.response_type =''BLOCKED''\n AND $__timeFilter(t.request_Ts)\n AND t.client_name in ($client_name)\n AND (length(''$question'') = 0 or POSITION(lower(''$question'') IN t.question_name) > 0)\nGROUP BY 2\nORDER BY time", + "refId": "A", + "select": [ + [ + { + "params": ["duration_ms"], + "type": "column" + } + ] + ], + "table": "log_entries", + "timeColumn": "request_ts", + "timeColumnType": "timestamp", + "where": [ + { + "name": "$__timeFilter", + "params": [], + "type": "macro" + } + ] + } + ], + "title": "Blocked by Blacklist", + "type": "piechart" + }, + { + "cacheTimeout": null, + "datasource": "${DS_POSTGRES}", + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 0 + }, + "id": 13, + "interval": null, + "links": [], + "options": { + "displayMode": "gradient", + "orientation": "horizontal", + "reduceOptions": { + "calcs": ["lastNotNull"], + "fields": "", + "values": true + }, + "showUnfilled": true, + "text": {} + }, + "pluginVersion": "8.1.2", + "repeatDirection": "v", + "targets": [ + { + "format": "table", + "group": [], + "metricColumn": "none", + "rawQuery": true, + "rawSql": "SELECT max(t.request_Ts) as time, t.client_name as metric, count(*) as cnt from log_entries t \n WHERE $__timeFilter(t.request_Ts) and \n t.response_type in ($response_type) and \n t.client_name in ($client_name) and \n (length(''$question'') = 0 or POSITION(lower(''$question'') IN t.question_name) > 0)\n group by t.client_name\n order by 3 desc", + "refId": "A", + "select": [ + [ + { + "params": ["value"], + "type": "column" + } + ] + ], + "timeColumn": "time", + "where": [ + { + "name": "$__timeFilter", + "params": [], + "type": "macro" + } + ] + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Query count by client", + "transformations": [], + "type": "bargauge" + }, + { + "datasource": "${DS_POSTGRES}", + "description": "Top 20 effective top level domain plus one more label", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "fillOpacity": 67, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineWidth": 2 + }, + "displayName": "count", + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 8 + }, + "id": 11, + "options": { + "barWidth": 0.26, + "groupWidth": 0.7, + "legend": { + "calcs": [], + "displayMode": "hidden", + "placement": "bottom" + }, + "orientation": "horizontal", + "showValue": "never", + "stacking": "none", + "text": { + "valueSize": 10 + }, + "tooltip": { + "mode": "single" + } + }, + "targets": [ + { + "format": "table", + "group": [], + "hide": false, + "metricColumn": "question_name", + "rawQuery": true, + "rawSql": "SELECT t.effective_tldp as metric, count(*) as value from log_entries t \nWHERE $__timeFilter(t.request_Ts) \n and t.response_type in ($response_type) \n and t.client_name in ($client_name) \n and (length(''$question'') = 0 or POSITION(lower(''$question'') IN t.question_name) > 0) \n group by t.effective_tldp order by count(*) desc limit 20", + "refId": "A", + "select": [ + [ + { + "params": ["value"], + "type": "column" + } + ] + ], + "table": "log_entries", + "timeColumn": "request_ts", + "where": [] + } + ], + "title": "Top 20 effective TLD+1", + "type": "barchart" + }, + { + "datasource": "${DS_POSTGRES}", + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "axisSoftMin": 0, + "fillOpacity": 67, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineWidth": 2 + }, + "displayName": "count", + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 8 + }, + "id": 8, + "options": { + "barWidth": 0.26, + "groupWidth": 0.7, + "legend": { + "calcs": [], + "displayMode": "hidden", + "placement": "bottom" + }, + "orientation": "horizontal", + "showValue": "never", + "stacking": "none", + "text": { + "valueSize": 10 + }, + "tooltip": { + "mode": "single" + } + }, + "targets": [ + { + "format": "table", + "group": [], + "hide": false, + "metricColumn": "question_name", + "rawQuery": true, + "rawSql": "SELECT t.question_name as metric, count(*) as value from log_entries t \n WHERE $__timeFilter(t.request_Ts) and \n t.response_type in ($response_type) and \n t.client_name in ($client_name) and \n (length(''$question'') = 0 or POSITION(lower(''$question'') IN t.question_name) > 0) \n group by t.question_name order by count(*) desc limit 20", + "refId": "A", + "select": [ + [ + { + "params": ["value"], + "type": "column" + } + ] + ], + "table": "log_entries", + "timeColumn": "request_ts", + "where": [] + } + ], + "title": "Top 20 queried domains", + "type": "barchart" + }, + { + "datasource": "${DS_POSTGRES}", + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "queries count", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "bars", + "fillOpacity": 35, + "gradientMode": "hue", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 1, + "pointSize": 12, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": 3600000, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "displayName": "${__field.labels.client_name}", + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 24, + "x": 0, + "y": 16 + }, + "id": 12, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "right" + }, + "tooltip": { + "mode": "single" + } + }, + "pluginVersion": "8.1.2", + "targets": [ + { + "format": "time_series", + "group": [], + "metricColumn": "none", + "rawQuery": true, + "rawSql": "SELECT\n $__timeGroupAlias(t.request_Ts, ''30m''),\n t.client_name,\n count(*) as c\nFROM log_entries t\nWHERE\n $__timeFilter(t.request_Ts) and \n t.response_type in ($response_type) and \n t.client_name in ($client_name) and \n (length(''$question'') = 0 or POSITION(lower(''$question'') IN t.question_name) > 0)\nGROUP BY 1,2\nORDER BY 1", + "refId": "A", + "select": [ + [ + { + "params": ["duration_ms"], + "type": "column" + } + ] + ], + "table": "log_entries", + "timeColumn": "request_ts", + "timeColumnType": "timestamp", + "where": [ + { + "name": "$__timeFilter", + "params": [], + "type": "macro" + } + ] + } + ], + "title": "Queries number per client (30m)", + "type": "timeseries" + }, + { + "datasource": "${DS_POSTGRES}", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": -1, + "drawStyle": "bars", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "stepBefore", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": true, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "line" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "dtdurationms" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 23 + }, + "id": 10, + "options": { + "legend": { + "calcs": [], + "displayMode": "hidden", + "placement": "bottom" + }, + "tooltip": { + "mode": "single" + } + }, + "targets": [ + { + "format": "time_series", + "group": [], + "metricColumn": "none", + "rawQuery": true, + "rawSql": "SELECT\n EXTRACT(EPOCH from t.request_Ts) as time,\n t.duration_ms\nFROM log_entries t\nWHERE\n $__timeFilter(t.request_Ts) and \n t.response_type in ($response_type) and \n t.client_name in ($client_name) and \n (length(''$question'') = 0 or POSITION(lower(''$question'') IN t.question_name) > 0)\nORDER BY request_ts", + "refId": "A", + "select": [ + [ + { + "params": ["duration_ms"], + "type": "column" + } + ] + ], + "table": "log_entries", + "timeColumn": "request_ts", + "timeColumnType": "timestamp", + "where": [ + { + "name": "$__timeFilter", + "params": [], + "type": "macro" + } + ] + } + ], + "title": "Query duration", + "type": "timeseries" + }, + { + "datasource": "${DS_POSTGRES}", + "description": "Last 100 queries, newest on top", + "fieldConfig": { + "defaults": { + "custom": { + "align": null, + "displayMode": "auto", + "filterable": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "time" + }, + "properties": [ + { + "id": "unit", + "value": "dateTimeAsIsoNoDateIfToday" + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 31 + }, + "id": 4, + "options": { + "showHeader": true + }, + "pluginVersion": "8.1.2", + "targets": [ + { + "format": "table", + "group": [], + "metricColumn": "none", + "rawQuery": true, + "rawSql": "SELECT EXTRACT(EPOCH from t.request_Ts) as \"time\", \n t.client_ip as \"client IP\", \n t.client_name as \"client name\", \n t.duration_ms as \"duration in ms\", \n t.response_type as \"response type\", \n t.question_type as \"question type\", \n t.question_name as \"question name\", \n t.effective_tldp as \"effective TLD+1\", \n t.answer as \"answer\" from log_entries t \n WHERE $__timeFilter(t.request_Ts) and \n t.response_type in ($response_type) and \n t.client_name in ($client_name) and \n (length(''$question'') = 0 or POSITION(lower(''$question'') IN t.question_name) > 0) \n order by t.request_Ts desc limit 100", + "refId": "A", + "select": [ + [ + { + "params": ["value"], + "type": "column" + } + ] + ], + "timeColumn": "time", + "where": [ + { + "name": "$__timeFilter", + "params": [], + "type": "macro" + } + ] + } + ], + "timeFrom": null, + "timeShift": null, + "title": "Last queries", + "type": "table" + } + ], + "refresh": "", + "schemaVersion": 30, + "style": "dark", + "tags": [], + "templating": { + "list": [ + { + "current": { + "selected": false, + "text": "BlockyPostgres", + "value": "blockypostgres" + }, + "hide": 0, + "includeAll": false, + "label": "datasource", + "multi": false, + "name": "DS_POSTGRES", + "options": [], + "query": "grafana-postgresql-datasource", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "type": "datasource" + }, + { + "allValue": "", + "current": {}, + "datasource": "${DS_POSTGRES}", + "definition": "select distinct client_name from log_entries", + "description": null, + "error": null, + "hide": 0, + "includeAll": true, + "label": "Client name", + "multi": true, + "name": "client_name", + "options": [], + "query": "select distinct client_name from log_entries", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "allValue": null, + "current": {}, + "datasource": "${DS_POSTGRES}", + "definition": "select distinct response_type from log_entries", + "description": null, + "error": null, + "hide": 0, + "includeAll": true, + "label": "Response type", + "multi": true, + "name": "response_type", + "options": [], + "query": "select distinct response_type from log_entries", + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "current": { + "selected": false, + "text": "", + "value": "" + }, + "description": null, + "error": null, + "hide": 0, + "label": "Domain (contains)", + "name": "question", + "options": [ + { + "selected": true, + "text": "", + "value": "" + } + ], + "query": "", + "skipUrlSync": false, + "type": "textbox" + } + ] + }, + "time": { + "from": "now-24h", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Blocky query", + "uid": "AVmWSVWgz", + "version": 3 +} diff --git a/enterprise/blocky/14.0.1/ix_values.yaml b/enterprise/blocky/14.0.1/ix_values.yaml new file mode 100644 index 00000000000..4f3cfe95029 --- /dev/null +++ b/enterprise/blocky/14.0.1/ix_values.yaml @@ -0,0 +1,380 @@ +image: + repository: spx01/blocky + tag: v0.23@sha256:24855b63986c790093554a1f62b58379a06bc10a90ee073906e7c39bf692adcc + pullPolicy: IfNotPresent +k8sgatewayImage: + repository: quay.io/oriedge/k8s_gateway + pullPolicy: IfNotPresent + tag: v0.4.0@sha256:7bdbd447c0244b8f89de9cd6f4826ed0ac66c9406fac3a4ac80081020c251c6b +manifestManager: + enabled: true +workload: + main: + replicas: 2 + strategy: RollingUpdate + podSpec: + containers: + main: + probes: + liveness: + enabled: false + type: exec + command: + - /app/blocky + - healthcheck + readiness: + enabled: false + type: exec + command: + - /app/blocky + - healthcheck + startup: + enabled: false + type: exec + command: + - /app/blocky + - healthcheck +# -- Blocky Config File content +blockyConfig: {} +# upstream: +# default: +# - 1.1.1.1 + +# -- some general blocky settings +blocky: + # -- Enable prometheus annotations + enablePrometheus: true +service: + main: + enabled: true + ports: + main: + enabled: true + port: 4000 + protocol: http + targetPort: 4000 + dns: + enabled: true + ports: + dnstcp: + enabled: true + port: 53 + targetPort: 53 + dnsudp: + enabled: true + port: 53 + protocol: udp + targetPort: 53 + dot: + enabled: true + ports: + dot: + enabled: true + port: 853 + protocol: tcp + targetPort: 853 + https: + enabled: true + ports: + https: + enabled: true + port: 4443 + protocol: https + targetPort: 4443 + k8sgateway: + enabled: true + ports: + k8sgateway: + enabled: true + port: 5353 + protocol: udp + targetPort: 5353 +## TODO Add support for SCALE certificates and certificates secrets here +certFile: "" +keyFile: "" +logLevel: info +logFormat: text +logTimestamp: true +logPrivacy: false +dohUserAgent: "" +minTlsServeVersion: 1.2 +# -- set the default DNS upstream servers +# Primarily designed for inclusion in the TrueNAS SCALE GUI +defaultUpstreams: + - 1.1.1.1 + - 1.0.0.1 + - 8.8.8.8 + - 8.8.4.4 + - 9.9.9.9 + - 149.112.112.112 + - 208.67.222.222 + - 208.67.220.220 + - 8.26.56.26 + - 8.20.247.20 + - 185.228.168.9 + - 185.228.169.9 + - 76.76.19.19 + - 76.223.122.150 + - 76.76.2.0 + - 76.76.10.0 +# -- set additional upstreams +# Primarily designed for inclusion in the TrueNAS SCALE GUI +upstreams: +# - name: group2 +# dnsservers: +# - 1.1.1.1 + +# -- set bootstrap dns (not needed) +# Ensures bootstrap encryption and ensure it doesn't use k8s dns +bootstrapDns: + # -- Upstream + upstream: "" + # -- IP's linked to upstream DoT/DoH DNS name + ips: [] +# -- set additional bootstrap dns (not needed, only used if bootstrapDns is set) +additionalBootstrapDns: [] +# - upstream: "" +# ips: [] + +# -- Return empty answer for these queries +filtering: + # -- Ensures filtering by query type + queryTypes: [] +# -- Set manual custom DNS resolution +customDNS: + customTTL: 1h + filterUnmappedTypes: true + rewrite: [] + # - in: something.com + # out: somethingelse.com + mapping: [] + # - domain: something.com + # dnsserver: 192.168.178.1 +# -- Setup client-name lookup +clientLookup: + # -- upstream used for client-name lookup + upstream: "" + singleNameOrder: [] + clients: + # - domain: laptop + # ips: [] +# -- Setup caching +caching: + minTime: 5m + maxTime: 30m + maxItemsCount: 0 + prefetching: false + prefetchExpires: 2h + prefetchThreshold: 5 + prefetchMaxItemsCount: 0 + cacheTimeNegative: 30m +# -- set conditional settings +# Primarily designed for inclusion in the TrueNAS SCALE GUI +conditional: + rewrite: [] + # - in: something.com + # out: somethingelse.com + mapping: [] + # - domain: something.com + # dnsserver: 192.168.178.1 +# -- set blocking settings using Lists +# Primarily designed for inclusion in the TrueNAS SCALE GUI +blocking: + # -- Sets the blocktype + blockType: nxDomain + # -- Sets the block ttl + blockTTL: 6h + # -- Sets the block refreshPeriod + refreshPeriod: 4h + # -- Sets the block download timeout + downloadTimeout: 60s + # -- Sets the block download attempt count + downloadAttempts: 3 + # -- Sets the block download cooldown + downloadCooldown: 2s + # -- Set the start strategy (blocking | failOnError | fast) + startStrategy: blocking + # -- Sets how many list-groups can be processed at the same time + processingConcurrency: 4 + # -- Add blocky whitelists + whitelist: [] + # - name: ads + # lists: + # - https://someurl.com/list.txt + # - /somefile.txt + + # -- Blocky blacklists + blacklist: [] + # - name: ads + # lists: + # - https://someurl.com/list.txt + # - /somefile.txt + + # -- Blocky clientGroupsBlock + clientGroupsBlock: [] + # - name: default + # groups: + # - ads +# -- configure using hostsfile for lookups +# Allows for using the hosts configured in kubernetes and such +hostsFile: + enabled: false + filePath: /etc/hosts + hostsTTL: 60m + refreshPeriod: 30m +## TODO: add this with postgresql support as well +# queryLog: +# type: csv +# target: /logs +# logRetentionDays: 0 +# creationAttempts: 3 +# CreationCooldown: 2 +podOptions: + automountServiceAccountToken: true +portal: + open: + enabled: false +serviceAccount: + main: + # -- Specifies whether a service account should be created + enabled: true + primary: true +# -- Create a ClusterRole and ClusterRoleBinding +# @default -- See below +rbac: + main: + # -- Enables or disables the ClusterRole and ClusterRoleBinding + enabled: true + primary: true + clusterWide: true + # -- Set Rules on the ClusterRole + rules: + - apiGroups: + - "" + resources: + - services + - namespaces + verbs: + - list + - watch + - apiGroups: + - extensions + - networking.k8s.io + resources: + - ingresses + verbs: + - list + - watch +k8sgateway: + enabled: true + # -- TTL for non-apex responses (in seconds) + ttl: 300 + # -- Limit what kind of resources to watch, e.g. watchedResources: ["Ingress"] + watchedResources: [] + # -- Service name of a secondary DNS server (should be `serviceName.namespace`) + secondary: "" + # -- Override the default `serviceName.namespace` domain apex + apex: "" + # -- list of processed domains + domains: [] + # -- Delegated domain + # - domain: "example.com" + # # -- Optional configuration option for DNS01 challenge that will redirect all acme + # # challenge requests to external cloud domain (e.g. managed by cert-manager) + # # See: https://cert-manager.io/docs/configuration/acme/dns01/ + # dnsChallenge: + # enabled: false + # domain: dns01.clouddns.com + + forward: + enabled: false + primary: tls://1.1.1.1 + secondary: tls://1.0.0.1 + options: + - name: tls_servername + value: cloudflare-dns.com + +configmap: + dashboard: + enabled: true + labels: + grafana_dashboard: "1" + data: + blocky.json: >- + {{ .Files.Get "dashboard.json" | indent 8 }} + blockypostgres.json: >- + {{ .Files.Get "dashboardpsql.json" | indent 8 }} + datasource: + enabled: true + labels: + grafana_datasources: "1" + data: + datasourceblockypsql.yaml: |- + apiVersion: 1 + datasources: + - name: BlockyPostgres + type: postgres + uid: blockypostgres + url: {{ printf "%s.%s:5432" (.Values.cnpg.main.creds.host | trimAll "\"") .Release.Namespace }} + access: proxy + user: {{ .Values.cnpg.main.user }} + secureJsonData: + password: {{ .Values.cnpg.main.creds.password | default "na" }} + jsonData: + database: {{ .Values.cnpg.main.database }} + sslmode: 'disable' # disable/require/verify-ca/verify-full + maxOpenConns: 100 # Grafana v5.4+ + maxIdleConns: 100 # Grafana v5.4+ + maxIdleConnsAuto: true # Grafana v9.5.1+ + connMaxLifetime: 14400 # Grafana v5.4+ + postgresVersion: 1500 # 903=9.3, 904=9.4, 905=9.5, 906=9.6, 1000=10 + timescaledb: false + +metrics: + main: + # -- Enable and configure a Prometheus serviceMonitor for the chart under this key. + # @default -- See values.yaml + enabled: true + type: "servicemonitor" + endpoints: + - port: main + path: /metrics + # -- Enable and configure Prometheus Rules for the chart under this key. + # @default -- See values.yaml + prometheusRule: + enabled: false + labels: {} + # -- Configure additionial rules for the chart under this key. + # @default -- See prometheusrules.yaml + rules: [] + # - alert: UnifiPollerAbsent + # annotations: + # description: Unifi Poller has disappeared from Prometheus service discovery. + # summary: Unifi Poller is down. + # expr: | + # absent(up{job=~".*unifi-poller.*"} == 1) + # for: 5m + # labels: + # severity: critical + +redis: + enabled: true +# CANNOT be defined in above yaml section +queryLog: + # optional one of: mysql, postgresql, csv, csv-client. If empty, log to console + type: "postgresql" + # directory (should be mounted as volume in docker) for csv, db connection string for mysql, ignored for included postgresql + # target: /var/log/something + # postgresql target: postgres://user:password@db_host_or_ip:5432/db_name + # if > 0, deletes log files which are older than ... days + logRetentionDays: 0 + # optional: Max attempts to create specific query log writer, default: 3 + creationAttempts: 3 + # optional: Time between the creation attempts, default: 2s + creationCooldown: 2s + +cnpg: + main: + enabled: true + user: blocky + database: blocky diff --git a/enterprise/blocky/14.0.1/questions.yaml b/enterprise/blocky/14.0.1/questions.yaml new file mode 100755 index 00000000000..e425d50a30a --- /dev/null +++ b/enterprise/blocky/14.0.1/questions.yaml @@ -0,0 +1,3828 @@ +groups: + - name: Container Image + description: Image to be used for container + - name: General Settings + description: General Deployment Settings + - name: Workload Settings + description: Workload Settings + - name: App Configuration + description: App Specific Config Options + - name: Networking and Services + description: Configure Network and Services for Container + - name: Storage and Persistence + description: Persist and Share Data that is Separate from the Container + - name: Ingress + description: Ingress Configuration + - name: Security and Permissions + description: Configure Security Context and Permissions + - name: Resources and Devices + description: "Specify Resources/Devices to be Allocated to Workload" + - name: Middlewares + description: Traefik Middlewares + - name: Metrics + description: Metrics + - name: Addons + description: Addon Configuration + - name: Backup Configuration + description: Configure Velero Backup Schedule + - name: Advanced + description: Advanced Configuration + - name: Postgresql + description: Postgresql + - name: Documentation + description: Documentation + +portals: + open: + protocols: + - "$kubernetes-resource_configmap_tcportal-open_protocol" + host: + - "$kubernetes-resource_configmap_tcportal-open_host" + ports: + - "$kubernetes-resource_configmap_tcportal-open_port" + +questions: + - variable: global + group: General Settings + label: "Global Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: stopAll + label: Stop All + description: "Stops All Running pods and hibernates cnpg" + schema: + type: boolean + default: false + + - variable: workload + group: "Workload Settings" + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "" + schema: + additional_attrs: true + type: dict + attrs: + + - variable: type + label: Type (Advanced) + schema: + type: string + default: Deployment + enum: + - value: Deployment + description: Deployment + - value: DaemonSet + description: DaemonSet + + - variable: replicas + label: Replicas (Advanced) + description: Set the number of Replicas + schema: + type: int + show_if: [["type", "!=", "DaemonSet"]] + default: 1 + + - variable: podSpec + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: containers + label: Containers + schema: + additional_attrs: true + type: dict + attrs: + + - variable: main + label: Main Container + schema: + additional_attrs: true + type: dict + attrs: + + - variable: envList + label: Extra Environment Variables + description: "Please be aware that some variables are set in the background, adding duplicates here might cause issues or prevent the app from starting..." + schema: + type: list + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: extraArgs + label: Extra Args + schema: + type: list + default: [] + items: + - variable: arg + label: Arg + schema: + type: string + + - variable: advanced + label: Show Advanced Settings + description: Advanced settings are not covered by TrueCharts Support + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: command + label: Command + schema: + type: list + default: [] + items: + - variable: param + label: Param + schema: + type: string + + - variable: webUI + group: App Configuration + label: WebUI Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable Web UI + description: Enables Web UI + schema: + type: boolean + default: true + - variable: apiURL + label: API URL + description: API URL for webUI, including port. Only used when not using ingress + schema: + type: string + default: "http://127.0.0.1:4000" + - variable: overrideDefaults + group: App Configuration + label: Override Default Upstreams + description: Overrides the predefined DNS server upstream list + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: defaultUpstreams + label: Default Upstreams + schema: + type: list + default: [] + items: + - variable: upstreamEntry + label: Upstream Entry + schema: + type: string + required: true + default: "" + - variable: upstreams + group: App Configuration + label: Upstreams Groups + description: Refer to +
https://0xerr0r.github.io/blocky/configuration/#upstream-configuration + schema: + type: list + default: [] + items: + - variable: upstreamsGroupEntry + label: Upstreams Group Entry + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Group Name + schema: + type: string + required: true + default: "" + - variable: upstreams + label: Upstreams + schema: + type: list + required: true + default: [] + items: + - variable: upstreamEntry + label: upstream Entry + schema: + type: string + required: true + default: "" + - variable: bootstrapDns + group: App Configuration + label: Bootstrap DNS + description: Used to resolve upstream DoH and DoT servers that are specified as hostnames. +
Refer to https://0xerr0r.github.io/blocky/configuration/#bootstrap-dns-configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: upstream + label: Upstream + schema: + type: string + default: "" + - variable: ips + label: IPs + schema: + type: list + default: [] + items: + - variable: ipEntry + label: IP Entry + schema: + type: string + required: true + default: "" + - variable: additionalBootstrapDns + group: App Configuration + label: Additional Bootstrap DNS + schema: + type: list + show_if: [[ "bootstrapDns", "!=", {"upstream": "", "ips": []} ]] + default: [] + items: + - variable: additionalBootstrapDnsEntry + label: Additional Bootstrap DNS Entry + schema: + additional_attrs: true + type: dict + attrs: + - variable: upstream + label: Upstream + schema: + type: string + default: "" + - variable: ips + label: IPs + schema: + type: list + default: [] + items: + - variable: ipEntry + label: IP Entry + schema: + type: string + required: true + default: "" + - variable: filtering + group: App Configuration + label: Filtering + description: Define one or more DNS query types; all queries with these types will be dropped +
Refer to https://0xerr0r.github.io/blocky/configuration/#filtering + schema: + additional_attrs: true + type: dict + attrs: + - variable: queryTypes + label: Query Types + schema: + type: list + default: [] + items: + - variable: queryTypeEntry + label: Query Type Entry + schema: + type: string + required: true + default: "" + - variable: customDNS + group: App Configuration + label: Custom DNS + description: Define your own domain name to IP mappings. +
Refer to https://0xerr0r.github.io/blocky/configuration/#custom-dns + schema: + additional_attrs: true + type: dict + attrs: + - variable: customTTL + label: Custom TTL + schema: + type: string + default: 1h + - variable: filterUnmappedTypes + label: Filter Unmapped Types + schema: + type: boolean + default: true + - variable: rewrite + label: Rewrite + schema: + type: list + default: [] + items: + - variable: rewriteEntry + label: Rewrite Entry + schema: + type: dict + additional_attrs: true + attrs: + - variable: in + label: In + schema: + type: string + required: true + default: "" + - variable: out + label: Out + schema: + type: string + required: true + default: "" + - variable: mapping + label: Mapping + schema: + type: list + default: [] + items: + - variable: mappingEntry + label: Mapping Entry + schema: + type: dict + additional_attrs: true + attrs: + - variable: domain + label: Domain + schema: + type: string + required: true + default: "" + - variable: dnsserver + label: DNS Server + schema: + type: string + required: true + default: "" + - variable: clientLookup + group: App Configuration + label: Client Lookup + description: Blocky can try to resolve a user-friendly client name from the IP address or server URL (DoT and DoH) +
Refer to https://0xerr0r.github.io/blocky/configuration/#client-name-lookup + schema: + additional_attrs: true + type: dict + attrs: + - variable: upstream + label: Upstream + schema: + type: string + default: "" + - variable: singleNameOrder + label: Single Name Order + schema: + type: list + default: [] + items: + - variable: singleNameEntry + label: Single Name Entry + schema: + type: string + required: true + default: "" + - variable: clients + label: Clients + schema: + type: list + default: [] + items: + - variable: clientEntry + label: Client Entry + schema: + type: dict + additional_attrs: true + attrs: + - variable: domain + label: Domain + schema: + type: string + required: true + default: "" + - variable: ips + label: IPs + schema: + type: list + default: [] + items: + - variable: ipEntry + label: IP Entry + schema: + type: string + required: true + default: "" + - variable: caching + group: App Configuration + label: Caching + description: Refer to +
https://0xerr0r.github.io/blocky/configuration/#caching + schema: + additional_attrs: true + type: dict + attrs: + - variable: minTime + label: Min Time + schema: + type: string + default: 5m + - variable: maxTime + label: Max Time + schema: + type: string + default: 30m + - variable: maxItemsCount + label: Max Items Count + schema: + type: int + default: 0 + - variable: prefetching + label: Prefetching + schema: + type: boolean + default: false + - variable: prefetchExpires + label: Prefetch Expires + schema: + type: string + default: 2h + - variable: prefetchThreshold + label: Prefetch Threshold + schema: + type: int + default: 5 + - variable: prefetchMaxItemsCount + label: Prefetch Max Items Count + schema: + type: int + default: 0 + - variable: cacheTimeNegative + label: Cache Time Negative + schema: + type: string + default: 30m + - variable: conditional + group: App Configuration + label: Conditional + description: Define which DNS resolver(s) should be used for queries for the particular domain +
Refer to https://0xerr0r.github.io/blocky/configuration/#conditional-dns-resolution + schema: + additional_attrs: true + type: dict + attrs: + - variable: rewrite + label: Rewrite + schema: + type: list + default: [] + items: + - variable: rewriteEntry + label: Rewrite Entry + schema: + type: dict + additional_attrs: true + attrs: + - variable: in + label: In + schema: + type: string + required: true + default: "" + - variable: out + label: Out + schema: + type: string + required: true + default: "" + - variable: mapping + label: Mapping + schema: + type: list + default: [] + items: + - variable: mappingEntry + label: Mapping Entry + schema: + type: dict + additional_attrs: true + attrs: + - variable: domain + label: Domain + schema: + type: string + required: true + default: "" + - variable: dnsserver + label: DNS Server + schema: + type: string + required: true + default: "" + - variable: blocking + group: App Configuration + label: Blocking + description: Each black or whitelist can be either a path to the local file or a URL to download. All Urls must be grouped to a group name. +
Refer to https://0xerr0r.github.io/blocky/configuration/#blocking-and-whitelisting + schema: + additional_attrs: true + type: dict + attrs: + - variable: blockType + label: Block Type + description: Set the response should be sent to the client, if a requested query is blocked + schema: + type: string + default: nxDomain + - variable: blockTTL + label: Block TTL + description: Set the TTL for answers to blocked domains + schema: + type: string + default: 6h + - variable: refreshPeriod + label: Refresh Period + description: Set how often blocky should refresh list cache + schema: + type: string + default: 4h + - variable: downloadTimeout + label: Download Timeout + description: Download attempt timeout + schema: + type: string + default: 60s + - variable: downloadAttempts + label: Download Attempts + description: How many download attempts should be performed + schema: + type: int + default: 3 + - variable: downloadCooldown + label: Download Cooldown + description: Time between the download attempts + schema: + type: string + default: 2s + - variable: startStrategy + label: Start Strategy + description: | + blocking: all blocking lists will be loaded before DNS resolution starts.
+ failOnError: like blocking but blocky will shut down if any download fails.
+ fast: DNS resolution starts immediately without blocking which will be enabled after list load is completed + schema: + type: string + default: blocking + enum: + - value: blocking + description: Blocking + - value: failOnError + description: Fail On Error + - value: fast + description: Fast + - variable: processingConcurrency + label: Processing Concurrency + description: Sets how many list-groups can be processed at the same time + schema: + type: int + default: 4 + - variable: whitelist + label: Whitelist + description: Define whitelists, either URL or file + schema: + type: list + default: [] + items: + - variable: whitelistEntry + label: Whitelist Group Entry + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Group Name + schema: + type: string + required: true + default: "" + - variable: lists + label: Lists + schema: + type: list + required: true + default: [] + items: + - variable: listEntry + label: List Entry + schema: + type: string + required: true + default: "" + - variable: blacklist + label: Blacklist + description: Define blacklists, either URL or file + schema: + type: list + default: [] + items: + - variable: blacklistEntry + label: Blacklist Group Entry + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Group Name + schema: + type: string + required: true + default: "" + - variable: lists + label: Lists + schema: + type: list + required: true + default: [] + items: + - variable: listEntry + label: List Entry + schema: + type: string + required: true + default: "" + - variable: clientGroupsBlock + label: Client Groups Block + description: Define, which blocking group(s) should be used for which client in your network. + schema: + type: list + default: [] + items: + - variable: clientGroupBlockEntry + label: Client Group Block Entry + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Client Group Name + schema: + type: string + required: true + default: "" + - variable: groups + label: Groups + schema: + type: list + required: true + default: [] + items: + - variable: groupEntry + label: Group Entry + schema: + type: string + required: true + default: "" + - variable: hostsFile + group: App Configuration + label: Hosts File + description: You can enable resolving of entries, located in local hosts file. +
Refer to https://0xerr0r.github.io/blocky/configuration/#hosts-file + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: filePath + label: File Path + schema: + type: string + default: /etc/hosts + - variable: hostsTTL + label: Hosts TTL + schema: + type: string + default: 60m + - variable: refreshPeriod + label: Refresh Period + schema: + type: string + default: 30m + - variable: queryLog + group: App Configuration + label: Query Logging configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: type + label: Type + schema: + type: string + default: "" + enum: + - value: "" + description: Console + - value: postgresql + description: postgresql + - value: csv + description: csv + - value: csv-client + description: csv-client + - variable: target + label: Target + schema: + type: string + show_if: [["type", "!=", "postgresql"]] + default: "/var/log/something" + - variable: logRetentionDays + label: Log Retention Days + schema: + type: int + default: 0 + - variable: creationAttempts + label: Creation Attempts + schema: + type: int + default: 3 + - variable: creationCooldown + label: Creation Cooldown + schema: + type: string + default: 2s + - variable: k8sgateway + group: App Configuration + label: k8s-Gateway Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable k8s-Gateway + description: Enables k8s-Gateway + schema: + type: boolean + default: true + show_subquestions_if: true + subquestions: + - variable: domains + label: Domains + description: Please refer to CoreDNS docs for options + schema: + type: list + default: [] + items: + - variable: domainEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: domain + label: Domain name + schema: + type: string + required: true + default: example.com + - variable: dnsChallenge + label: Forward dnsChallenge + description: Optional configuration option for DNS01 challenge that will redirect all acme + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: domain + label: Forward to Domain + schema: + type: string + required: true + default: dns01.clouddns.com + - variable: advancedOptions + label: Advanced Options + schema: + type: boolean + default: false + show_if: [["enabled", "=", true]] + show_subquestions_if: true + subquestions: + - variable: ttl + label: ttl + description: TTL for non-apex responses (in seconds) + schema: + type: int + default: 300 + - variable: watchedResources + label: Watched Resources + description: imit what kind of resources to watch, e.g. Ingress + schema: + type: list + default: [] + items: + - variable: watchedResource + label: Watched Resource + schema: + type: string + default: "" + - variable: secondary + label: Secondary DNS Server Service + description: Service name of a secondary DNS server (should be serviceName.namespace) + schema: + type: string + default: "" + - variable: apex + label: Apex + description: Override the default `serviceName.namespace` domain apex + schema: + type: string + default: "" + - variable: TZ + label: Timezone + group: "General Settings" + schema: + type: string + default: "Etc/UTC" + $ref: + - "definitions/timezone" + + - variable: podOptions + group: "General Settings" + label: "Global Pod Options (Advanced)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: expertPodOpts + label: "Expert - Pod Options" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: hostNetwork + label: "Host Networking" + schema: + type: boolean + default: false + - variable: dnsConfig + label: "DNS Configuration" + schema: + type: dict + additional_attrs: true + attrs: + - variable: options + label: "Options" + schema: + type: list + default: [{"name": "ndots", "value": "1"}] + items: + - variable: optionsEntry + label: "Option Entry" + schema: + type: dict + additional_attrs: true + attrs: + - variable: name + label: "Name" + schema: + type: string + required: true + - variable: value + label: "Value" + schema: + type: string + - variable: nameservers + label: "Nameservers" + schema: + type: list + default: [] + items: + - variable: nsEntry + label: "Nameserver Entry" + schema: + type: string + required: true + - variable: searches + label: "Searches" + schema: + type: list + default: [] + items: + - variable: searchEntry + label: "Search Entry" + schema: + type: string + required: true + + - variable: imagePullSecretList + group: "General Settings" + label: "Image Pull Secrets" + schema: + type: list + default: [] + items: + - variable: pullsecretentry + label: "Pull Secret" + schema: + type: dict + additional_attrs: true + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: true + - variable: data + label: Data + schema: + type: dict + additional_attrs: true + attrs: + - variable: registry + label: "Registry" + schema: + type: string + required: true + default: "https://index.docker.io/v1/" + - variable: username + label: "Username" + schema: + type: string + required: true + default: "" + - variable: password + label: "Password" + schema: + type: string + required: true + private: true + default: "" + - variable: email + label: "Email" + schema: + type: string + required: true + default: "" + + - variable: service + group: Networking and Services + label: Configure Service(s) + schema: + additional_attrs: true + type: dict + attrs: + + - variable: dns + label: DNS Service + description: The DNS service + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Service + schema: + type: boolean + default: true + hidden: true + - variable: type + label: Service Type + description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: LoadBalancer + enum: + - value: LoadBalancer + description: LoadBalancer (Expose Ports) + - value: ClusterIP + description: ClusterIP (Do Not Expose Ports) + + - variable: loadBalancerIP + label: LoadBalancer IP + description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: ports + label: "Service's Port(s) Configuration" + schema: + additional_attrs: true + type: dict + attrs: + + - variable: dnstcp + label: DNS TCP Port Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: port + label: Port + description: This port exposes the container port on the service + schema: + type: int + default: 53 + required: true + - variable: dnsudp + label: DNS UDP Port Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: port + label: Port + description: This port exposes the container port on the service + schema: + type: int + default: 53 + required: true + - variable: dot + label: DoT Service + description: "DNS-over-TLS service" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Service + schema: + type: boolean + default: true + hidden: true + - variable: type + label: Service Type + description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: ClusterIP + enum: + - value: LoadBalancer + description: LoadBalancer (Expose Ports) + - value: ClusterIP + description: ClusterIP (Do Not Expose Ports) + + - variable: loadBalancerIP + label: LoadBalancer IP + description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: ports + label: "Service's Port(s) Configuration" + schema: + additional_attrs: true + type: dict + attrs: + + - variable: dot + label: DoT Port Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: port + label: Port + description: This port exposes the container port on the service + schema: + type: int + default: 853 + required: true + - variable: serviceexpert + group: Networking and Services + label: Show Expert Config + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + + - variable: scaleExternalInterface + description: Add External Interfaces + label: Add external Interfaces + group: Networking + schema: + type: list + items: + - variable: interfaceConfiguration + description: Interface Configuration + label: Interface Configuration + schema: + additional_attrs: true + type: dict + $ref: + - "normalize/interfaceConfiguration" + attrs: + - variable: hostInterface + description: Please Specify Host Interface + label: Host Interface + schema: + type: string + required: true + $ref: + - "definitions/interface" + - variable: ipam + description: Define how IP Address will be managed + label: IP Address Management + schema: + additional_attrs: true + type: dict + required: true + attrs: + - variable: type + description: Specify type for IPAM + label: IPAM Type + schema: + type: string + required: true + enum: + - value: dhcp + description: Use DHCP + - value: static + description: Use Static IP + - variable: staticIPConfigurations + label: Static IP Addresses + schema: + type: list + show_if: [["type", "=", "static"]] + items: + - variable: staticIP + label: Static IP + schema: + type: ipaddr + cidr: true + - variable: staticRoutes + label: Static Routes + schema: + type: list + show_if: [["type", "=", "static"]] + items: + - variable: staticRouteConfiguration + label: Static Route Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: destination + label: Destination + schema: + type: ipaddr + cidr: true + required: true + - variable: gateway + label: Gateway + schema: + type: ipaddr + cidr: false + required: true + + - variable: serviceList + label: Add Manual Custom Services + group: Networking and Services + schema: + type: list + default: [] + items: + - variable: serviceListEntry + label: Custom Service + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the service + schema: + type: boolean + default: true + hidden: true + - variable: name + label: Name + schema: + type: string + default: "" + - variable: type + label: Service Type + description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: LoadBalancer + enum: + - value: LoadBalancer + description: LoadBalancer (Expose Ports) + - value: ClusterIP + description: ClusterIP (Do Not Expose Ports) + - value: Simple + description: Deprecated CHANGE THIS + - variable: loadBalancerIP + label: LoadBalancer IP + description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: advancedsvcset + label: Show Advanced Service Settings + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: externalIPs + label: "External IP's" + description: "External IP's" + schema: + type: list + default: [] + items: + - variable: externalIP + label: External IP + schema: + type: string + - variable: ipFamilyPolicy + label: IP Family Policy + description: Specify the IP Policy + schema: + type: string + default: SingleStack + enum: + - value: SingleStack + description: SingleStack + - value: PreferDualStack + description: PreferDualStack + - value: RequireDualStack + description: RequireDualStack + - variable: ipFamilies + label: IP Families + description: (Advanced) The IP Families that should be used + schema: + type: list + default: [] + items: + - variable: ipFamily + label: IP Family + schema: + type: string + - variable: portsList + label: Additional Service Ports + schema: + type: list + default: [] + items: + - variable: portsListEntry + label: Custom ports + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Port + schema: + type: boolean + default: true + hidden: true + - variable: name + label: Port Name + schema: + type: string + default: "" + - variable: protocol + label: Port Type + schema: + type: string + default: tcp + enum: + - value: http + description: HTTP + - value: https + description: HTTPS + - value: tcp + description: TCP + - value: udp + description: UDP + - variable: targetPort + label: Target Port + description: This port exposes the container port on the service + schema: + type: int + required: true + - variable: port + label: Container Port + schema: + type: int + required: true + + - variable: persistenceList + label: Additional App Storage + group: Storage and Persistence + schema: + type: list + default: [] + items: + - variable: persistenceListEntry + label: Custom Storage + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the storage + schema: + type: boolean + default: true + hidden: true + - variable: type + label: Type of Storage + description: Sets the persistence type, Anything other than PVC could break rollback! + schema: + type: string + default: hostPath + enum: + - value: pvc + description: PVC + - value: hostPath + description: Host Path + - value: emptyDir + description: emptyDir + - value: nfs + description: NFS Share + - variable: server + label: NFS Server + schema: + show_if: [["type", "=", "nfs"]] + type: string + default: "" + - variable: path + label: Path on NFS Server + schema: + show_if: [["type", "=", "nfs"]] + type: string + default: "" + - variable: iscsi + label: iSCSI Options + schema: + show_if: [["type", "=", "iscsi"]] + type: dict + additional_attrs: true + attrs: + - variable: targetPortal + label: targetPortal + schema: + type: string + required: true + default: "" + - variable: iqn + label: iqn + schema: + type: string + required: true + default: "" + - variable: lun + label: lun + schema: + type: int + default: 0 + - variable: authSession + label: authSession + schema: + type: dict + additional_attrs: true + attrs: + - variable: username + label: username + schema: + type: string + default: "" + - variable: password + label: password + schema: + type: string + default: "" + - variable: usernameInitiator + label: usernameInitiator + schema: + type: string + default: "" + - variable: passwordInitiator + label: passwordInitiator + schema: + type: string + default: "" + - variable: authDiscovery + label: authDiscovery + schema: + type: dict + additional_attrs: true + attrs: + - variable: username + label: username + schema: + type: string + default: "" + - variable: password + label: password + schema: + type: string + default: "" + - variable: usernameInitiator + label: usernameInitiator + schema: + type: string + default: "" + - variable: passwordInitiator + label: passwordInitiator + schema: + type: string + default: "" + - variable: autoPermissions + label: Automatic Permissions Configuration + description: Automatically set permissions + schema: + show_if: [["type", "!=", "pvc"]] + type: dict + additional_attrs: true + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: chown + label: Run CHOWN + description: | + It will run CHOWN on the path with the given fsGroup + schema: + type: boolean + default: false + - variable: chmod + label: Run CHMOD + description: | + It will run CHMOD on the path with the given value
+ Format should be 3 digits, e.g. 770 + schema: + type: string + valid_chars: '[0-9]{3}' + default: "" + - variable: recursive + label: Recursive + description: | + It will run CHOWN and CHMOD recursively + schema: + type: boolean + default: false + - variable: readOnly + label: Read Only + schema: + type: boolean + default: false + - variable: hostPath + label: Host Path + description: Path inside the container the storage is mounted + schema: + show_if: [["type", "=", "hostPath"]] + type: hostpath + - variable: mountPath + label: Mount Path + description: Path inside the container the storage is mounted + schema: + type: string + default: "" + required: true + valid_chars: '^\/([a-zA-Z0-9._-]+(\s?[a-zA-Z0-9._-]+|\/?))+$' + - variable: medium + label: EmptyDir Medium + schema: + show_if: [["type", "=", "emptyDir"]] + type: string + default: "" + enum: + - value: "" + description: Default + - value: Memory + description: Memory + - variable: size + label: Size Quotum of Storage + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: 256Gi + - variable: storageClass + label: 'storageClass (Advanced)' + description: 'sets the storageClass to something other than iX default. Only for advanced usecases!' + schema: + show_if: [["type", "=", "pvc"]] + type: string + default: "" + - variable: static + label: 'Static Fixed PVC Bindings (Experimental)' + description: Link a PVC to a specific storage location + schema: + show_if: [["type", "=", "pvc"]] + type: dict + additional_attrs: true + attrs: + - variable: mode + label: mode + description: | + disabled: use normal dynamic PVCs + smb: connect to an SMB share + nfs: connect to an NFS share + schema: + type: string + default: "disabled" + enum: + - value: "disabled" + description: disabled + - value: smb + description: smb + - value: nfs + description: nfs + - variable: server + label: Server + description: server to connect to + schema: + type: string + show_if: [["mode", "!=", "disabled"]] + default: "myserver" + - variable: share + label: Share + description: share to connect to + schema: + type: string + show_if: [["mode", "!=", "disabled"]] + default: "/myshare" + - variable: user + label: User + description: connecting user + schema: + type: string + show_if: [["mode", "=", "smb"]] + default: "myuser" + - variable: domain + label: Domain + description: user domain + schema: + type: string + show_if: [["mode", "=", "smb"]] + default: "" + - variable: password + label: Password + description: connecting password + schema: + type: string + show_if: [["mode", "=", "smb"]] + default: "" + - variable: volumeSnapshots + label: 'Volume Snapshots (Experimental)' + description: Add an entry to the list to force creation of a volumeSnapshot of this PVC + schema: + show_if: [["type", "=", "pvc"]] + type: list + default: [] + items: + - variable: volumeSnapshotEntry + label: Custom volumeSnapshot + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + description: 'WARNING: renaming this, means deletion of the snapshot with the old name!' + schema: + type: string + default: "mysnapshot" + required: true + - variable: volumeSnapshotClassName + label: 'volumeSnapshot Class Name (Advanced)' + description: For use with PVCs using a non-default storageClass + schema: + type: string + default: "" + + - variable: ingress + label: "" + group: Ingress + schema: + additional_attrs: true + type: dict + attrs: + + - variable: main + label: Main Ingress + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable Ingress + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: hosts + label: Hosts + schema: + type: list + default: [] + items: + - variable: hostEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: host + label: HostName + schema: + type: string + default: "" + required: true + - variable: paths + label: Paths + schema: + type: list + default: [{path: "/", pathType: "Prefix"}] + items: + - variable: pathEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: path + label: Path + schema: + type: string + required: true + default: "/" + - variable: pathType + label: Path Type + schema: + type: string + required: true + default: Prefix + + - variable: integrations + label: Integrations + description: Connect ingress with other charts + schema: + additional_attrs: true + type: dict + attrs: + - variable: traefik + label: Traefik + description: Connect ingress with Traefik + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: true + - variable: allowCors + label: 'Allow Cross Origin Requests (advanced)' + schema: + type: boolean + default: false + show_if: [["enabled", "=", true]] + - variable: entrypoints + label: Entrypoints + schema: + type: list + default: ["websecure"] + show_if: [["enabled", "=", true]] + items: + - variable: entrypoint + label: Entrypoint + schema: + type: string + - variable: middlewares + label: Middlewares + schema: + type: list + default: [] + show_if: [["enabled", "=", true]] + items: + - variable: middleware + label: Middleware + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: name + schema: + type: string + default: "" + required: true + - variable: namespace + label: 'namespace (optional)' + schema: + type: string + default: "" + - variable: certManager + label: certManager + description: Connect ingress with certManager + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: false + - variable: certificateIssuer + label: certificateIssuer + description: defaults to chartname + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: homepage + label: Homepage + description: Connect ingress with Homepage + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: false + - variable: name + label: Name (Optional) + description: Defaults to chart name + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: description + label: Description (Optional) + description: Defaults to chart description + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: icon + label: Icon (Optional) + description: Defaults to chart icon + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: group + label: Group + schema: + type: string + required: true + default: "default" + show_if: [["enabled", "=", true]] + - variable: widget + label: Widget Settings + schema: + type: dict + additional_attrs: true + show_if: [["enabled", "=", true]] + attrs: + - variable: enabled + label: Enable Widget + description: When disabled all widget annotations are skipped. + schema: + type: boolean + default: true + - variable: custom + label: Options + schema: + type: dict + additional_attrs: true + attrs: + - variable: key + label: API-key (key) + schema: + type: string + default: "" + - variable: customkv + label: Custom Options + schema: + type: list + default: [] + items: + - variable: option + label: Option + schema: + additional_attrs: true + type: dict + attrs: + - variable: key + label: Key + schema: + type: string + default: "" + required: true + - variable: value + label: Value + schema: + type: string + default: "" + required: true + - variable: advanced + label: Show Advanced Settings + description: Advanced settings are not covered by TrueCharts Support + schema: + type: boolean + default: false + - variable: ingressClassName + label: (Advanced/Optional) IngressClass Name + schema: + type: string + show_if: [["advanced", "=", true]] + default: "" + - variable: tls + label: TLS-Settings + schema: + type: list + show_if: [["advanced", "=", true]] + default: [] + items: + - variable: tlsEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: hosts + label: Certificate Hosts + schema: + type: list + default: [] + items: + - variable: host + label: Host + schema: + type: string + default: "" + required: true + + - variable: certificateIssuer + label: Use Cert-Manager clusterIssuer + description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' + schema: + type: string + default: "" + - variable: clusterCertificate + label: 'Cluster Certificate (Advanced)' + description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' + schema: + type: string + show_if: [["certificateIssuer", "=", ""]] + default: "" + - variable: secretName + label: 'Use Custom Certificate Secret (Advanced)' + schema: + show_if: [["certificateIssuer", "=", ""]] + type: string + default: "" + + - variable: ingressList + label: Add Manual Custom Ingresses + group: Ingress + schema: + type: list + default: [] + items: + - variable: ingressListEntry + label: Custom Ingress + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable Ingress + schema: + type: boolean + default: true + hidden: true + - variable: name + label: Name + schema: + type: string + default: "" + - variable: ingressClassName + label: IngressClass Name + schema: + type: string + default: "" + - variable: hosts + label: Hosts + schema: + type: list + default: [] + items: + - variable: hostEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: host + label: HostName + schema: + type: string + default: "" + required: true + - variable: paths + label: Paths + schema: + type: list + default: [] + items: + - variable: pathEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: path + label: Path + schema: + type: string + required: true + default: "/" + - variable: pathType + label: Path Type + schema: + type: string + required: true + default: Prefix + - variable: overrideService + label: Linked Service + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Service Name + schema: + type: string + default: "" + - variable: port + label: Service Port + schema: + type: int + - variable: tls + label: TLS-Settings + schema: + type: list + default: [] + show_if: [["certificateIssuer", "=", ""]] + items: + - variable: tlsEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: hosts + label: Certificate Hosts + schema: + type: list + default: [] + items: + - variable: host + label: Host + schema: + type: string + default: "" + required: true + - variable: certificateIssuer + label: Use Cert-Manager clusterIssuer + description: 'add the name of your Cert-Manager clusterIssuer here for automatic tls certificates.' + schema: + type: string + default: "" + - variable: clusterCertificate + label: 'Cluster Certificate (Advanced)' + description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' + schema: + type: string + show_if: [["certificateIssuer", "=", ""]] + default: "" + - variable: secretName + label: Use Custom Secret (Advanced) + schema: + type: string + show_if: [["certificateIssuer", "=", ""]] + default: "" + - variable: integrations + label: Integrations + description: Connect ingress with other charts + schema: + additional_attrs: true + type: dict + attrs: + - variable: traefik + label: Traefik + description: Connect ingress with Traefik + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: true + - variable: allowCors + label: "Allow Cross Origin Requests" + schema: + type: boolean + default: false + show_if: [["enabled", "=", true]] + - variable: entrypoints + label: Entrypoints + schema: + type: list + default: ["websecure"] + show_if: [["enabled", "=", true]] + items: + - variable: entrypoint + label: Entrypoint + schema: + type: string + - variable: middlewares + label: Middlewares + schema: + type: list + default: [] + show_if: [["enabled", "=", true]] + items: + - variable: middleware + label: Middleware + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: name + schema: + type: string + default: "" + required: true + - variable: namespace + label: namespace + schema: + type: string + default: "" + - variable: certManager + label: certManager + description: Connect ingress with certManager + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: true + - variable: certificateIssuer + label: certificateIssuer + description: defaults to chartname + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: homepage + label: Homepage + description: Connect ingress with Homepage + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: false + - variable: name + label: Name + description: defaults to chartname + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: description + label: Description + description: defaults to chart description + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: group + label: Group + schema: + type: string + required: true + default: "default" + show_if: [["enabled", "=", true]] + + - variable: securityContext + group: Security and Permissions + label: Security Context + schema: + additional_attrs: true + type: dict + attrs: + - variable: container + label: Container + schema: + additional_attrs: true + type: dict + attrs: + # Settings from questions.yaml get appended here on a per-app basis + + - variable: runAsUser + label: "runAsUser" + description: "The UserID of the user running the application" + schema: + type: int + default: 568 + - variable: runAsGroup + label: "runAsGroup" + description: "The groupID of the user running the application" + schema: + type: int + default: 568 + # Settings from questions.yaml get appended here on a per-app basis + - variable: PUID + label: Process User ID - PUID + description: When supported by the container, this sets the User ID running the Application Process. Not supported by all Apps + schema: + type: int + show_if: [["runAsUser", "=", 0]] + default: 568 + - variable: UMASK + label: UMASK + description: When supported by the container, this sets the UMASK for the App. Not supported by all Apps + schema: + type: string + default: "0022" + + - variable: advanced + label: Show Advanced Settings + description: Advanced settings are not covered by TrueCharts Support + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: privileged + label: "Privileged mode" + schema: + type: boolean + default: false + - variable: readOnlyRootFilesystem + label: "ReadOnly Root Filesystem" + schema: + type: boolean + default: true + + - variable: pod + label: Pod + schema: + additional_attrs: true + type: dict + attrs: + - variable: fsGroupChangePolicy + label: "When should we take ownership?" + schema: + type: string + default: OnRootMismatch + enum: + - value: OnRootMismatch + description: OnRootMismatch + - value: Always + description: Always + - variable: supplementalGroups + label: Supplemental Groups + schema: + type: list + default: [] + items: + - variable: supplementalGroupsEntry + label: Supplemental Group + schema: + type: int + # Settings from questions.yaml get appended here on a per-app basis + + - variable: fsGroup + label: "fsGroup" + description: "The group that should own ALL storage." + schema: + type: int + default: 568 + - variable: resources + group: Resources and Devices + label: "Resource Limits" + schema: + additional_attrs: true + type: dict + attrs: + - variable: limits + label: Advanced Limit Resource Consumption + schema: + additional_attrs: true + type: dict + attrs: + - variable: cpu + label: CPU + description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" + schema: + type: string + default: 4000m + valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' + - variable: memory + label: RAM + description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" + schema: + type: string + default: 8Gi + valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' + - variable: 'gpu.intel.com/i915' + label: Add Intel i915 GPUs + schema: + type: int + default: 0 + - variable: 'nvidia.com/gpu' + label: Add NVIDIA GPUs (Experimental) + schema: + type: int + default: 0 + - variable: 'amd.com/gpu' + label: Add AMD GPUs + schema: + type: int + default: 0 + - variable: requests + label: "Minimum Resources Required (request)" + schema: + additional_attrs: true + type: dict + hidden: true + attrs: + - variable: cpu + label: CPU + description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" + schema: + type: string + default: 10m + hidden: true + valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' + - variable: memory + label: "RAM" + description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" + schema: + type: string + default: 50Mi + hidden: true + valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' + - variable: deviceList + label: Mount USB Devices + group: Resources and Devices + schema: + type: list + default: [] + items: + - variable: deviceListEntry + label: Device + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Storage + schema: + type: boolean + default: true + - variable: type + label: (Advanced) Type of Storage + description: Sets the persistence type + schema: + type: string + default: device + hidden: true + - variable: readOnly + label: readOnly + schema: + type: boolean + default: false + - variable: hostPath + label: Host Device Path + description: Path to the device on the host system + schema: + type: path + - variable: mountPath + label: Container Device Path + description: Path inside the container the device is mounted + schema: + type: string + default: "/dev/ttyACM0" + + - variable: cnpg + group: Postgresql + label: "CloudNative-PG (CNPG)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "Main Postgresql Database" + schema: + additional_attrs: true + type: dict + attrs: + - variable: hibernate + label: Hibernate + description: "enable to safely hibernate and shutdown the postgresql cluster" + schema: + type: boolean + default: false + - variable: mode + label: Mode + description: 'Cluster mode of operation. Available modes: standalone - default mode. Creates new or updates an existing CNPG cluster. recovery - Same as standalone but creates a cluster from a backup, object store or via pg_basebackup replica - Creates a replica cluster from an existing CNPG cluster. # TODO.' + schema: + type: string + default: "standalone" + enum: + - value: standalone + description: standalone + - value: replica + description: replica + - value: recovery + description: recovery + - variable: cluster + label: "Cluster Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: instances + label: Instances + schema: + type: int + default: 1 + - variable: singleNode + label: singleNode + schema: + type: boolean + default: true + hidden: true + - variable: storage + label: "Storage" + schema: + additional_attrs: true + type: dict + attrs: + - variable: size + label: Size + schema: + type: string + default: "256Gi" + - variable: walStorage + label: "WAL Storage" + schema: + additional_attrs: true + type: dict + attrs: + - variable: size + label: Size + schema: + type: string + default: "256Gi" + - variable: monitoring + label: "Monitoring Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enablePodMonitor + label: "enablePodMonitor" + schema: + type: boolean + default: true + - variable: disableDefaultQueries + label: "disableDefaultQueries" + schema: + type: boolean + default: false + - variable: pooler + label: "Pooler Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: instances + label: Instances + schema: + type: int + default: 1 + - variable: createRO + label: "Create ReadOnly Instance" + schema: + type: boolean + default: false + - variable: recovery + label: "Recovery Settings (Experimental)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: "enabled" + schema: + type: boolean + default: false + - variable: endpointURL + label: "endpointURL" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: method + label: "method" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "object_store" + - variable: backupName + label: "backupName" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: provider + label: "provider" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "s3" + enum: + - value: s3 + description: S3 + - value: azure + description: Azure + - value: google + description: Google + - variable: s3 + label: "s3" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "s3"]] + attrs: + - variable: region + label: "region" + schema: + type: string + default: "" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: accessKey + label: "accessKey" + schema: + type: string + default: "" + - variable: secretKey + label: "secretKey" + schema: + type: string + default: "" + - variable: azure + label: "azure (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "azure"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: connectionString + label: "connectionString" + schema: + type: string + default: "" + - variable: storageAccount + label: "storageAccount" + schema: + type: string + default: "" + - variable: storageKey + label: "storageKey" + schema: + type: string + default: "" + - variable: storageSasToken + label: "storageSasToken" + schema: + type: string + default: "" + - variable: containerName + label: "containerName" + schema: + type: string + default: "" + - variable: serviceName + label: "serviceName" + schema: + type: string + default: "blob" + - variable: inheritFromAzureAD + label: "inheritFromAzureAD" + schema: + type: boolean + default: false + - variable: google + label: "google (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "google"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: gkeEnvironment + label: "gkeEnvironment" + schema: + type: string + default: "" + - variable: applicationCredentials + label: "applicationCredentials" + schema: + type: string + default: "" + - variable: backups + label: "Backup Settings (Experimental)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: "enabled" + schema: + type: boolean + default: false + - variable: endpointURL + label: "endpointURL" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: destinationPath + label: "destinationPath" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: retentionPolicy + label: "retentionPolicy" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "30d" + - variable: provider + label: "provider" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "s3" + enum: + - value: s3 + description: S3 + - value: azure + description: Azure + - value: google + description: Google + - variable: s3 + label: "s3" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "s3"]] + attrs: + - variable: region + label: "region" + schema: + type: string + default: "" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: accessKey + label: "accessKey" + schema: + type: string + default: "" + - variable: secretKey + label: "secretKey" + schema: + type: string + default: "" + - variable: azure + label: "azure (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "azure"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: connectionString + label: "connectionString" + schema: + type: string + default: "" + - variable: storageAccount + label: "storageAccount" + schema: + type: string + default: "" + - variable: storageKey + label: "storageKey" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: storageSasToken + label: "storageSasToken" + schema: + type: string + default: "" + - variable: containerName + label: "containerName" + schema: + type: string + default: "" + - variable: serviceName + label: "serviceName" + schema: + type: string + default: "blob" + - variable: inheritFromAzureAD + label: "inheritFromAzureAD" + schema: + type: boolean + default: false + - variable: google + label: "google (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "google"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: gkeEnvironment + label: "gkeEnvironment" + schema: + type: string + default: "" + - variable: applicationCredentials + label: "applicationCredentials" + schema: + type: string + default: "" + - variable: scheduledBackups + label: ScheduledBackups + schema: + type: list + default: [] + show_if: [["enabled", "=", true]] + items: + - variable: backupschedule + label: BackupSchedule + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: name + schema: + type: string + default: "daily-backup" + required: true + - variable: schedule + label: schedule + schema: + type: string + required: true + default: "0 0 0 * * *" + - variable: backupOwnerReference + label: backupOwnerReference + schema: + type: string + required: true + default: "self" + - variable: immediate + label: immediate + schema: + type: boolean + default: false + - variable: suspend + label: suspend + schema: + type: boolean + default: false + - variable: manualBackups + label: manualBackups + schema: + type: list + default: [] + show_if: [["enabled", "=", true]] + items: + - variable: backup + label: Backup + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: name + schema: + type: string + default: "" + required: true + + - variable: metrics + group: Metrics + label: Prometheus Metrics + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: Main Metrics + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enabled + description: Enable Prometheus Metrics + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + + - variable: prometheusRule + label: PrometheusRule + description: Enable and configure Prometheus Rules for the App. + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enabled + description: Enable Prometheus Metrics + schema: + type: boolean + default: false + # TODO: Rule List section + +# - variable: horizontalPodAutoscaler +# group: Advanced +# label: (Advanced) Horizontal Pod Autoscaler +# schema: +# type: list +# default: [] +# items: +# - variable: hpaEntry +# label: HPA Entry +# schema: +# additional_attrs: true +# type: dict +# attrs: +# - variable: name +# label: Name +# schema: +# type: string +# required: true +# default: "" +# - variable: enabled +# label: Enabled +# schema: +# type: boolean +# default: false +# show_subquestions_if: true +# subquestions: +# - variable: target +# label: Target +# description: Deployment name, Defaults to Main Deployment +# schema: +# type: string +# default: "" +# - variable: minReplicas +# label: Minimum Replicas +# schema: +# type: int +# default: 1 +# - variable: maxReplicas +# label: Maximum Replicas +# schema: +# type: int +# default: 5 +# - variable: targetCPUUtilizationPercentage +# label: Target CPU Utilization Percentage +# schema: +# type: int +# default: 80 +# - variable: targetMemoryUtilizationPercentage +# label: Target Memory Utilization Percentage +# schema: +# type: int +# default: 80 + - variable: networkPolicy + group: Advanced + label: (Advanced) Network Policy + schema: + type: list + default: [] + items: + - variable: netPolicyEntry + label: Network Policy Entry + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + default: "" + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: policyType + label: Policy Type + schema: + type: string + default: "" + enum: + - value: "" + description: Default + - value: ingress + description: Ingress + - value: egress + description: Egress + - value: ingress-egress + description: Ingress and Egress + - variable: egress + label: Egress + schema: + type: list + default: [] + items: + - variable: egressEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: to + label: To + schema: + type: list + default: [] + items: + - variable: toEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: ipBlock + label: IP Block + schema: + additional_attrs: true + type: dict + attrs: + - variable: cidr + label: CIDR + schema: + type: string + default: "" + - variable: except + label: Except + schema: + type: list + default: [] + items: + - variable: exceptint + label: "" + schema: + type: string + - variable: namespaceSelector + label: Namespace Selector + schema: + additional_attrs: true + type: dict + attrs: + - variable: matchExpressions + label: Match Expressions + schema: + type: list + default: [] + items: + - variable: expressionEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: key + label: Key + schema: + type: string + - variable: operator + label: Operator + schema: + type: string + default: TCP + enum: + - value: In + description: In + - value: NotIn + description: NotIn + - value: Exists + description: Exists + - value: DoesNotExist + description: DoesNotExist + - variable: values + label: Values + schema: + type: list + default: [] + items: + - variable: value + label: "" + schema: + type: string + - variable: podSelector + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: matchExpressions + label: Match Expressions + schema: + type: list + default: [] + items: + - variable: expressionEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: key + label: Key + schema: + type: string + - variable: operator + label: Operator + schema: + type: string + default: TCP + enum: + - value: In + description: In + - value: NotIn + description: NotIn + - value: Exists + description: Exists + - value: DoesNotExist + description: DoesNotExist + - variable: values + label: Values + schema: + type: list + default: [] + items: + - variable: value + label: "" + schema: + type: string + - variable: ports + label: Ports + schema: + type: list + default: [] + items: + - variable: portsEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: port + label: Port + schema: + type: int + - variable: endPort + label: End Port + schema: + type: int + - variable: protocol + label: Protocol + schema: + type: string + default: TCP + enum: + - value: TCP + description: TCP + - value: UDP + description: UDP + - value: SCTP + description: SCTP + - variable: ingress + label: Ingress + schema: + type: list + default: [] + items: + - variable: ingressEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: from + label: From + schema: + type: list + default: [] + items: + - variable: fromEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: ipBlock + label: IP Block + schema: + additional_attrs: true + type: dict + attrs: + - variable: cidr + label: CIDR + schema: + type: string + default: "" + - variable: except + label: Except + schema: + type: list + default: [] + items: + - variable: exceptint + label: "" + schema: + type: string + - variable: namespaceSelector + label: Namespace Selector + schema: + additional_attrs: true + type: dict + attrs: + - variable: matchExpressions + label: Match Expressions + schema: + type: list + default: [] + items: + - variable: expressionEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: key + label: Key + schema: + type: string + - variable: operator + label: Operator + schema: + type: string + default: TCP + enum: + - value: In + description: In + - value: NotIn + description: NotIn + - value: Exists + description: Exists + - value: DoesNotExist + description: DoesNotExist + - variable: values + label: Values + schema: + type: list + default: [] + items: + - variable: value + label: "" + schema: + type: string + - variable: podSelector + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: matchExpressions + label: Match Expressions + schema: + type: list + default: [] + items: + - variable: expressionEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: key + label: Key + schema: + type: string + - variable: operator + label: Operator + schema: + type: string + default: TCP + enum: + - value: In + description: In + - value: NotIn + description: NotIn + - value: Exists + description: Exists + - value: DoesNotExist + description: DoesNotExist + - variable: values + label: Values + schema: + type: list + default: [] + items: + - variable: value + label: "" + schema: + type: string + - variable: ports + label: Ports + schema: + type: list + default: [] + items: + - variable: portsEntry + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: port + label: Port + schema: + type: int + - variable: endPort + label: End Port + schema: + type: int + - variable: protocol + label: Protocol + schema: + type: string + default: TCP + enum: + - value: TCP + description: TCP + - value: UDP + description: UDP + - value: SCTP + description: SCTP + + - variable: addons + group: Addons + label: "" + schema: + additional_attrs: true + type: dict + attrs: + + - variable: codeserver + label: Codeserver + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: service + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: type + label: Service Type + description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: LoadBalancer + enum: + - value: NodePort + description: Deprecated CHANGE THIS + - value: ClusterIP + description: ClusterIP + - value: LoadBalancer + description: LoadBalancer + - variable: loadBalancerIP + label: LoadBalancer IP + description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: ports + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: codeserver + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: port + label: Port + schema: + type: int + default: 36107 + - variable: ingress + label: "Ingress" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable Ingress + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: hosts + label: Hosts + schema: + type: list + default: [] + items: + - variable: hostEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: host + label: HostName + schema: + type: string + default: "" + required: true + - variable: paths + label: Paths + schema: + type: list + default: [{path: "/", pathType: "Prefix"}] + items: + - variable: pathEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: path + label: Path + schema: + type: string + required: true + default: "/" + - variable: pathType + label: Path Type + schema: + type: string + required: true + default: Prefix + - variable: integrations + label: Integrations + description: Connect ingress with other charts + schema: + additional_attrs: true + type: dict + attrs: + - variable: traefik + label: Traefik + description: Connect ingress with Traefik + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: true + - variable: allowCors + label: 'Allow Cross Origin Requests (advanced)' + schema: + type: boolean + default: false + show_if: [["enabled", "=", true]] + - variable: entrypoints + label: Entrypoints + schema: + type: list + default: ["websecure"] + show_if: [["enabled", "=", true]] + items: + - variable: entrypoint + label: Entrypoint + schema: + type: string + - variable: middlewares + label: Middlewares + schema: + type: list + default: [] + show_if: [["enabled", "=", true]] + items: + - variable: middleware + label: Middleware + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: name + schema: + type: string + default: "" + required: true + - variable: namespace + label: 'namespace (optional)' + schema: + type: string + default: "" + - variable: certManager + label: certManager + description: Connect ingress with certManager + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: enabled + schema: + type: boolean + default: false + - variable: certificateIssuer + label: certificateIssuer + description: defaults to chartname + schema: + type: string + default: "" + show_if: [["enabled", "=", true]] + - variable: advanced + label: Show Advanced Settings + description: Advanced settings are not covered by TrueCharts Support + schema: + type: boolean + default: false + - variable: ingressClassName + label: (Advanced/Optional) IngressClass Name + schema: + type: string + show_if: [["advanced", "=", true]] + default: "" + - variable: tls + label: TLS-Settings + schema: + type: list + show_if: [["advanced", "=", true]] + default: [] + items: + - variable: tlsEntry + label: Host + schema: + additional_attrs: true + type: dict + attrs: + - variable: hosts + label: Certificate Hosts + schema: + type: list + default: [] + items: + - variable: host + label: Host + schema: + type: string + default: "" + required: true + + - variable: certificateIssuer + label: Use Cert-Manager clusterIssuer + description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' + schema: + type: string + default: "" + - variable: clusterCertificate + label: 'Cluster Certificate (Advanced)' + description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' + schema: + type: string + show_if: [["certificateIssuer", "=", ""]] + default: "" + - variable: secretName + label: 'Use Custom Certificate Secret (Advanced)' + schema: + show_if: [["certificateIssuer", "=", ""]] + type: string + default: "" + - variable: scaleCert + label: 'Use TrueNAS SCALE Certificate (Deprecated)' + schema: + show_if: [["certificateIssuer", "=", ""]] + type: int + $ref: + - "definitions/certificate" + - variable: envList + label: Codeserver Environment Variables + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + + - variable: netshoot + label: Netshoot + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: envList + label: Netshoot Environment Variables + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + + - variable: vpn + label: VPN + schema: + additional_attrs: true + type: dict + attrs: + - variable: type + label: Type + schema: + type: string + default: disabled + enum: + - value: disabled + description: disabled + - value: gluetun + description: Gluetun + - value: tailscale + description: Tailscale + - value: openvpn + description: OpenVPN (Deprecated) + - value: wireguard + description: Wireguard (Deprecated) + - variable: openvpn + label: OpenVPN Settings + schema: + additional_attrs: true + type: dict + show_if: [["type", "=", "openvpn"]] + attrs: + - variable: username + label: Authentication Username (Optional) + description: Authentication Username, Optional + schema: + type: string + default: "" + - variable: password + label: Authentication Password + description: Authentication Credentials + schema: + type: string + show_if: [["username", "!=", ""]] + default: "" + required: true + - variable: tailscale + label: Tailscale Settings + schema: + additional_attrs: true + type: dict + show_if: [["type", "=", "tailscale"]] + attrs: + - variable: authkey + label: Authentication Key + description: Provide an auth key to automatically authenticate the node as your user account. + schema: + type: string + private: true + default: "" + - variable: auth_once + label: Auth Once + description: Only attempt to log in if not already logged in. + schema: + type: boolean + default: true + - variable: accept_dns + label: Accept DNS + description: Accept DNS configuration from the admin console. + schema: + type: boolean + default: false + - variable: userspace + label: Userspace + description: Userspace Networking mode allows running Tailscale where you do not have access to create a VPN tunnel device. + schema: + type: boolean + default: false + - variable: routes + label: Routes + description: Expose physical subnet routes to your entire Tailscale network. + schema: + type: string + default: "" + - variable: dest_ip + label: Destination IP + description: Tells the DNAT mechanism which Destination IP to set in the IP header, and where to send packets that are matched. + schema: + type: string + default: "" + - variable: sock5_server + label: Sock5 Server + description: The address on which to listen for SOCKS5 proxying into the tailscale net. + schema: + type: string + default: "" + - variable: outbound_http_proxy_listen + label: Outbound HTTP Proxy Listen + description: The address on which to listen for HTTP proxying into the tailscale net. + schema: + type: string + default: "" + - variable: extra_args + label: Extra Args + description: Extra Args + schema: + type: string + default: "" + - variable: daemon_extra_args + label: Tailscale Daemon Extra Args + description: Tailscale Daemon Extra Args + schema: + type: string + default: "" + - variable: killSwitch + label: Enable Killswitch + schema: + type: boolean + show_if: [["type", "!=", "disabled"]] + default: true + - variable: excludedNetworks_IPv4 + label: Killswitch Excluded IPv4 networks + description: List of Killswitch Excluded IPv4 Addresses + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: networkv4 + label: IPv4 Network + schema: + type: string + required: true + - variable: excludedNetworks_IPv6 + label: Killswitch Excluded IPv6 networks + description: "List of Killswitch Excluded IPv6 Addresses" + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: networkv6 + label: IPv6 Network + schema: + type: string + required: true + - variable: configFile + label: VPN Config File Location + schema: + type: string + show_if: [["type", "!=", "disabled"]] + default: "" + + - variable: envList + label: VPN Environment Variables + schema: + type: list + show_if: [["type", "!=", "disabled"]] + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + max_length: 10240 + + - variable: docs + group: Documentation + label: Please read the documentation at https://truecharts.org + description: Please read the documentation at +
https://truecharts.org + schema: + additional_attrs: true + type: dict + attrs: + - variable: confirmDocs + label: I have checked the documentation + schema: + type: boolean + default: true + - variable: donateNag + group: Documentation + label: Please consider supporting TrueCharts, see https://truecharts.org/sponsor + description: Please consider supporting TrueCharts, see +
https://truecharts.org/sponsor + schema: + additional_attrs: true + type: dict + attrs: + - variable: confirmDonate + label: I have considered donating + schema: + type: boolean + default: true + hidden: true + diff --git a/enterprise/blocky/14.0.1/templates/NOTES.txt b/enterprise/blocky/14.0.1/templates/NOTES.txt new file mode 100644 index 00000000000..efcb74cb772 --- /dev/null +++ b/enterprise/blocky/14.0.1/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/enterprise/blocky/14.0.1/templates/_blockyConfig.tpl b/enterprise/blocky/14.0.1/templates/_blockyConfig.tpl new file mode 100644 index 00000000000..66f8f78e96d --- /dev/null +++ b/enterprise/blocky/14.0.1/templates/_blockyConfig.tpl @@ -0,0 +1,231 @@ +{{/* Define the config */}} +{{- define "blocky.configmap" -}} +{{- $config := mustMerge ( include "blocky.config" . | fromYaml ) ( .Values.blockyConfig ) }} +enabled: true +data: + config.yml: | +{{ $config | toYaml | indent 4 }} +{{- end -}} + +{{- define "blocky.config" -}} +redis: + address: {{ printf "%v-%v" .Release.Name "redis" }}:6379 + password: {{ .Values.redis.creds.redisPassword | trimAll "\"" }} + database: 0 + required: true + connectionAttempts: 10 + connectionCooldown: 3s +prometheus: + enable: true + path: /metrics +queryLog: + # optional one of: postgresql, csv, csv-client. If empty, log to console + type: {{ .Values.queryLog.type }} + # directory (should be mounted as volume in docker) for csv, db connection string for mysql/postgresql + #postgresql target: postgres://user:password@db_host_or_ip:5432/db_name + {{- if eq .Values.queryLog.type "postgresql" }} + target: {{ .Values.cnpg.main.creds.std }} + {{- else }} + target: {{ .Values.queryLog.target }} + {{- end }} + # if > 0, deletes log files which are older than ... days + logRetentionDays: {{ .Values.queryLog.logRetentionDays | default 0 }} + # optional: Max attempts to create specific query log writer + creationAttempts: {{ .Values.queryLog.creationAttempts | default 3 }} + # optional: Time between the creation attempts + creationCooldown: {{ .Values.queryLog.creationAttempts | default "2s" }} + +upstream: + default: +{{- .Values.defaultUpstreams | toYaml | nindent 8 }} +{{- range $id, $value := .Values.upstreams }} + {{ $value.name }}: +{{- $value.dnsservers | toYaml | nindent 8 }} +{{- end }} + +ports: + {{- if .Values.service.dnsudp.enabled }} + dns: {{ .Values.service.dnsudp.ports.dnsudp.targetPort }} + {{- end }} + {{- if .Values.service.dot.enabled }} + tls: {{ .Values.service.dot.ports.dot.targetPort }} + {{- end }} + {{- if .Values.service.main.enabled }} + http: {{ .Values.service.main.ports.main.targetPort }} + {{- end }} + {{- if .Values.service.https.enabled }} + https: {{ .Values.service.https.ports.https.targetPort }} + {{- end }} + +{{- if .Values.certFile }} +certFile: {{ .Values.certFile }} +{{- end }} + +{{- if .Values.keyFile }} +keyFile: {{ .Values.keyFile }} +{{- end }} + +log: + {{- if .Values.logLevel }} + level: {{ .Values.logLevel }} + {{- end }} + {{- if .Values.logTimestamp }} + timestamp: {{ .Values.logTimestamp }} + {{- end }} + {{- if .Values.logPrivacy }} + privacy: {{ .Values.logPrivacy }} + {{- end }} + +{{- if .Values.dohUserAgent }} +dohUserAgent: {{ .Values.dohUserAgent }} +{{- end }} + +{{- if .Values.minTlsServeVersion }} +minTlsServeVersion: {{ .Values.minTlsServeVersion }} +{{- end }} + +caching: +{{ toYaml .Values.caching | indent 2 }} + +{{- if .Values.hostsFile.enabled }} +{{ $hostsfile := omit .Values.hostsFile "enabled" }} +hostsFile: +{{ toYaml $hostsfile | indent 2 }} +{{- end }} + +{{- if or .Values.bootstrapDns.upstream .Values.bootstrapDns.ips }} +bootstrapDns: + {{- if .Values.bootstrapDns.upstream }} + - upstream: {{ .Values.bootstrapDns.upstream }} + {{- end }} + {{- if .Values.bootstrapDns.ips }} + ips: + {{- range $id, $value := .Values.bootstrapDns.ips }} + - {{ $value }} + {{- end }} + {{- end }} + {{/* Add additional Bootstrap DNS */}} + {{- range .Values.additionalBootstrapDns }} + {{- with .upstream }} + - upstream: {{ . }} + {{- end }} + {{- if .ips }} + ips: + {{- range $id, $value := .ips }} + - {{ $value }} + {{- end }} + {{- end }} + {{- end }} +{{- end }} + +{{- if or .Values.filtering.filtering }} +filtering: +{{- if .Values.filtering.ips }} + queryTypes: +{{- range $id, $value := .Values.filtering.ips }} + - {{ $value }} +{{- end }} +{{- end }} +{{- end }} + +{{- if or .Values.customDNS.filterUnmappedTypes .Values.customDNS.customTTL .Values.customDNS.rewrite .Values.customDNS.mapping }} +customDNS: +{{- if .Values.customDNS.upstream }} + upstream: {{ .Values.customDNS.upstream }} +{{- end }} +{{- if .Values.customDNS.customTTL }} + customTTL: {{ .Values.customDNS.customTTL }} +{{- end }} +{{- if .Values.customDNS.rewrite }} + rewrite: +{{- range $id, $value := .Values.customDNS.rewrite }} + {{ $value.in }}: {{ $value.out }} +{{- end }} +{{- end }} + +{{- if .Values.customDNS.mapping }} + mapping: +{{- range $id, $value := .Values.customDNS.mapping }} + {{ $value.domain }}: {{ $value.dnsserver }} +{{- end }} +{{- end }} +{{- end }} + +{{- if or .Values.clientLookup.upstream .Values.clientLookup.ips }} +clientLookup: +{{- if .Values.clientLookup.upstream }} + upstream: {{ .Values.clientLookup.upstream }} +{{- end }} +{{- if .Values.clientLookup.ips }} + singleNameOrder: +{{- range $id, $value := .Values.clientLookup.ips }} + - {{ $value }} +{{- end }} +{{- end }} +{{- if .Values.clientLookup.clients }} + clients: +{{- range $id, $value := .Values.clientLookup.clients }} + {{ $value.domain }}: + {{- range $id, $value := .ips }} + - {{ $value }} + {{- end }} +{{- end }} +{{- end }} +{{- end }} + +{{- if or .Values.conditional.rewrite .Values.conditional.mapping ( and .Values.k8sgateway.enabled .Values.k8sgateway.domains ) }} +conditional: +{{- if .Values.conditional.rewrite }} + rewrite: +{{- range $id, $value := .Values.conditional.rewrite }} + {{ $value.in }}: {{ $value.out }} +{{- end }} +{{- end }} + +{{- if or .Values.conditional.mapping ( and .Values.k8sgateway.enabled .Values.k8sgateway.domains ) }} + mapping: +{{- if and .Values.k8sgateway.enabled .Values.k8sgateway.domains }} +{{- range $id, $value := .Values.k8sgateway.domains }} + {{ .domain }}: 127.0.0.1:{{ $.Values.service.k8sgateway.ports.k8sgateway.targetPort }} +{{- end }} +{{- end }} +{{- range $id, $value := .Values.conditional.mapping }} + {{ $value.domain }}: {{ $value.dnsserver }} +{{- end }} +{{- end }} +{{- end }} + +blocking: + blockType: {{ .Values.blocking.blockType }} + blockTTL: {{ .Values.blocking.blockTTL }} + refreshPeriod: {{ .Values.blocking.refreshPeriod }} + downloadTimeout: {{ .Values.blocking.downloadTimeout }} + downloadAttempts: {{ .Values.blocking.downloadAttempts }} + downloadCooldown: {{ .Values.blocking.downloadCooldown }} + startStrategy: {{ .Values.blocking.startStrategy }} + processingConcurrency: {{ .Values.blocking.processingConcurrency }} +{{- if .Values.blocking.whitelist }} + whiteLists: +{{- range $id, $value := .Values.blocking.whitelist }} + {{ $value.name }}: +{{- $value.lists | toYaml | nindent 10 }} +{{- end }} +{{- end }} + +{{- if .Values.blocking.blacklist }} + blackLists: +{{- range $id, $value := .Values.blocking.blacklist }} + {{ $value.name }}: +{{- $value.lists | toYaml | nindent 10 }} +{{- end }} +{{- end }} + +{{- if .Values.blocking.clientGroupsBlock }} + clientGroupsBlock: +{{- range $id, $value := .Values.blocking.clientGroupsBlock }} + {{ $value.name }}: +{{- $value.groups | toYaml | nindent 10 }} +{{- end }} +{{- end }} + +{{- end -}} diff --git a/enterprise/blocky/14.0.1/templates/_k8sgateway.tpl b/enterprise/blocky/14.0.1/templates/_k8sgateway.tpl new file mode 100644 index 00000000000..463923f85da --- /dev/null +++ b/enterprise/blocky/14.0.1/templates/_k8sgateway.tpl @@ -0,0 +1,90 @@ +{{- define "k8sgateway.container" -}} +enabled: true +imageSelector: k8sgatewayImage +securityContext: + runAsUser: 0 + runAsGroup: 0 + readOnlyRootFilesystem: true +args: ["-conf", "/etc/coredns/Corefile"] +probes: + readiness: + enabled: true + path: /ready + port: 8181 + liveness: + enabled: true + path: /health + port: 8080 + startup: + enabled: true + path: /ready + port: 8181 +{{- end -}} + +{{/* +Create the matchable regex from domain +*/}} +{{- define "k8sgateway.configmap.regex" -}} +{{- if .dnsChallenge.domain }} +{{- .dnsChallenge.domain | replace "." "[.]" -}} +{{- else -}} + {{ "unset" }} +{{- end }} +{{- end -}} + +{{/* Define the configmap */}} +{{- define "k8sgateway.configmap" -}} +{{- $values := .Values.k8sgateway }} +{{- $fqdn := ( include "tc.v1.common.lib.chart.names.fqdn" . ) }} +enabled: true +data: + Corefile: | + .:{{ .Values.service.k8sgateway.ports.k8sgateway.targetPort }} { + errors + log + health { + lameduck 5s + } + ready + {{- range .Values.k8sgateway.domains }} + {{- if .dnsChallenge.enabled }} + {{- if not .dnsChallenge.domain -}} + {{- fail "DNS01 challenge domain is mandatory" -}} + {{- end }} + + template IN ANY {{ required "Delegated domain ('domain') is mandatory" .domain }} { + match "_acme-challenge[.](.*)[.]{{ include "k8sgateway.configmap.regex" . }}" + {{- $name := "{{ \"{{ .Name }}\" }}" }} + {{- $index := "{{ \"{{ index .Match 1 }}\" }}" }} + answer "{{ $name }} 5 IN CNAME {{ $index }}.{{ .dnsChallenge.domain }}" + fallthrough + } + {{- end }} + {{- end }} + k8s_gateway {{ range .Values.k8sgateway.domains }}"{{ required "Delegated domain ('domain') is mandatory " .domain }}"{{ end }} { + apex {{ $values.apex | default $fqdn }} + ttl {{ $values.ttl }} + {{- if $values.secondary }} + secondary {{ $values.secondary }} + {{- end }} + {{- if $values.watchedResources }} + resources {{ join " " $values.watchedResources }} + {{- end }} + fallthrough + } + + prometheus 0.0.0.0:9153 + {{- if .Values.k8sgateway.forward.enabled }} + forward . {{ .Values.k8sgateway.forward.primary }} {{ .Values.k8sgateway.forward.secondary }} { + {{- range .Values.k8sgateway.forward.options }} + {{ .name }} {{ .value }} + {{- end }} + } + {{- else }} + forward . 1.1.1.1 + {{- end }} + loop + reload + loadbalance + } +{{- end -}} diff --git a/enterprise/blocky/14.0.1/templates/common.yaml b/enterprise/blocky/14.0.1/templates/common.yaml new file mode 100644 index 00000000000..310ef64af8f --- /dev/null +++ b/enterprise/blocky/14.0.1/templates/common.yaml @@ -0,0 +1,106 @@ +{{/* Make sure all variables are set properly */}} +{{- if eq .Values.queryLog.type "postgresql" -}} + {{- $_ := set .Values.cnpg.main "enabled" true -}} +{{- end }} +{{- include "tc.v1.common.loader.init" . }} + +{{/* Render configmap for blocky */}} +{{- $configmapFile := include "blocky.configmap" . | fromYaml -}} +{{- if $configmapFile -}} + {{- $_ := set .Values.configmap "config" $configmapFile -}} +{{- end -}} + +{{- $gatewayconfig := include "k8sgateway.configmap" . | fromYaml -}} +{{- if $gatewayconfig -}} + {{- $_ := set .Values.configmap "corefile" $gatewayconfig -}} +{{- end -}} + +{{/* Always mount the configmap, with the basic config, plus the 'blockyConfig' */}} +{{- define "blocky.configmap.mount" -}} +enabled: true +type: configmap +mountPath: /app/config.yml +objectName: config +readOnly: true +subPath: config.yml +{{- end -}} + +{{/* Append the general configMap volume to the volumes */}} +{{- define "k8sgateway.configvolume" -}} +enabled: true +type: configmap +objectName: corefile +items: + - key: Corefile + path: Corefile +targetSelector: + main: + k8sgateway: + mountPath: "/etc/coredns" + readOnly: true + +{{- end -}} + +{{- $_ := set .Values.persistence "tc-config" (include "blocky.configmap.mount" . | fromYaml) -}} + +{{- if and .Values.k8sgateway.enabled .Values.k8sgateway.domains -}} +{{- $_ := set .Values.persistence "config-volume" (include "k8sgateway.configvolume" . | fromYaml) -}} +{{- $_ := set .Values.workload.main.podSpec.containers "k8sgateway" (include "k8sgateway.container" . | fromYaml) -}} +{{- end -}} + +{{/* Define path for api */}} +{{- define "blocky.api" -}} +{{- $fullname := include "tc.v1.common.lib.chart.names.fullname" . -}} +path: "/api" +# -- Ignored if not kubeVersion >= 1.14-0 +pathType: Prefix +service: + # -- Overrides the service name reference for this path + name: {{ printf "%s-main" $fullname }} + port: {{ .Values.service.main.ports.main.port }} +{{- end -}} + +{{/* inject websocket path to all main ingress hosts*/}} +{{- define "blocky.apiinjector" -}} +{{- $path := list (include "blocky.api" . | fromYaml) -}} +{{- if .Values.ingress.main.enabled }} +{{- range .Values.ingress.main.hosts }} +{{- $newpaths := list }} +{{- $newpaths := concat .paths $path }} +{{- $_ := set . "paths" ( deepCopy $newpaths ) -}} +{{- end }} +{{- end }} +{{- end -}} + +{{/* inject api paths in ingress */}} +{{- include "blocky.apiinjector" . }} + +{{/* Define path for DoH */}} +{{- define "blocky.doh" -}} +{{- $fullname := include "tc.v1.common.lib.chart.names.fullname" . -}} +path: "/dns-query" +# -- Ignored if not kubeVersion >= 1.14-0 +pathType: Prefix +service: + # -- Overrides the service name reference for this path + name: {{ printf "%s-main" $fullname }} + port: {{ .Values.service.main.ports.main.port }} +{{- end -}} + +{{/* inject websocket path to all main ingress hosts*/}} +{{- define "blocky.dohinjector" -}} +{{- $path := list (include "blocky.doh" . | fromYaml) -}} +{{- if .Values.ingress.main.enabled }} +{{- range .Values.ingress.main.hosts }} +{{- $newpaths := list }} +{{- $newpaths := concat .paths $path }} +{{- $_ := set . "paths" ( deepCopy $newpaths ) -}} +{{- end }} +{{- end }} +{{- end -}} + +{{/* inject api paths in ingress */}} +{{- include "blocky.dohinjector" . }} + +{{/* Render the templates */}} +{{ include "tc.v1.common.loader.apply" . }} diff --git a/enterprise/blocky/14.0.1/values.yaml b/enterprise/blocky/14.0.1/values.yaml new file mode 100644 index 00000000000..e69de29bb2d diff --git a/enterprise/traefik/26.4.14/app-changelog.md b/enterprise/traefik/26.4.14/app-changelog.md deleted file mode 100644 index 705eee22aab..00000000000 --- a/enterprise/traefik/26.4.14/app-changelog.md +++ /dev/null @@ -1,9 +0,0 @@ - - -## [traefik-26.4.14](https://github.com/truecharts/charts/compare/traefik-26.4.13...traefik-26.4.14) (2024-03-05) - -### Fix - - - -- bump common to fix some loadbalancer issues with metallb \ No newline at end of file