\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/premium/blocky/15.2.4/dashboardpsql.json b/premium/blocky/15.2.4/dashboardpsql.json
new file mode 100644
index 0000000000..203723f09d
--- /dev/null
+++ b/premium/blocky/15.2.4/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/premium/blocky/15.2.4/icon-small.webp b/premium/blocky/15.2.4/icon-small.webp
new file mode 100644
index 0000000000..194c29b9d1
Binary files /dev/null and b/premium/blocky/15.2.4/icon-small.webp differ
diff --git a/premium/blocky/15.2.4/icon.webp b/premium/blocky/15.2.4/icon.webp
new file mode 100644
index 0000000000..9f7d4cc844
Binary files /dev/null and b/premium/blocky/15.2.4/icon.webp differ
diff --git a/premium/blocky/15.2.4/ix_values.yaml b/premium/blocky/15.2.4/ix_values.yaml
new file mode 100644
index 0000000000..9824973eb8
--- /dev/null
+++ b/premium/blocky/15.2.4/ix_values.yaml
@@ -0,0 +1,378 @@
+image:
+ repository: "docker.io/spx01/blocky"
+ tag: "v0.24@sha256:9a82e0235c52ef3048586f8006add06e52132adaae70d02f980569dae16421a2"
+ pullPolicy: "IfNotPresent"
+k8sgatewayImage:
+ repository: quay.io/oriedge/k8s_gateway
+ pullPolicy: IfNotPresent
+ tag: v0.4.0@sha256:7bdbd447c0244b8f89de9cd6f4826ed0ac66c9406fac3a4ac80081020c251c6b
+
+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:
+ dns:
+ enabled: true
+ port: 53
+ protocol: udp
+ targetPort: 53
+ dnstcp:
+ enabled: true
+ protocol: tcp
+ port: "{{ .Values.service.dns.ports.dns.port }}"
+ 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:
+ # Cloudflare
+- 1.1.1.1
+- 1.0.0.1
+ # Google
+- 8.8.8.8
+- 8.8.4.4
+ # Quad9
+- 9.9.9.9
+- 149.112.112.112
+ # OpenDNS
+- 208.67.222.222
+- 208.67.220.220
+ # ComodoSecure DNS
+- 8.26.56.26
+- 8.20.247.20
+# -- 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: 15m
+ maxTime: 0
+ maxItemsCount: 0
+ prefetching: true
+ prefetchExpires: 12h
+ 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: 5s
+ # -- Set the start strategy (blocking | failOnError | fast)
+ startStrategy: fast
+ # -- Sets how many list-groups can be processed at the same time
+ processingConcurrency: 8
+ # -- Add blocky whitelists
+ # `default` name is reservered for TrueCharts included default whitelist
+ # example shows the structure, though name should be changed when used
+ whitelist: []
+ # - name: default
+ # lists:
+ # - https://raw.githubusercontent.com/anudeepND/whitelist/master/domains/optional-list.txt
+ # - https://raw.githubusercontent.com/anudeepND/whitelist/master/domains/whitelist.txt
+ # - https://raw.githubusercontent.com/rahilpathan/pihole-whitelist/main/1.LowWL.txt
+
+ # -- Blocky blacklists
+ # `default` name is reservered for TrueCharts included default blacklist
+ # example shows the structure, though name should be changed when used
+ blacklist: []
+ # - name: default
+ # lists:
+ # - https://big.oisd.nl/domainswild
+
+ # -- Blocky clientGroupsBlock
+ clientGroupsBlock:
+ - name: default
+ groups:
+ - default
+# -- 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
+
+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
+ includeCommon: 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/premium/blocky/15.2.4/questions.yaml b/premium/blocky/15.2.4/questions.yaml
new file mode 100644
index 0000000000..b1e2a474f8
--- /dev/null
+++ b/premium/blocky/15.2.4/questions.yaml
@@ -0,0 +1,3804 @@
+groups:
+ - name: Image
+ description: |
+ Configured the images to be used for the Chart.
+ It's wise to use "digest pinned" tags and to avoid using "latest".
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/#images
+
+
+ - name: General
+ description: |
+ For TrueNAS SCALE We've grouped a number of settings here, that all effact how apps run in general.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/global/
+ - https://truecharts.org/common/#tz
+ - https://truecharts.org/common/podoptions/
+ - Image Pull Secrets
+
+
+ - name: Workload
+ description: |
+ These settings configure how the actual Pods and containers are running.
+ Generally, on SCALE, we only expose a limited subset of these settings for the primary workload and container.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/workload/
+ - https://truecharts.org/common/container/
+
+
+ - name: App Configuration
+ description: |
+ Every application has different values that may be required to run or have multiple options that the user may choose to enable or disable to change the behavior of the application.
+ Most options should have a Tooltip (Circled Question Mark) to further describe said option.
+
+ To find more information, lookup your chart-specific documentation in the Charts List: https://truecharts.org/charts/description-list/
+
+ - name: Services
+ description: |
+ Service and Networking options for any applications are contained here.
+ Some applications may have complicated networking setups with multiple options or some may have no options here at all.
+
+ Options here include the service and port configurations for the application, and more may be enabled or changed under the Advanced Settings and Show Expert Config boxes.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/service/
+
+ - name: Networking
+ description: |
+ Contains advanced networking options that are not actively supported by the TrueCharts team.
+ Currently only contains scaleExternalInterfaces.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/scaleexternalinterface/
+
+ - name: Persistence
+ description: |
+ Many applications will have certain options for storage to be configurable by the user, the main two being PVC and hostpath but may include other types.
+ This storage is called Persistence since it is not deleted upon restart or upgrade of an application.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/persistence/
+ - https://truecharts.org/scale/guides/nfs-share/
+ - https://truecharts.org/general/faq/#why-pvc-is-recommended-over-hostpath
+
+
+ - name: Ingress
+ description: |
+ Ingress (more commonly known as Reverse Proxy) settings can be configured here. This is how Kubernetes connects your Applications in containers to FQDNs (fully qualified domain names).
+ If you choose to enable this you must have a "Ingress Provider" aka "Reverse Proxy" installed (We highly advice Traefik: https://truecharts.org/charts/premium/traefik/)
+ It also requiresa DNS service to actually resolve the DNS name of the FQDN specified.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/ingress/
+
+
+ - name: SecurityContext
+ description: |
+ The security settings for each application and/or permissions that each application may have for the files/directories created.
+ Each application will come with predefined permissions but users may want to change certain setting depending on their usage or capabilities.
+
+ Unless necessary users are advised to keep this section mostly to defaults.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/securitycontext/
+
+
+ - name: Resources
+ description: |
+ Resources limits that have been defined by each application are in this section.
+ Most will have a specific default that some users may want to change based on their specific hardware or needs.
+
+ This also contains the options to mount GPUs or, more precisely, "request" GPU's to be mounted.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/resources/
+
+ - name: Devices
+ description: |
+ These are special "mountpoints" that can be used to mount miscelanious USB and PCI devices using special hostPath mounts.
+ For clearity we've decided to seperate this from persistence on SCALE.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/persistence/device/
+ - https://truecharts.org/scale/guides/pci-passthrough/
+
+ - name: Middlewares
+ description: Traefik Middlewares
+
+ - name: StorageClass
+ description: |
+ StorageClasses define where to storage Storage.
+
+ Checkout the following documentation for more information:
+
+ - name: Metrics
+ description: |
+ Contains options to configure Prometheus metrics for the application.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/metrics/
+
+
+ - name: Addons
+ description: |
+ Addons that are supplied by the TrueCharts team to add additional capabilities for users to use on top of the application’s defaults.
+ Things included here are VPN addons, Codeserver for editing files inside the application’s container, Netshoot for network troubelshooting, etc.
+
+ Generally not required for use but may be necessary or usefull at times for specific applications.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/addons/
+ - https://truecharts.org/scale/guides/vpn-setup/
+
+
+ - name: Experimental
+ description: |
+ Experimental Configuration Options
+ Often these are not fully flushed-out, could randomly break or might not work at-all.
+
+ - name: Postgresql
+ description: |
+ For Postgresql we use "CloudNative-PG" as a backend, which has to be installed first.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/cnpg/
+ - https://truecharts.org/scale/guides/sql-export/
+ - https://truecharts.org/scale/guides/recover-cnpg/
+
+ - name: Dependencies
+ description: |
+ contains dependency setting for which we, currently, do not have seperate catagories (yet)
+
+
+ - name: Documentation
+ description: |
+ We added this section to make everyone aware that OpenSource isn't always easy.
+ It doesn't keep existing without signficant ongoing support, so please consider supporting TrueCharts and other OpenSource projects.
+
+ Before installing, be sure you've followed the https://truecharts.org/scale/guides/getting-started/
+ We would also advice going over our https://truecharts.org/scale/guides/scale-intro/
+ and many of the other documentation pages...
+
+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
+ 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: credentialsList
+ group: General
+ label: "Credentials (Experimental)"
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: credentialsEntry
+ label: "Enter Credentials"
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: name
+ label: Name
+ description: "Name"
+ schema:
+ type: string
+ required: true
+ default: ""
+ - variable: type
+ label: Type
+ description: "Type of Credential"
+ schema:
+ type: string
+ default: "s3"
+ enum:
+ - value: s3
+ description: s3 Storage
+ - variable: url
+ label: "url"
+ schema:
+ type: string
+ default: ""
+ required: true
+ - variable: path
+ label: "path"
+ description: "Path Prefix not needed for most cases"
+ schema:
+ type: string
+ default: ""
+ - variable: bucket
+ label: "bucket"
+ schema:
+ show_if: [["type", "=", "s3"]]
+ type: string
+ default: ""
+ required: true
+ - variable: accessKey
+ label: "accessKey"
+ schema:
+ show_if: [["type", "=", "s3"]]
+ type: string
+ default: ""
+ required: true
+ - variable: secretKey
+ label: "secretKey"
+ schema:
+ show_if: [["type", "=", "s3"]]
+ type: string
+ default: ""
+ required: true
+ - variable: encrKey
+ label: "encrKey"
+ description: "The Encryption key is needed for tools like volsync if not needed it will be ignored"
+ schema:
+ show_if: [["type", "=", "s3"]]
+ type: string
+ default: "MYSECRETPASSPHRASE"
+ required: true
+
+ - variable: workload
+ group: "Workload"
+ 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"
+ schema:
+ type: string
+ default: "Etc/UTC"
+ $ref:
+ - "definitions/timezone"
+
+ - variable: podOptions
+ group: "General"
+ 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"
+ 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: 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: dns
+ label: DNS 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: scaleExternalInterface
+ description: 'Add External Interfaces (Experimental, might change or be removed without further notice)'
+ label: Add external Interfaces (Experimental)
+ 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: 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: 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: volsync
+ label: 'VolSync (Experimental)'
+ description: Backup, Restore and Synchronise PVC storage
+ schema:
+ show_if: [["type", "=", "pvc"]]
+ type: list
+ default: []
+ items:
+ - variable: VolSyncEntry
+ label: VolSync Configuration
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: name
+ label: Name
+ description: "Name of backup configuration"
+ schema:
+ type: string
+ default: ""
+ required: true
+ - variable: type
+ label: Type VolSync/Backup
+ description: Sets the VolSync Type
+ schema:
+ type: string
+ default: "restic"
+ enum:
+ - value: restic
+ description: Restic
+ - variable: credentials
+ label: Credentials
+ description: "Name of credentials in the credentials section"
+ schema:
+ type: string
+ default: ""
+ required: true
+ - variable: dest
+ label: VolSync Destination (Restore)
+ description: VolSYnc Destination is the location where data is the reciever and configures recovery of backups
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: enabled
+ label: Enable
+ schema:
+ type: boolean
+ default: true
+ - variable: src
+ label: VolSync Source (Backup)
+ description: VolSYnc Source is the location where data is the sender and creates backups to storage
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: enabled
+ label: Enable
+ schema:
+ type: boolean
+ default: true
+ - 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: SecurityContext
+ 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
+ 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: 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: pgVersion
+ label: Postgres Version
+ description: "Set the Postgresql version used"
+ schema:
+ type: int
+ default: 16
+ required: true
+ - variable: password
+ label: Password
+ description: "Set the password for the database-user"
+ schema:
+ type: string
+ default: "PLACEHOLDERPASSWORD"
+ required: true
+ - 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: enabled
+ label: Enabled
+ schema:
+ type: boolean
+ default: false
+ - variable: instances
+ label: Instances
+ schema:
+ type: int
+ show_if: [["enabled", "=", true]]
+ default: 1
+ - variable: createRO
+ label: "Create ReadOnly Instance"
+ schema:
+ type: boolean
+ show_if: [["enabled", "=", true]]
+ default: false
+ - variable: backups
+ label: "Backup Settings (Experimental)"
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: enabled
+ label: "enabled"
+ schema:
+ type: boolean
+ default: false
+ - variable: revision
+ label: "revision"
+ schema:
+ type: string
+ default: ""
+ - variable: retentionPolicy
+ label: "retentionPolicy"
+ schema:
+ type: string
+ show_if: [["enabled", "=", true]]
+ default: "30d"
+ - variable: credentials
+ label: "Credentials"
+ description: "Name of the credentials in the credentials section"
+ schema:
+ type: string
+ show_if: [["enabled", "=", true]]
+ default: ""
+ required: true
+ - variable: recovery
+ label: "Recovery Settings (Experimental)"
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: enabled
+ label: "enabled"
+ schema:
+ type: boolean
+ default: false
+ - variable: serverName
+ label: "serverName"
+ schema:
+ type: string
+ default: ""
+ - variable: revision
+ label: "revision"
+ schema:
+ type: string
+ 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: credentials
+ label: "Credentials"
+ description: "Name of the credentials in the credentials section"
+ schema:
+ type: string
+ show_if: [["enabled", "=", true]]
+ 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: Experimental
+# 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: Experimental
+ 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/premium/blocky/15.2.4/templates/NOTES.txt b/premium/blocky/15.2.4/templates/NOTES.txt
new file mode 100644
index 0000000000..efcb74cb77
--- /dev/null
+++ b/premium/blocky/15.2.4/templates/NOTES.txt
@@ -0,0 +1 @@
+{{- include "tc.v1.common.lib.chart.notes" $ -}}
diff --git a/premium/blocky/15.2.4/templates/_blockyConfig.tpl b/premium/blocky/15.2.4/templates/_blockyConfig.tpl
new file mode 100644
index 0000000000..9e6cd8624d
--- /dev/null
+++ b/premium/blocky/15.2.4/templates/_blockyConfig.tpl
@@ -0,0 +1,238 @@
+{{/* 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 }}
+
+upstreamTimeout: {{ .Values.upstreamTimeout | default "1s" }}
+
+ports:
+ {{- if .Values.service.dns.enabled }}
+ dns: {{ .Values.service.dns.ports.dns.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 }}
+
+ whiteLists:
+ default:
+ - https://raw.githubusercontent.com/anudeepND/whitelist/master/domains/optional-list.txt
+ - https://raw.githubusercontent.com/anudeepND/whitelist/master/domains/whitelist.txt
+ - https://raw.githubusercontent.com/rahilpathan/pihole-whitelist/main/1.LowWL.txt
+{{- range $id, $value := .Values.blocking.whitelist }}
+ {{ $value.name }}:
+{{- $value.lists | toYaml | nindent 10 }}
+{{- end }}
+
+
+ blackLists:
+ default:
+ - https://big.oisd.nl/domainswild
+ - https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
+{{- range $id, $value := .Values.blocking.blacklist }}
+ {{ $value.name }}:
+{{- $value.lists | toYaml | nindent 10 }}
+{{- 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/premium/blocky/15.2.4/templates/_k8sgateway.tpl b/premium/blocky/15.2.4/templates/_k8sgateway.tpl
new file mode 100644
index 0000000000..463923f85d
--- /dev/null
+++ b/premium/blocky/15.2.4/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/premium/blocky/15.2.4/templates/common.yaml b/premium/blocky/15.2.4/templates/common.yaml
new file mode 100644
index 0000000000..310ef64af8
--- /dev/null
+++ b/premium/blocky/15.2.4/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/premium/blocky/15.2.4/values.yaml b/premium/blocky/15.2.4/values.yaml
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/premium/blocky/app_versions.json b/premium/blocky/app_versions.json
index 942c1d6886..004d808f2b 100644
--- a/premium/blocky/app_versions.json
+++ b/premium/blocky/app_versions.json
@@ -1,4 +1,6274 @@
{
+ "15.2.4": {
+ "healthy": true,
+ "supported": true,
+ "healthy_error": null,
+ "location": "/home/runner/_work/catalog/catalog/premium/blocky/15.2.4",
+ "last_update": "2024-12-21 22:27:06",
+ "required_features": [
+ "definitions/timezone",
+ "normalize/interfaceConfiguration",
+ "definitions/certificate",
+ "definitions/interface"
+ ],
+ "human_version": "0.24.0_15.2.4",
+ "version": "15.2.4",
+ "chart_metadata": {
+ "annotations": {
+ "truecharts.org/category": "network",
+ "truecharts.org/max_helm_version": "3.14",
+ "truecharts.org/min_helm_version": "3.11",
+ "truecharts.org/train": "premium"
+ },
+ "apiVersion": "v2",
+ "appVersion": "0.24.0",
+ "dependencies": [
+ {
+ "name": "common",
+ "version": "23.0.10",
+ "repository": "oci://tccr.io/truecharts",
+ "condition": "",
+ "alias": "",
+ "tags": [],
+ "import-values": []
+ },
+ {
+ "name": "redis",
+ "version": "14.0.5",
+ "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/premium/blocky",
+ "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/blocky.webp",
+ "keywords": [
+ "dns",
+ "blocky"
+ ],
+ "kubeVersion": ">=1.24.0-0",
+ "maintainers": [
+ {
+ "name": "TrueCharts",
+ "email": "info@truecharts.org",
+ "url": "https://truecharts.org"
+ }
+ ],
+ "name": "blocky",
+ "sources": [
+ "https://0xerr0r.github.io/blocky/",
+ "https://github.com/0xERR0R/blocky",
+ "https://github.com/Mozart409/blocky-frontend",
+ "https://github.com/truecharts/charts/tree/master/charts/premium/blocky",
+ "https://hub.docker.com/r/spx01/blocky",
+ "https://quay.io/oriedge/k8s_gateway"
+ ],
+ "type": "application",
+ "version": "15.2.4"
+ },
+ "app_metadata": null,
+ "schema": {
+ "groups": [
+ {
+ "name": "Image",
+ "description": "Configured the images to be used for the Chart.\nIt's wise to use \"digest pinned\" tags and to avoid using \"latest\".\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/#images\n"
+ },
+ {
+ "name": "General",
+ "description": "For TrueNAS SCALE We've grouped a number of settings here, that all effact how apps run in general.\n\nCheckout the following documentation for more information:\n - https://truecharts.org/common/global/\n - https://truecharts.org/common/#tz\n - https://truecharts.org/common/podoptions/\n - Image Pull Secrets\n"
+ },
+ {
+ "name": "Workload",
+ "description": "These settings configure how the actual Pods and containers are running.\nGenerally, on SCALE, we only expose a limited subset of these settings for the primary workload and container.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/workload/\n- https://truecharts.org/common/container/\n"
+ },
+ {
+ "name": "App Configuration",
+ "description": "Every application has different values that may be required to run or have multiple options that the user may choose to enable or disable to change the behavior of the application.\nMost options should have a Tooltip (Circled Question Mark) to further describe said option.\n\nTo find more information, lookup your chart-specific documentation in the Charts List: https://truecharts.org/charts/description-list/\n"
+ },
+ {
+ "name": "Services",
+ "description": "Service and Networking options for any applications are contained here.\nSome applications may have complicated networking setups with multiple options or some may have no options here at all.\n\nOptions here include the service and port configurations for the application, and more may be enabled or changed under the Advanced Settings and Show Expert Config boxes.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/service/\n"
+ },
+ {
+ "name": "Networking",
+ "description": "Contains advanced networking options that are not actively supported by the TrueCharts team.\nCurrently only contains scaleExternalInterfaces.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/scaleexternalinterface/\n"
+ },
+ {
+ "name": "Persistence",
+ "description": "Many applications will have certain options for storage to be configurable by the user, the main two being PVC and hostpath but may include other types.\nThis storage is called Persistence since it is not deleted upon restart or upgrade of an application.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/persistence/\n- https://truecharts.org/scale/guides/nfs-share/\n- https://truecharts.org/general/faq/#why-pvc-is-recommended-over-hostpath\n"
+ },
+ {
+ "name": "Ingress",
+ "description": "Ingress (more commonly known as Reverse Proxy) settings can be configured here. This is how Kubernetes connects your Applications in containers to FQDNs (fully qualified domain names).\nIf you choose to enable this you must have a \"Ingress Provider\" aka \"Reverse Proxy\" installed (We highly advice Traefik: https://truecharts.org/charts/premium/traefik/)\nIt also requiresa DNS service to actually resolve the DNS name of the FQDN specified.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/ingress/\n"
+ },
+ {
+ "name": "SecurityContext",
+ "description": "The security settings for each application and/or permissions that each application may have for the files/directories created.\nEach application will come with predefined permissions but users may want to change certain setting depending on their usage or capabilities.\n\nUnless necessary users are advised to keep this section mostly to defaults.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/securitycontext/\n"
+ },
+ {
+ "name": "Resources",
+ "description": "Resources limits that have been defined by each application are in this section.\nMost will have a specific default that some users may want to change based on their specific hardware or needs.\n\nThis also contains the options to mount GPUs or, more precisely, \"request\" GPU's to be mounted.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/resources/\n"
+ },
+ {
+ "name": "Devices",
+ "description": "These are special \"mountpoints\" that can be used to mount miscelanious USB and PCI devices using special hostPath mounts.\nFor clearity we've decided to seperate this from persistence on SCALE.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/persistence/device/\n- https://truecharts.org/scale/guides/pci-passthrough/\n"
+ },
+ {
+ "name": "Middlewares",
+ "description": "Traefik Middlewares"
+ },
+ {
+ "name": "StorageClass",
+ "description": "StorageClasses define where to storage Storage.\n\nCheckout the following documentation for more information:\n"
+ },
+ {
+ "name": "Metrics",
+ "description": "Contains options to configure Prometheus metrics for the application.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/metrics/\n"
+ },
+ {
+ "name": "Addons",
+ "description": "Addons that are supplied by the TrueCharts team to add additional capabilities for users to use on top of the application\u2019s defaults.\nThings included here are VPN addons, Codeserver for editing files inside the application\u2019s container, Netshoot for network troubelshooting, etc.\n\nGenerally not required for use but may be necessary or usefull at times for specific applications.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/addons/\n- https://truecharts.org/scale/guides/vpn-setup/\n"
+ },
+ {
+ "name": "Experimental",
+ "description": "Experimental Configuration Options\nOften these are not fully flushed-out, could randomly break or might not work at-all.\n"
+ },
+ {
+ "name": "Postgresql",
+ "description": "For Postgresql we use \"CloudNative-PG\" as a backend, which has to be installed first.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/cnpg/\n- https://truecharts.org/scale/guides/sql-export/\n- https://truecharts.org/scale/guides/recover-cnpg/\n"
+ },
+ {
+ "name": "Dependencies",
+ "description": "contains dependency setting for which we, currently, do not have seperate catagories (yet)\n"
+ },
+ {
+ "name": "Documentation",
+ "description": "We added this section to make everyone aware that OpenSource isn't always easy.\nIt doesn't keep existing without signficant ongoing support, so please consider supporting TrueCharts and other OpenSource projects.\n\nBefore installing, be sure you've followed the https://truecharts.org/scale/guides/getting-started/\nWe would also advice going over our https://truecharts.org/scale/guides/scale-intro/\nand many of the other documentation pages...\n"
+ }
+ ],
+ "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",
+ "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": "credentialsList",
+ "group": "General",
+ "label": "Credentials (Experimental)",
+ "schema": {
+ "type": "list",
+ "default": [],
+ "items": [
+ {
+ "variable": "credentialsEntry",
+ "label": "Enter Credentials",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "variable": "name",
+ "label": "Name",
+ "description": "Name",
+ "schema": {
+ "type": "string",
+ "required": true,
+ "default": ""
+ }
+ },
+ {
+ "variable": "type",
+ "label": "Type",
+ "description": "Type of Credential",
+ "schema": {
+ "type": "string",
+ "default": "s3",
+ "enum": [
+ {
+ "value": "s3",
+ "description": "s3 Storage"
+ }
+ ]
+ }
+ },
+ {
+ "variable": "url",
+ "label": "url",
+ "schema": {
+ "type": "string",
+ "default": "",
+ "required": true
+ }
+ },
+ {
+ "variable": "path",
+ "label": "path",
+ "description": "Path Prefix not needed for most cases",
+ "schema": {
+ "type": "string",
+ "default": ""
+ }
+ },
+ {
+ "variable": "bucket",
+ "label": "bucket",
+ "schema": {
+ "show_if": [
+ [
+ "type",
+ "=",
+ "s3"
+ ]
+ ],
+ "type": "string",
+ "default": "",
+ "required": true
+ }
+ },
+ {
+ "variable": "accessKey",
+ "label": "accessKey",
+ "schema": {
+ "show_if": [
+ [
+ "type",
+ "=",
+ "s3"
+ ]
+ ],
+ "type": "string",
+ "default": "",
+ "required": true
+ }
+ },
+ {
+ "variable": "secretKey",
+ "label": "secretKey",
+ "schema": {
+ "show_if": [
+ [
+ "type",
+ "=",
+ "s3"
+ ]
+ ],
+ "type": "string",
+ "default": "",
+ "required": true
+ }
+ },
+ {
+ "variable": "encrKey",
+ "label": "encrKey",
+ "description": "The Encryption key is needed for tools like volsync if not needed it will be ignored",
+ "schema": {
+ "show_if": [
+ [
+ "type",
+ "=",
+ "s3"
+ ]
+ ],
+ "type": "string",
+ "default": "MYSECRETPASSPHRASE",
+ "required": true
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "variable": "workload",
+ "group": "Workload",
+ "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.\nfailOnError: like blocking but blocky will shut down if any download fails.\nfast: DNS resolution starts immediately without blocking which will be enabled after list load is completed\n",
+ "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",
+ "schema": {
+ "type": "string",
+ "default": "America/Los_Angeles",
+ "$ref": [
+ "definitions/timezone"
+ ],
+ "enum": [
+ {
+ "value": "Asia/Damascus",
+ "description": "'Asia/Damascus' timezone"
+ },
+ {
+ "value": "Asia/Saigon",
+ "description": "'Asia/Saigon' timezone"
+ }
+ ]
+ }
+ },
+ {
+ "variable": "podOptions",
+ "group": "General",
+ "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",
+ "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": "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": "dns",
+ "label": "DNS 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": "scaleExternalInterface",
+ "description": "Add External Interfaces (Experimental, might change or be removed without further notice)",
+ "label": "Add external Interfaces (Experimental)",
+ "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"
+ ],
+ "enum": []
+ }
+ },
+ {
+ "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": "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": "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\n",
+ "schema": {
+ "type": "boolean",
+ "default": false
+ }
+ },
+ {
+ "variable": "chmod",
+ "label": "Run CHMOD",
+ "description": "It will run CHMOD on the path with the given value\nFormat should be 3 digits, e.g. 770\n",
+ "schema": {
+ "type": "string",
+ "valid_chars": "[0-9]{3}",
+ "default": ""
+ }
+ },
+ {
+ "variable": "recursive",
+ "label": "Recursive",
+ "description": "It will run CHOWN and CHMOD recursively\n",
+ "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": "volsync",
+ "label": "VolSync (Experimental)",
+ "description": "Backup, Restore and Synchronise PVC storage",
+ "schema": {
+ "show_if": [
+ [
+ "type",
+ "=",
+ "pvc"
+ ]
+ ],
+ "type": "list",
+ "default": [],
+ "items": [
+ {
+ "variable": "VolSyncEntry",
+ "label": "VolSync Configuration",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "variable": "name",
+ "label": "Name",
+ "description": "Name of backup configuration",
+ "schema": {
+ "type": "string",
+ "default": "",
+ "required": true
+ }
+ },
+ {
+ "variable": "type",
+ "label": "Type VolSync/Backup",
+ "description": "Sets the VolSync Type",
+ "schema": {
+ "type": "string",
+ "default": "restic",
+ "enum": [
+ {
+ "value": "restic",
+ "description": "Restic"
+ }
+ ]
+ }
+ },
+ {
+ "variable": "credentials",
+ "label": "Credentials",
+ "description": "Name of credentials in the credentials section",
+ "schema": {
+ "type": "string",
+ "default": "",
+ "required": true
+ }
+ },
+ {
+ "variable": "dest",
+ "label": "VolSync Destination (Restore)",
+ "description": "VolSYnc Destination is the location where data is the reciever and configures recovery of backups",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "variable": "enabled",
+ "label": "Enable",
+ "schema": {
+ "type": "boolean",
+ "default": true
+ }
+ }
+ ]
+ }
+ },
+ {
+ "variable": "src",
+ "label": "VolSync Source (Backup)",
+ "description": "VolSYnc Source is the location where data is the sender and creates backups to storage",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "variable": "enabled",
+ "label": "Enable",
+ "schema": {
+ "type": "boolean",
+ "default": true
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "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\nsmb: connect to an SMB share\nnfs: connect to an NFS share\n",
+ "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": "SecurityContext",
+ "label": "Security Context",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "variable": "container",
+ "label": "Container",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "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
+ }
+ },
+ {
+ "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"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "variable": "fsGroup",
+ "label": "fsGroup",
+ "description": "The group that should own ALL storage.",
+ "schema": {
+ "type": "int",
+ "default": 568
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "variable": "resources",
+ "group": "Resources",
+ "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": "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": "pgVersion",
+ "label": "Postgres Version",
+ "description": "Set the Postgresql version used",
+ "schema": {
+ "type": "int",
+ "default": 16,
+ "required": true
+ }
+ },
+ {
+ "variable": "password",
+ "label": "Password",
+ "description": "Set the password for the database-user",
+ "schema": {
+ "type": "string",
+ "default": "PLACEHOLDERPASSWORD",
+ "required": true
+ }
+ },
+ {
+ "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": "enabled",
+ "label": "Enabled",
+ "schema": {
+ "type": "boolean",
+ "default": false
+ }
+ },
+ {
+ "variable": "instances",
+ "label": "Instances",
+ "schema": {
+ "type": "int",
+ "show_if": [
+ [
+ "enabled",
+ "=",
+ true
+ ]
+ ],
+ "default": 1
+ }
+ },
+ {
+ "variable": "createRO",
+ "label": "Create ReadOnly Instance",
+ "schema": {
+ "type": "boolean",
+ "show_if": [
+ [
+ "enabled",
+ "=",
+ true
+ ]
+ ],
+ "default": false
+ }
+ }
+ ]
+ }
+ },
+ {
+ "variable": "backups",
+ "label": "Backup Settings (Experimental)",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "variable": "enabled",
+ "label": "enabled",
+ "schema": {
+ "type": "boolean",
+ "default": false
+ }
+ },
+ {
+ "variable": "revision",
+ "label": "revision",
+ "schema": {
+ "type": "string",
+ "default": ""
+ }
+ },
+ {
+ "variable": "retentionPolicy",
+ "label": "retentionPolicy",
+ "schema": {
+ "type": "string",
+ "show_if": [
+ [
+ "enabled",
+ "=",
+ true
+ ]
+ ],
+ "default": "30d"
+ }
+ },
+ {
+ "variable": "credentials",
+ "label": "Credentials",
+ "description": "Name of the credentials in the credentials section",
+ "schema": {
+ "type": "string",
+ "show_if": [
+ [
+ "enabled",
+ "=",
+ true
+ ]
+ ],
+ "default": "",
+ "required": true
+ }
+ }
+ ]
+ }
+ },
+ {
+ "variable": "recovery",
+ "label": "Recovery Settings (Experimental)",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "variable": "enabled",
+ "label": "enabled",
+ "schema": {
+ "type": "boolean",
+ "default": false
+ }
+ },
+ {
+ "variable": "serverName",
+ "label": "serverName",
+ "schema": {
+ "type": "string",
+ "default": ""
+ }
+ },
+ {
+ "variable": "revision",
+ "label": "revision",
+ "schema": {
+ "type": "string",
+ "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": "credentials",
+ "label": "Credentials",
+ "description": "Name of the credentials in the credentials section",
+ "schema": {
+ "type": "string",
+ "show_if": [
+ [
+ "enabled",
+ "=",
+ true
+ ]
+ ],
+ "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
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "variable": "networkPolicy",
+ "group": "Experimental",
+ "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"
+ ],
+ "enum": [
+ {
+ "value": null,
+ "description": "No Certificate"
+ }
+ ],
+ "default": null,
+ "null": true
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "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
+ }
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "app_readme": "
Blocky is a DNS proxy, DNS enhancer and ad-blocker for the local network written in Go
\n
This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/premium/blocky
\n
\n
TrueCharts can only exist due to the incredible effort of our staff.\nPlease consider making a donation or contributing back to the project any way you can!
",
+ "detailed_readme": "
\n
title: README
\n
General Info
\n
TrueCharts can be installed as both normal Helm Charts or as TrueNAS SCALE Apps.\nBoth solutions are fully supported, but we heavily advice the use of normal Helm Charts where possible
\n
For more information about this Chart, please check the docs on the TrueCharts website
\n
This chart is not maintained by the upstream project and any issues with the chart should be raised here
\n
Installation
\n
Helm-Chart installation
\n
To install TrueCharts Helm charts using Helm, you can use our OCI Repository.
\n
helm install mychart oci://tccr.io/truecharts/CHARTNAME
\n
For more information on how to install TrueCharts Helm charts, checkout the instructions on the website: https://truecharts.org/helm/
\n
TrueNAS SCALE Apps
\n
For more information on how to use TrueCharts as TrueNAS SCALE Apps, please checkout the quick-start guides for TrueNAS SCALE.
\n
Chart Specific Guides and information
\n
All our charts have dedicated documentation pages.\nThe documentation for this chart can be found here:\nhttps://truecharts.org/charts/premium/blocky
\n
Configuration Options
\n
Please note: For TrueNAS SCALE, only options available in the GUI are supported.\nHence most of these docs do not apply to TrueNAS SCALE
\n
To view the chart specific options, please view Values.yaml included in the chart.\nThe most recent version of which, is available here: https://github.com/truecharts/charts/charts/premium/blocky/values.yaml
\n
All our Charts use a shared \"common\" library chart that contains most of the templating and options.\nFor the complete overview of all available options, please checkout the documentation for them on the website: https://truecharts.org/common/
\n
For information about the common chart and all defaults included with it, please review its values.yaml file available here: https://github.com/truecharts/library-charts/blob/main/library/common/values.yaml
\n
Support
\n
\n
\n
Sponsor TrueCharts
\n
TrueCharts can only exist due to the incredible effort of our staff.\nPlease consider making a donation or contributing back to the project any way you can!
\n
All Rights Reserved - The TrueCharts Project
",
+ "changelog": "
for the complete changelog, please refer to the website
\n
Important:
"
+ },
"15.2.3": {
"healthy": true,
"supported": true,
diff --git a/stable/dell-idrac-fan-controller/6.1.1/.helmignore b/stable/dell-idrac-fan-controller/6.1.1/.helmignore
new file mode 100644
index 0000000000..feb7464da6
--- /dev/null
+++ b/stable/dell-idrac-fan-controller/6.1.1/.helmignore
@@ -0,0 +1,32 @@
+# 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
+icon.webp
+icon-small.webp
diff --git a/stable/dell-idrac-fan-controller/6.1.1/CHANGELOG.md b/stable/dell-idrac-fan-controller/6.1.1/CHANGELOG.md
new file mode 100644
index 0000000000..941abb8a21
--- /dev/null
+++ b/stable/dell-idrac-fan-controller/6.1.1/CHANGELOG.md
@@ -0,0 +1,3 @@
+*for the complete changelog, please refer to the website*
+
+**Important:**
\ No newline at end of file
diff --git a/stable/dell-idrac-fan-controller/6.1.1/Chart.yaml b/stable/dell-idrac-fan-controller/6.1.1/Chart.yaml
new file mode 100644
index 0000000000..146fdb97ff
--- /dev/null
+++ b/stable/dell-idrac-fan-controller/6.1.1/Chart.yaml
@@ -0,0 +1,35 @@
+annotations:
+ truecharts.org/category: utilities
+ truecharts.org/max_helm_version: "3.14"
+ truecharts.org/min_helm_version: "3.11"
+ truecharts.org/train: stable
+apiVersion: v2
+appVersion: 'latest'
+dependencies:
+- name: common
+ version: 23.0.10
+ repository: oci://tccr.io/truecharts
+ condition: ""
+ alias: ""
+ tags: []
+ import-values: []
+deprecated: false
+description: Control your Dell PowerEdge fans via IPMI
+home: https://truecharts.org/charts/stable/dell-idrac-fan-controller
+icon: https://truecharts.org/img/hotlink-ok/chart-icons/dell-idrac-fan-controller.webp
+keywords:
+- iDrac
+- Dell
+- fan-controller
+kubeVersion: '>=1.24.0-0'
+maintainers:
+- name: TrueCharts
+ email: info@truecharts.org
+ url: https://truecharts.org
+name: dell-idrac-fan-controller
+sources:
+- https://ghcr.io/tigerblue77/dell_idrac_fan_controller
+- https://github.com/tigerblue77/Dell_iDRAC_fan_controller_Docker
+- https://github.com/truecharts/charts/tree/master/charts/stable/dell-idrac-fan-controller
+type: application
+version: 6.1.1
diff --git a/stable/dell-idrac-fan-controller/6.1.1/README.md b/stable/dell-idrac-fan-controller/6.1.1/README.md
new file mode 100644
index 0000000000..43b1f01394
--- /dev/null
+++ b/stable/dell-idrac-fan-controller/6.1.1/README.md
@@ -0,0 +1,61 @@
+---
+title: README
+---
+
+## General Info
+
+TrueCharts can be installed as both _normal_ Helm Charts or as TrueNAS SCALE Apps.
+Both solutions are fully supported, but we heavily advice the use of normal Helm Charts where possible
+
+For more information about this Chart, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/dell-idrac-fan-controller)
+
+**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)**
+
+## Installation
+
+### Helm-Chart installation
+
+To install TrueCharts Helm charts using Helm, you can use our OCI Repository.
+
+`helm install mychart oci://tccr.io/truecharts/CHARTNAME`
+
+For more information on how to install TrueCharts Helm charts, checkout the instructions on the website: https://truecharts.org/helm/
+
+
+### TrueNAS SCALE Apps
+
+For more information on how to use TrueCharts as TrueNAS SCALE Apps, please checkout the [quick-start guides for TrueNAS SCALE](https://truecharts.org/scale).
+
+## Chart Specific Guides and information
+
+All our charts have dedicated documentation pages.
+The documentation for this chart can be found here:
+https://truecharts.org/charts/stable/dell-idrac-fan-controller
+
+## Configuration Options
+
+Please note: For TrueNAS SCALE, only options available in the GUI are supported.
+Hence most of these docs do not apply to TrueNAS SCALE
+
+To view the chart specific options, please view Values.yaml included in the chart.
+The most recent version of which, is available here: https://github.com/truecharts/charts/charts/stable/dell-idrac-fan-controller/values.yaml
+
+All our Charts use a shared "common" library chart that contains most of the templating and options.
+For the complete overview of all available options, please checkout the documentation for them on the website: https://truecharts.org/common/
+
+For information about the common chart and all defaults included with it, please review its values.yaml file available here: https://github.com/truecharts/library-charts/blob/main/library/common/values.yaml
+
+## Support
+
+- 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/general/sponsor) or contributing back to the project any way you can!
+
+_All Rights Reserved - The TrueCharts Project_
diff --git a/stable/dell-idrac-fan-controller/6.1.1/app-readme.md b/stable/dell-idrac-fan-controller/6.1.1/app-readme.md
new file mode 100644
index 0000000000..7cc370e44d
--- /dev/null
+++ b/stable/dell-idrac-fan-controller/6.1.1/app-readme.md
@@ -0,0 +1,8 @@
+Control your Dell PowerEdge fans via IPMI
+
+This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/dell-idrac-fan-controller](https://truecharts.org/charts/stable/dell-idrac-fan-controller)
+
+---
+
+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/stable/dell-idrac-fan-controller/6.1.1/charts/common-23.0.10.tgz b/stable/dell-idrac-fan-controller/6.1.1/charts/common-23.0.10.tgz
new file mode 100644
index 0000000000..5eefcb329b
Binary files /dev/null and b/stable/dell-idrac-fan-controller/6.1.1/charts/common-23.0.10.tgz differ
diff --git a/stable/dell-idrac-fan-controller/6.1.1/icon-small.webp b/stable/dell-idrac-fan-controller/6.1.1/icon-small.webp
new file mode 100644
index 0000000000..33d236865c
Binary files /dev/null and b/stable/dell-idrac-fan-controller/6.1.1/icon-small.webp differ
diff --git a/stable/dell-idrac-fan-controller/6.1.1/icon.webp b/stable/dell-idrac-fan-controller/6.1.1/icon.webp
new file mode 100644
index 0000000000..be1682ab7e
Binary files /dev/null and b/stable/dell-idrac-fan-controller/6.1.1/icon.webp differ
diff --git a/stable/dell-idrac-fan-controller/6.1.1/ix_values.yaml b/stable/dell-idrac-fan-controller/6.1.1/ix_values.yaml
new file mode 100644
index 0000000000..06e0ed2a43
--- /dev/null
+++ b/stable/dell-idrac-fan-controller/6.1.1/ix_values.yaml
@@ -0,0 +1,33 @@
+image:
+ repository: "ghcr.io/tigerblue77/dell_idrac_fan_controller"
+ pullPolicy: "IfNotPresent"
+ tag: "latest@sha256:5184af88c6c03204611d40d4b1c6bc36202762592d16a97236bb4254951d23b0"
+service:
+ main:
+ enabled: false
+ ports:
+ main:
+ enabled: false
+workload:
+ main:
+ podSpec:
+ containers:
+ main:
+ probes:
+ liveness:
+ enabled: false
+ readiness:
+ enabled: false
+ startup:
+ enabled: false
+ env:
+ IDRAC_HOST: ""
+ IDRAC_USERNAME: ""
+ IDRAC_PASSWORD: ""
+ FAN_SPEED: 5
+ CPU_TEMPERATURE_THRESHOLD: 50
+ CHECK_INTERVAL: 60
+ DISABLE_THIRD_PARTY_PCIE_CARD_DELL_DEFAULT_COOLING_RESPONSE: false
+portal:
+ open:
+ enabled: false
diff --git a/stable/dell-idrac-fan-controller/6.1.1/questions.yaml b/stable/dell-idrac-fan-controller/6.1.1/questions.yaml
new file mode 100644
index 0000000000..06935a6f6d
--- /dev/null
+++ b/stable/dell-idrac-fan-controller/6.1.1/questions.yaml
@@ -0,0 +1,2261 @@
+groups:
+ - name: Image
+ description: |
+ Configured the images to be used for the Chart.
+ It's wise to use "digest pinned" tags and to avoid using "latest".
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/#images
+
+
+ - name: General
+ description: |
+ For TrueNAS SCALE We've grouped a number of settings here, that all effact how apps run in general.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/global/
+ - https://truecharts.org/common/#tz
+ - https://truecharts.org/common/podoptions/
+ - Image Pull Secrets
+
+
+ - name: Workload
+ description: |
+ These settings configure how the actual Pods and containers are running.
+ Generally, on SCALE, we only expose a limited subset of these settings for the primary workload and container.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/workload/
+ - https://truecharts.org/common/container/
+
+
+ - name: App Configuration
+ description: |
+ Every application has different values that may be required to run or have multiple options that the user may choose to enable or disable to change the behavior of the application.
+ Most options should have a Tooltip (Circled Question Mark) to further describe said option.
+
+ To find more information, lookup your chart-specific documentation in the Charts List: https://truecharts.org/charts/description-list/
+
+ - name: Services
+ description: |
+ Service and Networking options for any applications are contained here.
+ Some applications may have complicated networking setups with multiple options or some may have no options here at all.
+
+ Options here include the service and port configurations for the application, and more may be enabled or changed under the Advanced Settings and Show Expert Config boxes.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/service/
+
+ - name: Networking
+ description: |
+ Contains advanced networking options that are not actively supported by the TrueCharts team.
+ Currently only contains scaleExternalInterfaces.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/scaleexternalinterface/
+
+ - name: Persistence
+ description: |
+ Many applications will have certain options for storage to be configurable by the user, the main two being PVC and hostpath but may include other types.
+ This storage is called Persistence since it is not deleted upon restart or upgrade of an application.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/persistence/
+ - https://truecharts.org/scale/guides/nfs-share/
+ - https://truecharts.org/general/faq/#why-pvc-is-recommended-over-hostpath
+
+
+ - name: Ingress
+ description: |
+ Ingress (more commonly known as Reverse Proxy) settings can be configured here. This is how Kubernetes connects your Applications in containers to FQDNs (fully qualified domain names).
+ If you choose to enable this you must have a "Ingress Provider" aka "Reverse Proxy" installed (We highly advice Traefik: https://truecharts.org/charts/premium/traefik/)
+ It also requiresa DNS service to actually resolve the DNS name of the FQDN specified.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/ingress/
+
+
+ - name: SecurityContext
+ description: |
+ The security settings for each application and/or permissions that each application may have for the files/directories created.
+ Each application will come with predefined permissions but users may want to change certain setting depending on their usage or capabilities.
+
+ Unless necessary users are advised to keep this section mostly to defaults.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/securitycontext/
+
+
+ - name: Resources
+ description: |
+ Resources limits that have been defined by each application are in this section.
+ Most will have a specific default that some users may want to change based on their specific hardware or needs.
+
+ This also contains the options to mount GPUs or, more precisely, "request" GPU's to be mounted.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/resources/
+
+ - name: Devices
+ description: |
+ These are special "mountpoints" that can be used to mount miscelanious USB and PCI devices using special hostPath mounts.
+ For clearity we've decided to seperate this from persistence on SCALE.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/persistence/device/
+ - https://truecharts.org/scale/guides/pci-passthrough/
+
+ - name: Middlewares
+ description: Traefik Middlewares
+
+ - name: StorageClass
+ description: |
+ StorageClasses define where to storage Storage.
+
+ Checkout the following documentation for more information:
+
+ - name: Metrics
+ description: |
+ Contains options to configure Prometheus metrics for the application.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/metrics/
+
+
+ - name: Addons
+ description: |
+ Addons that are supplied by the TrueCharts team to add additional capabilities for users to use on top of the application’s defaults.
+ Things included here are VPN addons, Codeserver for editing files inside the application’s container, Netshoot for network troubelshooting, etc.
+
+ Generally not required for use but may be necessary or usefull at times for specific applications.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/addons/
+ - https://truecharts.org/scale/guides/vpn-setup/
+
+
+ - name: Experimental
+ description: |
+ Experimental Configuration Options
+ Often these are not fully flushed-out, could randomly break or might not work at-all.
+
+ - name: Postgresql
+ description: |
+ For Postgresql we use "CloudNative-PG" as a backend, which has to be installed first.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/cnpg/
+ - https://truecharts.org/scale/guides/sql-export/
+ - https://truecharts.org/scale/guides/recover-cnpg/
+
+ - name: Dependencies
+ description: |
+ contains dependency setting for which we, currently, do not have seperate catagories (yet)
+
+
+ - name: Documentation
+ description: |
+ We added this section to make everyone aware that OpenSource isn't always easy.
+ It doesn't keep existing without signficant ongoing support, so please consider supporting TrueCharts and other OpenSource projects.
+
+ Before installing, be sure you've followed the https://truecharts.org/scale/guides/getting-started/
+ We would also advice going over our https://truecharts.org/scale/guides/scale-intro/
+ and many of the other documentation pages...
+
+questions:
+ - variable: global
+ group: General
+ 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: credentialsList
+ group: General
+ label: "Credentials (Experimental)"
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: credentialsEntry
+ label: "Enter Credentials"
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: name
+ label: Name
+ description: "Name"
+ schema:
+ type: string
+ required: true
+ default: ""
+ - variable: type
+ label: Type
+ description: "Type of Credential"
+ schema:
+ type: string
+ default: "s3"
+ enum:
+ - value: s3
+ description: s3 Storage
+ - variable: url
+ label: "url"
+ schema:
+ type: string
+ default: ""
+ required: true
+ - variable: path
+ label: "path"
+ description: "Path Prefix not needed for most cases"
+ schema:
+ type: string
+ default: ""
+ - variable: bucket
+ label: "bucket"
+ schema:
+ show_if: [["type", "=", "s3"]]
+ type: string
+ default: ""
+ required: true
+ - variable: accessKey
+ label: "accessKey"
+ schema:
+ show_if: [["type", "=", "s3"]]
+ type: string
+ default: ""
+ required: true
+ - variable: secretKey
+ label: "secretKey"
+ schema:
+ show_if: [["type", "=", "s3"]]
+ type: string
+ default: ""
+ required: true
+ - variable: encrKey
+ label: "encrKey"
+ description: "The Encryption key is needed for tools like volsync if not needed it will be ignored"
+ schema:
+ show_if: [["type", "=", "s3"]]
+ type: string
+ default: "MYSECRETPASSPHRASE"
+ required: true
+
+ - variable: workload
+ group: "Workload"
+ 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: env
+ group: "App Configuration"
+ label: "Image Environment"
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: IDRAC_HOST
+ label: iDrac Host
+ description: iDRAC's IP address. Default value is "local".
+ schema:
+ type: string
+ default: ""
+ - variable: IDRAC_USERNAME
+ label: iDrac Host Name
+ description: iDrac Username. Default value is "root".
+ schema:
+ type: string
+ default: ""
+ - variable: IDRAC_PASSWORD
+ label: iDrac Password
+ description: iDrac Password. Default password is "calvin".
+ schema:
+ type: string
+ private: true
+ default: ""
+ - variable: FAN_SPEED
+ label: Fan Speed
+ description: Fan speed parameter can be set as a decimal (from 0 to 100%). Default value is 5(%).
+ schema:
+ type: int
+ min: 0
+ max: 100
+ default: 5
+ - variable: CPU_TEMPERATURE_THRESHOLD
+ label: CPU Temperature Thershold
+ description: parameter is the T°junction (junction temperature) threshold beyond which the Dell fan mode defined in your BIOS will become active again (to protect the server hardware against overheat). Default value is 50(°C).
+ schema:
+ type: int
+ default: 50
+ - variable: CHECK_INTERVAL
+ label: Check Interval
+ description: parameter is the time (in seconds) between each temperature check and potential profile change. Default value is 60(s).
+ schema:
+ type: int
+ default: 60
+ - variable: DISABLE_THIRD_PARTY_PCIE_CARD_DELL_DEFAULT_COOLING_RESPONSE
+ label: Disable 3rd Party PCIE Card Dell Default Cooling Response
+ description: Boolean that allows to disable third-party PCIe card Dell default cooling response. Default value is false.
+ schema:
+ type: boolean
+ default: false
+ - variable: TZ
+ label: Timezone
+ group: "General"
+ schema:
+ type: string
+ default: "Etc/UTC"
+ $ref:
+ - "definitions/timezone"
+
+ - variable: podOptions
+ group: "General"
+ 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"
+ 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: scaleExternalInterface
+ description: 'Add External Interfaces (Experimental, might change or be removed without further notice)'
+ label: Add external Interfaces (Experimental)
+ 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: 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: 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: volsync
+ label: 'VolSync (Experimental)'
+ description: Backup, Restore and Synchronise PVC storage
+ schema:
+ show_if: [["type", "=", "pvc"]]
+ type: list
+ default: []
+ items:
+ - variable: VolSyncEntry
+ label: VolSync Configuration
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: name
+ label: Name
+ description: "Name of backup configuration"
+ schema:
+ type: string
+ default: ""
+ required: true
+ - variable: type
+ label: Type VolSync/Backup
+ description: Sets the VolSync Type
+ schema:
+ type: string
+ default: "restic"
+ enum:
+ - value: restic
+ description: Restic
+ - variable: credentials
+ label: Credentials
+ description: "Name of credentials in the credentials section"
+ schema:
+ type: string
+ default: ""
+ required: true
+ - variable: dest
+ label: VolSync Destination (Restore)
+ description: VolSYnc Destination is the location where data is the reciever and configures recovery of backups
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: enabled
+ label: Enable
+ schema:
+ type: boolean
+ default: true
+ - variable: src
+ label: VolSync Source (Backup)
+ description: VolSYnc Source is the location where data is the sender and creates backups to storage
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: enabled
+ label: Enable
+ schema:
+ type: boolean
+ default: true
+ - 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: securityContext
+ group: SecurityContext
+ 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 this App 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
+ 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: 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: horizontalPodAutoscaler
+# group: Experimental
+# 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: Experimental
+ 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/stable/dell-idrac-fan-controller/6.1.1/templates/NOTES.txt b/stable/dell-idrac-fan-controller/6.1.1/templates/NOTES.txt
new file mode 100644
index 0000000000..efcb74cb77
--- /dev/null
+++ b/stable/dell-idrac-fan-controller/6.1.1/templates/NOTES.txt
@@ -0,0 +1 @@
+{{- include "tc.v1.common.lib.chart.notes" $ -}}
diff --git a/stable/dell-idrac-fan-controller/6.1.1/templates/common.yaml b/stable/dell-idrac-fan-controller/6.1.1/templates/common.yaml
new file mode 100644
index 0000000000..b51394e00a
--- /dev/null
+++ b/stable/dell-idrac-fan-controller/6.1.1/templates/common.yaml
@@ -0,0 +1 @@
+{{ include "tc.v1.common.loader.all" . }}
diff --git a/stable/dell-idrac-fan-controller/6.1.1/values.yaml b/stable/dell-idrac-fan-controller/6.1.1/values.yaml
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/stable/dell-idrac-fan-controller/app_versions.json b/stable/dell-idrac-fan-controller/app_versions.json
index f3696378ce..15a699f1d8 100644
--- a/stable/dell-idrac-fan-controller/app_versions.json
+++ b/stable/dell-idrac-fan-controller/app_versions.json
@@ -1,4 +1,3660 @@
{
+ "6.1.1": {
+ "healthy": true,
+ "supported": true,
+ "healthy_error": null,
+ "location": "/home/runner/_work/catalog/catalog/stable/dell-idrac-fan-controller/6.1.1",
+ "last_update": "2024-12-21 22:26:05",
+ "required_features": [
+ "definitions/timezone",
+ "normalize/interfaceConfiguration",
+ "definitions/certificate",
+ "definitions/interface"
+ ],
+ "human_version": "latest_6.1.1",
+ "version": "6.1.1",
+ "chart_metadata": {
+ "annotations": {
+ "truecharts.org/category": "utilities",
+ "truecharts.org/max_helm_version": "3.14",
+ "truecharts.org/min_helm_version": "3.11",
+ "truecharts.org/train": "stable"
+ },
+ "apiVersion": "v2",
+ "appVersion": "latest",
+ "dependencies": [
+ {
+ "name": "common",
+ "version": "23.0.10",
+ "repository": "oci://tccr.io/truecharts",
+ "condition": "",
+ "alias": "",
+ "tags": [],
+ "import-values": []
+ }
+ ],
+ "deprecated": false,
+ "description": "Control your Dell PowerEdge fans via IPMI",
+ "home": "https://truecharts.org/charts/stable/dell-idrac-fan-controller",
+ "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/dell-idrac-fan-controller.webp",
+ "keywords": [
+ "iDrac",
+ "Dell",
+ "fan-controller"
+ ],
+ "kubeVersion": ">=1.24.0-0",
+ "maintainers": [
+ {
+ "name": "TrueCharts",
+ "email": "info@truecharts.org",
+ "url": "https://truecharts.org"
+ }
+ ],
+ "name": "dell-idrac-fan-controller",
+ "sources": [
+ "https://ghcr.io/tigerblue77/dell_idrac_fan_controller",
+ "https://github.com/tigerblue77/Dell_iDRAC_fan_controller_Docker",
+ "https://github.com/truecharts/charts/tree/master/charts/stable/dell-idrac-fan-controller"
+ ],
+ "type": "application",
+ "version": "6.1.1"
+ },
+ "app_metadata": null,
+ "schema": {
+ "groups": [
+ {
+ "name": "Image",
+ "description": "Configured the images to be used for the Chart.\nIt's wise to use \"digest pinned\" tags and to avoid using \"latest\".\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/#images\n"
+ },
+ {
+ "name": "General",
+ "description": "For TrueNAS SCALE We've grouped a number of settings here, that all effact how apps run in general.\n\nCheckout the following documentation for more information:\n - https://truecharts.org/common/global/\n - https://truecharts.org/common/#tz\n - https://truecharts.org/common/podoptions/\n - Image Pull Secrets\n"
+ },
+ {
+ "name": "Workload",
+ "description": "These settings configure how the actual Pods and containers are running.\nGenerally, on SCALE, we only expose a limited subset of these settings for the primary workload and container.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/workload/\n- https://truecharts.org/common/container/\n"
+ },
+ {
+ "name": "App Configuration",
+ "description": "Every application has different values that may be required to run or have multiple options that the user may choose to enable or disable to change the behavior of the application.\nMost options should have a Tooltip (Circled Question Mark) to further describe said option.\n\nTo find more information, lookup your chart-specific documentation in the Charts List: https://truecharts.org/charts/description-list/\n"
+ },
+ {
+ "name": "Services",
+ "description": "Service and Networking options for any applications are contained here.\nSome applications may have complicated networking setups with multiple options or some may have no options here at all.\n\nOptions here include the service and port configurations for the application, and more may be enabled or changed under the Advanced Settings and Show Expert Config boxes.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/service/\n"
+ },
+ {
+ "name": "Networking",
+ "description": "Contains advanced networking options that are not actively supported by the TrueCharts team.\nCurrently only contains scaleExternalInterfaces.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/scaleexternalinterface/\n"
+ },
+ {
+ "name": "Persistence",
+ "description": "Many applications will have certain options for storage to be configurable by the user, the main two being PVC and hostpath but may include other types.\nThis storage is called Persistence since it is not deleted upon restart or upgrade of an application.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/persistence/\n- https://truecharts.org/scale/guides/nfs-share/\n- https://truecharts.org/general/faq/#why-pvc-is-recommended-over-hostpath\n"
+ },
+ {
+ "name": "Ingress",
+ "description": "Ingress (more commonly known as Reverse Proxy) settings can be configured here. This is how Kubernetes connects your Applications in containers to FQDNs (fully qualified domain names).\nIf you choose to enable this you must have a \"Ingress Provider\" aka \"Reverse Proxy\" installed (We highly advice Traefik: https://truecharts.org/charts/premium/traefik/)\nIt also requiresa DNS service to actually resolve the DNS name of the FQDN specified.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/ingress/\n"
+ },
+ {
+ "name": "SecurityContext",
+ "description": "The security settings for each application and/or permissions that each application may have for the files/directories created.\nEach application will come with predefined permissions but users may want to change certain setting depending on their usage or capabilities.\n\nUnless necessary users are advised to keep this section mostly to defaults.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/securitycontext/\n"
+ },
+ {
+ "name": "Resources",
+ "description": "Resources limits that have been defined by each application are in this section.\nMost will have a specific default that some users may want to change based on their specific hardware or needs.\n\nThis also contains the options to mount GPUs or, more precisely, \"request\" GPU's to be mounted.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/resources/\n"
+ },
+ {
+ "name": "Devices",
+ "description": "These are special \"mountpoints\" that can be used to mount miscelanious USB and PCI devices using special hostPath mounts.\nFor clearity we've decided to seperate this from persistence on SCALE.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/persistence/device/\n- https://truecharts.org/scale/guides/pci-passthrough/\n"
+ },
+ {
+ "name": "Middlewares",
+ "description": "Traefik Middlewares"
+ },
+ {
+ "name": "StorageClass",
+ "description": "StorageClasses define where to storage Storage.\n\nCheckout the following documentation for more information:\n"
+ },
+ {
+ "name": "Metrics",
+ "description": "Contains options to configure Prometheus metrics for the application.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/metrics/\n"
+ },
+ {
+ "name": "Addons",
+ "description": "Addons that are supplied by the TrueCharts team to add additional capabilities for users to use on top of the application\u2019s defaults.\nThings included here are VPN addons, Codeserver for editing files inside the application\u2019s container, Netshoot for network troubelshooting, etc.\n\nGenerally not required for use but may be necessary or usefull at times for specific applications.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/addons/\n- https://truecharts.org/scale/guides/vpn-setup/\n"
+ },
+ {
+ "name": "Experimental",
+ "description": "Experimental Configuration Options\nOften these are not fully flushed-out, could randomly break or might not work at-all.\n"
+ },
+ {
+ "name": "Postgresql",
+ "description": "For Postgresql we use \"CloudNative-PG\" as a backend, which has to be installed first.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/cnpg/\n- https://truecharts.org/scale/guides/sql-export/\n- https://truecharts.org/scale/guides/recover-cnpg/\n"
+ },
+ {
+ "name": "Dependencies",
+ "description": "contains dependency setting for which we, currently, do not have seperate catagories (yet)\n"
+ },
+ {
+ "name": "Documentation",
+ "description": "We added this section to make everyone aware that OpenSource isn't always easy.\nIt doesn't keep existing without signficant ongoing support, so please consider supporting TrueCharts and other OpenSource projects.\n\nBefore installing, be sure you've followed the https://truecharts.org/scale/guides/getting-started/\nWe would also advice going over our https://truecharts.org/scale/guides/scale-intro/\nand many of the other documentation pages...\n"
+ }
+ ],
+ "questions": [
+ {
+ "variable": "global",
+ "group": "General",
+ "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": "credentialsList",
+ "group": "General",
+ "label": "Credentials (Experimental)",
+ "schema": {
+ "type": "list",
+ "default": [],
+ "items": [
+ {
+ "variable": "credentialsEntry",
+ "label": "Enter Credentials",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "variable": "name",
+ "label": "Name",
+ "description": "Name",
+ "schema": {
+ "type": "string",
+ "required": true,
+ "default": ""
+ }
+ },
+ {
+ "variable": "type",
+ "label": "Type",
+ "description": "Type of Credential",
+ "schema": {
+ "type": "string",
+ "default": "s3",
+ "enum": [
+ {
+ "value": "s3",
+ "description": "s3 Storage"
+ }
+ ]
+ }
+ },
+ {
+ "variable": "url",
+ "label": "url",
+ "schema": {
+ "type": "string",
+ "default": "",
+ "required": true
+ }
+ },
+ {
+ "variable": "path",
+ "label": "path",
+ "description": "Path Prefix not needed for most cases",
+ "schema": {
+ "type": "string",
+ "default": ""
+ }
+ },
+ {
+ "variable": "bucket",
+ "label": "bucket",
+ "schema": {
+ "show_if": [
+ [
+ "type",
+ "=",
+ "s3"
+ ]
+ ],
+ "type": "string",
+ "default": "",
+ "required": true
+ }
+ },
+ {
+ "variable": "accessKey",
+ "label": "accessKey",
+ "schema": {
+ "show_if": [
+ [
+ "type",
+ "=",
+ "s3"
+ ]
+ ],
+ "type": "string",
+ "default": "",
+ "required": true
+ }
+ },
+ {
+ "variable": "secretKey",
+ "label": "secretKey",
+ "schema": {
+ "show_if": [
+ [
+ "type",
+ "=",
+ "s3"
+ ]
+ ],
+ "type": "string",
+ "default": "",
+ "required": true
+ }
+ },
+ {
+ "variable": "encrKey",
+ "label": "encrKey",
+ "description": "The Encryption key is needed for tools like volsync if not needed it will be ignored",
+ "schema": {
+ "show_if": [
+ [
+ "type",
+ "=",
+ "s3"
+ ]
+ ],
+ "type": "string",
+ "default": "MYSECRETPASSPHRASE",
+ "required": true
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "variable": "workload",
+ "group": "Workload",
+ "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": "env",
+ "group": "App Configuration",
+ "label": "Image Environment",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "variable": "IDRAC_HOST",
+ "label": "iDrac Host",
+ "description": "iDRAC's IP address. Default value is \"local\".",
+ "schema": {
+ "type": "string",
+ "default": ""
+ }
+ },
+ {
+ "variable": "IDRAC_USERNAME",
+ "label": "iDrac Host Name",
+ "description": "iDrac Username. Default value is \"root\".",
+ "schema": {
+ "type": "string",
+ "default": ""
+ }
+ },
+ {
+ "variable": "IDRAC_PASSWORD",
+ "label": "iDrac Password",
+ "description": "iDrac Password. Default password is \"calvin\".",
+ "schema": {
+ "type": "string",
+ "private": true,
+ "default": ""
+ }
+ },
+ {
+ "variable": "FAN_SPEED",
+ "label": "Fan Speed",
+ "description": "Fan speed parameter can be set as a decimal (from 0 to 100%). Default value is 5(%).",
+ "schema": {
+ "type": "int",
+ "min": 0,
+ "max": 100,
+ "default": 5
+ }
+ },
+ {
+ "variable": "CPU_TEMPERATURE_THRESHOLD",
+ "label": "CPU Temperature Thershold",
+ "description": "parameter is the T\u00b0junction (junction temperature) threshold beyond which the Dell fan mode defined in your BIOS will become active again (to protect the server hardware against overheat). Default value is 50(\u00b0C).",
+ "schema": {
+ "type": "int",
+ "default": 50
+ }
+ },
+ {
+ "variable": "CHECK_INTERVAL",
+ "label": "Check Interval",
+ "description": "parameter is the time (in seconds) between each temperature check and potential profile change. Default value is 60(s).",
+ "schema": {
+ "type": "int",
+ "default": 60
+ }
+ },
+ {
+ "variable": "DISABLE_THIRD_PARTY_PCIE_CARD_DELL_DEFAULT_COOLING_RESPONSE",
+ "label": "Disable 3rd Party PCIE Card Dell Default Cooling Response",
+ "description": "Boolean that allows to disable third-party PCIe card Dell default cooling response. Default value is false.",
+ "schema": {
+ "type": "boolean",
+ "default": false
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "variable": "TZ",
+ "label": "Timezone",
+ "group": "General",
+ "schema": {
+ "type": "string",
+ "default": "America/Los_Angeles",
+ "$ref": [
+ "definitions/timezone"
+ ],
+ "enum": [
+ {
+ "value": "Asia/Damascus",
+ "description": "'Asia/Damascus' timezone"
+ },
+ {
+ "value": "Asia/Saigon",
+ "description": "'Asia/Saigon' timezone"
+ }
+ ]
+ }
+ },
+ {
+ "variable": "podOptions",
+ "group": "General",
+ "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",
+ "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": "scaleExternalInterface",
+ "description": "Add External Interfaces (Experimental, might change or be removed without further notice)",
+ "label": "Add external Interfaces (Experimental)",
+ "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"
+ ],
+ "enum": []
+ }
+ },
+ {
+ "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": "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": "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\n",
+ "schema": {
+ "type": "boolean",
+ "default": false
+ }
+ },
+ {
+ "variable": "chmod",
+ "label": "Run CHMOD",
+ "description": "It will run CHMOD on the path with the given value\nFormat should be 3 digits, e.g. 770\n",
+ "schema": {
+ "type": "string",
+ "valid_chars": "[0-9]{3}",
+ "default": ""
+ }
+ },
+ {
+ "variable": "recursive",
+ "label": "Recursive",
+ "description": "It will run CHOWN and CHMOD recursively\n",
+ "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": "volsync",
+ "label": "VolSync (Experimental)",
+ "description": "Backup, Restore and Synchronise PVC storage",
+ "schema": {
+ "show_if": [
+ [
+ "type",
+ "=",
+ "pvc"
+ ]
+ ],
+ "type": "list",
+ "default": [],
+ "items": [
+ {
+ "variable": "VolSyncEntry",
+ "label": "VolSync Configuration",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "variable": "name",
+ "label": "Name",
+ "description": "Name of backup configuration",
+ "schema": {
+ "type": "string",
+ "default": "",
+ "required": true
+ }
+ },
+ {
+ "variable": "type",
+ "label": "Type VolSync/Backup",
+ "description": "Sets the VolSync Type",
+ "schema": {
+ "type": "string",
+ "default": "restic",
+ "enum": [
+ {
+ "value": "restic",
+ "description": "Restic"
+ }
+ ]
+ }
+ },
+ {
+ "variable": "credentials",
+ "label": "Credentials",
+ "description": "Name of credentials in the credentials section",
+ "schema": {
+ "type": "string",
+ "default": "",
+ "required": true
+ }
+ },
+ {
+ "variable": "dest",
+ "label": "VolSync Destination (Restore)",
+ "description": "VolSYnc Destination is the location where data is the reciever and configures recovery of backups",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "variable": "enabled",
+ "label": "Enable",
+ "schema": {
+ "type": "boolean",
+ "default": true
+ }
+ }
+ ]
+ }
+ },
+ {
+ "variable": "src",
+ "label": "VolSync Source (Backup)",
+ "description": "VolSYnc Source is the location where data is the sender and creates backups to storage",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "variable": "enabled",
+ "label": "Enable",
+ "schema": {
+ "type": "boolean",
+ "default": true
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "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\nsmb: connect to an SMB share\nnfs: connect to an NFS share\n",
+ "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": "securityContext",
+ "group": "SecurityContext",
+ "label": "Security Context",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "variable": "container",
+ "label": "Container",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "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 this App of the user running the application",
+ "schema": {
+ "type": "int",
+ "default": 568
+ }
+ },
+ {
+ "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"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "variable": "fsGroup",
+ "label": "fsGroup",
+ "description": "The group that should own ALL storage.",
+ "schema": {
+ "type": "int",
+ "default": 568
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "variable": "resources",
+ "group": "Resources",
+ "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": "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": "networkPolicy",
+ "group": "Experimental",
+ "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"
+ ],
+ "enum": [
+ {
+ "value": null,
+ "description": "No Certificate"
+ }
+ ],
+ "default": null,
+ "null": true
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "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
+ }
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "app_readme": "
Control your Dell PowerEdge fans via IPMI
\n
This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/dell-idrac-fan-controller
\n
\n
TrueCharts can only exist due to the incredible effort of our staff.\nPlease consider making a donation or contributing back to the project any way you can!
",
+ "detailed_readme": "
\n
title: README
\n
General Info
\n
TrueCharts can be installed as both normal Helm Charts or as TrueNAS SCALE Apps.\nBoth solutions are fully supported, but we heavily advice the use of normal Helm Charts where possible
\n
For more information about this Chart, please check the docs on the TrueCharts website
\n
This chart is not maintained by the upstream project and any issues with the chart should be raised here
\n
Installation
\n
Helm-Chart installation
\n
To install TrueCharts Helm charts using Helm, you can use our OCI Repository.
\n
helm install mychart oci://tccr.io/truecharts/CHARTNAME
\n
For more information on how to install TrueCharts Helm charts, checkout the instructions on the website: https://truecharts.org/helm/
\n
TrueNAS SCALE Apps
\n
For more information on how to use TrueCharts as TrueNAS SCALE Apps, please checkout the quick-start guides for TrueNAS SCALE.
\n
Chart Specific Guides and information
\n
All our charts have dedicated documentation pages.\nThe documentation for this chart can be found here:\nhttps://truecharts.org/charts/stable/dell-idrac-fan-controller
\n
Configuration Options
\n
Please note: For TrueNAS SCALE, only options available in the GUI are supported.\nHence most of these docs do not apply to TrueNAS SCALE
\n
To view the chart specific options, please view Values.yaml included in the chart.\nThe most recent version of which, is available here: https://github.com/truecharts/charts/charts/stable/dell-idrac-fan-controller/values.yaml
\n
All our Charts use a shared \"common\" library chart that contains most of the templating and options.\nFor the complete overview of all available options, please checkout the documentation for them on the website: https://truecharts.org/common/
\n
For information about the common chart and all defaults included with it, please review its values.yaml file available here: https://github.com/truecharts/library-charts/blob/main/library/common/values.yaml
\n
Support
\n
\n
\n
Sponsor TrueCharts
\n
TrueCharts can only exist due to the incredible effort of our staff.\nPlease consider making a donation or contributing back to the project any way you can!
\n
All Rights Reserved - The TrueCharts Project
",
+ "changelog": "
for the complete changelog, please refer to the website
\n
Important:
"
+ },
"6.1.0": {
"healthy": true,
"supported": true,
diff --git a/stable/prowlarr/17.4.0/.helmignore b/stable/prowlarr/17.4.0/.helmignore
new file mode 100644
index 0000000000..feb7464da6
--- /dev/null
+++ b/stable/prowlarr/17.4.0/.helmignore
@@ -0,0 +1,32 @@
+# 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
+icon.webp
+icon-small.webp
diff --git a/stable/prowlarr/17.4.0/CHANGELOG.md b/stable/prowlarr/17.4.0/CHANGELOG.md
new file mode 100644
index 0000000000..941abb8a21
--- /dev/null
+++ b/stable/prowlarr/17.4.0/CHANGELOG.md
@@ -0,0 +1,3 @@
+*for the complete changelog, please refer to the website*
+
+**Important:**
\ No newline at end of file
diff --git a/stable/prowlarr/17.4.0/Chart.yaml b/stable/prowlarr/17.4.0/Chart.yaml
new file mode 100644
index 0000000000..72edec3092
--- /dev/null
+++ b/stable/prowlarr/17.4.0/Chart.yaml
@@ -0,0 +1,38 @@
+annotations:
+ truecharts.org/category: media
+ truecharts.org/max_helm_version: "3.14"
+ truecharts.org/min_helm_version: "3.11"
+ truecharts.org/train: stable
+apiVersion: v2
+appVersion: 1.28.2.4885
+dependencies:
+- name: common
+ version: 23.0.10
+ repository: oci://tccr.io/truecharts
+ condition: ""
+ alias: ""
+ tags: []
+ import-values: []
+deprecated: false
+description: Indexer manager/proxy built on the popular arr net base stack to integrate
+ with your various PVR apps.
+home: https://truecharts.org/charts/stable/prowlarr
+icon: https://truecharts.org/img/hotlink-ok/chart-icons/prowlarr.webp
+keywords:
+- prowlarr
+- torrent
+- usenet
+kubeVersion: '>=1.24.0-0'
+maintainers:
+- name: TrueCharts
+ email: info@truecharts.org
+ url: https://truecharts.org
+name: prowlarr
+sources:
+- https://ghcr.io/onedr0p/exportarr
+- https://ghcr.io/onedr0p/prowlarr-develop
+- https://github.com/Prowlarr/Prowlarr
+- https://github.com/k8s-at-home/container-images
+- https://github.com/truecharts/charts/tree/master/charts/stable/prowlarr
+type: application
+version: 17.4.0
diff --git a/stable/prowlarr/17.4.0/README.md b/stable/prowlarr/17.4.0/README.md
new file mode 100644
index 0000000000..64bd0cc3b8
--- /dev/null
+++ b/stable/prowlarr/17.4.0/README.md
@@ -0,0 +1,61 @@
+---
+title: README
+---
+
+## General Info
+
+TrueCharts can be installed as both _normal_ Helm Charts or as TrueNAS SCALE Apps.
+Both solutions are fully supported, but we heavily advice the use of normal Helm Charts where possible
+
+For more information about this Chart, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/prowlarr)
+
+**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)**
+
+## Installation
+
+### Helm-Chart installation
+
+To install TrueCharts Helm charts using Helm, you can use our OCI Repository.
+
+`helm install mychart oci://tccr.io/truecharts/CHARTNAME`
+
+For more information on how to install TrueCharts Helm charts, checkout the instructions on the website: https://truecharts.org/helm/
+
+
+### TrueNAS SCALE Apps
+
+For more information on how to use TrueCharts as TrueNAS SCALE Apps, please checkout the [quick-start guides for TrueNAS SCALE](https://truecharts.org/scale).
+
+## Chart Specific Guides and information
+
+All our charts have dedicated documentation pages.
+The documentation for this chart can be found here:
+https://truecharts.org/charts/stable/prowlarr
+
+## Configuration Options
+
+Please note: For TrueNAS SCALE, only options available in the GUI are supported.
+Hence most of these docs do not apply to TrueNAS SCALE
+
+To view the chart specific options, please view Values.yaml included in the chart.
+The most recent version of which, is available here: https://github.com/truecharts/charts/charts/stable/prowlarr/values.yaml
+
+All our Charts use a shared "common" library chart that contains most of the templating and options.
+For the complete overview of all available options, please checkout the documentation for them on the website: https://truecharts.org/common/
+
+For information about the common chart and all defaults included with it, please review its values.yaml file available here: https://github.com/truecharts/library-charts/blob/main/library/common/values.yaml
+
+## Support
+
+- 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/general/sponsor) or contributing back to the project any way you can!
+
+_All Rights Reserved - The TrueCharts Project_
diff --git a/stable/prowlarr/17.4.0/app-readme.md b/stable/prowlarr/17.4.0/app-readme.md
new file mode 100644
index 0000000000..4e201b3174
--- /dev/null
+++ b/stable/prowlarr/17.4.0/app-readme.md
@@ -0,0 +1,8 @@
+Indexer manager/proxy built on the popular arr net base stack to integrate with your various PVR apps.
+
+This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/prowlarr](https://truecharts.org/charts/stable/prowlarr)
+
+---
+
+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/stable/prowlarr/17.4.0/charts/common-23.0.10.tgz b/stable/prowlarr/17.4.0/charts/common-23.0.10.tgz
new file mode 100644
index 0000000000..5eefcb329b
Binary files /dev/null and b/stable/prowlarr/17.4.0/charts/common-23.0.10.tgz differ
diff --git a/stable/prowlarr/17.4.0/ci/default-values.yaml b/stable/prowlarr/17.4.0/ci/default-values.yaml
new file mode 100644
index 0000000000..daba1bd964
--- /dev/null
+++ b/stable/prowlarr/17.4.0/ci/default-values.yaml
@@ -0,0 +1,3 @@
+metrics:
+ main:
+ enabled: true
diff --git a/stable/prowlarr/17.4.0/ci/disabledmetrics-values.yaml b/stable/prowlarr/17.4.0/ci/disabledmetrics-values.yaml
new file mode 100644
index 0000000000..c54316d241
--- /dev/null
+++ b/stable/prowlarr/17.4.0/ci/disabledmetrics-values.yaml
@@ -0,0 +1,9 @@
+metrics:
+ main:
+ enabled: false
+ type: "servicemonitor"
+ endpoints:
+ - port: metrics
+ path: /metrics
+ prometheusRule:
+ enabled: false
diff --git a/stable/prowlarr/17.4.0/dashboard.json b/stable/prowlarr/17.4.0/dashboard.json
new file mode 100644
index 0000000000..905280f4b6
--- /dev/null
+++ b/stable/prowlarr/17.4.0/dashboard.json
@@ -0,0 +1,1612 @@
+{
+ "annotations": {
+ "list": [
+ {
+ "builtIn": 1,
+ "datasource": {
+ "type": "grafana",
+ "uid": "-- 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": 267,
+ "links": [],
+ "liveNow": false,
+ "panels": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "prom"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [
+ {
+ "options": {
+ "0": {
+ "color": "red",
+ "index": 1,
+ "text": "Down"
+ },
+ "1": {
+ "color": "green",
+ "index": 0,
+ "text": "Up"
+ }
+ },
+ "type": "value"
+ }
+ ],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unitScale": true
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 0,
+ "y": 0
+ },
+ "id": 34,
+ "options": {
+ "colorMode": "background",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": ["lastNotNull"],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "text": {},
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "10.3.3",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "prom"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "prowlarr_system_status{instance=~\"${prowlarr_instance}\"}",
+ "instant": true,
+ "legendFormat": "Status",
+ "range": false,
+ "refId": "A"
+ }
+ ],
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "prom"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [
+ {
+ "options": {
+ "0": {
+ "color": "red",
+ "index": 1,
+ "text": "Down"
+ },
+ "1": {
+ "color": "green",
+ "index": 0,
+ "text": "Up"
+ }
+ },
+ "type": "value"
+ }
+ ],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "red",
+ "value": null
+ },
+ {
+ "color": "semi-dark-orange",
+ "value": 600
+ },
+ {
+ "color": "yellow",
+ "value": 3600
+ },
+ {
+ "color": "green",
+ "value": 86400
+ }
+ ]
+ },
+ "unit": "s",
+ "unitScale": true
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 3,
+ "y": 0
+ },
+ "id": 35,
+ "options": {
+ "colorMode": "background",
+ "graphMode": "area",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": ["lastNotNull"],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "text": {},
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "10.3.3",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "prom"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "time() - container_start_time_seconds{container=\"prowlarr\"}",
+ "instant": true,
+ "legendFormat": "Uptime",
+ "range": false,
+ "refId": "A"
+ }
+ ],
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "prom"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-BlPu"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "none",
+ "unitScale": true
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Health Issues"
+ },
+ "properties": [
+ {
+ "id": "thresholds",
+ "value": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "yellow",
+ "value": 1
+ },
+ {
+ "color": "red",
+ "value": 2
+ }
+ ]
+ }
+ },
+ {
+ "id": "color"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Disabled Indexers"
+ },
+ "properties": [
+ {
+ "id": "thresholds",
+ "value": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 1
+ }
+ ]
+ }
+ },
+ {
+ "id": "color"
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 5,
+ "x": 6,
+ "y": 0
+ },
+ "id": 37,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "none",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": ["lastNotNull"],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "text": {
+ "valueSize": 60
+ },
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "10.3.3",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "prom"
+ },
+ "editorMode": "code",
+ "expr": "max(prowlarr_system_health_issues{instance=~\"${prowlarr_instance}\"})",
+ "hide": false,
+ "legendFormat": "Health Issues",
+ "range": true,
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "prom"
+ },
+ "editorMode": "code",
+ "expr": "max(prowlarr_indexer_enabled_total{instance=~\"${prowlarr_instance}\"})",
+ "hide": false,
+ "legendFormat": "Enabled Indexers",
+ "range": true,
+ "refId": "B"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "prom"
+ },
+ "editorMode": "code",
+ "expr": "max(prowlarr_indexer_total{instance=~\"${prowlarr_instance}\"} - prowlarr_indexer_enabled_total{instance=~\"${prowlarr_instance}\"})",
+ "hide": false,
+ "legendFormat": "Disabled Indexers",
+ "range": true,
+ "refId": "D"
+ }
+ ],
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "prom"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-BlPu"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "none",
+ "unitScale": true
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Query Failures"
+ },
+ "properties": [
+ {
+ "id": "thresholds",
+ "value": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "yellow",
+ "value": 15
+ },
+ {
+ "color": "red",
+ "value": 100
+ }
+ ]
+ }
+ },
+ {
+ "id": "color"
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 6,
+ "x": 11,
+ "y": 0
+ },
+ "id": 36,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "none",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": ["lastNotNull"],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "text": {},
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "10.3.3",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "prom"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "sum(increase(prowlarr_indexer_queries_total{instance=~\"${prowlarr_instance}\"}[$__range]))",
+ "hide": false,
+ "instant": true,
+ "legendFormat": "Queries",
+ "range": false,
+ "refId": "B"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "prom"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "sum(increase(prowlarr_indexer_grabs_total{instance=~\"${prowlarr_instance}\"}[$__range]))",
+ "hide": false,
+ "instant": true,
+ "legendFormat": "Grabs",
+ "range": false,
+ "refId": "C"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "prom"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "sum(increase(prowlarr_indexer_failed_queries_total{instance=~\"${prowlarr_instance}\"}[$__range]))",
+ "hide": false,
+ "instant": true,
+ "legendFormat": "Query Failures",
+ "range": false,
+ "refId": "D"
+ }
+ ],
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "prom"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "continuous-BlPu"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "none",
+ "unitScale": true
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Response Time"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "ms"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Failed Queries"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "percentunit"
+ },
+ {
+ "id": "thresholds",
+ "value": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "yellow",
+ "value": 0.1
+ },
+ {
+ "color": "red",
+ "value": 0.2
+ }
+ ]
+ }
+ },
+ {
+ "id": "color"
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 4,
+ "x": 17,
+ "y": 0
+ },
+ "id": 38,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "none",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": ["lastNotNull"],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "text": {},
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "10.3.3",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "prom"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "avg(prowlarr_indexer_average_response_time_ms{instance=~\"${prowlarr_instance}\"})",
+ "hide": false,
+ "instant": true,
+ "legendFormat": "Response Time",
+ "range": false,
+ "refId": "B"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "prom"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "sum(increase(prowlarr_indexer_failed_queries_total{instance=~\"${prowlarr_instance}\"}[$__range])) / sum(prowlarr_indexer_queries_total{instance=~\"${prowlarr_instance}\"})",
+ "hide": false,
+ "instant": true,
+ "legendFormat": "Failed Queries",
+ "range": false,
+ "refId": "D"
+ }
+ ],
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "prom"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "red",
+ "value": null
+ },
+ {
+ "color": "yellow",
+ "value": 604800
+ },
+ {
+ "color": "green",
+ "value": 2592000
+ }
+ ]
+ },
+ "unit": "none",
+ "unitScale": true
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Nearest VIP Expiration"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "s"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Disk Used"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "bytes"
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 4,
+ "w": 3,
+ "x": 21,
+ "y": 0
+ },
+ "id": 39,
+ "options": {
+ "colorMode": "value",
+ "graphMode": "none",
+ "justifyMode": "auto",
+ "orientation": "auto",
+ "reduceOptions": {
+ "calcs": ["lastNotNull"],
+ "fields": "",
+ "values": false
+ },
+ "showPercentChange": false,
+ "text": {},
+ "textMode": "auto",
+ "wideLayout": true
+ },
+ "pluginVersion": "10.3.3",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "prom"
+ },
+ "editorMode": "code",
+ "expr": "min(prowlarr_indexer_vip_expires_in_seconds)",
+ "hide": false,
+ "legendFormat": "Nearest VIP Expiration",
+ "range": true,
+ "refId": "D"
+ }
+ ],
+ "type": "stat"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "prom"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "ms",
+ "unitScale": true
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 12,
+ "x": 0,
+ "y": 4
+ },
+ "id": 44,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "prom"
+ },
+ "editorMode": "code",
+ "expr": "max(prowlarr_indexer_average_response_time_ms{instance=~\"${prowlarr_instance}\"}) by (indexer)",
+ "legendFormat": "__auto",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Indexer Latency",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "prom"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "axisBorderShow": false,
+ "axisCenteredZero": false,
+ "axisColorMode": "text",
+ "axisLabel": "",
+ "axisPlacement": "auto",
+ "barAlignment": 0,
+ "drawStyle": "line",
+ "fillOpacity": 0,
+ "gradientMode": "none",
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ },
+ "insertNulls": false,
+ "lineInterpolation": "linear",
+ "lineWidth": 1,
+ "pointSize": 5,
+ "scaleDistribution": {
+ "type": "linear"
+ },
+ "showPoints": "auto",
+ "spanNulls": false,
+ "stacking": {
+ "group": "A",
+ "mode": "none"
+ },
+ "thresholdsStyle": {
+ "mode": "off"
+ }
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unit": "ms",
+ "unitScale": true
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 12,
+ "x": 12,
+ "y": 4
+ },
+ "id": 45,
+ "options": {
+ "legend": {
+ "calcs": [],
+ "displayMode": "list",
+ "placement": "right",
+ "showLegend": true
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "prom"
+ },
+ "editorMode": "code",
+ "expr": "max(increase(prowlarr_user_agent_queries_total{instance=~\"${prowlarr_instance}\"}[$__rate_interval])) by (user_agent)",
+ "legendFormat": "__auto",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "User Agent Queries",
+ "type": "timeseries"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "prom"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ }
+ },
+ "mappings": [],
+ "unitScale": true
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 6,
+ "x": 0,
+ "y": 13
+ },
+ "id": 29,
+ "options": {
+ "legend": {
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true,
+ "values": ["percent"]
+ },
+ "pieType": "donut",
+ "reduceOptions": {
+ "calcs": ["lastNotNull"],
+ "fields": "",
+ "values": false
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "9.3.6",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "prom"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "sum(increase(prowlarr_indexer_queries_total{instance=~\"${prowlarr_instance}\"}[$__range])) by (indexer)\n",
+ "instant": false,
+ "legendFormat": "__auto",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Queries by Indexer",
+ "type": "piechart"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "prom"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ }
+ },
+ "mappings": [],
+ "unitScale": true
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 6,
+ "x": 6,
+ "y": 13
+ },
+ "id": 33,
+ "options": {
+ "legend": {
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "pieType": "donut",
+ "reduceOptions": {
+ "calcs": ["lastNotNull"],
+ "fields": "",
+ "values": false
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "prom"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "sum(increase(prowlarr_indexer_grabs_total{instance=~\"${prowlarr_instance}\"}[$__range])) by (indexer)",
+ "instant": true,
+ "legendFormat": "__auto",
+ "range": false,
+ "refId": "A"
+ }
+ ],
+ "title": "Grabs by Indexer",
+ "type": "piechart"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "prom"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ }
+ },
+ "mappings": [],
+ "unitScale": true
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 6,
+ "x": 12,
+ "y": 13
+ },
+ "id": 30,
+ "options": {
+ "legend": {
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true,
+ "values": ["percent"]
+ },
+ "pieType": "donut",
+ "reduceOptions": {
+ "calcs": ["lastNotNull"],
+ "fields": "",
+ "values": false
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "pluginVersion": "9.3.6",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "prom"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "sum(increase(prowlarr_user_agent_queries_total{instance=~\"${prowlarr_instance}\"}[$__range])) by (user_agent)\n",
+ "instant": false,
+ "legendFormat": "__auto",
+ "range": true,
+ "refId": "A"
+ }
+ ],
+ "title": "Queries by User Agent",
+ "type": "piechart"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "prom"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "palette-classic"
+ },
+ "custom": {
+ "hideFrom": {
+ "legend": false,
+ "tooltip": false,
+ "viz": false
+ }
+ },
+ "mappings": [],
+ "unitScale": true
+ },
+ "overrides": []
+ },
+ "gridPos": {
+ "h": 9,
+ "w": 6,
+ "x": 18,
+ "y": 13
+ },
+ "id": 32,
+ "options": {
+ "legend": {
+ "displayMode": "table",
+ "placement": "right",
+ "showLegend": true
+ },
+ "pieType": "donut",
+ "reduceOptions": {
+ "calcs": ["lastNotNull"],
+ "fields": "",
+ "values": false
+ },
+ "tooltip": {
+ "mode": "single",
+ "sort": "none"
+ }
+ },
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "prom"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "sum(increase(prowlarr_user_agent_grabs_total{instance=~\"${prowlarr_instance}\"}[$__range])) by (user_agent)",
+ "instant": true,
+ "legendFormat": "__auto",
+ "range": false,
+ "refId": "A"
+ }
+ ],
+ "title": "Grabs by User Agent",
+ "type": "piechart"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "prom"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "custom": {
+ "align": "auto",
+ "cellOptions": {
+ "type": "auto"
+ },
+ "inspect": false
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unitScale": true
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Expires In"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "s"
+ },
+ {
+ "id": "thresholds",
+ "value": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "red",
+ "value": null
+ },
+ {
+ "color": "yellow",
+ "value": 604800
+ },
+ {
+ "color": "green",
+ "value": 2592000
+ }
+ ]
+ }
+ },
+ {
+ "id": "custom.cellOptions",
+ "value": {
+ "type": "color-text"
+ }
+ },
+ {
+ "id": "custom.width",
+ "value": 150
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Expiration Date"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "dateTimeAsLocal"
+ },
+ {
+ "id": "custom.width",
+ "value": 250
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 0,
+ "y": 22
+ },
+ "id": 41,
+ "options": {
+ "cellHeight": "sm",
+ "footer": {
+ "countRows": false,
+ "fields": "",
+ "reducer": ["sum"],
+ "show": false
+ },
+ "frameIndex": 1,
+ "showHeader": true,
+ "sortBy": [
+ {
+ "desc": false,
+ "displayName": "indexer"
+ }
+ ]
+ },
+ "pluginVersion": "10.3.3",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "prom"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "prowlarr_indexer_vip_expires_in_seconds{instance=~\"${prowlarr_instance}\"}",
+ "format": "table",
+ "hide": false,
+ "instant": true,
+ "legendFormat": "__auto",
+ "range": false,
+ "refId": "A"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "prom"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "(time() * 1000) + (prowlarr_indexer_vip_expires_in_seconds{instance=~\"${prowlarr_instance}\"} * 1000)",
+ "format": "table",
+ "hide": false,
+ "instant": true,
+ "legendFormat": "__auto",
+ "range": false,
+ "refId": "B"
+ }
+ ],
+ "title": "VIP Expiration",
+ "transformations": [
+ {
+ "id": "concatenate",
+ "options": {}
+ },
+ {
+ "id": "organize",
+ "options": {
+ "excludeByName": {
+ "Time": true,
+ "__name__": true,
+ "cluster": true,
+ "cluster 1": true,
+ "cluster 2": true,
+ "endpoint": true,
+ "endpoint 1": true,
+ "endpoint 2": true,
+ "indexer 2": true,
+ "instance": true,
+ "instance 1": true,
+ "instance 2": true,
+ "job": true,
+ "job 1": true,
+ "job 2": true,
+ "namespace": true,
+ "namespace 1": true,
+ "namespace 2": true,
+ "pod": true,
+ "pod 1": true,
+ "pod 2": true,
+ "prometheus": true,
+ "prometheus 1": true,
+ "prometheus 2": true,
+ "service": true,
+ "service 1": true,
+ "service 2": true,
+ "url": true,
+ "url 1": true,
+ "url 2": true
+ },
+ "indexByName": {
+ "Time": 0,
+ "Value #A": 12,
+ "Value #B": 13,
+ "__name__": 1,
+ "cluster 1": 2,
+ "cluster 2": 14,
+ "endpoint 1": 3,
+ "endpoint 2": 15,
+ "indexer 1": 4,
+ "indexer 2": 16,
+ "instance 1": 5,
+ "instance 2": 17,
+ "job 1": 6,
+ "job 2": 18,
+ "namespace 1": 7,
+ "namespace 2": 19,
+ "pod 1": 8,
+ "pod 2": 20,
+ "prometheus 1": 9,
+ "prometheus 2": 21,
+ "service 1": 10,
+ "service 2": 22,
+ "url 1": 11,
+ "url 2": 23
+ },
+ "renameByName": {
+ "Value": "Expires In",
+ "Value #A": "Expires In",
+ "Value #B": "Expiration Date"
+ }
+ }
+ }
+ ],
+ "type": "table"
+ },
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "prom"
+ },
+ "fieldConfig": {
+ "defaults": {
+ "color": {
+ "mode": "thresholds"
+ },
+ "custom": {
+ "align": "auto",
+ "cellOptions": {
+ "type": "auto"
+ },
+ "inspect": false
+ },
+ "mappings": [],
+ "thresholds": {
+ "mode": "absolute",
+ "steps": [
+ {
+ "color": "green",
+ "value": null
+ },
+ {
+ "color": "red",
+ "value": 80
+ }
+ ]
+ },
+ "unitScale": true
+ },
+ "overrides": [
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Expires In"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "s"
+ }
+ ]
+ },
+ {
+ "matcher": {
+ "id": "byName",
+ "options": "Expiration Date"
+ },
+ "properties": [
+ {
+ "id": "unit",
+ "value": "dateTimeAsUS"
+ }
+ ]
+ }
+ ]
+ },
+ "gridPos": {
+ "h": 7,
+ "w": 12,
+ "x": 12,
+ "y": 22
+ },
+ "id": 42,
+ "options": {
+ "cellHeight": "sm",
+ "footer": {
+ "countRows": false,
+ "fields": "",
+ "reducer": ["sum"],
+ "show": false
+ },
+ "frameIndex": 1,
+ "showHeader": true
+ },
+ "pluginVersion": "10.3.3",
+ "targets": [
+ {
+ "datasource": {
+ "type": "prometheus",
+ "uid": "prom"
+ },
+ "editorMode": "code",
+ "exemplar": false,
+ "expr": "prowlarr_system_health_issues{instance=~\"${prowlarr_instance}\"}",
+ "format": "table",
+ "hide": false,
+ "instant": true,
+ "legendFormat": "__auto",
+ "range": false,
+ "refId": "A"
+ }
+ ],
+ "title": "System Health Issues",
+ "transformations": [
+ {
+ "id": "organize",
+ "options": {
+ "excludeByName": {
+ "Time": true,
+ "Value": true,
+ "__name__": true,
+ "cluster": true,
+ "cluster 1": true,
+ "cluster 2": true,
+ "endpoint": true,
+ "endpoint 1": true,
+ "endpoint 2": true,
+ "indexer 2": true,
+ "instance": true,
+ "instance 1": true,
+ "instance 2": true,
+ "job": true,
+ "job 1": true,
+ "job 2": true,
+ "namespace": true,
+ "namespace 1": true,
+ "namespace 2": true,
+ "pod": true,
+ "pod 1": true,
+ "pod 2": true,
+ "prometheus": true,
+ "prometheus 1": true,
+ "prometheus 2": true,
+ "service": true,
+ "service 1": true,
+ "service 2": true,
+ "source": true,
+ "type": true,
+ "url": true,
+ "url 1": true,
+ "url 2": true
+ },
+ "indexByName": {},
+ "renameByName": {
+ "Value": "",
+ "Value #A": "Expires In",
+ "Value #B": "Expiration Date"
+ }
+ }
+ }
+ ],
+ "type": "table"
+ }
+ ],
+ "refresh": "30s",
+ "revision": 1,
+ "schemaVersion": 39,
+ "tags": ["prowlarr", "music", "movies", "tv", "media"],
+ "templating": {
+ "list": [
+ {
+ "current": {
+ "selected": false,
+ "text": "Prometheus",
+ "value": "prom"
+ },
+ "hide": 0,
+ "includeAll": false,
+ "label": "Datasource",
+ "multi": false,
+ "name": "DS_PROMETHEUS",
+ "options": [],
+ "query": "prometheus",
+ "queryValue": "",
+ "refresh": 1,
+ "regex": "",
+ "skipUrlSync": false,
+ "type": "datasource"
+ },
+ {
+ "current": {
+ "selected": false,
+ "text": "All",
+ "value": "$__all"
+ },
+ "datasource": {
+ "type": "prometheus",
+ "uid": "prom"
+ },
+ "definition": "label_values({__name__=~\"prowlarr_.*\"},instance)",
+ "hide": 0,
+ "includeAll": true,
+ "label": "Prowlarr Instance",
+ "multi": true,
+ "name": "prowlarr_instance",
+ "options": [],
+ "query": {
+ "query": "label_values({__name__=~\"prowlarr_.*\"},instance)",
+ "refId": "PrometheusVariableQueryEditor-VariableQuery"
+ },
+ "refresh": 2,
+ "regex": "",
+ "skipUrlSync": false,
+ "sort": 0,
+ "type": "query"
+ }
+ ]
+ },
+ "time": {
+ "from": "now-24h",
+ "to": "now"
+ },
+ "timepicker": {},
+ "timezone": "browser",
+ "title": "Prowlarr",
+ "uid": "WURH98Y4k1",
+ "version": 3,
+ "weekStart": ""
+}
diff --git a/stable/prowlarr/17.4.0/icon-small.webp b/stable/prowlarr/17.4.0/icon-small.webp
new file mode 100644
index 0000000000..ac725e78b6
Binary files /dev/null and b/stable/prowlarr/17.4.0/icon-small.webp differ
diff --git a/stable/prowlarr/17.4.0/icon.webp b/stable/prowlarr/17.4.0/icon.webp
new file mode 100644
index 0000000000..c1535bd640
Binary files /dev/null and b/stable/prowlarr/17.4.0/icon.webp differ
diff --git a/stable/prowlarr/17.4.0/ix_values.yaml b/stable/prowlarr/17.4.0/ix_values.yaml
new file mode 100644
index 0000000000..3e7573e0ba
--- /dev/null
+++ b/stable/prowlarr/17.4.0/ix_values.yaml
@@ -0,0 +1,111 @@
+image:
+ repository: "ghcr.io/onedr0p/prowlarr-develop"
+ tag: "1.28.2.4885@sha256:f4ab000bcd12f61e064ba43c28b4afb7b732fcf157aa183d1bfa238347b73017"
+ pullPolicy: "IfNotPresent"
+exportarrImage:
+ repository: ghcr.io/onedr0p/exportarr
+ pullPolicy: IfNotPresent
+ tag: v2.0.1@sha256:727e7bc8f2f0934a2117978c59f4476b954018b849a010ea6cfb380bd6539644
+securityContext:
+ container:
+ readOnlyRootFilesystem: false
+service:
+ main:
+ ports:
+ main:
+ port: 9696
+ metrics:
+ enabled: "{{ .Values.metrics.main.enabled }}"
+ type: ClusterIP
+ ports:
+ metrics:
+ enabled: true
+ port: 9697
+workload:
+ main:
+ podSpec:
+ containers:
+ main:
+ probes:
+ liveness:
+ path: /ping
+ readiness:
+ path: /ping
+ startup:
+ type: tcp
+ env:
+ PROWLARR__SERVER__PORT: "{{ .Values.service.main.ports.main.port }}"
+ # External | Basic | Forms
+ PROWLARR__AUTH__METHOD: ""
+ # DisabledForLocalAddresses | Enabled
+ PROWLARR__AUTH__REQUIRED: DisabledForLocalAddresses
+ # PROWLARR__APP__THEME: dark
+ # PROWLARR__APP__INSTANCENAME: Prowlarr
+ # PROWLARR__LOG__LEVEL: info
+ # PROWLARR__UPDATE__BRANCH: develop
+ exportarr:
+ enabled: "{{ .Values.metrics.main.enabled }}"
+ imageSelector: exportarrImage
+ args:
+ - prowlarr
+ probes:
+ liveness:
+ enabled: true
+ type: http
+ path: /healthz
+ port: "{{ .Values.service.metrics.ports.metrics.port }}"
+ readiness:
+ enabled: true
+ type: http
+ path: /healthz
+ port: "{{ .Values.service.metrics.ports.metrics.port }}"
+ startup:
+ enabled: true
+ type: http
+ path: /healthz
+ port: "{{ .Values.service.metrics.ports.metrics.port }}"
+ env:
+ INTERFACE: 0.0.0.0
+ PORT: "{{ .Values.service.metrics.ports.metrics.port }}"
+ URL: '{{ printf "http://%v:%v" (include "tc.v1.common.lib.chart.names.fullname"
+ $) .Values.service.main.ports.main.port }}'
+ # additional metrics (slow)
+ # ENABLE_ADDITIONAL_METRICS: false
+ # enable gathering unknown queue items
+ # ENABLE_UNKNOWN_QUEUE_ITEMS: false
+ # enable backfill of historical metrics
+ # PROWLARR__BACKFILL: false
+ # Set a date from which to start the backfill
+ # PROWLARR__BACKFILL_SINCE_DATE: 1970-01-01
+ CONFIG: "/config/config.xml"
+persistence:
+ config:
+ enabled: true
+ targetSelector:
+ main:
+ main:
+ mountPath: /config
+ exportarr:
+ mountPath: /config
+ readOnly: true
+configmap:
+ dashboard:
+ enabled: true
+ labels:
+ grafana_dashboard: "1"
+ data:
+ prowlarr.json: >-
+ {{ .Files.Get "dashboard.json" | indent 8 }}
+metrics:
+ main:
+ enabled: true
+ type: "servicemonitor"
+ endpoints:
+ - port: metrics
+ path: /metrics
+ targetSelector: metrics
+ prometheusRule:
+ enabled: false
+portal:
+ open:
+ enabled: true
diff --git a/stable/prowlarr/17.4.0/questions.yaml b/stable/prowlarr/17.4.0/questions.yaml
new file mode 100644
index 0000000000..5cc5b73146
--- /dev/null
+++ b/stable/prowlarr/17.4.0/questions.yaml
@@ -0,0 +1,3214 @@
+groups:
+ - name: Image
+ description: |
+ Configured the images to be used for the Chart.
+ It's wise to use "digest pinned" tags and to avoid using "latest".
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/#images
+
+
+ - name: General
+ description: |
+ For TrueNAS SCALE We've grouped a number of settings here, that all effact how apps run in general.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/global/
+ - https://truecharts.org/common/#tz
+ - https://truecharts.org/common/podoptions/
+ - Image Pull Secrets
+
+
+ - name: Workload
+ description: |
+ These settings configure how the actual Pods and containers are running.
+ Generally, on SCALE, we only expose a limited subset of these settings for the primary workload and container.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/workload/
+ - https://truecharts.org/common/container/
+
+
+ - name: App Configuration
+ description: |
+ Every application has different values that may be required to run or have multiple options that the user may choose to enable or disable to change the behavior of the application.
+ Most options should have a Tooltip (Circled Question Mark) to further describe said option.
+
+ To find more information, lookup your chart-specific documentation in the Charts List: https://truecharts.org/charts/description-list/
+
+ - name: Services
+ description: |
+ Service and Networking options for any applications are contained here.
+ Some applications may have complicated networking setups with multiple options or some may have no options here at all.
+
+ Options here include the service and port configurations for the application, and more may be enabled or changed under the Advanced Settings and Show Expert Config boxes.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/service/
+
+ - name: Networking
+ description: |
+ Contains advanced networking options that are not actively supported by the TrueCharts team.
+ Currently only contains scaleExternalInterfaces.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/scaleexternalinterface/
+
+ - name: Persistence
+ description: |
+ Many applications will have certain options for storage to be configurable by the user, the main two being PVC and hostpath but may include other types.
+ This storage is called Persistence since it is not deleted upon restart or upgrade of an application.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/persistence/
+ - https://truecharts.org/scale/guides/nfs-share/
+ - https://truecharts.org/general/faq/#why-pvc-is-recommended-over-hostpath
+
+
+ - name: Ingress
+ description: |
+ Ingress (more commonly known as Reverse Proxy) settings can be configured here. This is how Kubernetes connects your Applications in containers to FQDNs (fully qualified domain names).
+ If you choose to enable this you must have a "Ingress Provider" aka "Reverse Proxy" installed (We highly advice Traefik: https://truecharts.org/charts/premium/traefik/)
+ It also requiresa DNS service to actually resolve the DNS name of the FQDN specified.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/ingress/
+
+
+ - name: SecurityContext
+ description: |
+ The security settings for each application and/or permissions that each application may have for the files/directories created.
+ Each application will come with predefined permissions but users may want to change certain setting depending on their usage or capabilities.
+
+ Unless necessary users are advised to keep this section mostly to defaults.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/securitycontext/
+
+
+ - name: Resources
+ description: |
+ Resources limits that have been defined by each application are in this section.
+ Most will have a specific default that some users may want to change based on their specific hardware or needs.
+
+ This also contains the options to mount GPUs or, more precisely, "request" GPU's to be mounted.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/resources/
+
+ - name: Devices
+ description: |
+ These are special "mountpoints" that can be used to mount miscelanious USB and PCI devices using special hostPath mounts.
+ For clearity we've decided to seperate this from persistence on SCALE.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/persistence/device/
+ - https://truecharts.org/scale/guides/pci-passthrough/
+
+ - name: Middlewares
+ description: Traefik Middlewares
+
+ - name: StorageClass
+ description: |
+ StorageClasses define where to storage Storage.
+
+ Checkout the following documentation for more information:
+
+ - name: Metrics
+ description: |
+ Contains options to configure Prometheus metrics for the application.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/metrics/
+
+
+ - name: Addons
+ description: |
+ Addons that are supplied by the TrueCharts team to add additional capabilities for users to use on top of the application’s defaults.
+ Things included here are VPN addons, Codeserver for editing files inside the application’s container, Netshoot for network troubelshooting, etc.
+
+ Generally not required for use but may be necessary or usefull at times for specific applications.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/addons/
+ - https://truecharts.org/scale/guides/vpn-setup/
+
+
+ - name: Experimental
+ description: |
+ Experimental Configuration Options
+ Often these are not fully flushed-out, could randomly break or might not work at-all.
+
+ - name: Postgresql
+ description: |
+ For Postgresql we use "CloudNative-PG" as a backend, which has to be installed first.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/cnpg/
+ - https://truecharts.org/scale/guides/sql-export/
+ - https://truecharts.org/scale/guides/recover-cnpg/
+
+ - name: Dependencies
+ description: |
+ contains dependency setting for which we, currently, do not have seperate catagories (yet)
+
+
+ - name: Documentation
+ description: |
+ We added this section to make everyone aware that OpenSource isn't always easy.
+ It doesn't keep existing without signficant ongoing support, so please consider supporting TrueCharts and other OpenSource projects.
+
+ Before installing, be sure you've followed the https://truecharts.org/scale/guides/getting-started/
+ We would also advice going over our https://truecharts.org/scale/guides/scale-intro/
+ and many of the other documentation pages...
+
+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
+ 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: credentialsList
+ group: General
+ label: "Credentials (Experimental)"
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: credentialsEntry
+ label: "Enter Credentials"
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: name
+ label: Name
+ description: "Name"
+ schema:
+ type: string
+ required: true
+ default: ""
+ - variable: type
+ label: Type
+ description: "Type of Credential"
+ schema:
+ type: string
+ default: "s3"
+ enum:
+ - value: s3
+ description: s3 Storage
+ - variable: url
+ label: "url"
+ schema:
+ type: string
+ default: ""
+ required: true
+ - variable: path
+ label: "path"
+ description: "Path Prefix not needed for most cases"
+ schema:
+ type: string
+ default: ""
+ - variable: bucket
+ label: "bucket"
+ schema:
+ show_if: [["type", "=", "s3"]]
+ type: string
+ default: ""
+ required: true
+ - variable: accessKey
+ label: "accessKey"
+ schema:
+ show_if: [["type", "=", "s3"]]
+ type: string
+ default: ""
+ required: true
+ - variable: secretKey
+ label: "secretKey"
+ schema:
+ show_if: [["type", "=", "s3"]]
+ type: string
+ default: ""
+ required: true
+ - variable: encrKey
+ label: "encrKey"
+ description: "The Encryption key is needed for tools like volsync if not needed it will be ignored"
+ schema:
+ show_if: [["type", "=", "s3"]]
+ type: string
+ default: "MYSECRETPASSPHRASE"
+ required: true
+
+ - variable: workload
+ group: "Workload"
+ 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: env
+ group: App Configuration
+ label: Image Environment
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: PROWLARR__AUTHENTICATION_METHOD
+ label: Auth Method
+ description: Sets the auth method.
+ schema:
+ type: string
+ default: ""
+ enum:
+ - value: ""
+ description: In-App Setting
+ - value: External
+ description: External/None
+ - value: Basic
+ description: Basic
+ - value: Forms
+ description: Forms
+ - 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: TZ
+ label: Timezone
+ group: "General"
+ schema:
+ type: string
+ default: "Etc/UTC"
+ $ref:
+ - "definitions/timezone"
+
+ - variable: podOptions
+ group: "General"
+ 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"
+ 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: Services
+ label: Configure Service(s)
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+
+ - variable: main
+ label: "Main Service"
+ description: "The Primary service on which the healthcheck runs, often the webUI"
+ 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: main
+ label: "Main Service 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: 9696
+ required: true
+ - variable: scaleExternalInterface
+ description: 'Add External Interfaces (Experimental, might change or be removed without further notice)'
+ label: Add external Interfaces (Experimental)
+ 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: 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: persistence
+ label: Integrated Persistent Storage
+ description: Integrated Persistent Storage
+ group: Persistence
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+
+ - variable: config
+ label: "App Config Storage"
+ description: "Stores the Application Configuration."
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: type
+ label: Type of Storage
+ description: Sets the persistence type, Anything other than PVC could break rollback!
+ schema:
+ type: string
+ default: pvc
+ enum:
+ - value: pvc
+ description: PVC
+ - value: hostPath
+ description: Host Path
+ - value: emptyDir
+ description: emptyDir
+ - value: nfs
+ description: NFS Share
+ - value: iscsi
+ description: iSCSI 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: 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 (Do NOT REDUCE after installation)
+ description: This value can ONLY be INCREASED after the installation
+ 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: volsync
+ label: 'VolSync (Experimental)'
+ description: Backup, Restore and Synchronise PVC storage
+ schema:
+ show_if: [["type", "=", "pvc"]]
+ type: list
+ default: []
+ items:
+ - variable: VolSyncEntry
+ label: VolSync Configuration
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: name
+ label: Name
+ description: "Name of backup configuration"
+ schema:
+ type: string
+ default: ""
+ required: true
+ - variable: type
+ label: Type VolSync/Backup
+ description: Sets the VolSync Type
+ schema:
+ type: string
+ default: "restic"
+ enum:
+ - value: restic
+ description: Restic
+ - variable: credentials
+ label: Credentials
+ description: "Name of credentials in the credentials section"
+ schema:
+ type: string
+ default: ""
+ required: true
+ - variable: dest
+ label: VolSync Destination (Restore)
+ description: VolSYnc Destination is the location where data is the reciever and configures recovery of backups
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: enabled
+ label: Enable
+ schema:
+ type: boolean
+ default: true
+ - variable: src
+ label: VolSync Source (Backup)
+ description: VolSYnc Source is the location where data is the sender and creates backups to storage
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: enabled
+ label: Enable
+ schema:
+ type: boolean
+ default: true
+ - 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: persistenceList
+ label: Additional App Storage
+ group: 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: volsync
+ label: 'VolSync (Experimental)'
+ description: Backup, Restore and Synchronise PVC storage
+ schema:
+ show_if: [["type", "=", "pvc"]]
+ type: list
+ default: []
+ items:
+ - variable: VolSyncEntry
+ label: VolSync Configuration
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: name
+ label: Name
+ description: "Name of backup configuration"
+ schema:
+ type: string
+ default: ""
+ required: true
+ - variable: type
+ label: Type VolSync/Backup
+ description: Sets the VolSync Type
+ schema:
+ type: string
+ default: "restic"
+ enum:
+ - value: restic
+ description: Restic
+ - variable: credentials
+ label: Credentials
+ description: "Name of credentials in the credentials section"
+ schema:
+ type: string
+ default: ""
+ required: true
+ - variable: dest
+ label: VolSync Destination (Restore)
+ description: VolSYnc Destination is the location where data is the reciever and configures recovery of backups
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: enabled
+ label: Enable
+ schema:
+ type: boolean
+ default: true
+ - variable: src
+ label: VolSync Source (Backup)
+ description: VolSYnc Source is the location where data is the sender and creates backups to storage
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: enabled
+ label: Enable
+ schema:
+ type: boolean
+ default: true
+ - 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: SecurityContext
+ 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 this App 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
+ 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: 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: 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: Experimental
+# 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: Experimental
+ 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/stable/prowlarr/17.4.0/templates/NOTES.txt b/stable/prowlarr/17.4.0/templates/NOTES.txt
new file mode 100644
index 0000000000..efcb74cb77
--- /dev/null
+++ b/stable/prowlarr/17.4.0/templates/NOTES.txt
@@ -0,0 +1 @@
+{{- include "tc.v1.common.lib.chart.notes" $ -}}
diff --git a/stable/prowlarr/17.4.0/templates/common.yaml b/stable/prowlarr/17.4.0/templates/common.yaml
new file mode 100644
index 0000000000..c6d069061d
--- /dev/null
+++ b/stable/prowlarr/17.4.0/templates/common.yaml
@@ -0,0 +1 @@
+{{ include "tc.v1.common.loader.all" . }}
\ No newline at end of file
diff --git a/stable/prowlarr/17.4.0/values.yaml b/stable/prowlarr/17.4.0/values.yaml
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/stable/prowlarr/app_versions.json b/stable/prowlarr/app_versions.json
index 449abc872b..69f772b04b 100644
--- a/stable/prowlarr/app_versions.json
+++ b/stable/prowlarr/app_versions.json
@@ -1,4 +1,5372 @@
{
+ "17.4.0": {
+ "healthy": true,
+ "supported": true,
+ "healthy_error": null,
+ "location": "/home/runner/_work/catalog/catalog/stable/prowlarr/17.4.0",
+ "last_update": "2024-12-21 22:26:37",
+ "required_features": [
+ "definitions/timezone",
+ "normalize/interfaceConfiguration",
+ "definitions/certificate",
+ "definitions/interface"
+ ],
+ "human_version": "1.28.0.4862_17.4.0",
+ "version": "17.4.0",
+ "chart_metadata": {
+ "annotations": {
+ "truecharts.org/category": "media",
+ "truecharts.org/max_helm_version": "3.14",
+ "truecharts.org/min_helm_version": "3.11",
+ "truecharts.org/train": "stable"
+ },
+ "apiVersion": "v2",
+ "appVersion": "1.28.2.4885",
+ "dependencies": [
+ {
+ "name": "common",
+ "version": "23.0.10",
+ "repository": "oci://tccr.io/truecharts",
+ "condition": "",
+ "alias": "",
+ "tags": [],
+ "import-values": []
+ }
+ ],
+ "deprecated": false,
+ "description": "Indexer manager/proxy built on the popular arr net base stack to integrate with your various PVR apps.",
+ "home": "https://truecharts.org/charts/stable/prowlarr",
+ "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/prowlarr.webp",
+ "keywords": [
+ "prowlarr",
+ "torrent",
+ "usenet"
+ ],
+ "kubeVersion": ">=1.24.0-0",
+ "maintainers": [
+ {
+ "name": "TrueCharts",
+ "email": "info@truecharts.org",
+ "url": "https://truecharts.org"
+ }
+ ],
+ "name": "prowlarr",
+ "sources": [
+ "https://ghcr.io/onedr0p/exportarr",
+ "https://ghcr.io/onedr0p/prowlarr-develop",
+ "https://github.com/Prowlarr/Prowlarr",
+ "https://github.com/k8s-at-home/container-images",
+ "https://github.com/truecharts/charts/tree/master/charts/stable/prowlarr"
+ ],
+ "type": "application",
+ "version": "17.4.0"
+ },
+ "app_metadata": null,
+ "schema": {
+ "groups": [
+ {
+ "name": "Image",
+ "description": "Configured the images to be used for the Chart.\nIt's wise to use \"digest pinned\" tags and to avoid using \"latest\".\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/#images\n"
+ },
+ {
+ "name": "General",
+ "description": "For TrueNAS SCALE We've grouped a number of settings here, that all effact how apps run in general.\n\nCheckout the following documentation for more information:\n - https://truecharts.org/common/global/\n - https://truecharts.org/common/#tz\n - https://truecharts.org/common/podoptions/\n - Image Pull Secrets\n"
+ },
+ {
+ "name": "Workload",
+ "description": "These settings configure how the actual Pods and containers are running.\nGenerally, on SCALE, we only expose a limited subset of these settings for the primary workload and container.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/workload/\n- https://truecharts.org/common/container/\n"
+ },
+ {
+ "name": "App Configuration",
+ "description": "Every application has different values that may be required to run or have multiple options that the user may choose to enable or disable to change the behavior of the application.\nMost options should have a Tooltip (Circled Question Mark) to further describe said option.\n\nTo find more information, lookup your chart-specific documentation in the Charts List: https://truecharts.org/charts/description-list/\n"
+ },
+ {
+ "name": "Services",
+ "description": "Service and Networking options for any applications are contained here.\nSome applications may have complicated networking setups with multiple options or some may have no options here at all.\n\nOptions here include the service and port configurations for the application, and more may be enabled or changed under the Advanced Settings and Show Expert Config boxes.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/service/\n"
+ },
+ {
+ "name": "Networking",
+ "description": "Contains advanced networking options that are not actively supported by the TrueCharts team.\nCurrently only contains scaleExternalInterfaces.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/scaleexternalinterface/\n"
+ },
+ {
+ "name": "Persistence",
+ "description": "Many applications will have certain options for storage to be configurable by the user, the main two being PVC and hostpath but may include other types.\nThis storage is called Persistence since it is not deleted upon restart or upgrade of an application.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/persistence/\n- https://truecharts.org/scale/guides/nfs-share/\n- https://truecharts.org/general/faq/#why-pvc-is-recommended-over-hostpath\n"
+ },
+ {
+ "name": "Ingress",
+ "description": "Ingress (more commonly known as Reverse Proxy) settings can be configured here. This is how Kubernetes connects your Applications in containers to FQDNs (fully qualified domain names).\nIf you choose to enable this you must have a \"Ingress Provider\" aka \"Reverse Proxy\" installed (We highly advice Traefik: https://truecharts.org/charts/premium/traefik/)\nIt also requiresa DNS service to actually resolve the DNS name of the FQDN specified.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/ingress/\n"
+ },
+ {
+ "name": "SecurityContext",
+ "description": "The security settings for each application and/or permissions that each application may have for the files/directories created.\nEach application will come with predefined permissions but users may want to change certain setting depending on their usage or capabilities.\n\nUnless necessary users are advised to keep this section mostly to defaults.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/securitycontext/\n"
+ },
+ {
+ "name": "Resources",
+ "description": "Resources limits that have been defined by each application are in this section.\nMost will have a specific default that some users may want to change based on their specific hardware or needs.\n\nThis also contains the options to mount GPUs or, more precisely, \"request\" GPU's to be mounted.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/resources/\n"
+ },
+ {
+ "name": "Devices",
+ "description": "These are special \"mountpoints\" that can be used to mount miscelanious USB and PCI devices using special hostPath mounts.\nFor clearity we've decided to seperate this from persistence on SCALE.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/persistence/device/\n- https://truecharts.org/scale/guides/pci-passthrough/\n"
+ },
+ {
+ "name": "Middlewares",
+ "description": "Traefik Middlewares"
+ },
+ {
+ "name": "StorageClass",
+ "description": "StorageClasses define where to storage Storage.\n\nCheckout the following documentation for more information:\n"
+ },
+ {
+ "name": "Metrics",
+ "description": "Contains options to configure Prometheus metrics for the application.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/metrics/\n"
+ },
+ {
+ "name": "Addons",
+ "description": "Addons that are supplied by the TrueCharts team to add additional capabilities for users to use on top of the application\u2019s defaults.\nThings included here are VPN addons, Codeserver for editing files inside the application\u2019s container, Netshoot for network troubelshooting, etc.\n\nGenerally not required for use but may be necessary or usefull at times for specific applications.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/addons/\n- https://truecharts.org/scale/guides/vpn-setup/\n"
+ },
+ {
+ "name": "Experimental",
+ "description": "Experimental Configuration Options\nOften these are not fully flushed-out, could randomly break or might not work at-all.\n"
+ },
+ {
+ "name": "Postgresql",
+ "description": "For Postgresql we use \"CloudNative-PG\" as a backend, which has to be installed first.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/cnpg/\n- https://truecharts.org/scale/guides/sql-export/\n- https://truecharts.org/scale/guides/recover-cnpg/\n"
+ },
+ {
+ "name": "Dependencies",
+ "description": "contains dependency setting for which we, currently, do not have seperate catagories (yet)\n"
+ },
+ {
+ "name": "Documentation",
+ "description": "We added this section to make everyone aware that OpenSource isn't always easy.\nIt doesn't keep existing without signficant ongoing support, so please consider supporting TrueCharts and other OpenSource projects.\n\nBefore installing, be sure you've followed the https://truecharts.org/scale/guides/getting-started/\nWe would also advice going over our https://truecharts.org/scale/guides/scale-intro/\nand many of the other documentation pages...\n"
+ }
+ ],
+ "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",
+ "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": "credentialsList",
+ "group": "General",
+ "label": "Credentials (Experimental)",
+ "schema": {
+ "type": "list",
+ "default": [],
+ "items": [
+ {
+ "variable": "credentialsEntry",
+ "label": "Enter Credentials",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "variable": "name",
+ "label": "Name",
+ "description": "Name",
+ "schema": {
+ "type": "string",
+ "required": true,
+ "default": ""
+ }
+ },
+ {
+ "variable": "type",
+ "label": "Type",
+ "description": "Type of Credential",
+ "schema": {
+ "type": "string",
+ "default": "s3",
+ "enum": [
+ {
+ "value": "s3",
+ "description": "s3 Storage"
+ }
+ ]
+ }
+ },
+ {
+ "variable": "url",
+ "label": "url",
+ "schema": {
+ "type": "string",
+ "default": "",
+ "required": true
+ }
+ },
+ {
+ "variable": "path",
+ "label": "path",
+ "description": "Path Prefix not needed for most cases",
+ "schema": {
+ "type": "string",
+ "default": ""
+ }
+ },
+ {
+ "variable": "bucket",
+ "label": "bucket",
+ "schema": {
+ "show_if": [
+ [
+ "type",
+ "=",
+ "s3"
+ ]
+ ],
+ "type": "string",
+ "default": "",
+ "required": true
+ }
+ },
+ {
+ "variable": "accessKey",
+ "label": "accessKey",
+ "schema": {
+ "show_if": [
+ [
+ "type",
+ "=",
+ "s3"
+ ]
+ ],
+ "type": "string",
+ "default": "",
+ "required": true
+ }
+ },
+ {
+ "variable": "secretKey",
+ "label": "secretKey",
+ "schema": {
+ "show_if": [
+ [
+ "type",
+ "=",
+ "s3"
+ ]
+ ],
+ "type": "string",
+ "default": "",
+ "required": true
+ }
+ },
+ {
+ "variable": "encrKey",
+ "label": "encrKey",
+ "description": "The Encryption key is needed for tools like volsync if not needed it will be ignored",
+ "schema": {
+ "show_if": [
+ [
+ "type",
+ "=",
+ "s3"
+ ]
+ ],
+ "type": "string",
+ "default": "MYSECRETPASSPHRASE",
+ "required": true
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "variable": "workload",
+ "group": "Workload",
+ "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": "env",
+ "group": "App Configuration",
+ "label": "Image Environment",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "variable": "PROWLARR__AUTHENTICATION_METHOD",
+ "label": "Auth Method",
+ "description": "Sets the auth method.",
+ "schema": {
+ "type": "string",
+ "default": "",
+ "enum": [
+ {
+ "value": "",
+ "description": "In-App Setting"
+ },
+ {
+ "value": "External",
+ "description": "External/None"
+ },
+ {
+ "value": "Basic",
+ "description": "Basic"
+ },
+ {
+ "value": "Forms",
+ "description": "Forms"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "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": "TZ",
+ "label": "Timezone",
+ "group": "General",
+ "schema": {
+ "type": "string",
+ "default": "America/Los_Angeles",
+ "$ref": [
+ "definitions/timezone"
+ ],
+ "enum": [
+ {
+ "value": "Asia/Damascus",
+ "description": "'Asia/Damascus' timezone"
+ },
+ {
+ "value": "Asia/Saigon",
+ "description": "'Asia/Saigon' timezone"
+ }
+ ]
+ }
+ },
+ {
+ "variable": "podOptions",
+ "group": "General",
+ "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",
+ "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": "Services",
+ "label": "Configure Service(s)",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "variable": "main",
+ "label": "Main Service",
+ "description": "The Primary service on which the healthcheck runs, often the webUI",
+ "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": "main",
+ "label": "Main Service 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": 9696,
+ "required": true
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "variable": "scaleExternalInterface",
+ "description": "Add External Interfaces (Experimental, might change or be removed without further notice)",
+ "label": "Add external Interfaces (Experimental)",
+ "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"
+ ],
+ "enum": []
+ }
+ },
+ {
+ "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": "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": "persistence",
+ "label": "Integrated Persistent Storage",
+ "description": "Integrated Persistent Storage",
+ "group": "Persistence",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "variable": "config",
+ "label": "App Config Storage",
+ "description": "Stores the Application Configuration.",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "variable": "type",
+ "label": "Type of Storage",
+ "description": "Sets the persistence type, Anything other than PVC could break rollback!",
+ "schema": {
+ "type": "string",
+ "default": "pvc",
+ "enum": [
+ {
+ "value": "pvc",
+ "description": "PVC"
+ },
+ {
+ "value": "hostPath",
+ "description": "Host Path"
+ },
+ {
+ "value": "emptyDir",
+ "description": "emptyDir"
+ },
+ {
+ "value": "nfs",
+ "description": "NFS Share"
+ },
+ {
+ "value": "iscsi",
+ "description": "iSCSI 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\n",
+ "schema": {
+ "type": "boolean",
+ "default": false
+ }
+ },
+ {
+ "variable": "chmod",
+ "label": "Run CHMOD",
+ "description": "It will run CHMOD on the path with the given value\nFormat should be 3 digits, e.g. 770\n",
+ "schema": {
+ "type": "string",
+ "valid_chars": "[0-9]{3}",
+ "default": ""
+ }
+ },
+ {
+ "variable": "recursive",
+ "label": "Recursive",
+ "description": "It will run CHOWN and CHMOD recursively\n",
+ "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": "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 (Do NOT REDUCE after installation)",
+ "description": "This value can ONLY be INCREASED after the installation",
+ "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": "volsync",
+ "label": "VolSync (Experimental)",
+ "description": "Backup, Restore and Synchronise PVC storage",
+ "schema": {
+ "show_if": [
+ [
+ "type",
+ "=",
+ "pvc"
+ ]
+ ],
+ "type": "list",
+ "default": [],
+ "items": [
+ {
+ "variable": "VolSyncEntry",
+ "label": "VolSync Configuration",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "variable": "name",
+ "label": "Name",
+ "description": "Name of backup configuration",
+ "schema": {
+ "type": "string",
+ "default": "",
+ "required": true
+ }
+ },
+ {
+ "variable": "type",
+ "label": "Type VolSync/Backup",
+ "description": "Sets the VolSync Type",
+ "schema": {
+ "type": "string",
+ "default": "restic",
+ "enum": [
+ {
+ "value": "restic",
+ "description": "Restic"
+ }
+ ]
+ }
+ },
+ {
+ "variable": "credentials",
+ "label": "Credentials",
+ "description": "Name of credentials in the credentials section",
+ "schema": {
+ "type": "string",
+ "default": "",
+ "required": true
+ }
+ },
+ {
+ "variable": "dest",
+ "label": "VolSync Destination (Restore)",
+ "description": "VolSYnc Destination is the location where data is the reciever and configures recovery of backups",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "variable": "enabled",
+ "label": "Enable",
+ "schema": {
+ "type": "boolean",
+ "default": true
+ }
+ }
+ ]
+ }
+ },
+ {
+ "variable": "src",
+ "label": "VolSync Source (Backup)",
+ "description": "VolSYnc Source is the location where data is the sender and creates backups to storage",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "variable": "enabled",
+ "label": "Enable",
+ "schema": {
+ "type": "boolean",
+ "default": true
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "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\nsmb: connect to an SMB share\nnfs: connect to an NFS share\n",
+ "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": "persistenceList",
+ "label": "Additional App Storage",
+ "group": "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\n",
+ "schema": {
+ "type": "boolean",
+ "default": false
+ }
+ },
+ {
+ "variable": "chmod",
+ "label": "Run CHMOD",
+ "description": "It will run CHMOD on the path with the given value\nFormat should be 3 digits, e.g. 770\n",
+ "schema": {
+ "type": "string",
+ "valid_chars": "[0-9]{3}",
+ "default": ""
+ }
+ },
+ {
+ "variable": "recursive",
+ "label": "Recursive",
+ "description": "It will run CHOWN and CHMOD recursively\n",
+ "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": "volsync",
+ "label": "VolSync (Experimental)",
+ "description": "Backup, Restore and Synchronise PVC storage",
+ "schema": {
+ "show_if": [
+ [
+ "type",
+ "=",
+ "pvc"
+ ]
+ ],
+ "type": "list",
+ "default": [],
+ "items": [
+ {
+ "variable": "VolSyncEntry",
+ "label": "VolSync Configuration",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "variable": "name",
+ "label": "Name",
+ "description": "Name of backup configuration",
+ "schema": {
+ "type": "string",
+ "default": "",
+ "required": true
+ }
+ },
+ {
+ "variable": "type",
+ "label": "Type VolSync/Backup",
+ "description": "Sets the VolSync Type",
+ "schema": {
+ "type": "string",
+ "default": "restic",
+ "enum": [
+ {
+ "value": "restic",
+ "description": "Restic"
+ }
+ ]
+ }
+ },
+ {
+ "variable": "credentials",
+ "label": "Credentials",
+ "description": "Name of credentials in the credentials section",
+ "schema": {
+ "type": "string",
+ "default": "",
+ "required": true
+ }
+ },
+ {
+ "variable": "dest",
+ "label": "VolSync Destination (Restore)",
+ "description": "VolSYnc Destination is the location where data is the reciever and configures recovery of backups",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "variable": "enabled",
+ "label": "Enable",
+ "schema": {
+ "type": "boolean",
+ "default": true
+ }
+ }
+ ]
+ }
+ },
+ {
+ "variable": "src",
+ "label": "VolSync Source (Backup)",
+ "description": "VolSYnc Source is the location where data is the sender and creates backups to storage",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "variable": "enabled",
+ "label": "Enable",
+ "schema": {
+ "type": "boolean",
+ "default": true
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "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\nsmb: connect to an SMB share\nnfs: connect to an NFS share\n",
+ "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": "SecurityContext",
+ "label": "Security Context",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "variable": "container",
+ "label": "Container",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "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 this App of the user running the application",
+ "schema": {
+ "type": "int",
+ "default": 568
+ }
+ },
+ {
+ "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"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "variable": "fsGroup",
+ "label": "fsGroup",
+ "description": "The group that should own ALL storage.",
+ "schema": {
+ "type": "int",
+ "default": 568
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "variable": "resources",
+ "group": "Resources",
+ "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": "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": "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
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "variable": "networkPolicy",
+ "group": "Experimental",
+ "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"
+ ],
+ "enum": [
+ {
+ "value": null,
+ "description": "No Certificate"
+ }
+ ],
+ "default": null,
+ "null": true
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "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
+ }
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "app_readme": "
Indexer manager/proxy built on the popular arr net base stack to integrate with your various PVR apps.
\n
This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/prowlarr
\n
\n
TrueCharts can only exist due to the incredible effort of our staff.\nPlease consider making a donation or contributing back to the project any way you can!
",
+ "detailed_readme": "
\n
title: README
\n
General Info
\n
TrueCharts can be installed as both normal Helm Charts or as TrueNAS SCALE Apps.\nBoth solutions are fully supported, but we heavily advice the use of normal Helm Charts where possible
\n
For more information about this Chart, please check the docs on the TrueCharts website
\n
This chart is not maintained by the upstream project and any issues with the chart should be raised here
\n
Installation
\n
Helm-Chart installation
\n
To install TrueCharts Helm charts using Helm, you can use our OCI Repository.
\n
helm install mychart oci://tccr.io/truecharts/CHARTNAME
\n
For more information on how to install TrueCharts Helm charts, checkout the instructions on the website: https://truecharts.org/helm/
\n
TrueNAS SCALE Apps
\n
For more information on how to use TrueCharts as TrueNAS SCALE Apps, please checkout the quick-start guides for TrueNAS SCALE.
\n
Chart Specific Guides and information
\n
All our charts have dedicated documentation pages.\nThe documentation for this chart can be found here:\nhttps://truecharts.org/charts/stable/prowlarr
\n
Configuration Options
\n
Please note: For TrueNAS SCALE, only options available in the GUI are supported.\nHence most of these docs do not apply to TrueNAS SCALE
\n
To view the chart specific options, please view Values.yaml included in the chart.\nThe most recent version of which, is available here: https://github.com/truecharts/charts/charts/stable/prowlarr/values.yaml
\n
All our Charts use a shared \"common\" library chart that contains most of the templating and options.\nFor the complete overview of all available options, please checkout the documentation for them on the website: https://truecharts.org/common/
\n
For information about the common chart and all defaults included with it, please review its values.yaml file available here: https://github.com/truecharts/library-charts/blob/main/library/common/values.yaml
\n
Support
\n
\n
\n
Sponsor TrueCharts
\n
TrueCharts can only exist due to the incredible effort of our staff.\nPlease consider making a donation or contributing back to the project any way you can!
\n
All Rights Reserved - The TrueCharts Project
",
+ "changelog": "
for the complete changelog, please refer to the website
\n
Important:
"
+ },
"17.3.11": {
"healthy": true,
"supported": true,
@@ -116207,4 +121575,4 @@
"detailed_readme": "
\n
title: README
\n
General Info
\n
TrueCharts can be installed as both normal Helm Charts or as Apps on TrueNAS SCALE.\nHowever only installations using the TrueNAS SCALE Apps system are supported.
\n
For more information about this App, please check the docs on the TrueCharts website
\n
This chart is not maintained by the upstream project and any issues with the chart should be raised here
\n
Support
\n
\n
\n
Sponsor TrueCharts
\n
TrueCharts can only exist due to the incredible effort of our staff.\nPlease consider making a donation or contributing back to the project any way you can!
\n
All Rights Reserved - The TrueCharts Project
",
"changelog": "
\n
title: Changelog
\n
for the complete changelog, please refer to the website
\n
Important:
\n
\n
Chore
\n
\n- update container image ghcr.io/onedr0p/prowlarr-develop to v1.13.3.4273@ca264d9 by renovate (#18137)
\n
\n
\n
Chore
\n
\n- update container image ghcr.io/onedr0p/prowlarr-develop to 1.13.2.4251@23d16bf by renovate (#17956)
\n
\n
\n
Chore
\n
\n- update container image ghcr.io/onedr0p/prowlarr-develop to v1.13.2.4251@1ada8d9 by renovate (#17915)
\n
\n
\n
Chore
\n
\n- update container image common to v17.2.30@19ad5ec by renovate (#17804)
\n
\n
\n
Chore
\n
\n- update container image ghcr.io/onedr0p/exportarr to v1.6.1@60cf3d4 by renovate (#17725)
\n
\n
\n
Chore
\n
\n- update container image ghcr.io/onedr0p/prowlarr-develop to v1.13.0.4217@bbc16bd by renovate (#17694)
\n
\n
\n
Chore
\n
\n- update container image common to v17.2.29@d7c41a3 by renovate (#17545)
\n
\n
\n
Chore
\n
\n- update container image common to v17.2.28@918b4c5 by renovate (#17478)
\n
\n
\n
Chore
\n
\n- update container image common to v17.2.26@24c98f7 by renovate (#17409)
\n
\n
\n
Chore
\n
\n- update metadata in chart.yaml (#17457)
\n
"
}
-}
+}
\ No newline at end of file
diff --git a/stable/sabnzbd/20.3.2/.helmignore b/stable/sabnzbd/20.3.2/.helmignore
new file mode 100644
index 0000000000..feb7464da6
--- /dev/null
+++ b/stable/sabnzbd/20.3.2/.helmignore
@@ -0,0 +1,32 @@
+# 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
+icon.webp
+icon-small.webp
diff --git a/stable/sabnzbd/20.3.2/CHANGELOG.md b/stable/sabnzbd/20.3.2/CHANGELOG.md
new file mode 100644
index 0000000000..941abb8a21
--- /dev/null
+++ b/stable/sabnzbd/20.3.2/CHANGELOG.md
@@ -0,0 +1,3 @@
+*for the complete changelog, please refer to the website*
+
+**Important:**
\ No newline at end of file
diff --git a/stable/sabnzbd/20.3.2/Chart.yaml b/stable/sabnzbd/20.3.2/Chart.yaml
new file mode 100644
index 0000000000..2db72e60ab
--- /dev/null
+++ b/stable/sabnzbd/20.3.2/Chart.yaml
@@ -0,0 +1,35 @@
+annotations:
+ truecharts.org/category: media
+ truecharts.org/max_helm_version: "3.14"
+ truecharts.org/min_helm_version: "3.11"
+ truecharts.org/train: stable
+apiVersion: v2
+appVersion: 4.4.1
+dependencies:
+- name: common
+ version: 23.0.10
+ repository: oci://tccr.io/truecharts
+ condition: ""
+ alias: ""
+ tags: []
+ import-values: []
+deprecated: false
+description: Free and easy binary newsreader
+home: https://truecharts.org/charts/stable/sabnzbd
+icon: https://truecharts.org/img/hotlink-ok/chart-icons/sabnzbd.webp
+keywords:
+- sabnzbd
+- usenet
+kubeVersion: '>=1.24.0-0'
+maintainers:
+- name: TrueCharts
+ email: info@truecharts.org
+ url: https://truecharts.org
+name: sabnzbd
+sources:
+- https://ghcr.io/onedr0p/exportarr
+- https://ghcr.io/onedr0p/sabnzbd
+- https://github.com/truecharts/charts/tree/master/charts/stable/sabnzbd
+- https://sabnzbd.org/
+type: application
+version: 20.3.2
diff --git a/stable/sabnzbd/20.3.2/README.md b/stable/sabnzbd/20.3.2/README.md
new file mode 100644
index 0000000000..067e3cb99a
--- /dev/null
+++ b/stable/sabnzbd/20.3.2/README.md
@@ -0,0 +1,61 @@
+---
+title: README
+---
+
+## General Info
+
+TrueCharts can be installed as both _normal_ Helm Charts or as TrueNAS SCALE Apps.
+Both solutions are fully supported, but we heavily advice the use of normal Helm Charts where possible
+
+For more information about this Chart, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/sabnzbd)
+
+**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)**
+
+## Installation
+
+### Helm-Chart installation
+
+To install TrueCharts Helm charts using Helm, you can use our OCI Repository.
+
+`helm install mychart oci://tccr.io/truecharts/CHARTNAME`
+
+For more information on how to install TrueCharts Helm charts, checkout the instructions on the website: https://truecharts.org/helm/
+
+
+### TrueNAS SCALE Apps
+
+For more information on how to use TrueCharts as TrueNAS SCALE Apps, please checkout the [quick-start guides for TrueNAS SCALE](https://truecharts.org/scale).
+
+## Chart Specific Guides and information
+
+All our charts have dedicated documentation pages.
+The documentation for this chart can be found here:
+https://truecharts.org/charts/stable/sabnzbd
+
+## Configuration Options
+
+Please note: For TrueNAS SCALE, only options available in the GUI are supported.
+Hence most of these docs do not apply to TrueNAS SCALE
+
+To view the chart specific options, please view Values.yaml included in the chart.
+The most recent version of which, is available here: https://github.com/truecharts/charts/charts/stable/sabnzbd/values.yaml
+
+All our Charts use a shared "common" library chart that contains most of the templating and options.
+For the complete overview of all available options, please checkout the documentation for them on the website: https://truecharts.org/common/
+
+For information about the common chart and all defaults included with it, please review its values.yaml file available here: https://github.com/truecharts/library-charts/blob/main/library/common/values.yaml
+
+## Support
+
+- 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/general/sponsor) or contributing back to the project any way you can!
+
+_All Rights Reserved - The TrueCharts Project_
diff --git a/stable/sabnzbd/20.3.2/app-readme.md b/stable/sabnzbd/20.3.2/app-readme.md
new file mode 100644
index 0000000000..04be527cd6
--- /dev/null
+++ b/stable/sabnzbd/20.3.2/app-readme.md
@@ -0,0 +1,8 @@
+Free and easy binary newsreader
+
+This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/sabnzbd](https://truecharts.org/charts/stable/sabnzbd)
+
+---
+
+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/stable/sabnzbd/20.3.2/charts/common-23.0.10.tgz b/stable/sabnzbd/20.3.2/charts/common-23.0.10.tgz
new file mode 100644
index 0000000000..5eefcb329b
Binary files /dev/null and b/stable/sabnzbd/20.3.2/charts/common-23.0.10.tgz differ
diff --git a/stable/sabnzbd/20.3.2/icon-small.webp b/stable/sabnzbd/20.3.2/icon-small.webp
new file mode 100644
index 0000000000..b8488d587d
Binary files /dev/null and b/stable/sabnzbd/20.3.2/icon-small.webp differ
diff --git a/stable/sabnzbd/20.3.2/icon.webp b/stable/sabnzbd/20.3.2/icon.webp
new file mode 100644
index 0000000000..27476e86f9
Binary files /dev/null and b/stable/sabnzbd/20.3.2/icon.webp differ
diff --git a/stable/sabnzbd/20.3.2/ix_values.yaml b/stable/sabnzbd/20.3.2/ix_values.yaml
new file mode 100644
index 0000000000..cf71e35b59
--- /dev/null
+++ b/stable/sabnzbd/20.3.2/ix_values.yaml
@@ -0,0 +1,90 @@
+image:
+ repository: "ghcr.io/onedr0p/sabnzbd"
+ pullPolicy: "IfNotPresent"
+ tag: "4.4.1@sha256:4188d3c29c53de1018edcfd5dc2d0a0c7955b9a239b91ff6c859626abd3494dc"
+exportarrImage:
+ repository: ghcr.io/onedr0p/exportarr
+ pullPolicy: IfNotPresent
+ tag: v2.0.1@sha256:727e7bc8f2f0934a2117978c59f4476b954018b849a010ea6cfb380bd6539644
+service:
+ main:
+ ports:
+ main:
+ port: 10097
+ metrics:
+ enabled: true
+ type: ClusterIP
+ targetSelector: exportarr
+ ports:
+ metrics:
+ enabled: true
+ port: 8990
+ targetSelector: exportarr
+workload:
+ main:
+ podSpec:
+ containers:
+ main:
+ env:
+ SABNZBD__HOST_WHITELIST_ENTRIES: ""
+ SABNZBD__PORT: "{{ .Values.service.main.ports.main.port }}"
+ exportarr:
+ enabled: "{{ .Values.metrics.main.enabled }}"
+ type: Deployment
+ strategy: RollingUpdate
+ replicas: 1
+ podSpec:
+ containers:
+ exportarr:
+ primary: true
+ enabled: true
+ imageSelector: exportarrImage
+ args:
+ - sabnzbd
+ probes:
+ liveness:
+ enabled: true
+ type: http
+ path: /healthz
+ port: "{{ .Values.service.metrics.ports.metrics.port }}"
+ readiness:
+ enabled: true
+ type: http
+ path: /healthz
+ port: "{{ .Values.service.metrics.ports.metrics.port }}"
+ startup:
+ enabled: true
+ type: http
+ path: /healthz
+ port: "{{ .Values.service.metrics.ports.metrics.port }}"
+ env:
+ INTERFACE: 0.0.0.0
+ PORT: "{{ .Values.service.metrics.ports.metrics.port }}"
+ URL: '{{ printf "http://%v:%v" (include "tc.v1.common.lib.chart.names.fullname"
+ $) .Values.service.main.ports.main.port }}'
+ APIKEY: "{{ .Values.metrics.main.apiKey }}"
+persistence:
+ config:
+ enabled: true
+ targetSelector:
+ main:
+ main:
+ mountPath: /config
+ exportarr:
+ exportarr:
+ mountPath: /config
+ readOnly: true
+metrics:
+ main:
+ enabled: false
+ type: "servicemonitor"
+ endpoints:
+ - port: metrics
+ path: /metrics
+ targetSelector: metrics
+ # Required for exportarr
+ apiKey: ""
+
+portal:
+ open:
+ enabled: true
diff --git a/stable/sabnzbd/20.3.2/questions.yaml b/stable/sabnzbd/20.3.2/questions.yaml
new file mode 100644
index 0000000000..952622ac87
--- /dev/null
+++ b/stable/sabnzbd/20.3.2/questions.yaml
@@ -0,0 +1,3197 @@
+groups:
+ - name: Image
+ description: |
+ Configured the images to be used for the Chart.
+ It's wise to use "digest pinned" tags and to avoid using "latest".
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/#images
+
+
+ - name: General
+ description: |
+ For TrueNAS SCALE We've grouped a number of settings here, that all effact how apps run in general.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/global/
+ - https://truecharts.org/common/#tz
+ - https://truecharts.org/common/podoptions/
+ - Image Pull Secrets
+
+
+ - name: Workload
+ description: |
+ These settings configure how the actual Pods and containers are running.
+ Generally, on SCALE, we only expose a limited subset of these settings for the primary workload and container.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/workload/
+ - https://truecharts.org/common/container/
+
+
+ - name: App Configuration
+ description: |
+ Every application has different values that may be required to run or have multiple options that the user may choose to enable or disable to change the behavior of the application.
+ Most options should have a Tooltip (Circled Question Mark) to further describe said option.
+
+ To find more information, lookup your chart-specific documentation in the Charts List: https://truecharts.org/charts/description-list/
+
+ - name: Services
+ description: |
+ Service and Networking options for any applications are contained here.
+ Some applications may have complicated networking setups with multiple options or some may have no options here at all.
+
+ Options here include the service and port configurations for the application, and more may be enabled or changed under the Advanced Settings and Show Expert Config boxes.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/service/
+
+ - name: Networking
+ description: |
+ Contains advanced networking options that are not actively supported by the TrueCharts team.
+ Currently only contains scaleExternalInterfaces.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/scaleexternalinterface/
+
+ - name: Persistence
+ description: |
+ Many applications will have certain options for storage to be configurable by the user, the main two being PVC and hostpath but may include other types.
+ This storage is called Persistence since it is not deleted upon restart or upgrade of an application.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/persistence/
+ - https://truecharts.org/scale/guides/nfs-share/
+ - https://truecharts.org/general/faq/#why-pvc-is-recommended-over-hostpath
+
+
+ - name: Ingress
+ description: |
+ Ingress (more commonly known as Reverse Proxy) settings can be configured here. This is how Kubernetes connects your Applications in containers to FQDNs (fully qualified domain names).
+ If you choose to enable this you must have a "Ingress Provider" aka "Reverse Proxy" installed (We highly advice Traefik: https://truecharts.org/charts/premium/traefik/)
+ It also requiresa DNS service to actually resolve the DNS name of the FQDN specified.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/ingress/
+
+
+ - name: SecurityContext
+ description: |
+ The security settings for each application and/or permissions that each application may have for the files/directories created.
+ Each application will come with predefined permissions but users may want to change certain setting depending on their usage or capabilities.
+
+ Unless necessary users are advised to keep this section mostly to defaults.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/securitycontext/
+
+
+ - name: Resources
+ description: |
+ Resources limits that have been defined by each application are in this section.
+ Most will have a specific default that some users may want to change based on their specific hardware or needs.
+
+ This also contains the options to mount GPUs or, more precisely, "request" GPU's to be mounted.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/resources/
+
+ - name: Devices
+ description: |
+ These are special "mountpoints" that can be used to mount miscelanious USB and PCI devices using special hostPath mounts.
+ For clearity we've decided to seperate this from persistence on SCALE.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/persistence/device/
+ - https://truecharts.org/scale/guides/pci-passthrough/
+
+ - name: Middlewares
+ description: Traefik Middlewares
+
+ - name: StorageClass
+ description: |
+ StorageClasses define where to storage Storage.
+
+ Checkout the following documentation for more information:
+
+ - name: Metrics
+ description: |
+ Contains options to configure Prometheus metrics for the application.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/metrics/
+
+
+ - name: Addons
+ description: |
+ Addons that are supplied by the TrueCharts team to add additional capabilities for users to use on top of the application’s defaults.
+ Things included here are VPN addons, Codeserver for editing files inside the application’s container, Netshoot for network troubelshooting, etc.
+
+ Generally not required for use but may be necessary or usefull at times for specific applications.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/addons/
+ - https://truecharts.org/scale/guides/vpn-setup/
+
+
+ - name: Experimental
+ description: |
+ Experimental Configuration Options
+ Often these are not fully flushed-out, could randomly break or might not work at-all.
+
+ - name: Postgresql
+ description: |
+ For Postgresql we use "CloudNative-PG" as a backend, which has to be installed first.
+
+ Checkout the following documentation for more information:
+ - https://truecharts.org/common/cnpg/
+ - https://truecharts.org/scale/guides/sql-export/
+ - https://truecharts.org/scale/guides/recover-cnpg/
+
+ - name: Dependencies
+ description: |
+ contains dependency setting for which we, currently, do not have seperate catagories (yet)
+
+
+ - name: Documentation
+ description: |
+ We added this section to make everyone aware that OpenSource isn't always easy.
+ It doesn't keep existing without signficant ongoing support, so please consider supporting TrueCharts and other OpenSource projects.
+
+ Before installing, be sure you've followed the https://truecharts.org/scale/guides/getting-started/
+ We would also advice going over our https://truecharts.org/scale/guides/scale-intro/
+ and many of the other documentation pages...
+
+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
+ 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: credentialsList
+ group: General
+ label: "Credentials (Experimental)"
+ schema:
+ type: list
+ default: []
+ items:
+ - variable: credentialsEntry
+ label: "Enter Credentials"
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: name
+ label: Name
+ description: "Name"
+ schema:
+ type: string
+ required: true
+ default: ""
+ - variable: type
+ label: Type
+ description: "Type of Credential"
+ schema:
+ type: string
+ default: "s3"
+ enum:
+ - value: s3
+ description: s3 Storage
+ - variable: url
+ label: "url"
+ schema:
+ type: string
+ default: ""
+ required: true
+ - variable: path
+ label: "path"
+ description: "Path Prefix not needed for most cases"
+ schema:
+ type: string
+ default: ""
+ - variable: bucket
+ label: "bucket"
+ schema:
+ show_if: [["type", "=", "s3"]]
+ type: string
+ default: ""
+ required: true
+ - variable: accessKey
+ label: "accessKey"
+ schema:
+ show_if: [["type", "=", "s3"]]
+ type: string
+ default: ""
+ required: true
+ - variable: secretKey
+ label: "secretKey"
+ schema:
+ show_if: [["type", "=", "s3"]]
+ type: string
+ default: ""
+ required: true
+ - variable: encrKey
+ label: "encrKey"
+ description: "The Encryption key is needed for tools like volsync if not needed it will be ignored"
+ schema:
+ show_if: [["type", "=", "s3"]]
+ type: string
+ default: "MYSECRETPASSPHRASE"
+ required: true
+
+ - variable: workload
+ group: "Workload"
+ 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: env
+ group: "App Configuration"
+ label: "Image Environment"
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: SABNZBD__HOST_WHITELIST_ENTRIES
+ label: "HostName Whitelist"
+ description: "If you use a reverse proxy, you might need to enter your hostname's here (comma seperated)"
+ schema:
+ type: string
+ default: ""
+ - 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: TZ
+ label: Timezone
+ group: "General"
+ schema:
+ type: string
+ default: "Etc/UTC"
+ $ref:
+ - "definitions/timezone"
+
+ - variable: podOptions
+ group: "General"
+ 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"
+ 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: Services
+ label: Configure Service(s)
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+
+ - variable: main
+ label: "Main Service"
+ description: "The Primary service on which the healthcheck runs, often the webUI"
+ 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: main
+ label: "Main Service 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: 10097
+ required: true
+ - variable: scaleExternalInterface
+ description: 'Add External Interfaces (Experimental, might change or be removed without further notice)'
+ label: Add external Interfaces (Experimental)
+ 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: 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: persistence
+ label: Integrated Persistent Storage
+ description: Integrated Persistent Storage
+ group: Persistence
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+
+ - variable: config
+ label: "App Config Storage"
+ description: "Stores the Application Configuration."
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: type
+ label: Type of Storage
+ description: Sets the persistence type, Anything other than PVC could break rollback!
+ schema:
+ type: string
+ default: pvc
+ enum:
+ - value: pvc
+ description: PVC
+ - value: hostPath
+ description: Host Path
+ - value: emptyDir
+ description: emptyDir
+ - value: nfs
+ description: NFS Share
+ - value: iscsi
+ description: iSCSI 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: 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 (Do NOT REDUCE after installation)
+ description: This value can ONLY be INCREASED after the installation
+ 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: volsync
+ label: 'VolSync (Experimental)'
+ description: Backup, Restore and Synchronise PVC storage
+ schema:
+ show_if: [["type", "=", "pvc"]]
+ type: list
+ default: []
+ items:
+ - variable: VolSyncEntry
+ label: VolSync Configuration
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: name
+ label: Name
+ description: "Name of backup configuration"
+ schema:
+ type: string
+ default: ""
+ required: true
+ - variable: type
+ label: Type VolSync/Backup
+ description: Sets the VolSync Type
+ schema:
+ type: string
+ default: "restic"
+ enum:
+ - value: restic
+ description: Restic
+ - variable: credentials
+ label: Credentials
+ description: "Name of credentials in the credentials section"
+ schema:
+ type: string
+ default: ""
+ required: true
+ - variable: dest
+ label: VolSync Destination (Restore)
+ description: VolSYnc Destination is the location where data is the reciever and configures recovery of backups
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: enabled
+ label: Enable
+ schema:
+ type: boolean
+ default: true
+ - variable: src
+ label: VolSync Source (Backup)
+ description: VolSYnc Source is the location where data is the sender and creates backups to storage
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: enabled
+ label: Enable
+ schema:
+ type: boolean
+ default: true
+ - 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: persistenceList
+ label: Additional App Storage
+ group: 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: volsync
+ label: 'VolSync (Experimental)'
+ description: Backup, Restore and Synchronise PVC storage
+ schema:
+ show_if: [["type", "=", "pvc"]]
+ type: list
+ default: []
+ items:
+ - variable: VolSyncEntry
+ label: VolSync Configuration
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: name
+ label: Name
+ description: "Name of backup configuration"
+ schema:
+ type: string
+ default: ""
+ required: true
+ - variable: type
+ label: Type VolSync/Backup
+ description: Sets the VolSync Type
+ schema:
+ type: string
+ default: "restic"
+ enum:
+ - value: restic
+ description: Restic
+ - variable: credentials
+ label: Credentials
+ description: "Name of credentials in the credentials section"
+ schema:
+ type: string
+ default: ""
+ required: true
+ - variable: dest
+ label: VolSync Destination (Restore)
+ description: VolSYnc Destination is the location where data is the reciever and configures recovery of backups
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: enabled
+ label: Enable
+ schema:
+ type: boolean
+ default: true
+ - variable: src
+ label: VolSync Source (Backup)
+ description: VolSYnc Source is the location where data is the sender and creates backups to storage
+ schema:
+ additional_attrs: true
+ type: dict
+ attrs:
+ - variable: enabled
+ label: Enable
+ schema:
+ type: boolean
+ default: true
+ - 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: SecurityContext
+ 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 this App 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
+ 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: 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: 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: apiKey
+ label: "Sabnzbd API key"
+ description: "Can be found in the Bazarr settings"
+ schema:
+ type: string
+ default: ""
+ required: true
+# - variable: horizontalPodAutoscaler
+# group: Experimental
+# 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: Experimental
+ 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/stable/sabnzbd/20.3.2/templates/NOTES.txt b/stable/sabnzbd/20.3.2/templates/NOTES.txt
new file mode 100644
index 0000000000..efcb74cb77
--- /dev/null
+++ b/stable/sabnzbd/20.3.2/templates/NOTES.txt
@@ -0,0 +1 @@
+{{- include "tc.v1.common.lib.chart.notes" $ -}}
diff --git a/stable/sabnzbd/20.3.2/templates/common.yaml b/stable/sabnzbd/20.3.2/templates/common.yaml
new file mode 100644
index 0000000000..b51394e00a
--- /dev/null
+++ b/stable/sabnzbd/20.3.2/templates/common.yaml
@@ -0,0 +1 @@
+{{ include "tc.v1.common.loader.all" . }}
diff --git a/stable/sabnzbd/20.3.2/values.yaml b/stable/sabnzbd/20.3.2/values.yaml
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/stable/sabnzbd/app_versions.json b/stable/sabnzbd/app_versions.json
index 0c9f1f669b..4c22e36757 100644
--- a/stable/sabnzbd/app_versions.json
+++ b/stable/sabnzbd/app_versions.json
@@ -1,4 +1,5342 @@
{
+ "20.3.2": {
+ "healthy": true,
+ "supported": true,
+ "healthy_error": null,
+ "location": "/home/runner/_work/catalog/catalog/stable/sabnzbd/20.3.2",
+ "last_update": "2024-12-21 22:26:42",
+ "required_features": [
+ "definitions/timezone",
+ "normalize/interfaceConfiguration",
+ "definitions/certificate",
+ "definitions/interface"
+ ],
+ "human_version": "4.4.1_20.3.2",
+ "version": "20.3.2",
+ "chart_metadata": {
+ "annotations": {
+ "truecharts.org/category": "media",
+ "truecharts.org/max_helm_version": "3.14",
+ "truecharts.org/min_helm_version": "3.11",
+ "truecharts.org/train": "stable"
+ },
+ "apiVersion": "v2",
+ "appVersion": "4.4.1",
+ "dependencies": [
+ {
+ "name": "common",
+ "version": "23.0.10",
+ "repository": "oci://tccr.io/truecharts",
+ "condition": "",
+ "alias": "",
+ "tags": [],
+ "import-values": []
+ }
+ ],
+ "deprecated": false,
+ "description": "Free and easy binary newsreader",
+ "home": "https://truecharts.org/charts/stable/sabnzbd",
+ "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/sabnzbd.webp",
+ "keywords": [
+ "sabnzbd",
+ "usenet"
+ ],
+ "kubeVersion": ">=1.24.0-0",
+ "maintainers": [
+ {
+ "name": "TrueCharts",
+ "email": "info@truecharts.org",
+ "url": "https://truecharts.org"
+ }
+ ],
+ "name": "sabnzbd",
+ "sources": [
+ "https://ghcr.io/onedr0p/exportarr",
+ "https://ghcr.io/onedr0p/sabnzbd",
+ "https://github.com/truecharts/charts/tree/master/charts/stable/sabnzbd",
+ "https://sabnzbd.org/"
+ ],
+ "type": "application",
+ "version": "20.3.2"
+ },
+ "app_metadata": null,
+ "schema": {
+ "groups": [
+ {
+ "name": "Image",
+ "description": "Configured the images to be used for the Chart.\nIt's wise to use \"digest pinned\" tags and to avoid using \"latest\".\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/#images\n"
+ },
+ {
+ "name": "General",
+ "description": "For TrueNAS SCALE We've grouped a number of settings here, that all effact how apps run in general.\n\nCheckout the following documentation for more information:\n - https://truecharts.org/common/global/\n - https://truecharts.org/common/#tz\n - https://truecharts.org/common/podoptions/\n - Image Pull Secrets\n"
+ },
+ {
+ "name": "Workload",
+ "description": "These settings configure how the actual Pods and containers are running.\nGenerally, on SCALE, we only expose a limited subset of these settings for the primary workload and container.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/workload/\n- https://truecharts.org/common/container/\n"
+ },
+ {
+ "name": "App Configuration",
+ "description": "Every application has different values that may be required to run or have multiple options that the user may choose to enable or disable to change the behavior of the application.\nMost options should have a Tooltip (Circled Question Mark) to further describe said option.\n\nTo find more information, lookup your chart-specific documentation in the Charts List: https://truecharts.org/charts/description-list/\n"
+ },
+ {
+ "name": "Services",
+ "description": "Service and Networking options for any applications are contained here.\nSome applications may have complicated networking setups with multiple options or some may have no options here at all.\n\nOptions here include the service and port configurations for the application, and more may be enabled or changed under the Advanced Settings and Show Expert Config boxes.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/service/\n"
+ },
+ {
+ "name": "Networking",
+ "description": "Contains advanced networking options that are not actively supported by the TrueCharts team.\nCurrently only contains scaleExternalInterfaces.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/scaleexternalinterface/\n"
+ },
+ {
+ "name": "Persistence",
+ "description": "Many applications will have certain options for storage to be configurable by the user, the main two being PVC and hostpath but may include other types.\nThis storage is called Persistence since it is not deleted upon restart or upgrade of an application.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/persistence/\n- https://truecharts.org/scale/guides/nfs-share/\n- https://truecharts.org/general/faq/#why-pvc-is-recommended-over-hostpath\n"
+ },
+ {
+ "name": "Ingress",
+ "description": "Ingress (more commonly known as Reverse Proxy) settings can be configured here. This is how Kubernetes connects your Applications in containers to FQDNs (fully qualified domain names).\nIf you choose to enable this you must have a \"Ingress Provider\" aka \"Reverse Proxy\" installed (We highly advice Traefik: https://truecharts.org/charts/premium/traefik/)\nIt also requiresa DNS service to actually resolve the DNS name of the FQDN specified.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/ingress/\n"
+ },
+ {
+ "name": "SecurityContext",
+ "description": "The security settings for each application and/or permissions that each application may have for the files/directories created.\nEach application will come with predefined permissions but users may want to change certain setting depending on their usage or capabilities.\n\nUnless necessary users are advised to keep this section mostly to defaults.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/securitycontext/\n"
+ },
+ {
+ "name": "Resources",
+ "description": "Resources limits that have been defined by each application are in this section.\nMost will have a specific default that some users may want to change based on their specific hardware or needs.\n\nThis also contains the options to mount GPUs or, more precisely, \"request\" GPU's to be mounted.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/resources/\n"
+ },
+ {
+ "name": "Devices",
+ "description": "These are special \"mountpoints\" that can be used to mount miscelanious USB and PCI devices using special hostPath mounts.\nFor clearity we've decided to seperate this from persistence on SCALE.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/persistence/device/\n- https://truecharts.org/scale/guides/pci-passthrough/\n"
+ },
+ {
+ "name": "Middlewares",
+ "description": "Traefik Middlewares"
+ },
+ {
+ "name": "StorageClass",
+ "description": "StorageClasses define where to storage Storage.\n\nCheckout the following documentation for more information:\n"
+ },
+ {
+ "name": "Metrics",
+ "description": "Contains options to configure Prometheus metrics for the application.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/metrics/\n"
+ },
+ {
+ "name": "Addons",
+ "description": "Addons that are supplied by the TrueCharts team to add additional capabilities for users to use on top of the application\u2019s defaults.\nThings included here are VPN addons, Codeserver for editing files inside the application\u2019s container, Netshoot for network troubelshooting, etc.\n\nGenerally not required for use but may be necessary or usefull at times for specific applications.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/addons/\n- https://truecharts.org/scale/guides/vpn-setup/\n"
+ },
+ {
+ "name": "Experimental",
+ "description": "Experimental Configuration Options\nOften these are not fully flushed-out, could randomly break or might not work at-all.\n"
+ },
+ {
+ "name": "Postgresql",
+ "description": "For Postgresql we use \"CloudNative-PG\" as a backend, which has to be installed first.\n\nCheckout the following documentation for more information:\n- https://truecharts.org/common/cnpg/\n- https://truecharts.org/scale/guides/sql-export/\n- https://truecharts.org/scale/guides/recover-cnpg/\n"
+ },
+ {
+ "name": "Dependencies",
+ "description": "contains dependency setting for which we, currently, do not have seperate catagories (yet)\n"
+ },
+ {
+ "name": "Documentation",
+ "description": "We added this section to make everyone aware that OpenSource isn't always easy.\nIt doesn't keep existing without signficant ongoing support, so please consider supporting TrueCharts and other OpenSource projects.\n\nBefore installing, be sure you've followed the https://truecharts.org/scale/guides/getting-started/\nWe would also advice going over our https://truecharts.org/scale/guides/scale-intro/\nand many of the other documentation pages...\n"
+ }
+ ],
+ "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",
+ "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": "credentialsList",
+ "group": "General",
+ "label": "Credentials (Experimental)",
+ "schema": {
+ "type": "list",
+ "default": [],
+ "items": [
+ {
+ "variable": "credentialsEntry",
+ "label": "Enter Credentials",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "variable": "name",
+ "label": "Name",
+ "description": "Name",
+ "schema": {
+ "type": "string",
+ "required": true,
+ "default": ""
+ }
+ },
+ {
+ "variable": "type",
+ "label": "Type",
+ "description": "Type of Credential",
+ "schema": {
+ "type": "string",
+ "default": "s3",
+ "enum": [
+ {
+ "value": "s3",
+ "description": "s3 Storage"
+ }
+ ]
+ }
+ },
+ {
+ "variable": "url",
+ "label": "url",
+ "schema": {
+ "type": "string",
+ "default": "",
+ "required": true
+ }
+ },
+ {
+ "variable": "path",
+ "label": "path",
+ "description": "Path Prefix not needed for most cases",
+ "schema": {
+ "type": "string",
+ "default": ""
+ }
+ },
+ {
+ "variable": "bucket",
+ "label": "bucket",
+ "schema": {
+ "show_if": [
+ [
+ "type",
+ "=",
+ "s3"
+ ]
+ ],
+ "type": "string",
+ "default": "",
+ "required": true
+ }
+ },
+ {
+ "variable": "accessKey",
+ "label": "accessKey",
+ "schema": {
+ "show_if": [
+ [
+ "type",
+ "=",
+ "s3"
+ ]
+ ],
+ "type": "string",
+ "default": "",
+ "required": true
+ }
+ },
+ {
+ "variable": "secretKey",
+ "label": "secretKey",
+ "schema": {
+ "show_if": [
+ [
+ "type",
+ "=",
+ "s3"
+ ]
+ ],
+ "type": "string",
+ "default": "",
+ "required": true
+ }
+ },
+ {
+ "variable": "encrKey",
+ "label": "encrKey",
+ "description": "The Encryption key is needed for tools like volsync if not needed it will be ignored",
+ "schema": {
+ "show_if": [
+ [
+ "type",
+ "=",
+ "s3"
+ ]
+ ],
+ "type": "string",
+ "default": "MYSECRETPASSPHRASE",
+ "required": true
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "variable": "workload",
+ "group": "Workload",
+ "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": "env",
+ "group": "App Configuration",
+ "label": "Image Environment",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "variable": "SABNZBD__HOST_WHITELIST_ENTRIES",
+ "label": "HostName Whitelist",
+ "description": "If you use a reverse proxy, you might need to enter your hostname's here (comma seperated)",
+ "schema": {
+ "type": "string",
+ "default": ""
+ }
+ }
+ ]
+ }
+ },
+ {
+ "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": "TZ",
+ "label": "Timezone",
+ "group": "General",
+ "schema": {
+ "type": "string",
+ "default": "America/Los_Angeles",
+ "$ref": [
+ "definitions/timezone"
+ ],
+ "enum": [
+ {
+ "value": "Asia/Damascus",
+ "description": "'Asia/Damascus' timezone"
+ },
+ {
+ "value": "Asia/Saigon",
+ "description": "'Asia/Saigon' timezone"
+ }
+ ]
+ }
+ },
+ {
+ "variable": "podOptions",
+ "group": "General",
+ "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",
+ "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": "Services",
+ "label": "Configure Service(s)",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "variable": "main",
+ "label": "Main Service",
+ "description": "The Primary service on which the healthcheck runs, often the webUI",
+ "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": "main",
+ "label": "Main Service 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": 10097,
+ "required": true
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "variable": "scaleExternalInterface",
+ "description": "Add External Interfaces (Experimental, might change or be removed without further notice)",
+ "label": "Add external Interfaces (Experimental)",
+ "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"
+ ],
+ "enum": []
+ }
+ },
+ {
+ "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": "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": "persistence",
+ "label": "Integrated Persistent Storage",
+ "description": "Integrated Persistent Storage",
+ "group": "Persistence",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "variable": "config",
+ "label": "App Config Storage",
+ "description": "Stores the Application Configuration.",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "variable": "type",
+ "label": "Type of Storage",
+ "description": "Sets the persistence type, Anything other than PVC could break rollback!",
+ "schema": {
+ "type": "string",
+ "default": "pvc",
+ "enum": [
+ {
+ "value": "pvc",
+ "description": "PVC"
+ },
+ {
+ "value": "hostPath",
+ "description": "Host Path"
+ },
+ {
+ "value": "emptyDir",
+ "description": "emptyDir"
+ },
+ {
+ "value": "nfs",
+ "description": "NFS Share"
+ },
+ {
+ "value": "iscsi",
+ "description": "iSCSI 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\n",
+ "schema": {
+ "type": "boolean",
+ "default": false
+ }
+ },
+ {
+ "variable": "chmod",
+ "label": "Run CHMOD",
+ "description": "It will run CHMOD on the path with the given value\nFormat should be 3 digits, e.g. 770\n",
+ "schema": {
+ "type": "string",
+ "valid_chars": "[0-9]{3}",
+ "default": ""
+ }
+ },
+ {
+ "variable": "recursive",
+ "label": "Recursive",
+ "description": "It will run CHOWN and CHMOD recursively\n",
+ "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": "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 (Do NOT REDUCE after installation)",
+ "description": "This value can ONLY be INCREASED after the installation",
+ "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": "volsync",
+ "label": "VolSync (Experimental)",
+ "description": "Backup, Restore and Synchronise PVC storage",
+ "schema": {
+ "show_if": [
+ [
+ "type",
+ "=",
+ "pvc"
+ ]
+ ],
+ "type": "list",
+ "default": [],
+ "items": [
+ {
+ "variable": "VolSyncEntry",
+ "label": "VolSync Configuration",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "variable": "name",
+ "label": "Name",
+ "description": "Name of backup configuration",
+ "schema": {
+ "type": "string",
+ "default": "",
+ "required": true
+ }
+ },
+ {
+ "variable": "type",
+ "label": "Type VolSync/Backup",
+ "description": "Sets the VolSync Type",
+ "schema": {
+ "type": "string",
+ "default": "restic",
+ "enum": [
+ {
+ "value": "restic",
+ "description": "Restic"
+ }
+ ]
+ }
+ },
+ {
+ "variable": "credentials",
+ "label": "Credentials",
+ "description": "Name of credentials in the credentials section",
+ "schema": {
+ "type": "string",
+ "default": "",
+ "required": true
+ }
+ },
+ {
+ "variable": "dest",
+ "label": "VolSync Destination (Restore)",
+ "description": "VolSYnc Destination is the location where data is the reciever and configures recovery of backups",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "variable": "enabled",
+ "label": "Enable",
+ "schema": {
+ "type": "boolean",
+ "default": true
+ }
+ }
+ ]
+ }
+ },
+ {
+ "variable": "src",
+ "label": "VolSync Source (Backup)",
+ "description": "VolSYnc Source is the location where data is the sender and creates backups to storage",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "variable": "enabled",
+ "label": "Enable",
+ "schema": {
+ "type": "boolean",
+ "default": true
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "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\nsmb: connect to an SMB share\nnfs: connect to an NFS share\n",
+ "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": "persistenceList",
+ "label": "Additional App Storage",
+ "group": "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\n",
+ "schema": {
+ "type": "boolean",
+ "default": false
+ }
+ },
+ {
+ "variable": "chmod",
+ "label": "Run CHMOD",
+ "description": "It will run CHMOD on the path with the given value\nFormat should be 3 digits, e.g. 770\n",
+ "schema": {
+ "type": "string",
+ "valid_chars": "[0-9]{3}",
+ "default": ""
+ }
+ },
+ {
+ "variable": "recursive",
+ "label": "Recursive",
+ "description": "It will run CHOWN and CHMOD recursively\n",
+ "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": "volsync",
+ "label": "VolSync (Experimental)",
+ "description": "Backup, Restore and Synchronise PVC storage",
+ "schema": {
+ "show_if": [
+ [
+ "type",
+ "=",
+ "pvc"
+ ]
+ ],
+ "type": "list",
+ "default": [],
+ "items": [
+ {
+ "variable": "VolSyncEntry",
+ "label": "VolSync Configuration",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "variable": "name",
+ "label": "Name",
+ "description": "Name of backup configuration",
+ "schema": {
+ "type": "string",
+ "default": "",
+ "required": true
+ }
+ },
+ {
+ "variable": "type",
+ "label": "Type VolSync/Backup",
+ "description": "Sets the VolSync Type",
+ "schema": {
+ "type": "string",
+ "default": "restic",
+ "enum": [
+ {
+ "value": "restic",
+ "description": "Restic"
+ }
+ ]
+ }
+ },
+ {
+ "variable": "credentials",
+ "label": "Credentials",
+ "description": "Name of credentials in the credentials section",
+ "schema": {
+ "type": "string",
+ "default": "",
+ "required": true
+ }
+ },
+ {
+ "variable": "dest",
+ "label": "VolSync Destination (Restore)",
+ "description": "VolSYnc Destination is the location where data is the reciever and configures recovery of backups",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "variable": "enabled",
+ "label": "Enable",
+ "schema": {
+ "type": "boolean",
+ "default": true
+ }
+ }
+ ]
+ }
+ },
+ {
+ "variable": "src",
+ "label": "VolSync Source (Backup)",
+ "description": "VolSYnc Source is the location where data is the sender and creates backups to storage",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "variable": "enabled",
+ "label": "Enable",
+ "schema": {
+ "type": "boolean",
+ "default": true
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "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\nsmb: connect to an SMB share\nnfs: connect to an NFS share\n",
+ "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": "SecurityContext",
+ "label": "Security Context",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "variable": "container",
+ "label": "Container",
+ "schema": {
+ "additional_attrs": true,
+ "type": "dict",
+ "attrs": [
+ {
+ "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 this App of the user running the application",
+ "schema": {
+ "type": "int",
+ "default": 568
+ }
+ },
+ {
+ "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"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "variable": "fsGroup",
+ "label": "fsGroup",
+ "description": "The group that should own ALL storage.",
+ "schema": {
+ "type": "int",
+ "default": 568
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "variable": "resources",
+ "group": "Resources",
+ "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": "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": "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": "apiKey",
+ "label": "Sabnzbd API key",
+ "description": "Can be found in the Bazarr settings",
+ "schema": {
+ "type": "string",
+ "default": "",
+ "required": true
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "variable": "networkPolicy",
+ "group": "Experimental",
+ "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"
+ ],
+ "enum": [
+ {
+ "value": null,
+ "description": "No Certificate"
+ }
+ ],
+ "default": null,
+ "null": true
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "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
+ }
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "app_readme": "
Free and easy binary newsreader
\n
This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/sabnzbd
\n
\n
TrueCharts can only exist due to the incredible effort of our staff.\nPlease consider making a donation or contributing back to the project any way you can!
",
+ "detailed_readme": "
\n
title: README
\n
General Info
\n
TrueCharts can be installed as both normal Helm Charts or as TrueNAS SCALE Apps.\nBoth solutions are fully supported, but we heavily advice the use of normal Helm Charts where possible
\n
For more information about this Chart, please check the docs on the TrueCharts website
\n
This chart is not maintained by the upstream project and any issues with the chart should be raised here
\n
Installation
\n
Helm-Chart installation
\n
To install TrueCharts Helm charts using Helm, you can use our OCI Repository.
\n
helm install mychart oci://tccr.io/truecharts/CHARTNAME
\n
For more information on how to install TrueCharts Helm charts, checkout the instructions on the website: https://truecharts.org/helm/
\n
TrueNAS SCALE Apps
\n
For more information on how to use TrueCharts as TrueNAS SCALE Apps, please checkout the quick-start guides for TrueNAS SCALE.
\n
Chart Specific Guides and information
\n
All our charts have dedicated documentation pages.\nThe documentation for this chart can be found here:\nhttps://truecharts.org/charts/stable/sabnzbd
\n
Configuration Options
\n
Please note: For TrueNAS SCALE, only options available in the GUI are supported.\nHence most of these docs do not apply to TrueNAS SCALE
\n
To view the chart specific options, please view Values.yaml included in the chart.\nThe most recent version of which, is available here: https://github.com/truecharts/charts/charts/stable/sabnzbd/values.yaml
\n
All our Charts use a shared \"common\" library chart that contains most of the templating and options.\nFor the complete overview of all available options, please checkout the documentation for them on the website: https://truecharts.org/common/
\n
For information about the common chart and all defaults included with it, please review its values.yaml file available here: https://github.com/truecharts/library-charts/blob/main/library/common/values.yaml
\n
Support
\n
\n
\n
Sponsor TrueCharts
\n
TrueCharts can only exist due to the incredible effort of our staff.\nPlease consider making a donation or contributing back to the project any way you can!
\n
All Rights Reserved - The TrueCharts Project
",
+ "changelog": "
for the complete changelog, please refer to the website
\n
Important:
"
+ },
"20.3.1": {
"healthy": true,
"supported": true,