From fee02c250e91f4ef78a8b1205983169b6ca74de9 Mon Sep 17 00:00:00 2001 From: boxing Date: Wed, 13 Nov 2024 19:09:17 -0800 Subject: [PATCH] I THIK I DID IT YAY --- catalog.json | 179 +- .../ix-source/.github/workflows/ci.yml | 34 - .../.github/workflows/docker_image.yml | 28 - .../ix-source/.github/workflows/lint.yml | 21 - .../ix-source/.github/workflows/test.yaml | 27 - catalog_validation/ix-source/.gitignore | 2 - catalog_validation/ix-source/Dockerfile | 23 - catalog_validation/ix-source/LICENSE | 674 - catalog_validation/ix-source/README.md | 2 - .../ix-source/catalog_validation/__init__.py | 0 .../catalog_validation/ci/__init__.py | 0 .../ix-source/catalog_validation/ci/utils.py | 54 - .../catalog_validation/ci/validate.py | 96 - .../catalog_validation/exceptions.py | 67 - .../ix-source/catalog_validation/git_utils.py | 42 - .../catalog_validation/items/__init__.py | 0 .../catalog_validation/items/catalog.py | 83 - .../catalog_validation/items/features.py | 19 - .../catalog_validation/items/items_util.py | 216 - .../items/ix_values_utils.py | 58 - .../items/questions_utils.py | 186 - .../catalog_validation/items/utils.py | 243 - .../items/validate_utils.py | 9 - .../catalog_validation/k8s/__init__.py | 0 .../catalog_validation/k8s/api_client.py | 15 - .../ix-source/catalog_validation/k8s/utils.py | 1 - .../pytest/requirements.txt | 2 - .../pytest/unit/test_catalog_validate.py | 368 - .../pytest/unit/test_items_util.py | 107 - .../pytest/unit/test_normalise_questions.py | 321 - .../pytest/unit/test_schema.py | 577 - .../pytest/unit/test_util.py | 17 - .../pytest/unit/test_validate_ix_values.py | 94 - .../pytest/unit/test_validation_utils.py | 104 - .../catalog_validation/schema/__init__.py | 0 .../catalog_validation/schema/attrs.py | 282 - .../catalog_validation/schema/feature_gen.py | 4 - .../catalog_validation/schema/features.py | 158 - .../schema/migration_schema.py | 42 - .../catalog_validation/schema/schema_gen.py | 43 - .../catalog_validation/schema/variable.py | 37 - .../catalog_validation/schema/variable_gen.py | 3 - .../catalog_validation/scripts/__init__.py | 0 .../scripts/catalog_update.py | 171 - .../scripts/catalog_validate.py | 39 - .../scripts/dev_apps_validate.py | 28 - .../ix-source/catalog_validation/utils.py | 225 - .../catalog_validation/validation.py | 459 - .../catalog_validation/validation_utils.py | 94 - catalog_validation/ix-source/debian/changelog | 5 - catalog_validation/ix-source/debian/control | 27 - catalog_validation/ix-source/debian/rules | 7 - .../ix-source/debian/source/format | 1 - .../ix-source/debian/source/options | 1 - catalog_validation/ix-source/requirements.txt | 6 - catalog_validation/ix-source/setup.cfg | 2 - catalog_validation/ix-source/setup.py | 21 - .../truecharts-fork/.github/workflows/ci.yml | 34 - .../.github/workflows/containers.build.yaml | 180 - .../.github/workflows/lint.yml | 21 - .../.github/workflows/test.yaml | 24 - catalog_validation/truecharts-fork/.gitignore | 2 - catalog_validation/truecharts-fork/Dockerfile | 24 - catalog_validation/truecharts-fork/LICENSE | 674 - catalog_validation/truecharts-fork/README.md | 2 - .../catalog_validation/__init__.py | 0 .../catalog_validation/ci/__init__.py | 0 .../catalog_validation/ci/utils.py | 54 - .../catalog_validation/ci/validate.py | 96 - .../catalog_validation/exceptions.py | 67 - .../catalog_validation/git_utils.py | 42 - .../catalog_validation/items/__init__.py | 0 .../catalog_validation/items/catalog.py | 83 - .../catalog_validation/items/features.py | 19 - .../catalog_validation/items/items_util.py | 214 - .../items/ix_values_utils.py | 58 - .../items/questions_utils.py | 186 - .../catalog_validation/items/utils.py | 223 - .../items/validate_utils.py | 9 - .../catalog_validation/k8s/__init__.py | 0 .../catalog_validation/k8s/api_client.py | 15 - .../catalog_validation/k8s/utils.py | 1 - .../pytest/requirements.txt | 2 - .../pytest/unit/test_catalog_validate.py | 367 - .../pytest/unit/test_items_util.py | 107 - .../pytest/unit/test_normalise_questions.py | 321 - .../pytest/unit/test_schema.py | 577 - .../pytest/unit/test_validate_ix_values.py | 94 - .../catalog_validation/schema/__init__.py | 0 .../catalog_validation/schema/attrs.py | 262 - .../catalog_validation/schema/feature_gen.py | 4 - .../catalog_validation/schema/features.py | 158 - .../schema/migration_schema.py | 42 - .../catalog_validation/schema/schema_gen.py | 41 - .../catalog_validation/schema/variable.py | 37 - .../catalog_validation/schema/variable_gen.py | 3 - .../catalog_validation/scripts/__init__.py | 0 .../scripts/catalog_update.py | 171 - .../scripts/catalog_validate.py | 40 - .../scripts/dev_apps_validate.py | 28 - .../catalog_validation/utils.py | 223 - .../catalog_validation/validation.py | 459 - .../catalog_validation/validation_utils.py | 66 - .../truecharts-fork/debian/changelog | 5 - .../truecharts-fork/debian/control | 27 - .../truecharts-fork/debian/rules | 7 - .../truecharts-fork/debian/source/format | 1 - .../truecharts-fork/debian/source/options | 1 - .../truecharts-fork/requirements.txt | 6 - catalog_validation/truecharts-fork/setup.cfg | 2 - catalog_validation/truecharts-fork/setup.py | 21 - github/label-commenter-config.yml | 35 - github/stale.yml | 32 - .../workflows/metadata-label-commenter.yaml | 32 - github/workflows/metadata-label-pr.yaml | 33 - github/workflows/prune.yaml | 49 - github/workflows/schedule-sync-labels.yaml | 25 - github/workflows/stale.yaml | 38 - premium/vaultwarden/app_versions.json | 48 +- stable/lidarr/19.2.0/.helmignore | 30 - stable/lidarr/19.2.0/CHANGELOG.md | 99 - stable/lidarr/19.2.0/Chart.yaml | 38 - stable/lidarr/19.2.0/README.md | 28 - stable/lidarr/19.2.0/app-readme.md | 8 - stable/lidarr/19.2.0/charts/common-17.4.2.tgz | Bin 100097 -> 0 bytes stable/lidarr/19.2.0/ix_values.yaml | 109 - stable/lidarr/19.2.0/questions.yaml | 2927 -- stable/lidarr/19.2.0/templates/NOTES.txt | 1 - stable/lidarr/19.2.0/templates/common.yaml | 11 - stable/lidarr/19.2.0/values.yaml | 0 stable/lidarr/19.3.0/.helmignore | 30 - stable/lidarr/19.3.0/CHANGELOG.md | 100 - stable/lidarr/19.3.0/Chart.yaml | 38 - stable/lidarr/19.3.0/README.md | 28 - stable/lidarr/19.3.0/app-readme.md | 8 - stable/lidarr/19.3.0/charts/common-17.5.0.tgz | Bin 100452 -> 0 bytes stable/lidarr/19.3.0/ix_values.yaml | 109 - stable/lidarr/19.3.0/questions.yaml | 2927 -- stable/lidarr/19.3.0/templates/NOTES.txt | 1 - stable/lidarr/19.3.0/templates/common.yaml | 11 - stable/lidarr/19.3.0/values.yaml | 0 stable/lidarr/20.3.0/.helmignore | 30 - stable/lidarr/20.3.0/CHANGELOG.md | 99 - stable/lidarr/20.3.0/Chart.yaml | 38 - stable/lidarr/20.3.0/README.md | 28 - stable/lidarr/20.3.0/app-readme.md | 8 - stable/lidarr/20.3.0/charts/common-18.1.2.tgz | Bin 99288 -> 0 bytes stable/lidarr/20.3.0/ix_values.yaml | 109 - stable/lidarr/20.3.0/questions.yaml | 2899 -- stable/lidarr/20.3.0/templates/NOTES.txt | 1 - stable/lidarr/20.3.0/templates/common.yaml | 11 - stable/lidarr/20.3.0/values.yaml | 0 stable/lidarr/20.3.1/.helmignore | 30 - stable/lidarr/20.3.1/CHANGELOG.md | 99 - stable/lidarr/20.3.1/Chart.yaml | 38 - stable/lidarr/20.3.1/README.md | 28 - stable/lidarr/20.3.1/app-readme.md | 8 - stable/lidarr/20.3.1/charts/common-18.1.2.tgz | Bin 99288 -> 0 bytes stable/lidarr/20.3.1/ix_values.yaml | 109 - stable/lidarr/20.3.1/questions.yaml | 2899 -- stable/lidarr/20.3.1/templates/NOTES.txt | 1 - stable/lidarr/20.3.1/templates/common.yaml | 11 - stable/lidarr/20.3.1/values.yaml | 0 stable/lidarr/21.6.16/.helmignore | 30 - stable/lidarr/21.6.16/CHANGELOG.md | 3 - stable/lidarr/21.6.16/Chart.yaml | 38 - stable/lidarr/21.6.16/README.md | 56 - stable/lidarr/21.6.16/app-changelog.md | 71 - stable/lidarr/21.6.16/app-readme.md | 8 - .../lidarr/21.6.16/charts/common-20.3.11.tgz | Bin 99404 -> 0 bytes stable/lidarr/21.6.16/icon-small.webp | Bin 784 -> 0 bytes stable/lidarr/21.6.16/icon.webp | Bin 4390 -> 0 bytes stable/lidarr/21.6.16/ix_values.yaml | 109 - stable/lidarr/21.6.16/questions.yaml | 3021 -- stable/lidarr/21.6.16/templates/NOTES.txt | 1 - stable/lidarr/21.6.16/templates/common.yaml | 11 - stable/lidarr/21.6.16/values.yaml | 0 stable/lidarr/21.6.17/.helmignore | 30 - stable/lidarr/21.6.17/CHANGELOG.md | 3 - stable/lidarr/21.6.17/Chart.yaml | 38 - stable/lidarr/21.6.17/README.md | 56 - stable/lidarr/21.6.17/app-changelog.md | 73 - stable/lidarr/21.6.17/app-readme.md | 8 - .../lidarr/21.6.17/charts/common-20.3.12.tgz | Bin 99407 -> 0 bytes stable/lidarr/21.6.17/icon-small.webp | Bin 784 -> 0 bytes stable/lidarr/21.6.17/icon.webp | Bin 4390 -> 0 bytes stable/lidarr/21.6.17/ix_values.yaml | 109 - stable/lidarr/21.6.17/questions.yaml | 3021 -- stable/lidarr/21.6.17/templates/NOTES.txt | 1 - stable/lidarr/21.6.17/templates/common.yaml | 11 - stable/lidarr/21.6.17/values.yaml | 0 stable/lidarr/app_versions.json | 30338 +------------ stable/plex/16.3.0/.helmignore | 30 - stable/plex/16.3.0/CHANGELOG.md | 99 - stable/plex/16.3.0/Chart.yaml | 36 - stable/plex/16.3.0/README.md | 28 - stable/plex/16.3.0/app-readme.md | 8 - stable/plex/16.3.0/charts/common-17.4.2.tgz | Bin 100097 -> 0 bytes stable/plex/16.3.0/ix_values.yaml | 52 - stable/plex/16.3.0/questions.yaml | 2926 -- stable/plex/16.3.0/templates/NOTES.txt | 1 - stable/plex/16.3.0/templates/common.yaml | 53 - stable/plex/16.3.0/values.yaml | 0 stable/plex/16.4.0/.helmignore | 30 - stable/plex/16.4.0/CHANGELOG.md | 100 - stable/plex/16.4.0/Chart.yaml | 36 - stable/plex/16.4.0/README.md | 28 - stable/plex/16.4.0/app-readme.md | 8 - stable/plex/16.4.0/charts/common-17.5.0.tgz | Bin 100452 -> 0 bytes stable/plex/16.4.0/ix_values.yaml | 52 - stable/plex/16.4.0/questions.yaml | 2926 -- stable/plex/16.4.0/templates/NOTES.txt | 1 - stable/plex/16.4.0/templates/common.yaml | 53 - stable/plex/16.4.0/values.yaml | 0 stable/plex/17.8.17/.helmignore | 30 - stable/plex/17.8.17/CHANGELOG.md | 3 - stable/plex/17.8.17/Chart.yaml | 36 - stable/plex/17.8.17/README.md | 56 - stable/plex/17.8.17/app-changelog.md | 65 - stable/plex/17.8.17/app-readme.md | 8 - stable/plex/17.8.17/charts/common-20.3.11.tgz | Bin 99404 -> 0 bytes stable/plex/17.8.17/icon-small.webp | Bin 234 -> 0 bytes stable/plex/17.8.17/icon.webp | Bin 762 -> 0 bytes stable/plex/17.8.17/ix_values.yaml | 52 - stable/plex/17.8.17/questions.yaml | 3020 -- stable/plex/17.8.17/templates/NOTES.txt | 1 - stable/plex/17.8.17/templates/common.yaml | 53 - stable/plex/17.8.17/values.yaml | 0 stable/plex/17.8.18/.helmignore | 30 - stable/plex/17.8.18/CHANGELOG.md | 3 - stable/plex/17.8.18/Chart.yaml | 36 - stable/plex/17.8.18/README.md | 56 - stable/plex/17.8.18/app-changelog.md | 67 - stable/plex/17.8.18/app-readme.md | 8 - stable/plex/17.8.18/charts/common-20.3.12.tgz | Bin 99407 -> 0 bytes stable/plex/17.8.18/icon-small.webp | Bin 234 -> 0 bytes stable/plex/17.8.18/icon.webp | Bin 762 -> 0 bytes stable/plex/17.8.18/ix_values.yaml | 52 - stable/plex/17.8.18/questions.yaml | 3020 -- stable/plex/17.8.18/templates/NOTES.txt | 1 - stable/plex/17.8.18/templates/common.yaml | 53 - stable/plex/17.8.18/values.yaml | 0 stable/plex/18.0.11/.helmignore | 32 - stable/plex/18.0.11/CHANGELOG.md | 3 - stable/plex/18.0.11/Chart.yaml | 34 - stable/plex/18.0.11/README.md | 61 - stable/plex/18.0.11/app-readme.md | 8 - stable/plex/18.0.11/charts/common-23.0.9.tgz | Bin 96899 -> 0 bytes stable/plex/18.0.11/icon-small.webp | Bin 234 -> 0 bytes stable/plex/18.0.11/icon.webp | Bin 762 -> 0 bytes stable/plex/18.0.11/ix_values.yaml | 52 - stable/plex/18.0.11/questions.yaml | 3213 -- stable/plex/18.0.11/templates/NOTES.txt | 1 - stable/plex/18.0.11/templates/common.yaml | 65 - stable/plex/18.0.11/values.yaml | 0 stable/plex/app_versions.json | 25571 +---------- stable/prowlarr/14.4.0/.helmignore | 30 - stable/prowlarr/14.4.0/CHANGELOG.md | 99 - stable/prowlarr/14.4.0/Chart.yaml | 39 - stable/prowlarr/14.4.0/README.md | 28 - stable/prowlarr/14.4.0/app-readme.md | 8 - .../prowlarr/14.4.0/charts/common-17.4.2.tgz | Bin 100097 -> 0 bytes stable/prowlarr/14.4.0/ix_values.yaml | 107 - stable/prowlarr/14.4.0/questions.yaml | 2927 -- stable/prowlarr/14.4.0/templates/NOTES.txt | 1 - stable/prowlarr/14.4.0/templates/common.yaml | 11 - stable/prowlarr/14.4.0/values.yaml | 0 stable/prowlarr/14.5.0/.helmignore | 30 - stable/prowlarr/14.5.0/CHANGELOG.md | 100 - stable/prowlarr/14.5.0/Chart.yaml | 39 - stable/prowlarr/14.5.0/README.md | 28 - stable/prowlarr/14.5.0/app-readme.md | 8 - .../prowlarr/14.5.0/charts/common-17.5.0.tgz | Bin 100452 -> 0 bytes stable/prowlarr/14.5.0/ix_values.yaml | 107 - stable/prowlarr/14.5.0/questions.yaml | 2927 -- stable/prowlarr/14.5.0/templates/NOTES.txt | 1 - stable/prowlarr/14.5.0/templates/common.yaml | 11 - stable/prowlarr/14.5.0/values.yaml | 0 stable/prowlarr/15.4.0/.helmignore | 30 - stable/prowlarr/15.4.0/CHANGELOG.md | 100 - stable/prowlarr/15.4.0/Chart.yaml | 39 - stable/prowlarr/15.4.0/README.md | 28 - stable/prowlarr/15.4.0/app-readme.md | 8 - .../prowlarr/15.4.0/charts/common-18.1.2.tgz | Bin 99288 -> 0 bytes stable/prowlarr/15.4.0/dashboard.json | 1612 - stable/prowlarr/15.4.0/ix_values.yaml | 115 - stable/prowlarr/15.4.0/questions.yaml | 2899 -- stable/prowlarr/15.4.0/templates/NOTES.txt | 1 - stable/prowlarr/15.4.0/templates/common.yaml | 11 - stable/prowlarr/15.4.0/values.yaml | 0 stable/prowlarr/15.4.1/.helmignore | 30 - stable/prowlarr/15.4.1/CHANGELOG.md | 99 - stable/prowlarr/15.4.1/Chart.yaml | 39 - stable/prowlarr/15.4.1/README.md | 28 - stable/prowlarr/15.4.1/app-readme.md | 8 - .../prowlarr/15.4.1/charts/common-18.1.2.tgz | Bin 99288 -> 0 bytes stable/prowlarr/15.4.1/dashboard.json | 1612 - stable/prowlarr/15.4.1/ix_values.yaml | 115 - stable/prowlarr/15.4.1/questions.yaml | 2899 -- stable/prowlarr/15.4.1/templates/NOTES.txt | 1 - stable/prowlarr/15.4.1/templates/common.yaml | 11 - stable/prowlarr/15.4.1/values.yaml | 0 stable/prowlarr/16.8.10/.helmignore | 30 - stable/prowlarr/16.8.10/CHANGELOG.md | 3 - stable/prowlarr/16.8.10/Chart.yaml | 39 - stable/prowlarr/16.8.10/README.md | 56 - stable/prowlarr/16.8.10/app-changelog.md | 77 - stable/prowlarr/16.8.10/app-readme.md | 8 - .../16.8.10/charts/common-20.3.11.tgz | Bin 99404 -> 0 bytes stable/prowlarr/16.8.10/dashboard.json | 1612 - stable/prowlarr/16.8.10/icon-small.webp | Bin 698 -> 0 bytes stable/prowlarr/16.8.10/icon.webp | Bin 4794 -> 0 bytes stable/prowlarr/16.8.10/ix_values.yaml | 115 - stable/prowlarr/16.8.10/questions.yaml | 3021 -- stable/prowlarr/16.8.10/templates/NOTES.txt | 1 - stable/prowlarr/16.8.10/templates/common.yaml | 11 - stable/prowlarr/16.8.10/values.yaml | 0 stable/prowlarr/16.8.11/.helmignore | 30 - stable/prowlarr/16.8.11/CHANGELOG.md | 3 - stable/prowlarr/16.8.11/Chart.yaml | 39 - stable/prowlarr/16.8.11/README.md | 56 - stable/prowlarr/16.8.11/app-changelog.md | 79 - stable/prowlarr/16.8.11/app-readme.md | 8 - .../16.8.11/charts/common-20.3.12.tgz | Bin 99407 -> 0 bytes stable/prowlarr/16.8.11/dashboard.json | 1612 - stable/prowlarr/16.8.11/icon-small.webp | Bin 698 -> 0 bytes stable/prowlarr/16.8.11/icon.webp | Bin 4794 -> 0 bytes stable/prowlarr/16.8.11/ix_values.yaml | 115 - stable/prowlarr/16.8.11/questions.yaml | 3021 -- stable/prowlarr/16.8.11/templates/NOTES.txt | 1 - stable/prowlarr/16.8.11/templates/common.yaml | 11 - stable/prowlarr/16.8.11/values.yaml | 0 stable/prowlarr/17.1.6/.helmignore | 32 - stable/prowlarr/17.1.6/CHANGELOG.md | 3 - stable/prowlarr/17.1.6/Chart.yaml | 37 - stable/prowlarr/17.1.6/README.md | 61 - stable/prowlarr/17.1.6/app-readme.md | 8 - .../prowlarr/17.1.6/charts/common-23.0.9.tgz | Bin 96899 -> 0 bytes stable/prowlarr/17.1.6/dashboard.json | 1612 - stable/prowlarr/17.1.6/icon-small.webp | Bin 698 -> 0 bytes stable/prowlarr/17.1.6/icon.webp | Bin 4794 -> 0 bytes stable/prowlarr/17.1.6/ix_values.yaml | 115 - stable/prowlarr/17.1.6/questions.yaml | 3214 -- stable/prowlarr/17.1.6/templates/NOTES.txt | 1 - stable/prowlarr/17.1.6/templates/common.yaml | 11 - stable/prowlarr/17.1.6/values.yaml | 0 stable/prowlarr/app_versions.json | 35714 +--------------- stable/radarr/19.3.0/.helmignore | 30 - stable/radarr/19.3.0/CHANGELOG.md | 99 - stable/radarr/19.3.0/Chart.yaml | 38 - stable/radarr/19.3.0/README.md | 28 - stable/radarr/19.3.0/app-readme.md | 8 - stable/radarr/19.3.0/charts/common-17.4.2.tgz | Bin 100097 -> 0 bytes stable/radarr/19.3.0/ix_values.yaml | 108 - stable/radarr/19.3.0/questions.yaml | 2927 -- stable/radarr/19.3.0/templates/NOTES.txt | 1 - stable/radarr/19.3.0/templates/common.yaml | 11 - stable/radarr/19.3.0/values.yaml | 0 stable/radarr/19.4.0/.helmignore | 30 - stable/radarr/19.4.0/CHANGELOG.md | 99 - stable/radarr/19.4.0/Chart.yaml | 38 - stable/radarr/19.4.0/README.md | 28 - stable/radarr/19.4.0/app-readme.md | 8 - stable/radarr/19.4.0/charts/common-17.5.0.tgz | Bin 100452 -> 0 bytes stable/radarr/19.4.0/ix_values.yaml | 108 - stable/radarr/19.4.0/questions.yaml | 2927 -- stable/radarr/19.4.0/templates/NOTES.txt | 1 - stable/radarr/19.4.0/templates/common.yaml | 11 - stable/radarr/19.4.0/values.yaml | 0 stable/radarr/20.2.0/.helmignore | 30 - stable/radarr/20.2.0/CHANGELOG.md | 99 - stable/radarr/20.2.0/Chart.yaml | 38 - stable/radarr/20.2.0/README.md | 28 - stable/radarr/20.2.0/app-readme.md | 8 - stable/radarr/20.2.0/charts/common-18.1.2.tgz | Bin 99288 -> 0 bytes stable/radarr/20.2.0/ix_values.yaml | 108 - stable/radarr/20.2.0/questions.yaml | 2899 -- stable/radarr/20.2.0/templates/NOTES.txt | 1 - stable/radarr/20.2.0/templates/common.yaml | 11 - stable/radarr/20.2.0/values.yaml | 0 stable/radarr/20.2.1/.helmignore | 30 - stable/radarr/20.2.1/CHANGELOG.md | 100 - stable/radarr/20.2.1/Chart.yaml | 38 - stable/radarr/20.2.1/README.md | 28 - stable/radarr/20.2.1/app-readme.md | 8 - stable/radarr/20.2.1/charts/common-18.1.2.tgz | Bin 99288 -> 0 bytes stable/radarr/20.2.1/ix_values.yaml | 108 - stable/radarr/20.2.1/questions.yaml | 2899 -- stable/radarr/20.2.1/templates/NOTES.txt | 1 - stable/radarr/20.2.1/templates/common.yaml | 11 - stable/radarr/20.2.1/values.yaml | 0 stable/radarr/21.7.10/.helmignore | 30 - stable/radarr/21.7.10/CHANGELOG.md | 3 - stable/radarr/21.7.10/Chart.yaml | 38 - stable/radarr/21.7.10/README.md | 56 - stable/radarr/21.7.10/app-changelog.md | 67 - stable/radarr/21.7.10/app-readme.md | 8 - .../radarr/21.7.10/charts/common-20.3.11.tgz | Bin 99404 -> 0 bytes stable/radarr/21.7.10/icon-small.webp | Bin 764 -> 0 bytes stable/radarr/21.7.10/icon.webp | Bin 5224 -> 0 bytes stable/radarr/21.7.10/ix_values.yaml | 108 - stable/radarr/21.7.10/questions.yaml | 3021 -- stable/radarr/21.7.10/templates/NOTES.txt | 1 - stable/radarr/21.7.10/templates/common.yaml | 11 - stable/radarr/21.7.10/values.yaml | 0 stable/radarr/21.7.11/.helmignore | 30 - stable/radarr/21.7.11/CHANGELOG.md | 3 - stable/radarr/21.7.11/Chart.yaml | 38 - stable/radarr/21.7.11/README.md | 56 - stable/radarr/21.7.11/app-changelog.md | 69 - stable/radarr/21.7.11/app-readme.md | 8 - .../radarr/21.7.11/charts/common-20.3.12.tgz | Bin 99407 -> 0 bytes stable/radarr/21.7.11/icon-small.webp | Bin 764 -> 0 bytes stable/radarr/21.7.11/icon.webp | Bin 5224 -> 0 bytes stable/radarr/21.7.11/ix_values.yaml | 108 - stable/radarr/21.7.11/questions.yaml | 3021 -- stable/radarr/21.7.11/templates/NOTES.txt | 1 - stable/radarr/21.7.11/templates/common.yaml | 11 - stable/radarr/21.7.11/values.yaml | 0 stable/radarr/22.2.3/.helmignore | 32 - stable/radarr/22.2.3/CHANGELOG.md | 3 - stable/radarr/22.2.3/Chart.yaml | 36 - stable/radarr/22.2.3/README.md | 61 - stable/radarr/22.2.3/app-readme.md | 8 - stable/radarr/22.2.3/charts/common-23.0.9.tgz | Bin 96899 -> 0 bytes stable/radarr/22.2.3/icon-small.webp | Bin 764 -> 0 bytes stable/radarr/22.2.3/icon.webp | Bin 5224 -> 0 bytes stable/radarr/22.2.3/ix_values.yaml | 108 - stable/radarr/22.2.3/questions.yaml | 3214 -- stable/radarr/22.2.3/templates/NOTES.txt | 1 - stable/radarr/22.2.3/templates/common.yaml | 11 - stable/radarr/22.2.3/values.yaml | 0 stable/radarr/23.2.0/Chart.yaml | 2 +- stable/radarr/app_versions.json | 35705 +-------------- stable/readarr/19.2.0/.helmignore | 30 - stable/readarr/19.2.0/CHANGELOG.md | 99 - stable/readarr/19.2.0/Chart.yaml | 41 - stable/readarr/19.2.0/README.md | 28 - stable/readarr/19.2.0/app-readme.md | 8 - .../readarr/19.2.0/charts/common-17.4.2.tgz | Bin 100097 -> 0 bytes stable/readarr/19.2.0/ix_values.yaml | 109 - stable/readarr/19.2.0/questions.yaml | 2927 -- stable/readarr/19.2.0/templates/NOTES.txt | 1 - stable/readarr/19.2.0/templates/common.yaml | 11 - stable/readarr/19.2.0/values.yaml | 0 stable/readarr/19.3.0/.helmignore | 30 - stable/readarr/19.3.0/CHANGELOG.md | 100 - stable/readarr/19.3.0/Chart.yaml | 41 - stable/readarr/19.3.0/README.md | 28 - stable/readarr/19.3.0/app-readme.md | 8 - .../readarr/19.3.0/charts/common-17.5.0.tgz | Bin 100452 -> 0 bytes stable/readarr/19.3.0/ix_values.yaml | 109 - stable/readarr/19.3.0/questions.yaml | 2927 -- stable/readarr/19.3.0/templates/NOTES.txt | 1 - stable/readarr/19.3.0/templates/common.yaml | 11 - stable/readarr/19.3.0/values.yaml | 0 stable/readarr/20.1.3/.helmignore | 30 - stable/readarr/20.1.3/CHANGELOG.md | 99 - stable/readarr/20.1.3/Chart.yaml | 41 - stable/readarr/20.1.3/README.md | 28 - stable/readarr/20.1.3/app-readme.md | 8 - .../readarr/20.1.3/charts/common-18.0.3.tgz | Bin 98756 -> 0 bytes stable/readarr/20.1.3/ix_values.yaml | 109 - stable/readarr/20.1.3/questions.yaml | 2899 -- stable/readarr/20.1.3/templates/NOTES.txt | 1 - stable/readarr/20.1.3/templates/common.yaml | 11 - stable/readarr/20.1.3/values.yaml | 0 stable/readarr/20.2.0/.helmignore | 30 - stable/readarr/20.2.0/CHANGELOG.md | 100 - stable/readarr/20.2.0/Chart.yaml | 41 - stable/readarr/20.2.0/README.md | 28 - stable/readarr/20.2.0/app-readme.md | 8 - .../readarr/20.2.0/charts/common-18.1.2.tgz | Bin 99288 -> 0 bytes stable/readarr/20.2.0/ix_values.yaml | 109 - stable/readarr/20.2.0/questions.yaml | 2899 -- stable/readarr/20.2.0/templates/NOTES.txt | 1 - stable/readarr/20.2.0/templates/common.yaml | 11 - stable/readarr/20.2.0/values.yaml | 0 stable/readarr/21.6.17/.helmignore | 30 - stable/readarr/21.6.17/CHANGELOG.md | 3 - stable/readarr/21.6.17/Chart.yaml | 41 - stable/readarr/21.6.17/README.md | 56 - stable/readarr/21.6.17/app-changelog.md | 73 - stable/readarr/21.6.17/app-readme.md | 8 - .../readarr/21.6.17/charts/common-20.3.11.tgz | Bin 99404 -> 0 bytes stable/readarr/21.6.17/icon-small.webp | Bin 686 -> 0 bytes stable/readarr/21.6.17/icon.webp | Bin 4742 -> 0 bytes stable/readarr/21.6.17/ix_values.yaml | 109 - stable/readarr/21.6.17/questions.yaml | 3021 -- stable/readarr/21.6.17/templates/NOTES.txt | 1 - stable/readarr/21.6.17/templates/common.yaml | 11 - stable/readarr/21.6.17/values.yaml | 0 stable/readarr/21.6.18/.helmignore | 30 - stable/readarr/21.6.18/CHANGELOG.md | 3 - stable/readarr/21.6.18/Chart.yaml | 41 - stable/readarr/21.6.18/README.md | 56 - stable/readarr/21.6.18/app-changelog.md | 75 - stable/readarr/21.6.18/app-readme.md | 8 - .../readarr/21.6.18/charts/common-20.3.12.tgz | Bin 99407 -> 0 bytes stable/readarr/21.6.18/icon-small.webp | Bin 686 -> 0 bytes stable/readarr/21.6.18/icon.webp | Bin 4742 -> 0 bytes stable/readarr/21.6.18/ix_values.yaml | 109 - stable/readarr/21.6.18/questions.yaml | 3021 -- stable/readarr/21.6.18/templates/NOTES.txt | 1 - stable/readarr/21.6.18/templates/common.yaml | 11 - stable/readarr/21.6.18/values.yaml | 0 stable/readarr/app_versions.json | 30356 +------------ stable/sabnzbd/17.3.2/.helmignore | 30 - stable/sabnzbd/17.3.2/CHANGELOG.md | 100 - stable/sabnzbd/17.3.2/Chart.yaml | 37 - stable/sabnzbd/17.3.2/README.md | 28 - stable/sabnzbd/17.3.2/app-readme.md | 8 - .../sabnzbd/17.3.2/charts/common-17.4.2.tgz | Bin 100097 -> 0 bytes stable/sabnzbd/17.3.2/ix_values.yaml | 89 - stable/sabnzbd/17.3.2/questions.yaml | 2910 -- stable/sabnzbd/17.3.2/templates/NOTES.txt | 1 - stable/sabnzbd/17.3.2/templates/common.yaml | 1 - stable/sabnzbd/17.3.2/values.yaml | 0 stable/sabnzbd/17.4.0/.helmignore | 30 - stable/sabnzbd/17.4.0/CHANGELOG.md | 99 - stable/sabnzbd/17.4.0/Chart.yaml | 37 - stable/sabnzbd/17.4.0/README.md | 28 - stable/sabnzbd/17.4.0/app-readme.md | 8 - .../sabnzbd/17.4.0/charts/common-17.5.0.tgz | Bin 100452 -> 0 bytes stable/sabnzbd/17.4.0/ix_values.yaml | 89 - stable/sabnzbd/17.4.0/questions.yaml | 2910 -- stable/sabnzbd/17.4.0/templates/NOTES.txt | 1 - stable/sabnzbd/17.4.0/templates/common.yaml | 1 - stable/sabnzbd/17.4.0/values.yaml | 0 stable/sabnzbd/18.1.3/.helmignore | 30 - stable/sabnzbd/18.1.3/CHANGELOG.md | 100 - stable/sabnzbd/18.1.3/Chart.yaml | 37 - stable/sabnzbd/18.1.3/README.md | 28 - stable/sabnzbd/18.1.3/app-readme.md | 8 - .../sabnzbd/18.1.3/charts/common-18.0.3.tgz | Bin 98756 -> 0 bytes stable/sabnzbd/18.1.3/ix_values.yaml | 89 - stable/sabnzbd/18.1.3/questions.yaml | 2882 -- stable/sabnzbd/18.1.3/templates/NOTES.txt | 1 - stable/sabnzbd/18.1.3/templates/common.yaml | 1 - stable/sabnzbd/18.1.3/values.yaml | 0 stable/sabnzbd/18.2.0/.helmignore | 30 - stable/sabnzbd/18.2.0/CHANGELOG.md | 99 - stable/sabnzbd/18.2.0/Chart.yaml | 37 - stable/sabnzbd/18.2.0/README.md | 28 - stable/sabnzbd/18.2.0/app-readme.md | 8 - .../sabnzbd/18.2.0/charts/common-18.1.2.tgz | Bin 99288 -> 0 bytes stable/sabnzbd/18.2.0/ix_values.yaml | 89 - stable/sabnzbd/18.2.0/questions.yaml | 2882 -- stable/sabnzbd/18.2.0/templates/NOTES.txt | 1 - stable/sabnzbd/18.2.0/templates/common.yaml | 1 - stable/sabnzbd/18.2.0/values.yaml | 0 stable/sabnzbd/19.6.15/.helmignore | 30 - stable/sabnzbd/19.6.15/CHANGELOG.md | 3 - stable/sabnzbd/19.6.15/Chart.yaml | 37 - stable/sabnzbd/19.6.15/README.md | 56 - stable/sabnzbd/19.6.15/app-changelog.md | 63 - stable/sabnzbd/19.6.15/app-readme.md | 8 - .../sabnzbd/19.6.15/charts/common-20.3.11.tgz | Bin 99404 -> 0 bytes stable/sabnzbd/19.6.15/icon-small.webp | Bin 720 -> 0 bytes stable/sabnzbd/19.6.15/icon.webp | Bin 1960 -> 0 bytes stable/sabnzbd/19.6.15/ix_values.yaml | 89 - stable/sabnzbd/19.6.15/questions.yaml | 3004 -- stable/sabnzbd/19.6.15/templates/NOTES.txt | 1 - stable/sabnzbd/19.6.15/templates/common.yaml | 1 - stable/sabnzbd/19.6.15/values.yaml | 0 stable/sabnzbd/19.6.16/.helmignore | 30 - stable/sabnzbd/19.6.16/CHANGELOG.md | 3 - stable/sabnzbd/19.6.16/Chart.yaml | 37 - stable/sabnzbd/19.6.16/README.md | 56 - stable/sabnzbd/19.6.16/app-changelog.md | 65 - stable/sabnzbd/19.6.16/app-readme.md | 8 - .../sabnzbd/19.6.16/charts/common-20.3.12.tgz | Bin 99407 -> 0 bytes stable/sabnzbd/19.6.16/icon-small.webp | Bin 720 -> 0 bytes stable/sabnzbd/19.6.16/icon.webp | Bin 1960 -> 0 bytes stable/sabnzbd/19.6.16/ix_values.yaml | 89 - stable/sabnzbd/19.6.16/questions.yaml | 3004 -- stable/sabnzbd/19.6.16/templates/NOTES.txt | 1 - stable/sabnzbd/19.6.16/templates/common.yaml | 1 - stable/sabnzbd/19.6.16/values.yaml | 0 stable/sabnzbd/app_versions.json | 30164 +------------ stable/sonarr/app_versions.json | 5381 +-- stable/sonarr/rolling/.helmignore | 32 - stable/sonarr/rolling/CHANGELOG.md | 3 - stable/sonarr/rolling/Chart.yaml | 36 - stable/sonarr/rolling/README.md | 61 - stable/sonarr/rolling/app-readme.md | 8 - .../sonarr/rolling/charts/common-23.0.10.tgz | Bin 96939 -> 0 bytes stable/sonarr/rolling/icon-small.webp | Bin 628 -> 0 bytes stable/sonarr/rolling/icon.webp | Bin 3402 -> 0 bytes stable/sonarr/rolling/ix_values.yaml | 106 - stable/sonarr/rolling/questions.yaml | 3214 -- stable/sonarr/rolling/templates/NOTES.txt | 1 - stable/sonarr/rolling/templates/common.yaml | 11 - stable/sonarr/rolling/values.yaml | 0 system/cert-manager/app_versions.json | 30 +- system/cloudnative-pg/app_versions.json | 24 +- .../grafana-agent-operator/app_versions.json | 12 +- system/kubeapps/app_versions.json | 48 +- system/kubernetes-reflector/app_versions.json | 22 +- system/metallb/app_versions.json | 30 +- system/openebs/app_versions.json | 84 +- system/prometheus-operator/app_versions.json | 30 +- system/snapshot-controller/app_versions.json | 10 +- system/traefik-crds/app_versions.json | 28 +- system/velero/app_versions.json | 12 +- system/volsync/app_versions.json | 10 +- system/volumesnapshots/app_versions.json | 16 +- 607 files changed, 367 insertions(+), 336990 deletions(-) delete mode 100644 catalog_validation/ix-source/.github/workflows/ci.yml delete mode 100644 catalog_validation/ix-source/.github/workflows/docker_image.yml delete mode 100644 catalog_validation/ix-source/.github/workflows/lint.yml delete mode 100644 catalog_validation/ix-source/.github/workflows/test.yaml delete mode 100644 catalog_validation/ix-source/.gitignore delete mode 100644 catalog_validation/ix-source/Dockerfile delete mode 100644 catalog_validation/ix-source/LICENSE delete mode 100644 catalog_validation/ix-source/README.md delete mode 100644 catalog_validation/ix-source/catalog_validation/__init__.py delete mode 100644 catalog_validation/ix-source/catalog_validation/ci/__init__.py delete mode 100644 catalog_validation/ix-source/catalog_validation/ci/utils.py delete mode 100644 catalog_validation/ix-source/catalog_validation/ci/validate.py delete mode 100644 catalog_validation/ix-source/catalog_validation/exceptions.py delete mode 100644 catalog_validation/ix-source/catalog_validation/git_utils.py delete mode 100644 catalog_validation/ix-source/catalog_validation/items/__init__.py delete mode 100644 catalog_validation/ix-source/catalog_validation/items/catalog.py delete mode 100644 catalog_validation/ix-source/catalog_validation/items/features.py delete mode 100644 catalog_validation/ix-source/catalog_validation/items/items_util.py delete mode 100644 catalog_validation/ix-source/catalog_validation/items/ix_values_utils.py delete mode 100644 catalog_validation/ix-source/catalog_validation/items/questions_utils.py delete mode 100644 catalog_validation/ix-source/catalog_validation/items/utils.py delete mode 100644 catalog_validation/ix-source/catalog_validation/items/validate_utils.py delete mode 100644 catalog_validation/ix-source/catalog_validation/k8s/__init__.py delete mode 100644 catalog_validation/ix-source/catalog_validation/k8s/api_client.py delete mode 100644 catalog_validation/ix-source/catalog_validation/k8s/utils.py delete mode 100644 catalog_validation/ix-source/catalog_validation/pytest/requirements.txt delete mode 100644 catalog_validation/ix-source/catalog_validation/pytest/unit/test_catalog_validate.py delete mode 100644 catalog_validation/ix-source/catalog_validation/pytest/unit/test_items_util.py delete mode 100644 catalog_validation/ix-source/catalog_validation/pytest/unit/test_normalise_questions.py delete mode 100644 catalog_validation/ix-source/catalog_validation/pytest/unit/test_schema.py delete mode 100644 catalog_validation/ix-source/catalog_validation/pytest/unit/test_util.py delete mode 100644 catalog_validation/ix-source/catalog_validation/pytest/unit/test_validate_ix_values.py delete mode 100644 catalog_validation/ix-source/catalog_validation/pytest/unit/test_validation_utils.py delete mode 100644 catalog_validation/ix-source/catalog_validation/schema/__init__.py delete mode 100644 catalog_validation/ix-source/catalog_validation/schema/attrs.py delete mode 100644 catalog_validation/ix-source/catalog_validation/schema/feature_gen.py delete mode 100644 catalog_validation/ix-source/catalog_validation/schema/features.py delete mode 100644 catalog_validation/ix-source/catalog_validation/schema/migration_schema.py delete mode 100644 catalog_validation/ix-source/catalog_validation/schema/schema_gen.py delete mode 100644 catalog_validation/ix-source/catalog_validation/schema/variable.py delete mode 100644 catalog_validation/ix-source/catalog_validation/schema/variable_gen.py delete mode 100644 catalog_validation/ix-source/catalog_validation/scripts/__init__.py delete mode 100644 catalog_validation/ix-source/catalog_validation/scripts/catalog_update.py delete mode 100644 catalog_validation/ix-source/catalog_validation/scripts/catalog_validate.py delete mode 100644 catalog_validation/ix-source/catalog_validation/scripts/dev_apps_validate.py delete mode 100644 catalog_validation/ix-source/catalog_validation/utils.py delete mode 100644 catalog_validation/ix-source/catalog_validation/validation.py delete mode 100644 catalog_validation/ix-source/catalog_validation/validation_utils.py delete mode 100644 catalog_validation/ix-source/debian/changelog delete mode 100644 catalog_validation/ix-source/debian/control delete mode 100644 catalog_validation/ix-source/debian/rules delete mode 100644 catalog_validation/ix-source/debian/source/format delete mode 100644 catalog_validation/ix-source/debian/source/options delete mode 100644 catalog_validation/ix-source/requirements.txt delete mode 100644 catalog_validation/ix-source/setup.cfg delete mode 100644 catalog_validation/ix-source/setup.py delete mode 100644 catalog_validation/truecharts-fork/.github/workflows/ci.yml delete mode 100644 catalog_validation/truecharts-fork/.github/workflows/containers.build.yaml delete mode 100644 catalog_validation/truecharts-fork/.github/workflows/lint.yml delete mode 100644 catalog_validation/truecharts-fork/.github/workflows/test.yaml delete mode 100644 catalog_validation/truecharts-fork/.gitignore delete mode 100644 catalog_validation/truecharts-fork/Dockerfile delete mode 100644 catalog_validation/truecharts-fork/LICENSE delete mode 100644 catalog_validation/truecharts-fork/README.md delete mode 100644 catalog_validation/truecharts-fork/catalog_validation/__init__.py delete mode 100644 catalog_validation/truecharts-fork/catalog_validation/ci/__init__.py delete mode 100644 catalog_validation/truecharts-fork/catalog_validation/ci/utils.py delete mode 100644 catalog_validation/truecharts-fork/catalog_validation/ci/validate.py delete mode 100644 catalog_validation/truecharts-fork/catalog_validation/exceptions.py delete mode 100644 catalog_validation/truecharts-fork/catalog_validation/git_utils.py delete mode 100644 catalog_validation/truecharts-fork/catalog_validation/items/__init__.py delete mode 100644 catalog_validation/truecharts-fork/catalog_validation/items/catalog.py delete mode 100644 catalog_validation/truecharts-fork/catalog_validation/items/features.py delete mode 100644 catalog_validation/truecharts-fork/catalog_validation/items/items_util.py delete mode 100644 catalog_validation/truecharts-fork/catalog_validation/items/ix_values_utils.py delete mode 100644 catalog_validation/truecharts-fork/catalog_validation/items/questions_utils.py delete mode 100644 catalog_validation/truecharts-fork/catalog_validation/items/utils.py delete mode 100644 catalog_validation/truecharts-fork/catalog_validation/items/validate_utils.py delete mode 100644 catalog_validation/truecharts-fork/catalog_validation/k8s/__init__.py delete mode 100644 catalog_validation/truecharts-fork/catalog_validation/k8s/api_client.py delete mode 100644 catalog_validation/truecharts-fork/catalog_validation/k8s/utils.py delete mode 100644 catalog_validation/truecharts-fork/catalog_validation/pytest/requirements.txt delete mode 100644 catalog_validation/truecharts-fork/catalog_validation/pytest/unit/test_catalog_validate.py delete mode 100644 catalog_validation/truecharts-fork/catalog_validation/pytest/unit/test_items_util.py delete mode 100644 catalog_validation/truecharts-fork/catalog_validation/pytest/unit/test_normalise_questions.py delete mode 100644 catalog_validation/truecharts-fork/catalog_validation/pytest/unit/test_schema.py delete mode 100644 catalog_validation/truecharts-fork/catalog_validation/pytest/unit/test_validate_ix_values.py delete mode 100644 catalog_validation/truecharts-fork/catalog_validation/schema/__init__.py delete mode 100644 catalog_validation/truecharts-fork/catalog_validation/schema/attrs.py delete mode 100644 catalog_validation/truecharts-fork/catalog_validation/schema/feature_gen.py delete mode 100644 catalog_validation/truecharts-fork/catalog_validation/schema/features.py delete mode 100644 catalog_validation/truecharts-fork/catalog_validation/schema/migration_schema.py delete mode 100644 catalog_validation/truecharts-fork/catalog_validation/schema/schema_gen.py delete mode 100644 catalog_validation/truecharts-fork/catalog_validation/schema/variable.py delete mode 100644 catalog_validation/truecharts-fork/catalog_validation/schema/variable_gen.py delete mode 100644 catalog_validation/truecharts-fork/catalog_validation/scripts/__init__.py delete mode 100644 catalog_validation/truecharts-fork/catalog_validation/scripts/catalog_update.py delete mode 100644 catalog_validation/truecharts-fork/catalog_validation/scripts/catalog_validate.py delete mode 100644 catalog_validation/truecharts-fork/catalog_validation/scripts/dev_apps_validate.py delete mode 100644 catalog_validation/truecharts-fork/catalog_validation/utils.py delete mode 100644 catalog_validation/truecharts-fork/catalog_validation/validation.py delete mode 100644 catalog_validation/truecharts-fork/catalog_validation/validation_utils.py delete mode 100644 catalog_validation/truecharts-fork/debian/changelog delete mode 100644 catalog_validation/truecharts-fork/debian/control delete mode 100644 catalog_validation/truecharts-fork/debian/rules delete mode 100644 catalog_validation/truecharts-fork/debian/source/format delete mode 100644 catalog_validation/truecharts-fork/debian/source/options delete mode 100644 catalog_validation/truecharts-fork/requirements.txt delete mode 100644 catalog_validation/truecharts-fork/setup.cfg delete mode 100644 catalog_validation/truecharts-fork/setup.py delete mode 100644 github/label-commenter-config.yml delete mode 100644 github/stale.yml delete mode 100644 github/workflows/metadata-label-commenter.yaml delete mode 100644 github/workflows/metadata-label-pr.yaml delete mode 100644 github/workflows/prune.yaml delete mode 100644 github/workflows/schedule-sync-labels.yaml delete mode 100644 github/workflows/stale.yaml delete mode 100644 stable/lidarr/19.2.0/.helmignore delete mode 100644 stable/lidarr/19.2.0/CHANGELOG.md delete mode 100644 stable/lidarr/19.2.0/Chart.yaml delete mode 100644 stable/lidarr/19.2.0/README.md delete mode 100644 stable/lidarr/19.2.0/app-readme.md delete mode 100644 stable/lidarr/19.2.0/charts/common-17.4.2.tgz delete mode 100644 stable/lidarr/19.2.0/ix_values.yaml delete mode 100755 stable/lidarr/19.2.0/questions.yaml delete mode 100644 stable/lidarr/19.2.0/templates/NOTES.txt delete mode 100644 stable/lidarr/19.2.0/templates/common.yaml delete mode 100644 stable/lidarr/19.2.0/values.yaml delete mode 100644 stable/lidarr/19.3.0/.helmignore delete mode 100644 stable/lidarr/19.3.0/CHANGELOG.md delete mode 100644 stable/lidarr/19.3.0/Chart.yaml delete mode 100644 stable/lidarr/19.3.0/README.md delete mode 100644 stable/lidarr/19.3.0/app-readme.md delete mode 100644 stable/lidarr/19.3.0/charts/common-17.5.0.tgz delete mode 100644 stable/lidarr/19.3.0/ix_values.yaml delete mode 100755 stable/lidarr/19.3.0/questions.yaml delete mode 100644 stable/lidarr/19.3.0/templates/NOTES.txt delete mode 100644 stable/lidarr/19.3.0/templates/common.yaml delete mode 100644 stable/lidarr/19.3.0/values.yaml delete mode 100644 stable/lidarr/20.3.0/.helmignore delete mode 100644 stable/lidarr/20.3.0/CHANGELOG.md delete mode 100644 stable/lidarr/20.3.0/Chart.yaml delete mode 100644 stable/lidarr/20.3.0/README.md delete mode 100644 stable/lidarr/20.3.0/app-readme.md delete mode 100644 stable/lidarr/20.3.0/charts/common-18.1.2.tgz delete mode 100644 stable/lidarr/20.3.0/ix_values.yaml delete mode 100755 stable/lidarr/20.3.0/questions.yaml delete mode 100644 stable/lidarr/20.3.0/templates/NOTES.txt delete mode 100644 stable/lidarr/20.3.0/templates/common.yaml delete mode 100644 stable/lidarr/20.3.0/values.yaml delete mode 100644 stable/lidarr/20.3.1/.helmignore delete mode 100644 stable/lidarr/20.3.1/CHANGELOG.md delete mode 100644 stable/lidarr/20.3.1/Chart.yaml delete mode 100644 stable/lidarr/20.3.1/README.md delete mode 100644 stable/lidarr/20.3.1/app-readme.md delete mode 100644 stable/lidarr/20.3.1/charts/common-18.1.2.tgz delete mode 100644 stable/lidarr/20.3.1/ix_values.yaml delete mode 100755 stable/lidarr/20.3.1/questions.yaml delete mode 100644 stable/lidarr/20.3.1/templates/NOTES.txt delete mode 100644 stable/lidarr/20.3.1/templates/common.yaml delete mode 100644 stable/lidarr/20.3.1/values.yaml delete mode 100644 stable/lidarr/21.6.16/.helmignore delete mode 100644 stable/lidarr/21.6.16/CHANGELOG.md delete mode 100644 stable/lidarr/21.6.16/Chart.yaml delete mode 100644 stable/lidarr/21.6.16/README.md delete mode 100644 stable/lidarr/21.6.16/app-changelog.md delete mode 100644 stable/lidarr/21.6.16/app-readme.md delete mode 100644 stable/lidarr/21.6.16/charts/common-20.3.11.tgz delete mode 100644 stable/lidarr/21.6.16/icon-small.webp delete mode 100644 stable/lidarr/21.6.16/icon.webp delete mode 100644 stable/lidarr/21.6.16/ix_values.yaml delete mode 100755 stable/lidarr/21.6.16/questions.yaml delete mode 100644 stable/lidarr/21.6.16/templates/NOTES.txt delete mode 100644 stable/lidarr/21.6.16/templates/common.yaml delete mode 100644 stable/lidarr/21.6.16/values.yaml delete mode 100644 stable/lidarr/21.6.17/.helmignore delete mode 100644 stable/lidarr/21.6.17/CHANGELOG.md delete mode 100644 stable/lidarr/21.6.17/Chart.yaml delete mode 100644 stable/lidarr/21.6.17/README.md delete mode 100644 stable/lidarr/21.6.17/app-changelog.md delete mode 100644 stable/lidarr/21.6.17/app-readme.md delete mode 100644 stable/lidarr/21.6.17/charts/common-20.3.12.tgz delete mode 100644 stable/lidarr/21.6.17/icon-small.webp delete mode 100644 stable/lidarr/21.6.17/icon.webp delete mode 100644 stable/lidarr/21.6.17/ix_values.yaml delete mode 100755 stable/lidarr/21.6.17/questions.yaml delete mode 100644 stable/lidarr/21.6.17/templates/NOTES.txt delete mode 100644 stable/lidarr/21.6.17/templates/common.yaml delete mode 100644 stable/lidarr/21.6.17/values.yaml delete mode 100644 stable/plex/16.3.0/.helmignore delete mode 100644 stable/plex/16.3.0/CHANGELOG.md delete mode 100644 stable/plex/16.3.0/Chart.yaml delete mode 100644 stable/plex/16.3.0/README.md delete mode 100644 stable/plex/16.3.0/app-readme.md delete mode 100644 stable/plex/16.3.0/charts/common-17.4.2.tgz delete mode 100644 stable/plex/16.3.0/ix_values.yaml delete mode 100755 stable/plex/16.3.0/questions.yaml delete mode 100644 stable/plex/16.3.0/templates/NOTES.txt delete mode 100644 stable/plex/16.3.0/templates/common.yaml delete mode 100644 stable/plex/16.3.0/values.yaml delete mode 100644 stable/plex/16.4.0/.helmignore delete mode 100644 stable/plex/16.4.0/CHANGELOG.md delete mode 100644 stable/plex/16.4.0/Chart.yaml delete mode 100644 stable/plex/16.4.0/README.md delete mode 100644 stable/plex/16.4.0/app-readme.md delete mode 100644 stable/plex/16.4.0/charts/common-17.5.0.tgz delete mode 100644 stable/plex/16.4.0/ix_values.yaml delete mode 100755 stable/plex/16.4.0/questions.yaml delete mode 100644 stable/plex/16.4.0/templates/NOTES.txt delete mode 100644 stable/plex/16.4.0/templates/common.yaml delete mode 100644 stable/plex/16.4.0/values.yaml delete mode 100644 stable/plex/17.8.17/.helmignore delete mode 100644 stable/plex/17.8.17/CHANGELOG.md delete mode 100644 stable/plex/17.8.17/Chart.yaml delete mode 100644 stable/plex/17.8.17/README.md delete mode 100644 stable/plex/17.8.17/app-changelog.md delete mode 100644 stable/plex/17.8.17/app-readme.md delete mode 100644 stable/plex/17.8.17/charts/common-20.3.11.tgz delete mode 100644 stable/plex/17.8.17/icon-small.webp delete mode 100644 stable/plex/17.8.17/icon.webp delete mode 100644 stable/plex/17.8.17/ix_values.yaml delete mode 100755 stable/plex/17.8.17/questions.yaml delete mode 100644 stable/plex/17.8.17/templates/NOTES.txt delete mode 100644 stable/plex/17.8.17/templates/common.yaml delete mode 100644 stable/plex/17.8.17/values.yaml delete mode 100644 stable/plex/17.8.18/.helmignore delete mode 100644 stable/plex/17.8.18/CHANGELOG.md delete mode 100644 stable/plex/17.8.18/Chart.yaml delete mode 100644 stable/plex/17.8.18/README.md delete mode 100644 stable/plex/17.8.18/app-changelog.md delete mode 100644 stable/plex/17.8.18/app-readme.md delete mode 100644 stable/plex/17.8.18/charts/common-20.3.12.tgz delete mode 100644 stable/plex/17.8.18/icon-small.webp delete mode 100644 stable/plex/17.8.18/icon.webp delete mode 100644 stable/plex/17.8.18/ix_values.yaml delete mode 100755 stable/plex/17.8.18/questions.yaml delete mode 100644 stable/plex/17.8.18/templates/NOTES.txt delete mode 100644 stable/plex/17.8.18/templates/common.yaml delete mode 100644 stable/plex/17.8.18/values.yaml delete mode 100644 stable/plex/18.0.11/.helmignore delete mode 100644 stable/plex/18.0.11/CHANGELOG.md delete mode 100644 stable/plex/18.0.11/Chart.yaml delete mode 100644 stable/plex/18.0.11/README.md delete mode 100644 stable/plex/18.0.11/app-readme.md delete mode 100644 stable/plex/18.0.11/charts/common-23.0.9.tgz delete mode 100644 stable/plex/18.0.11/icon-small.webp delete mode 100644 stable/plex/18.0.11/icon.webp delete mode 100644 stable/plex/18.0.11/ix_values.yaml delete mode 100755 stable/plex/18.0.11/questions.yaml delete mode 100644 stable/plex/18.0.11/templates/NOTES.txt delete mode 100644 stable/plex/18.0.11/templates/common.yaml delete mode 100644 stable/plex/18.0.11/values.yaml delete mode 100644 stable/prowlarr/14.4.0/.helmignore delete mode 100644 stable/prowlarr/14.4.0/CHANGELOG.md delete mode 100644 stable/prowlarr/14.4.0/Chart.yaml delete mode 100644 stable/prowlarr/14.4.0/README.md delete mode 100644 stable/prowlarr/14.4.0/app-readme.md delete mode 100644 stable/prowlarr/14.4.0/charts/common-17.4.2.tgz delete mode 100644 stable/prowlarr/14.4.0/ix_values.yaml delete mode 100755 stable/prowlarr/14.4.0/questions.yaml delete mode 100644 stable/prowlarr/14.4.0/templates/NOTES.txt delete mode 100644 stable/prowlarr/14.4.0/templates/common.yaml delete mode 100644 stable/prowlarr/14.4.0/values.yaml delete mode 100644 stable/prowlarr/14.5.0/.helmignore delete mode 100644 stable/prowlarr/14.5.0/CHANGELOG.md delete mode 100644 stable/prowlarr/14.5.0/Chart.yaml delete mode 100644 stable/prowlarr/14.5.0/README.md delete mode 100644 stable/prowlarr/14.5.0/app-readme.md delete mode 100644 stable/prowlarr/14.5.0/charts/common-17.5.0.tgz delete mode 100644 stable/prowlarr/14.5.0/ix_values.yaml delete mode 100755 stable/prowlarr/14.5.0/questions.yaml delete mode 100644 stable/prowlarr/14.5.0/templates/NOTES.txt delete mode 100644 stable/prowlarr/14.5.0/templates/common.yaml delete mode 100644 stable/prowlarr/14.5.0/values.yaml delete mode 100644 stable/prowlarr/15.4.0/.helmignore delete mode 100644 stable/prowlarr/15.4.0/CHANGELOG.md delete mode 100644 stable/prowlarr/15.4.0/Chart.yaml delete mode 100644 stable/prowlarr/15.4.0/README.md delete mode 100644 stable/prowlarr/15.4.0/app-readme.md delete mode 100644 stable/prowlarr/15.4.0/charts/common-18.1.2.tgz delete mode 100644 stable/prowlarr/15.4.0/dashboard.json delete mode 100644 stable/prowlarr/15.4.0/ix_values.yaml delete mode 100755 stable/prowlarr/15.4.0/questions.yaml delete mode 100644 stable/prowlarr/15.4.0/templates/NOTES.txt delete mode 100644 stable/prowlarr/15.4.0/templates/common.yaml delete mode 100644 stable/prowlarr/15.4.0/values.yaml delete mode 100644 stable/prowlarr/15.4.1/.helmignore delete mode 100644 stable/prowlarr/15.4.1/CHANGELOG.md delete mode 100644 stable/prowlarr/15.4.1/Chart.yaml delete mode 100644 stable/prowlarr/15.4.1/README.md delete mode 100644 stable/prowlarr/15.4.1/app-readme.md delete mode 100644 stable/prowlarr/15.4.1/charts/common-18.1.2.tgz delete mode 100644 stable/prowlarr/15.4.1/dashboard.json delete mode 100644 stable/prowlarr/15.4.1/ix_values.yaml delete mode 100755 stable/prowlarr/15.4.1/questions.yaml delete mode 100644 stable/prowlarr/15.4.1/templates/NOTES.txt delete mode 100644 stable/prowlarr/15.4.1/templates/common.yaml delete mode 100644 stable/prowlarr/15.4.1/values.yaml delete mode 100644 stable/prowlarr/16.8.10/.helmignore delete mode 100644 stable/prowlarr/16.8.10/CHANGELOG.md delete mode 100644 stable/prowlarr/16.8.10/Chart.yaml delete mode 100644 stable/prowlarr/16.8.10/README.md delete mode 100644 stable/prowlarr/16.8.10/app-changelog.md delete mode 100644 stable/prowlarr/16.8.10/app-readme.md delete mode 100644 stable/prowlarr/16.8.10/charts/common-20.3.11.tgz delete mode 100644 stable/prowlarr/16.8.10/dashboard.json delete mode 100644 stable/prowlarr/16.8.10/icon-small.webp delete mode 100644 stable/prowlarr/16.8.10/icon.webp delete mode 100644 stable/prowlarr/16.8.10/ix_values.yaml delete mode 100755 stable/prowlarr/16.8.10/questions.yaml delete mode 100644 stable/prowlarr/16.8.10/templates/NOTES.txt delete mode 100644 stable/prowlarr/16.8.10/templates/common.yaml delete mode 100644 stable/prowlarr/16.8.10/values.yaml delete mode 100644 stable/prowlarr/16.8.11/.helmignore delete mode 100644 stable/prowlarr/16.8.11/CHANGELOG.md delete mode 100644 stable/prowlarr/16.8.11/Chart.yaml delete mode 100644 stable/prowlarr/16.8.11/README.md delete mode 100644 stable/prowlarr/16.8.11/app-changelog.md delete mode 100644 stable/prowlarr/16.8.11/app-readme.md delete mode 100644 stable/prowlarr/16.8.11/charts/common-20.3.12.tgz delete mode 100644 stable/prowlarr/16.8.11/dashboard.json delete mode 100644 stable/prowlarr/16.8.11/icon-small.webp delete mode 100644 stable/prowlarr/16.8.11/icon.webp delete mode 100644 stable/prowlarr/16.8.11/ix_values.yaml delete mode 100755 stable/prowlarr/16.8.11/questions.yaml delete mode 100644 stable/prowlarr/16.8.11/templates/NOTES.txt delete mode 100644 stable/prowlarr/16.8.11/templates/common.yaml delete mode 100644 stable/prowlarr/16.8.11/values.yaml delete mode 100644 stable/prowlarr/17.1.6/.helmignore delete mode 100644 stable/prowlarr/17.1.6/CHANGELOG.md delete mode 100644 stable/prowlarr/17.1.6/Chart.yaml delete mode 100644 stable/prowlarr/17.1.6/README.md delete mode 100644 stable/prowlarr/17.1.6/app-readme.md delete mode 100644 stable/prowlarr/17.1.6/charts/common-23.0.9.tgz delete mode 100644 stable/prowlarr/17.1.6/dashboard.json delete mode 100644 stable/prowlarr/17.1.6/icon-small.webp delete mode 100644 stable/prowlarr/17.1.6/icon.webp delete mode 100644 stable/prowlarr/17.1.6/ix_values.yaml delete mode 100755 stable/prowlarr/17.1.6/questions.yaml delete mode 100644 stable/prowlarr/17.1.6/templates/NOTES.txt delete mode 100644 stable/prowlarr/17.1.6/templates/common.yaml delete mode 100644 stable/prowlarr/17.1.6/values.yaml delete mode 100644 stable/radarr/19.3.0/.helmignore delete mode 100644 stable/radarr/19.3.0/CHANGELOG.md delete mode 100644 stable/radarr/19.3.0/Chart.yaml delete mode 100644 stable/radarr/19.3.0/README.md delete mode 100644 stable/radarr/19.3.0/app-readme.md delete mode 100644 stable/radarr/19.3.0/charts/common-17.4.2.tgz delete mode 100644 stable/radarr/19.3.0/ix_values.yaml delete mode 100755 stable/radarr/19.3.0/questions.yaml delete mode 100644 stable/radarr/19.3.0/templates/NOTES.txt delete mode 100644 stable/radarr/19.3.0/templates/common.yaml delete mode 100644 stable/radarr/19.3.0/values.yaml delete mode 100644 stable/radarr/19.4.0/.helmignore delete mode 100644 stable/radarr/19.4.0/CHANGELOG.md delete mode 100644 stable/radarr/19.4.0/Chart.yaml delete mode 100644 stable/radarr/19.4.0/README.md delete mode 100644 stable/radarr/19.4.0/app-readme.md delete mode 100644 stable/radarr/19.4.0/charts/common-17.5.0.tgz delete mode 100644 stable/radarr/19.4.0/ix_values.yaml delete mode 100755 stable/radarr/19.4.0/questions.yaml delete mode 100644 stable/radarr/19.4.0/templates/NOTES.txt delete mode 100644 stable/radarr/19.4.0/templates/common.yaml delete mode 100644 stable/radarr/19.4.0/values.yaml delete mode 100644 stable/radarr/20.2.0/.helmignore delete mode 100644 stable/radarr/20.2.0/CHANGELOG.md delete mode 100644 stable/radarr/20.2.0/Chart.yaml delete mode 100644 stable/radarr/20.2.0/README.md delete mode 100644 stable/radarr/20.2.0/app-readme.md delete mode 100644 stable/radarr/20.2.0/charts/common-18.1.2.tgz delete mode 100644 stable/radarr/20.2.0/ix_values.yaml delete mode 100755 stable/radarr/20.2.0/questions.yaml delete mode 100644 stable/radarr/20.2.0/templates/NOTES.txt delete mode 100644 stable/radarr/20.2.0/templates/common.yaml delete mode 100644 stable/radarr/20.2.0/values.yaml delete mode 100644 stable/radarr/20.2.1/.helmignore delete mode 100644 stable/radarr/20.2.1/CHANGELOG.md delete mode 100644 stable/radarr/20.2.1/Chart.yaml delete mode 100644 stable/radarr/20.2.1/README.md delete mode 100644 stable/radarr/20.2.1/app-readme.md delete mode 100644 stable/radarr/20.2.1/charts/common-18.1.2.tgz delete mode 100644 stable/radarr/20.2.1/ix_values.yaml delete mode 100755 stable/radarr/20.2.1/questions.yaml delete mode 100644 stable/radarr/20.2.1/templates/NOTES.txt delete mode 100644 stable/radarr/20.2.1/templates/common.yaml delete mode 100644 stable/radarr/20.2.1/values.yaml delete mode 100644 stable/radarr/21.7.10/.helmignore delete mode 100644 stable/radarr/21.7.10/CHANGELOG.md delete mode 100644 stable/radarr/21.7.10/Chart.yaml delete mode 100644 stable/radarr/21.7.10/README.md delete mode 100644 stable/radarr/21.7.10/app-changelog.md delete mode 100644 stable/radarr/21.7.10/app-readme.md delete mode 100644 stable/radarr/21.7.10/charts/common-20.3.11.tgz delete mode 100644 stable/radarr/21.7.10/icon-small.webp delete mode 100644 stable/radarr/21.7.10/icon.webp delete mode 100644 stable/radarr/21.7.10/ix_values.yaml delete mode 100755 stable/radarr/21.7.10/questions.yaml delete mode 100644 stable/radarr/21.7.10/templates/NOTES.txt delete mode 100644 stable/radarr/21.7.10/templates/common.yaml delete mode 100644 stable/radarr/21.7.10/values.yaml delete mode 100644 stable/radarr/21.7.11/.helmignore delete mode 100644 stable/radarr/21.7.11/CHANGELOG.md delete mode 100644 stable/radarr/21.7.11/Chart.yaml delete mode 100644 stable/radarr/21.7.11/README.md delete mode 100644 stable/radarr/21.7.11/app-changelog.md delete mode 100644 stable/radarr/21.7.11/app-readme.md delete mode 100644 stable/radarr/21.7.11/charts/common-20.3.12.tgz delete mode 100644 stable/radarr/21.7.11/icon-small.webp delete mode 100644 stable/radarr/21.7.11/icon.webp delete mode 100644 stable/radarr/21.7.11/ix_values.yaml delete mode 100755 stable/radarr/21.7.11/questions.yaml delete mode 100644 stable/radarr/21.7.11/templates/NOTES.txt delete mode 100644 stable/radarr/21.7.11/templates/common.yaml delete mode 100644 stable/radarr/21.7.11/values.yaml delete mode 100644 stable/radarr/22.2.3/.helmignore delete mode 100644 stable/radarr/22.2.3/CHANGELOG.md delete mode 100644 stable/radarr/22.2.3/Chart.yaml delete mode 100644 stable/radarr/22.2.3/README.md delete mode 100644 stable/radarr/22.2.3/app-readme.md delete mode 100644 stable/radarr/22.2.3/charts/common-23.0.9.tgz delete mode 100644 stable/radarr/22.2.3/icon-small.webp delete mode 100644 stable/radarr/22.2.3/icon.webp delete mode 100644 stable/radarr/22.2.3/ix_values.yaml delete mode 100755 stable/radarr/22.2.3/questions.yaml delete mode 100644 stable/radarr/22.2.3/templates/NOTES.txt delete mode 100644 stable/radarr/22.2.3/templates/common.yaml delete mode 100644 stable/radarr/22.2.3/values.yaml delete mode 100644 stable/readarr/19.2.0/.helmignore delete mode 100644 stable/readarr/19.2.0/CHANGELOG.md delete mode 100644 stable/readarr/19.2.0/Chart.yaml delete mode 100644 stable/readarr/19.2.0/README.md delete mode 100644 stable/readarr/19.2.0/app-readme.md delete mode 100644 stable/readarr/19.2.0/charts/common-17.4.2.tgz delete mode 100644 stable/readarr/19.2.0/ix_values.yaml delete mode 100755 stable/readarr/19.2.0/questions.yaml delete mode 100644 stable/readarr/19.2.0/templates/NOTES.txt delete mode 100644 stable/readarr/19.2.0/templates/common.yaml delete mode 100644 stable/readarr/19.2.0/values.yaml delete mode 100644 stable/readarr/19.3.0/.helmignore delete mode 100644 stable/readarr/19.3.0/CHANGELOG.md delete mode 100644 stable/readarr/19.3.0/Chart.yaml delete mode 100644 stable/readarr/19.3.0/README.md delete mode 100644 stable/readarr/19.3.0/app-readme.md delete mode 100644 stable/readarr/19.3.0/charts/common-17.5.0.tgz delete mode 100644 stable/readarr/19.3.0/ix_values.yaml delete mode 100755 stable/readarr/19.3.0/questions.yaml delete mode 100644 stable/readarr/19.3.0/templates/NOTES.txt delete mode 100644 stable/readarr/19.3.0/templates/common.yaml delete mode 100644 stable/readarr/19.3.0/values.yaml delete mode 100644 stable/readarr/20.1.3/.helmignore delete mode 100644 stable/readarr/20.1.3/CHANGELOG.md delete mode 100644 stable/readarr/20.1.3/Chart.yaml delete mode 100644 stable/readarr/20.1.3/README.md delete mode 100644 stable/readarr/20.1.3/app-readme.md delete mode 100644 stable/readarr/20.1.3/charts/common-18.0.3.tgz delete mode 100644 stable/readarr/20.1.3/ix_values.yaml delete mode 100755 stable/readarr/20.1.3/questions.yaml delete mode 100644 stable/readarr/20.1.3/templates/NOTES.txt delete mode 100644 stable/readarr/20.1.3/templates/common.yaml delete mode 100644 stable/readarr/20.1.3/values.yaml delete mode 100644 stable/readarr/20.2.0/.helmignore delete mode 100644 stable/readarr/20.2.0/CHANGELOG.md delete mode 100644 stable/readarr/20.2.0/Chart.yaml delete mode 100644 stable/readarr/20.2.0/README.md delete mode 100644 stable/readarr/20.2.0/app-readme.md delete mode 100644 stable/readarr/20.2.0/charts/common-18.1.2.tgz delete mode 100644 stable/readarr/20.2.0/ix_values.yaml delete mode 100755 stable/readarr/20.2.0/questions.yaml delete mode 100644 stable/readarr/20.2.0/templates/NOTES.txt delete mode 100644 stable/readarr/20.2.0/templates/common.yaml delete mode 100644 stable/readarr/20.2.0/values.yaml delete mode 100644 stable/readarr/21.6.17/.helmignore delete mode 100644 stable/readarr/21.6.17/CHANGELOG.md delete mode 100644 stable/readarr/21.6.17/Chart.yaml delete mode 100644 stable/readarr/21.6.17/README.md delete mode 100644 stable/readarr/21.6.17/app-changelog.md delete mode 100644 stable/readarr/21.6.17/app-readme.md delete mode 100644 stable/readarr/21.6.17/charts/common-20.3.11.tgz delete mode 100644 stable/readarr/21.6.17/icon-small.webp delete mode 100644 stable/readarr/21.6.17/icon.webp delete mode 100644 stable/readarr/21.6.17/ix_values.yaml delete mode 100755 stable/readarr/21.6.17/questions.yaml delete mode 100644 stable/readarr/21.6.17/templates/NOTES.txt delete mode 100644 stable/readarr/21.6.17/templates/common.yaml delete mode 100644 stable/readarr/21.6.17/values.yaml delete mode 100644 stable/readarr/21.6.18/.helmignore delete mode 100644 stable/readarr/21.6.18/CHANGELOG.md delete mode 100644 stable/readarr/21.6.18/Chart.yaml delete mode 100644 stable/readarr/21.6.18/README.md delete mode 100644 stable/readarr/21.6.18/app-changelog.md delete mode 100644 stable/readarr/21.6.18/app-readme.md delete mode 100644 stable/readarr/21.6.18/charts/common-20.3.12.tgz delete mode 100644 stable/readarr/21.6.18/icon-small.webp delete mode 100644 stable/readarr/21.6.18/icon.webp delete mode 100644 stable/readarr/21.6.18/ix_values.yaml delete mode 100755 stable/readarr/21.6.18/questions.yaml delete mode 100644 stable/readarr/21.6.18/templates/NOTES.txt delete mode 100644 stable/readarr/21.6.18/templates/common.yaml delete mode 100644 stable/readarr/21.6.18/values.yaml delete mode 100644 stable/sabnzbd/17.3.2/.helmignore delete mode 100644 stable/sabnzbd/17.3.2/CHANGELOG.md delete mode 100644 stable/sabnzbd/17.3.2/Chart.yaml delete mode 100644 stable/sabnzbd/17.3.2/README.md delete mode 100644 stable/sabnzbd/17.3.2/app-readme.md delete mode 100644 stable/sabnzbd/17.3.2/charts/common-17.4.2.tgz delete mode 100644 stable/sabnzbd/17.3.2/ix_values.yaml delete mode 100755 stable/sabnzbd/17.3.2/questions.yaml delete mode 100644 stable/sabnzbd/17.3.2/templates/NOTES.txt delete mode 100644 stable/sabnzbd/17.3.2/templates/common.yaml delete mode 100644 stable/sabnzbd/17.3.2/values.yaml delete mode 100644 stable/sabnzbd/17.4.0/.helmignore delete mode 100644 stable/sabnzbd/17.4.0/CHANGELOG.md delete mode 100644 stable/sabnzbd/17.4.0/Chart.yaml delete mode 100644 stable/sabnzbd/17.4.0/README.md delete mode 100644 stable/sabnzbd/17.4.0/app-readme.md delete mode 100644 stable/sabnzbd/17.4.0/charts/common-17.5.0.tgz delete mode 100644 stable/sabnzbd/17.4.0/ix_values.yaml delete mode 100755 stable/sabnzbd/17.4.0/questions.yaml delete mode 100644 stable/sabnzbd/17.4.0/templates/NOTES.txt delete mode 100644 stable/sabnzbd/17.4.0/templates/common.yaml delete mode 100644 stable/sabnzbd/17.4.0/values.yaml delete mode 100644 stable/sabnzbd/18.1.3/.helmignore delete mode 100644 stable/sabnzbd/18.1.3/CHANGELOG.md delete mode 100644 stable/sabnzbd/18.1.3/Chart.yaml delete mode 100644 stable/sabnzbd/18.1.3/README.md delete mode 100644 stable/sabnzbd/18.1.3/app-readme.md delete mode 100644 stable/sabnzbd/18.1.3/charts/common-18.0.3.tgz delete mode 100644 stable/sabnzbd/18.1.3/ix_values.yaml delete mode 100755 stable/sabnzbd/18.1.3/questions.yaml delete mode 100644 stable/sabnzbd/18.1.3/templates/NOTES.txt delete mode 100644 stable/sabnzbd/18.1.3/templates/common.yaml delete mode 100644 stable/sabnzbd/18.1.3/values.yaml delete mode 100644 stable/sabnzbd/18.2.0/.helmignore delete mode 100644 stable/sabnzbd/18.2.0/CHANGELOG.md delete mode 100644 stable/sabnzbd/18.2.0/Chart.yaml delete mode 100644 stable/sabnzbd/18.2.0/README.md delete mode 100644 stable/sabnzbd/18.2.0/app-readme.md delete mode 100644 stable/sabnzbd/18.2.0/charts/common-18.1.2.tgz delete mode 100644 stable/sabnzbd/18.2.0/ix_values.yaml delete mode 100755 stable/sabnzbd/18.2.0/questions.yaml delete mode 100644 stable/sabnzbd/18.2.0/templates/NOTES.txt delete mode 100644 stable/sabnzbd/18.2.0/templates/common.yaml delete mode 100644 stable/sabnzbd/18.2.0/values.yaml delete mode 100644 stable/sabnzbd/19.6.15/.helmignore delete mode 100644 stable/sabnzbd/19.6.15/CHANGELOG.md delete mode 100644 stable/sabnzbd/19.6.15/Chart.yaml delete mode 100644 stable/sabnzbd/19.6.15/README.md delete mode 100644 stable/sabnzbd/19.6.15/app-changelog.md delete mode 100644 stable/sabnzbd/19.6.15/app-readme.md delete mode 100644 stable/sabnzbd/19.6.15/charts/common-20.3.11.tgz delete mode 100644 stable/sabnzbd/19.6.15/icon-small.webp delete mode 100644 stable/sabnzbd/19.6.15/icon.webp delete mode 100644 stable/sabnzbd/19.6.15/ix_values.yaml delete mode 100755 stable/sabnzbd/19.6.15/questions.yaml delete mode 100644 stable/sabnzbd/19.6.15/templates/NOTES.txt delete mode 100644 stable/sabnzbd/19.6.15/templates/common.yaml delete mode 100644 stable/sabnzbd/19.6.15/values.yaml delete mode 100644 stable/sabnzbd/19.6.16/.helmignore delete mode 100644 stable/sabnzbd/19.6.16/CHANGELOG.md delete mode 100644 stable/sabnzbd/19.6.16/Chart.yaml delete mode 100644 stable/sabnzbd/19.6.16/README.md delete mode 100644 stable/sabnzbd/19.6.16/app-changelog.md delete mode 100644 stable/sabnzbd/19.6.16/app-readme.md delete mode 100644 stable/sabnzbd/19.6.16/charts/common-20.3.12.tgz delete mode 100644 stable/sabnzbd/19.6.16/icon-small.webp delete mode 100644 stable/sabnzbd/19.6.16/icon.webp delete mode 100644 stable/sabnzbd/19.6.16/ix_values.yaml delete mode 100755 stable/sabnzbd/19.6.16/questions.yaml delete mode 100644 stable/sabnzbd/19.6.16/templates/NOTES.txt delete mode 100644 stable/sabnzbd/19.6.16/templates/common.yaml delete mode 100644 stable/sabnzbd/19.6.16/values.yaml delete mode 100644 stable/sonarr/rolling/.helmignore delete mode 100644 stable/sonarr/rolling/CHANGELOG.md delete mode 100644 stable/sonarr/rolling/Chart.yaml delete mode 100644 stable/sonarr/rolling/README.md delete mode 100644 stable/sonarr/rolling/app-readme.md delete mode 100644 stable/sonarr/rolling/charts/common-23.0.10.tgz delete mode 100644 stable/sonarr/rolling/icon-small.webp delete mode 100644 stable/sonarr/rolling/icon.webp delete mode 100644 stable/sonarr/rolling/ix_values.yaml delete mode 100644 stable/sonarr/rolling/questions.yaml delete mode 100644 stable/sonarr/rolling/templates/NOTES.txt delete mode 100644 stable/sonarr/rolling/templates/common.yaml delete mode 100644 stable/sonarr/rolling/values.yaml diff --git a/catalog.json b/catalog.json index a9a79d0b05..e99c65ef68 100644 --- a/catalog.json +++ b/catalog.json @@ -1,23 +1,22 @@ { "charts": {}, "test": {}, - "incubator": { - }, + "catalog_validation": {}, "premium": { "vaultwarden": { - "app_readme": "

Unofficial Bitwarden compatible server written in Rust

\n

This App is supplied by TrueCharts, for more information visit the manual: https://github.com/un-boxing-hosting/TrueCharts-Scale/premium/vaultwarden

\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!

", + "app_readme": "

Unofficial Bitwarden compatible server written in Rust

\n

This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/premium/vaultwarden

\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!

", "categories": [ "security" ], "description": "Unofficial Bitwarden compatible server written in Rust", "healthy": true, "healthy_error": null, - "home": "https://github.com/un-boxing-hosting/TrueCharts-Scale/premium/vaultwarden", - "location": "/home/runner/_work/catalog/catalog/premium/vaultwarden", + "home": "https://truecharts.org/charts/premium/vaultwarden", + "location": "/app/catalog/premium/vaultwarden", "latest_version": "27.1.2", "latest_app_version": "1.30.5", "latest_human_version": "1.30.5_27.1.2", - "last_update": "2024-05-29 12:35:14", + "last_update": "2024-09-22 11:56:32", "name": "vaultwarden", "recommended": false, "title": "Vaultwarden", @@ -40,21 +39,20 @@ } }, "stable": { - "lidarr": { - "app_readme": "

Looks and smells like Sonarr but made for music

\n

This App is supplied by TrueCharts, for more information visit the manual: https://github.com/un-boxing-hosting/TrueCharts-Scale/stable/lidarr

\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!

", + "app_readme": "

Looks and smells like Sonarr but made for music

\n

This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/lidarr

\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!

", "categories": [ "media" ], "description": "Looks and smells like Sonarr but made for music", "healthy": true, "healthy_error": null, - "home": "https://github.com/un-boxing-hosting/TrueCharts-Scale/stable/lidarr", - "location": "/home/runner/_work/catalog/catalog/stable/lidarr", + "home": "https://truecharts.org/charts/stable/lidarr", + "location": "/app/catalog/stable/lidarr", "latest_version": "22.1.6", "latest_app_version": "2.3.3.4204", "latest_human_version": "2.3.3.4204_22.1.6", - "last_update": "2024-05-29 12:35:14", + "last_update": "2024-11-14 00:26:29", "name": "lidarr", "recommended": false, "title": "Lidarr", @@ -76,19 +74,19 @@ "icon_url": "https://truecharts.org/img/hotlink-ok/chart-icons/lidarr.webp" }, "plex": { - "app_readme": "

Plex Media Server

\n

This App is supplied by TrueCharts, for more information visit the manual: https://github.com/un-boxing-hosting/TrueCharts-Scale/stable/plex

\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!

", + "app_readme": "

Plex Media Server

\n

This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/plex

\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!

", "categories": [ "media" ], "description": "Plex Media Server", "healthy": true, "healthy_error": null, - "home": "https://github.com/un-boxing-hosting/TrueCharts-Scale/stable/plex", - "location": "/home/runner/_work/catalog/catalog/stable/plex", + "home": "https://truecharts.org/charts/stable/plex", + "location": "/app/catalog/stable/plex", "latest_version": "19.0.3", "latest_app_version": "1.40.4.8679", "latest_human_version": "1.40.4.8679_19.0.3", - "last_update": "2024-07-14 12:35:14", + "last_update": "2024-09-22 11:56:32", "name": "plex", "recommended": false, "title": "Plex", @@ -109,19 +107,19 @@ "icon_url": "https://truecharts.org/img/hotlink-ok/chart-icons/plex.webp" }, "prowlarr": { - "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://github.com/un-boxing-hosting/TrueCharts-Scale/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!

", + "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!

", "categories": [ "media" ], "description": "Indexer manager/proxy built on the popular arr net base stack to integrate with your various PVR apps.", "healthy": true, "healthy_error": null, - "home": "https://github.com/un-boxing-hosting/TrueCharts-Scale/stable/prowlarr", - "location": "/home/runner/_work/catalog/catalog/stable/prowlarr", + "home": "https://truecharts.org/charts/stable/prowlarr", + "location": "/app/catalog/stable/prowlarr", "latest_version": "18.3.1", "latest_app_version": "1.20.1.4603", "latest_human_version": "1.20.1.4603_18.3.1", - "last_update": "2024-07-14 12:35:14", + "last_update": "2024-09-22 11:56:32", "name": "prowlarr", "recommended": false, "title": "Prowlarr", @@ -144,19 +142,19 @@ "icon_url": "https://truecharts.org/img/hotlink-ok/chart-icons/prowlarr.webp" }, "radarr": { - "app_readme": "

A fork of Sonarr to work with movies \u00e0 la Couchpotato

\n

This App is supplied by TrueCharts, for more information visit the manual: https://github.com/un-boxing-hosting/TrueCharts-Scale/stable/radarr

\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!

", + "app_readme": "

A fork of Sonarr to work with movies \u00e0 la Couchpotato

\n

This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/radarr

\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!

", "categories": [ "media" ], "description": "A fork of Sonarr to work with movies \u00e0 la Couchpotato", "healthy": true, "healthy_error": null, - "home": "https://github.com/un-boxing-hosting/TrueCharts-Scale/stable/radarr", - "location": "/home/runner/_work/catalog/catalog/stable/radarr", + "home": "https://truecharts.org/charts/stable/radarr", + "location": "/app/catalog/stable/radarr", "latest_version": "23.2.0", "latest_app_version": "5.7.0.8882", "latest_human_version": "5.7.0.8882_23.2.0", - "last_update": "2024-07-14 12:35:14", + "last_update": "2024-09-22 11:56:32", "name": "radarr", "recommended": false, "title": "Radarr", @@ -178,19 +176,19 @@ "icon_url": "https://truecharts.org/img/hotlink-ok/chart-icons/radarr.webp" }, "readarr": { - "app_readme": "

A fork of Radarr to work with Books & AudioBooks

\n

This App is supplied by TrueCharts, for more information visit the manual: https://github.com/un-boxing-hosting/TrueCharts-Scale/stable/readarr

\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!

", + "app_readme": "

A fork of Radarr to work with Books & AudioBooks

\n

This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/readarr

\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!

", "categories": [ "media" ], "description": "A fork of Radarr to work with Books & AudioBooks", "healthy": true, "healthy_error": null, - "home": "https://github.com/un-boxing-hosting/TrueCharts-Scale/stable/readarr", - "location": "/home/runner/_work/catalog/catalog/stable/readarr", + "home": "https://truecharts.org/charts/stable/readarr", + "location": "/app/catalog/stable/readarr", "latest_version": "22.0.12", "latest_app_version": "0.3.27.2538", "latest_human_version": "0.3.27.2538_22.0.12", - "last_update": "2024-05-29 12:35:14", + "last_update": "2024-09-22 11:56:32", "name": "readarr", "recommended": false, "title": "Readarr", @@ -213,19 +211,19 @@ "icon_url": "https://truecharts.org/img/hotlink-ok/chart-icons/readarr.webp" }, "sabnzbd": { - "app_readme": "

Free and easy binary newsreader

\n

This App is supplied by TrueCharts, for more information visit the manual: https://github.com/un-boxing-hosting/TrueCharts-Scale/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!

", + "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!

", "categories": [ "media" ], "description": "Free and easy binary newsreader", "healthy": true, "healthy_error": null, - "home": "https://github.com/un-boxing-hosting/TrueCharts-Scale/stable/sabnzbd", - "location": "/home/runner/_work/catalog/catalog/stable/sabnzbd", + "home": "https://truecharts.org/charts/stable/sabnzbd", + "location": "/app/catalog/stable/sabnzbd", "latest_version": "20.1.5", "latest_app_version": "4.3.1", "latest_human_version": "4.3.1_20.1.5", - "last_update": "2024-05-29 12:35:14", + "last_update": "2024-11-14 00:29:43", "name": "sabnzbd", "recommended": false, "title": "Sabnzbd", @@ -247,19 +245,19 @@ "icon_url": "https://truecharts.org/img/hotlink-ok/chart-icons/sabnzbd.webp" }, "sonarr": { - "app_readme": "

Smart PVR for newsgroup and bittorrent users

\n

This App is supplied by TrueCharts, for more information visit the manual: https://github.com/un-boxing-hosting/TrueCharts-Scale/stable/sonarr

\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!

", + "app_readme": "

Smart PVR for newsgroup and bittorrent users

\n

This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/sonarr

\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!

", "categories": [ "media" ], "description": "Smart PVR for newsgroup and bittorrent users", "healthy": true, "healthy_error": null, - "home": "https://github.com/un-boxing-hosting/TrueCharts-Scale/stable/sonarr", - "location": "/home/runner/_work/catalog/catalog/stable/sonarr", - "latest_version": "23.0.3", - "latest_app_version": "4.0.7.1863", - "latest_human_version": "4.0.7.1863_23.0.3", - "last_update": "2024-07-14 12:35:14", + "home": "https://truecharts.org/charts/stable/sonarr", + "location": "/app/catalog/stable/sonarr", + "latest_version": "22.0.10", + "latest_app_version": "4.0.4.1491", + "latest_human_version": "4.0.4.1491_22.0.10", + "last_update": "2024-09-26 15:21:18", "name": "sonarr", "recommended": false, "title": "Sonarr", @@ -280,23 +278,22 @@ ], "icon_url": "https://truecharts.org/img/hotlink-ok/chart-icons/sonarr.webp" } - }, "system": { "cert-manager": { - "app_readme": "

Cert-Manager is a kubernetes-aware certificate manager

\n

This App is supplied by TrueCharts, for more information visit the manual: https://github.com/un-boxing-hosting/TrueCharts-Scale/system/cert-manager

\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!

", + "app_readme": "

Cert-Manager is a kubernetes-aware certificate manager

\n

This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/system/cert-manager

\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!

", "categories": [ "operators" ], "description": "Cert-Manager is a kubernetes-aware certificate manager", "healthy": true, "healthy_error": null, - "home": "https://github.com/un-boxing-hosting/TrueCharts-Scale/system/cert-manager", - "location": "/home/runner/_work/catalog/catalog/system/cert-manager", + "home": "https://truecharts.org/charts/system/cert-manager", + "location": "/app/catalog/system/cert-manager", "latest_version": "5.0.4", "latest_app_version": "latest", "latest_human_version": "latest_5.0.4", - "last_update": "2024-05-29 12:35:14", + "last_update": "2024-09-22 11:56:32", "name": "cert-manager", "recommended": false, "title": "Cert-manager", @@ -318,19 +315,19 @@ "icon_url": "https://truecharts.org/img/hotlink-ok/chart-icons/cert-manager.webp" }, "cloudnative-pg": { - "app_readme": "

CloudNativePG is a clustered postgresql database operator

\n

This App is supplied by TrueCharts, for more information visit the manual: https://github.com/un-boxing-hosting/TrueCharts-Scale/system/cloudnative-pg

\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!

", + "app_readme": "

CloudNativePG is a clustered postgresql database operator

\n

This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/system/cloudnative-pg

\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!

", "categories": [ "operators" ], "description": "CloudNativePG is a clustered postgresql database operator", "healthy": true, "healthy_error": null, - "home": "https://github.com/un-boxing-hosting/TrueCharts-Scale/system/cloudnative-pg", - "location": "/home/runner/_work/catalog/catalog/system/cloudnative-pg", + "home": "https://truecharts.org/charts/system/cloudnative-pg", + "location": "/app/catalog/system/cloudnative-pg", "latest_version": "7.0.5", "latest_app_version": "latest", "latest_human_version": "latest_7.0.5", - "last_update": "2024-05-29 12:35:14", + "last_update": "2024-09-22 11:56:32", "name": "cloudnative-pg", "recommended": false, "title": "Cloudnative-pg", @@ -352,19 +349,19 @@ "icon_url": "https://truecharts.org/img/hotlink-ok/chart-icons/cloudnative-pg.webp" }, "grafana-agent-operator": { - "app_readme": "

Grafana Scraping Agent Operator

\n

This App is supplied by TrueCharts, for more information visit the manual: https://github.com/un-boxing-hosting/TrueCharts-Scale/system/grafana-agent-operator

\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!

", + "app_readme": "

Grafana Scraping Agent Operator

\n

This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/system/grafana-agent-operator

\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!

", "categories": [ "system" ], "description": "Grafana Scraping Agent Operator", "healthy": true, "healthy_error": null, - "home": "https://github.com/un-boxing-hosting/TrueCharts-Scale/system/grafana-agent-operator", - "location": "/home/runner/_work/catalog/catalog/system/grafana-agent-operator", + "home": "https://truecharts.org/charts/system/grafana-agent-operator", + "location": "/app/catalog/system/grafana-agent-operator", "latest_version": "1.8.7", "latest_app_version": "0.39.2", "latest_human_version": "0.39.2_1.8.7", - "last_update": "2024-05-29 12:35:14", + "last_update": "2024-09-22 11:56:32", "name": "grafana-agent-operator", "recommended": false, "title": "Grafana-agent-operator", @@ -385,19 +382,19 @@ "icon_url": "https://truecharts.org/img/hotlink-ok/chart-icons/grafana-agent-operator.webp" }, "kubeapps": { - "app_readme": "

KubeApps is a Kubernetes-as-Apps solution

\n

This App is supplied by TrueCharts, for more information visit the manual: https://github.com/un-boxing-hosting/TrueCharts-Scale/system/kubeapps

\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!

", + "app_readme": "

KubeApps is a Kubernetes-as-Apps solution

\n

This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/system/kubeapps

\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!

", "categories": [ "operators" ], "description": "KubeApps is a Kubernetes-as-Apps solution", "healthy": true, "healthy_error": null, - "home": "https://github.com/un-boxing-hosting/TrueCharts-Scale/system/kubeapps", - "location": "/home/runner/_work/catalog/catalog/system/kubeapps", + "home": "https://truecharts.org/charts/system/kubeapps", + "location": "/app/catalog/system/kubeapps", "latest_version": "3.0.5", "latest_app_version": "0.0.3", "latest_human_version": "0.0.3_3.0.5", - "last_update": "2024-05-29 12:35:14", + "last_update": "2024-09-23 18:38:33", "name": "kubeapps", "recommended": false, "title": "Kubeapps", @@ -419,19 +416,19 @@ "icon_url": "https://truecharts.org/img/hotlink-ok/chart-icons/kubeapps.webp" }, "kubernetes-reflector": { - "app_readme": "

Kubernetes-Reflector is a Kubernetes addon designed to monitor and reflect changes to secrets and configmaps across namespaces

\n

This App is supplied by TrueCharts, for more information visit the manual: https://github.com/un-boxing-hosting/TrueCharts-Scale/system/kubernetes-reflector

\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!

", + "app_readme": "

Kubernetes-Reflector is a Kubernetes addon designed to monitor and reflect changes to secrets and configmaps across namespaces

\n

This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/system/kubernetes-reflector

\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!

", "categories": [ "operators" ], "description": "Kubernetes-Reflector is a Kubernetes addon designed to monitor and reflect changes to secrets and configmaps across namespaces", "healthy": true, "healthy_error": null, - "home": "https://github.com/un-boxing-hosting/TrueCharts-Scale/system/kubernetes-reflector", - "location": "/home/runner/_work/catalog/catalog/system/kubernetes-reflector", + "home": "https://truecharts.org/charts/system/kubernetes-reflector", + "location": "/app/catalog/system/kubernetes-reflector", "latest_version": "5.0.4", "latest_app_version": "7.1.217", "latest_human_version": "7.1.217_5.0.4", - "last_update": "2024-05-29 12:35:14", + "last_update": "2024-09-22 11:56:32", "name": "kubernetes-reflector", "recommended": false, "title": "Kubernetes-reflector", @@ -452,19 +449,19 @@ "icon_url": "https://truecharts.org/img/hotlink-ok/chart-icons/kubernetes-reflector.webp" }, "metallb": { - "app_readme": "

A network load-balancer implementation for Kubernetes using standard routing protocols

\n

This App is supplied by TrueCharts, for more information visit the manual: https://github.com/un-boxing-hosting/TrueCharts-Scale/system/metallb

\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!

", + "app_readme": "

A network load-balancer implementation for Kubernetes using standard routing protocols

\n

This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/system/metallb

\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!

", "categories": [ "operators" ], "description": "A network load-balancer implementation for Kubernetes using standard routing protocols", "healthy": true, "healthy_error": null, - "home": "https://github.com/un-boxing-hosting/TrueCharts-Scale/system/metallb", - "location": "/home/runner/_work/catalog/catalog/system/metallb", + "home": "https://truecharts.org/charts/system/metallb", + "location": "/app/catalog/system/metallb", "latest_version": "15.0.4", "latest_app_version": "latest", "latest_human_version": "latest_15.0.4", - "last_update": "2024-05-29 12:35:14", + "last_update": "2024-09-22 11:56:32", "name": "metallb", "recommended": false, "title": "Metallb", @@ -486,19 +483,19 @@ "icon_url": "https://truecharts.org/img/hotlink-ok/chart-icons/metallb.webp" }, "openebs": { - "app_readme": "

OpenEBS is a umbrella chart for multiple container storage provisioners

\n

This App is supplied by TrueCharts, for more information visit the manual: https://github.com/un-boxing-hosting/TrueCharts-Scale/system/openebs

\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!

", + "app_readme": "

OpenEBS is a umbrella chart for multiple container storage provisioners

\n

This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/system/openebs

\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!

", "categories": [ "CSI" ], "description": "OpenEBS is a umbrella chart for multiple container storage provisioners", "healthy": true, "healthy_error": null, - "home": "https://github.com/un-boxing-hosting/TrueCharts-Scale/system/openebs", - "location": "/home/runner/_work/catalog/catalog/system/openebs", + "home": "https://truecharts.org/charts/system/openebs", + "location": "/app/catalog/system/openebs", "latest_version": "6.0.1", "latest_app_version": "latest", "latest_human_version": "latest_6.0.1", - "last_update": "2024-05-29 12:35:14", + "last_update": "2024-09-22 11:56:32", "name": "openebs", "recommended": false, "title": "Openebs", @@ -520,19 +517,19 @@ "icon_url": "https://truecharts.org/img/hotlink-ok/chart-icons/openebs.webp" }, "prometheus-operator": { - "app_readme": "

Prometheus Operator is an operator for prometheus

\n

This App is supplied by TrueCharts, for more information visit the manual: https://github.com/un-boxing-hosting/TrueCharts-Scale/system/prometheus-operator

\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!

", + "app_readme": "

Prometheus Operator is an operator for prometheus

\n

This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/system/prometheus-operator

\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!

", "categories": [ "operators" ], "description": "Prometheus Operator is an operator for prometheus", "healthy": true, "healthy_error": null, - "home": "https://github.com/un-boxing-hosting/TrueCharts-Scale/system/prometheus-operator", - "location": "/home/runner/_work/catalog/catalog/system/prometheus-operator", + "home": "https://truecharts.org/charts/system/prometheus-operator", + "location": "/app/catalog/system/prometheus-operator", "latest_version": "7.0.4", "latest_app_version": "latest", "latest_human_version": "latest_7.0.4", - "last_update": "2024-05-29 12:35:14", + "last_update": "2024-09-22 11:56:32", "name": "prometheus-operator", "recommended": false, "title": "Prometheus-operator", @@ -553,19 +550,19 @@ "icon_url": "https://truecharts.org/img/hotlink-ok/chart-icons/prometheus-operator.webp" }, "snapshot-controller": { - "app_readme": "

Deploys a Snapshot Controller in a cluster. Snapshot Controllers are often bundled with the Kubernetes distribution,\nthis chart is meant for cases where it is not.\nAlso deploys the Snapshot Validation Webhook and configures your cluster to validate every VolumeSnapshot and\nVolumeSnapshotContent resource by sending it to the webhook.

\n

This App is supplied by TrueCharts, for more information visit the manual: https://github.com/un-boxing-hosting/TrueCharts-Scale/system/snapshot-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!

", + "app_readme": "

Deploys a Snapshot Controller in a cluster. Snapshot Controllers are often bundled with the Kubernetes distribution,\nthis chart is meant for cases where it is not.\nAlso deploys the Snapshot Validation Webhook and configures your cluster to validate every VolumeSnapshot and\nVolumeSnapshotContent resource by sending it to the webhook.

\n

This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/system/snapshot-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!

", "categories": [ "network" ], "description": "Deploys a Snapshot Controller in a cluster. Snapshot Controllers are often bundled with the Kubernetes distribution,\nthis chart is meant for cases where it is not.\nAlso deploys the Snapshot Validation Webhook and configures your cluster to validate every `VolumeSnapshot` and\n`VolumeSnapshotContent` resource by sending it to the webhook.\n", "healthy": true, "healthy_error": null, - "home": "https://github.com/un-boxing-hosting/TrueCharts-Scale/system/snapshot-controller", - "location": "/home/runner/_work/catalog/catalog/system/snapshot-controller", + "home": "https://truecharts.org/charts/system/snapshot-controller", + "location": "/app/catalog/system/snapshot-controller", "latest_version": "1.0.1", "latest_app_version": "7.0.1", "latest_human_version": "7.0.1_1.0.1", - "last_update": "2024-05-29 12:35:14", + "last_update": "2024-09-20 02:39:05", "name": "snapshot-controller", "recommended": false, "title": "Snapshot-controller", @@ -587,19 +584,19 @@ "icon_url": "https://truecharts.org/img/hotlink-ok/chart-icons/snapshot-controller.webp" }, "traefik-crds": { - "app_readme": "

Traefik-CRDs contains the CRD's for Traefik

\n

This App is supplied by TrueCharts, for more information visit the manual: https://github.com/un-boxing-hosting/TrueCharts-Scale/system/traefik-crds

\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!

", + "app_readme": "

Traefik-CRDs contains the CRD's for Traefik

\n

This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/system/traefik-crds

\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!

", "categories": [ "network" ], "description": "Traefik-CRDs contains the CRD's for Traefik", "healthy": true, "healthy_error": null, - "home": "https://github.com/un-boxing-hosting/TrueCharts-Scale/system/traefik-crds", - "location": "/home/runner/_work/catalog/catalog/system/traefik-crds", + "home": "https://truecharts.org/charts/system/traefik-crds", + "location": "/app/catalog/system/traefik-crds", "latest_version": "2.0.4", "latest_app_version": "latest", "latest_human_version": "latest_2.0.4", - "last_update": "2024-05-29 12:35:14", + "last_update": "2024-09-22 11:56:32", "name": "traefik-crds", "recommended": false, "title": "Traefik-crds", @@ -622,19 +619,19 @@ "icon_url": "https://truecharts.org/img/hotlink-ok/chart-icons/traefik-crds.webp" }, "velero": { - "app_readme": "

Velero is a kubernetes-native backup solution

\n

This App is supplied by TrueCharts, for more information visit the manual: https://github.com/un-boxing-hosting/TrueCharts-Scale/system/velero

\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!

", + "app_readme": "

Velero is a kubernetes-native backup solution

\n

This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/system/velero

\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!

", "categories": [ "operators" ], "description": "Velero is a kubernetes-native backup solution", "healthy": true, "healthy_error": null, - "home": "https://github.com/un-boxing-hosting/TrueCharts-Scale/system/velero", - "location": "/home/runner/_work/catalog/catalog/system/velero", + "home": "https://truecharts.org/charts/system/velero", + "location": "/app/catalog/system/velero", "latest_version": "4.7.5", "latest_app_version": "latest", "latest_human_version": "latest_4.7.5", - "last_update": "2024-05-29 12:35:14", + "last_update": "2024-09-22 11:56:32", "name": "velero", "recommended": false, "title": "Velero", @@ -656,19 +653,19 @@ "icon_url": "https://truecharts.org/img/hotlink-ok/chart-icons/velero.png" }, "volsync": { - "app_readme": "

volsync is a storage backup and synchronisation tool.

\n

This App is supplied by TrueCharts, for more information visit the manual: https://github.com/un-boxing-hosting/TrueCharts-Scale/system/volsync

\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!

", + "app_readme": "

volsync is a storage backup and synchronisation tool.

\n

This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/system/volsync

\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!

", "categories": [ "network" ], "description": "volsync is a storage backup and synchronisation tool.", "healthy": true, "healthy_error": null, - "home": "https://github.com/un-boxing-hosting/TrueCharts-Scale/system/volsync", - "location": "/home/runner/_work/catalog/catalog/system/volsync", + "home": "https://truecharts.org/charts/system/volsync", + "location": "/app/catalog/system/volsync", "latest_version": "1.0.8", "latest_app_version": "0.9.1", "latest_human_version": "0.9.1_1.0.8", - "last_update": "2024-05-29 12:35:14", + "last_update": "2024-09-20 02:39:05", "name": "volsync", "recommended": false, "title": "Volsync", @@ -692,19 +689,19 @@ "icon_url": "https://truecharts.org/img/hotlink-ok/chart-icons/volsync.webp" }, "volumesnapshots": { - "app_readme": "

volumesnapshots contains the CRD's for Kubernetes Volume Snapshots

\n

This App is supplied by TrueCharts, for more information visit the manual: https://github.com/un-boxing-hosting/TrueCharts-Scale/system/volumesnapshots

\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!

", + "app_readme": "

volumesnapshots contains the CRD's for Kubernetes Volume Snapshots

\n

This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/system/volumesnapshots

\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!

", "categories": [ "network" ], "description": "volumesnapshots contains the CRD's for Kubernetes Volume Snapshots", "healthy": true, "healthy_error": null, - "home": "https://github.com/un-boxing-hosting/TrueCharts-Scale/system/volumesnapshots", - "location": "/home/runner/_work/catalog/catalog/system/volumesnapshots", + "home": "https://truecharts.org/charts/system/volumesnapshots", + "location": "/app/catalog/system/volumesnapshots", "latest_version": "2.0.3", "latest_app_version": "latest", "latest_human_version": "latest_2.0.3", - "last_update": "2024-05-29 12:35:14", + "last_update": "2024-09-22 11:56:32", "name": "volumesnapshots", "recommended": false, "title": "Volumesnapshots", diff --git a/catalog_validation/ix-source/.github/workflows/ci.yml b/catalog_validation/ix-source/.github/workflows/ci.yml deleted file mode 100644 index e389fbd40f..0000000000 --- a/catalog_validation/ix-source/.github/workflows/ci.yml +++ /dev/null @@ -1,34 +0,0 @@ -name: CI - -on: [push] - -jobs: - build-deb: - runs-on: ubuntu-latest - container: - image: ixsystems/catalog_validation:latest - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Build deb package - run: > - dpkg-buildpackage - -B - --no-sign - -jauto - - - name: Create artifacts dir - run: mkdir artifacts - if: success() - - - name: Move artifacts - run: mv ../*.deb artifacts - if: success() - - - uses: actions/upload-artifact@v4 - with: - name: py-catalog-validation - path: artifacts - if: success() diff --git a/catalog_validation/ix-source/.github/workflows/docker_image.yml b/catalog_validation/ix-source/.github/workflows/docker_image.yml deleted file mode 100644 index 91f66097db..0000000000 --- a/catalog_validation/ix-source/.github/workflows/docker_image.yml +++ /dev/null @@ -1,28 +0,0 @@ -name: build_image - -on: - push: - branches: - - 'master' - -jobs: - docker: - runs-on: ubuntu-latest - steps: - - name: Set up QEMU - uses: docker/setup-qemu-action@v1 - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 - - name: Login to DockerHub - uses: docker/login-action@v1 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Build and push - id: docker_build - uses: docker/build-push-action@v2 - with: - push: true - tags: ixsystems/catalog_validation:latest - - name: Image digest - run: echo ${{ steps.docker_build.outputs.digest }} diff --git a/catalog_validation/ix-source/.github/workflows/lint.yml b/catalog_validation/ix-source/.github/workflows/lint.yml deleted file mode 100644 index 8a0b5c627d..0000000000 --- a/catalog_validation/ix-source/.github/workflows/lint.yml +++ /dev/null @@ -1,21 +0,0 @@ -name: flake8 - -on: [push] - -jobs: - build: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - name: Set up Python 3.8 - uses: actions/setup-python@v5 - with: - python-version: 3.8 - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install flake8 - - name: Analysing the code with flake8 - run: flake8 . diff --git a/catalog_validation/ix-source/.github/workflows/test.yaml b/catalog_validation/ix-source/.github/workflows/test.yaml deleted file mode 100644 index 379f7a74e6..0000000000 --- a/catalog_validation/ix-source/.github/workflows/test.yaml +++ /dev/null @@ -1,27 +0,0 @@ -name: catalog_validation_test - -on: [push] - -jobs: - build: - - runs-on: ubuntu-latest - container: - image: ghcr.io/truenas/middleware:master - - steps: - - uses: actions/checkout@v4 - - name: Setup dependencies - run: | - /usr/bin/install-dev-tools - - - name: Install dependencies - run: | - pip install --break-system-packages -r catalog_validation/pytest/requirements.txt - pip install --break-system-packages -r requirements.txt - - - name: Installing catalog validation - run: python setup.py install - - - name: Running test - run: pytest catalog_validation/pytest/ diff --git a/catalog_validation/ix-source/.gitignore b/catalog_validation/ix-source/.gitignore deleted file mode 100644 index 99ac911613..0000000000 --- a/catalog_validation/ix-source/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -catalog_validation/__pycache__ -catalog_validation/schema/__pycache__ diff --git a/catalog_validation/ix-source/Dockerfile b/catalog_validation/ix-source/Dockerfile deleted file mode 100644 index 1d29a60560..0000000000 --- a/catalog_validation/ix-source/Dockerfile +++ /dev/null @@ -1,23 +0,0 @@ -FROM ghcr.io/truenas/middleware:master - -RUN /usr/bin/install-dev-tools - -RUN apt-get install -y \ - debhelper-compat \ - dh-python \ - python3-dev \ - python3-setuptools \ - devscripts \ - python3-jsonschema \ - python3-semantic-version \ - python3-kubernetes \ - python3-yaml - -ENV PYTHONUNBUFFERED 1 -ENV WORK_DIR /app -RUN mkdir -p ${WORK_DIR} -WORKDIR ${WORK_DIR} - -ADD . ${WORK_DIR}/ -RUN pip install --break-system-packages -r requirements.txt -RUN pip install --break-system-packages -U . diff --git a/catalog_validation/ix-source/LICENSE b/catalog_validation/ix-source/LICENSE deleted file mode 100644 index f288702d2f..0000000000 --- a/catalog_validation/ix-source/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/catalog_validation/ix-source/README.md b/catalog_validation/ix-source/README.md deleted file mode 100644 index e142d11146..0000000000 --- a/catalog_validation/ix-source/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# catalogs_validation -Validate truenas compliant catalog structure / format. diff --git a/catalog_validation/ix-source/catalog_validation/__init__.py b/catalog_validation/ix-source/catalog_validation/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/catalog_validation/ix-source/catalog_validation/ci/__init__.py b/catalog_validation/ix-source/catalog_validation/ci/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/catalog_validation/ix-source/catalog_validation/ci/utils.py b/catalog_validation/ix-source/catalog_validation/ci/utils.py deleted file mode 100644 index 2b8f0914fd..0000000000 --- a/catalog_validation/ix-source/catalog_validation/ci/utils.py +++ /dev/null @@ -1,54 +0,0 @@ -import os -import yaml - -from catalog_validation.items.utils import DEVELOPMENT_DIR -from jsonschema import validate as json_schema_validate -from semantic_version import Version - - -DEV_DIRECTORY_RELATIVE_PATH: str = os.path.join('library', DEVELOPMENT_DIR) -TO_KEEP_VERSIONS = 'to_keep_versions.yaml' -OPTIONAL_METADATA_FILES = ['upgrade_info.json', 'upgrade_strategy', TO_KEEP_VERSIONS] -REQUIRED_METADATA_FILES = ['item.yaml'] -UPDATE_STRATEGY_FILE = 'upgrade_strategy' - - -REQUIRED_VERSIONS_SCHEMA = { - 'type': 'array', - 'items': { - 'type': 'string', - 'pattern': '[0-9]+.[0-9]+.[0-9]+' - } -} - - -def get_app_version(app_path: str) -> str: - # This assumes that file exists and version is specified and is good - with open(os.path.join(app_path, 'Chart.yaml'), 'r') as f: - return yaml.safe_load(f.read())['version'] - - -def get_ci_development_directory(catalog_path: str) -> str: - return os.path.join(catalog_path, DEV_DIRECTORY_RELATIVE_PATH) - - -def get_to_keep_versions(app_dir_path: str) -> list: - required_version_path = os.path.join(app_dir_path, TO_KEEP_VERSIONS) - if not os.path.exists(required_version_path): - return [] - - with open(required_version_path, 'r') as f: - data = yaml.safe_load(f.read()) - json_schema_validate(data, REQUIRED_VERSIONS_SCHEMA) - return data - - -def version_has_been_bumped(app_path: str, new_version: str) -> bool: - if not os.path.isdir(app_path): - return True - - versions = [ - Version(version) for version in filter(lambda v: os.path.isdir(os.path.join(app_path, v)), os.listdir(app_path)) - ] - versions.sort() - return not versions or Version(new_version) > versions[-1] diff --git a/catalog_validation/ix-source/catalog_validation/ci/validate.py b/catalog_validation/ix-source/catalog_validation/ci/validate.py deleted file mode 100644 index 6de3a360b2..0000000000 --- a/catalog_validation/ix-source/catalog_validation/ci/validate.py +++ /dev/null @@ -1,96 +0,0 @@ -import os -import yaml - -from catalog_validation.exceptions import ValidationErrors -from catalog_validation.validation import validate_catalog_item_version, validate_chart_version -from jsonschema import ValidationError as JsonValidationError - -from .utils import ( - get_app_version, get_ci_development_directory, REQUIRED_METADATA_FILES, version_has_been_bumped, - TO_KEEP_VERSIONS, REQUIRED_VERSIONS_SCHEMA, get_to_keep_versions, UPDATE_STRATEGY_FILE -) - - -def validate_dev_directory_structure(catalog_path: str, to_check_apps: dict) -> None: - verrors = ValidationErrors() - dev_directory = get_ci_development_directory(catalog_path) - if not os.path.exists(dev_directory): - return - - for train_name in filter( - lambda name: name in to_check_apps and os.path.isdir(os.path.join(dev_directory, name)), - os.listdir(dev_directory) - ): - validate_train( - catalog_path, os.path.join(dev_directory, train_name), f'dev.{train_name}', to_check_apps[train_name] - ) - verrors.check() - - -def validate_train(catalog_path: str, train_path: str, schema: str, to_check_apps: list) -> None: - verrors = ValidationErrors() - train_name = os.path.basename(train_path) - for app_name in filter( - lambda name: os.path.isdir(os.path.join(train_path, name)), os.listdir(train_path) - ): - if app_name not in to_check_apps: - continue - - app_path = os.path.join(train_path, app_name) - try: - validate_app(app_path, f'{schema}.{app_name}') - except ValidationErrors as ve: - verrors.extend(ve) - else: - published_train_app_path = os.path.join(catalog_path, train_name, app_name) - if not os.path.exists(published_train_app_path): - # The application is new and we are good - continue - - if not version_has_been_bumped(published_train_app_path, get_app_version(app_path)): - verrors.add( - f'{schema}.{app_name}.version', - 'Version must be bumped as app has been changed but version has not been updated' - ) - - verrors.check() - - -def validate_keep_versions(app_dir_path: str, schema: str, verrors: ValidationErrors) -> ValidationErrors: - try: - get_to_keep_versions(app_dir_path) - except yaml.YAMLError: - verrors.add(f'{schema}.{REQUIRED_VERSIONS_SCHEMA}', 'Invalid yaml format') - except JsonValidationError: - verrors.add( - f'{schema}.{REQUIRED_VERSIONS_SCHEMA}', - f'Invalid json schema {TO_KEEP_VERSIONS} must contain list of required versions' - ) - - -def validate_upgrate_strategy(app_path, schema, verrors): - upgrade_strategy_path = os.path.join(app_path, UPDATE_STRATEGY_FILE) - if os.path.exists(upgrade_strategy_path) and not os.access(upgrade_strategy_path, os.X_OK): - verrors.add(schema, f'{upgrade_strategy_path!r} is not executable') - - -def validate_app(app_dir_path: str, schema: str) -> None: - app_name = os.path.basename(app_dir_path) - chart_version_path = os.path.join(app_dir_path, 'Chart.yaml') - verrors = validate_chart_version(ValidationErrors(), chart_version_path, schema, app_name) - validate_keep_versions(app_dir_path, app_name, verrors) - verrors.check() - - validate_catalog_item_version(app_dir_path, schema, get_app_version(app_dir_path), app_name, True) - - required_files = set(REQUIRED_METADATA_FILES) - available_files = set( - f for f in filter(lambda f: os.path.isfile(os.path.join(app_dir_path, f)), os.listdir(app_dir_path)) - ) - if missing_files := required_files - available_files: - verrors.add( - f'{schema}.required_files', - f'{", ".join(missing_files)!r} file(s) must be specified' - ) - validate_upgrate_strategy(app_dir_path, f'{schema}.{UPDATE_STRATEGY_FILE}', verrors) - verrors.check() diff --git a/catalog_validation/ix-source/catalog_validation/exceptions.py b/catalog_validation/ix-source/catalog_validation/exceptions.py deleted file mode 100644 index 5fba74a23a..0000000000 --- a/catalog_validation/ix-source/catalog_validation/exceptions.py +++ /dev/null @@ -1,67 +0,0 @@ -import errno - - -class ValidationException(Exception): - def __init__(self, error_msg, error_no=errno.EFAULT): - self.errmsg = error_msg - self.errno = error_no - - def get_error_name(self): - return errno.errorcode.get(self.errno) or 'EUNKNOWN' - - def __str__(self): - return f'[{self.get_error_name()}] {self.errmsg}' - - -class ValidationError(ValidationException): - def __init__(self, attribute, errmsg, errno=errno.EFAULT): - self.attribute = attribute - self.errmsg = errmsg - self.errno = errno - - def __str__(self): - return f'[{self.get_error_name()}] {self.attribute}: {self.errmsg}' - - -class ValidationErrors(ValidationException): - def __init__(self, errors=None): - self.errors = errors or [] - - def add(self, attribute, errmsg, errno=errno.EINVAL): - self.errors.append(ValidationError(attribute, errmsg, errno)) - - def add_validation_error(self, validation_error): - self.errors.append(validation_error) - - def add_child(self, attribute, child): - for e in child.errors: - self.add(f"{attribute}.{e.attribute}", e.errmsg, e.errno) - - def check(self): - if self: - raise self - - def extend(self, errors): - for e in errors.errors: - self.add(e.attribute, e.errmsg, e.errno) - - def __iter__(self): - for e in self.errors: - yield e.attribute, e.errmsg, e.errno - - def __bool__(self): - return bool(self.errors) - - def __str__(self): - output = '' - for e in self.errors: - output += str(e) + '\n' - return output - - def __contains__(self, item): - return item in [e.attribute for e in self.errors] - - -class CatalogDoesNotExist(ValidationException): - def __init__(self, path): - super().__init__(f'Failed to find a catalog at {path}', errno.ENOENT) diff --git a/catalog_validation/ix-source/catalog_validation/git_utils.py b/catalog_validation/ix-source/catalog_validation/git_utils.py deleted file mode 100644 index adbcf5fb0c..0000000000 --- a/catalog_validation/ix-source/catalog_validation/git_utils.py +++ /dev/null @@ -1,42 +0,0 @@ -import os -import subprocess - -from catalog_validation.ci.utils import DEV_DIRECTORY_RELATIVE_PATH, get_ci_development_directory -from catalog_validation.items.utils import valid_train -from collections import defaultdict - -from .ci.utils import OPTIONAL_METADATA_FILES -from .exceptions import CatalogDoesNotExist - - -def get_changed_apps(catalog_path: str, base_branch: str = 'master') -> dict: - if not os.path.exists(catalog_path): - raise CatalogDoesNotExist(catalog_path) - - cp = subprocess.run( - ['git', '-C', catalog_path, '--no-pager', 'diff', '--name-only', base_branch], - capture_output=True, check=True, - ) - dev_directory_path = get_ci_development_directory(catalog_path) - to_check_apps = defaultdict(list) - for file_path in filter( - lambda path: path and path.startswith(f'{DEV_DIRECTORY_RELATIVE_PATH}/'), - map(str.strip, cp.stdout.decode().split('\n')) - ): - dev_dir_relative_path = file_path.strip(f'{DEV_DIRECTORY_RELATIVE_PATH}/') - train_name = dev_dir_relative_path.split('/', 1)[0] - if not valid_train(train_name, os.path.join(dev_directory_path, train_name)): - continue - - app_name = dev_dir_relative_path.split('/')[1] - base_name = os.path.basename(file_path) - - if base_name in OPTIONAL_METADATA_FILES: - continue - if not os.path.isdir(os.path.join(dev_directory_path, train_name, app_name)): - continue - - if app_name not in to_check_apps[train_name]: - to_check_apps[train_name].append(app_name) - - return to_check_apps diff --git a/catalog_validation/ix-source/catalog_validation/items/__init__.py b/catalog_validation/ix-source/catalog_validation/items/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/catalog_validation/ix-source/catalog_validation/items/catalog.py b/catalog_validation/ix-source/catalog_validation/items/catalog.py deleted file mode 100644 index b45dff6433..0000000000 --- a/catalog_validation/ix-source/catalog_validation/items/catalog.py +++ /dev/null @@ -1,83 +0,0 @@ -import concurrent.futures -import functools -import os -import typing -import yaml - -from jsonschema import validate as json_schema_validate, ValidationError as JsonValidationError - -from .items_util import get_item_details, get_default_questions_context -from .utils import RECOMMENDED_APPS_FILENAME, RECOMMENDED_APPS_SCHEMA, valid_train - - -def item_details(items: dict, location: str, questions_context: typing.Optional[dict], item_key: str) -> dict: - train = items[item_key] - item = item_key.removesuffix(f'_{train}') - item_location = os.path.join(location, train, item) - return get_item_details(item_location, questions_context, {'retrieve_versions': True}) - - -def retrieve_train_names(location: str, all_trains=True, trains_filter=None) -> list: - train_names = [] - trains_filter = trains_filter or [] - for train in os.listdir(location): - if not (all_trains or train in trains_filter) or not valid_train(train, os.path.join(location, train)): - continue - train_names.append(train) - return train_names - - -def get_items_in_trains(trains_to_traverse: list, catalog_location: str) -> dict: - items = {} - for train in trains_to_traverse: - items.update({ - f'{i}_{train}': train for i in os.listdir(os.path.join(catalog_location, train)) - if os.path.isdir(os.path.join(catalog_location, train, i)) - }) - - return items - - -def retrieve_trains_data( - items: dict, catalog_location: str, preferred_trains: list, - trains_to_traverse: list, job: typing.Any = None, questions_context: typing.Optional[dict] = None -) -> typing.Tuple[dict, set]: - questions_context = questions_context or get_default_questions_context() - trains = { - 'charts': {}, - 'test': {}, - **{k: {} for k in trains_to_traverse}, - } - unhealthy_apps = set() - - total_items = len(items) - with concurrent.futures.ProcessPoolExecutor(max_workers=(5 if total_items > 10 else 2)) as exc: - for index, result in enumerate(zip(items, exc.map( - functools.partial(item_details, items, catalog_location, questions_context), - items, chunksize=(10 if total_items > 10 else 5) - ))): - item_key = result[0] - item_info = result[1] - train = items[item_key] - item = item_key.removesuffix(f'_{train}') - if job: - job.set_progress( - int((index / total_items) * 80) + 10, - f'Retrieved information of {item!r} item from {train!r} train' - ) - trains[train][item] = item_info - if train in preferred_trains and not trains[train][item]['healthy']: - unhealthy_apps.add(f'{item} ({train} train)') - - return trains, unhealthy_apps - - -def retrieve_recommended_apps(catalog_location: str) -> typing.Dict[str, list]: - try: - with open(os.path.join(catalog_location, RECOMMENDED_APPS_FILENAME), 'r') as f: - data = yaml.safe_load(f.read()) - json_schema_validate(data, RECOMMENDED_APPS_SCHEMA) - except (FileNotFoundError, JsonValidationError, yaml.YAMLError): - return {} - else: - return data diff --git a/catalog_validation/ix-source/catalog_validation/items/features.py b/catalog_validation/ix-source/catalog_validation/items/features.py deleted file mode 100644 index 3ec64c8f22..0000000000 --- a/catalog_validation/ix-source/catalog_validation/items/features.py +++ /dev/null @@ -1,19 +0,0 @@ -SUPPORTED_FEATURES = { - 'normalize/interfaceConfiguration', - 'normalize/ixVolume', - 'definitions/certificate', - 'definitions/certificateAuthority', - 'definitions/interface', - 'definitions/gpuConfiguration', - 'definitions/timezone', - 'definitions/nodeIP', - 'validations/containerImage', - 'validations/nodePort', - 'validations/hostPath', - 'validations/lockedHostPath', - 'validations/hostPathAttachments', -} - - -def version_supported(version_details: dict) -> bool: - return not bool(set(version_details['required_features']) - SUPPORTED_FEATURES) diff --git a/catalog_validation/ix-source/catalog_validation/items/items_util.py b/catalog_validation/ix-source/catalog_validation/items/items_util.py deleted file mode 100644 index 468b4bbbd4..0000000000 --- a/catalog_validation/ix-source/catalog_validation/items/items_util.py +++ /dev/null @@ -1,216 +0,0 @@ -import markdown -import os -import typing -import yaml - -from pkg_resources import parse_version - -from catalog_validation.exceptions import ValidationErrors - -from .features import version_supported -from .questions_utils import normalise_questions -from .utils import get_last_updated_date -from .validate_utils import validate_item, validate_item_version - - -ITEM_KEYS = ['icon_url'] - - -def get_item_details_base(retrieve_complete_item_keys: bool = True) -> dict: - return { - 'app_readme': None, - 'categories': [], - 'description': None, - 'healthy': False, # healthy means that each version the item hosts is valid and healthy - 'healthy_error': None, # An error string explaining why the item is not healthy - 'home': None, - 'location': None, - 'latest_version': None, - 'latest_app_version': None, - 'latest_human_version': None, - 'last_update': None, - 'name': None, - 'recommended': False, - 'title': None, - 'maintainers': [], - 'tags': [], - 'screenshots': [], - 'sources': [], - **({ - 'versions': {}, - } if retrieve_complete_item_keys else {}), - } - - -def get_item_details( - item_location: str, questions_context: typing.Optional[dict] = None, options: typing.Optional[dict] = None -) -> dict: - catalog_path = item_location.rstrip('/').rsplit('/', 2)[0] - item = item_location.rsplit('/', 1)[-1] - train = item_location.rsplit('/', 2)[-2] - - options = options or {} - retrieve_versions = options.get('retrieve_versions', True) - item_data = get_item_details_base() - item_data.update({ - 'location': item_location, - 'last_update': get_last_updated_date(catalog_path, item_location), - 'name': item, - 'title': item.capitalize(), - }) - - schema = f'{train}.{item}' - try: - validate_item(item_location, schema, False) - except ValidationErrors as verrors: - item_data['healthy_error'] = f'Following error(s) were found with {item!r}:\n' - for verror in verrors: - item_data['healthy_error'] += f'{verror[0]}: {verror[1]}' - - # If the item format is not valid - there is no point descending any further into versions - if not retrieve_versions: - item_data.pop('versions') - return item_data - - item_data.update(get_item_details_impl(item_location, schema, questions_context, { - 'retrieve_latest_version': not retrieve_versions, - 'default_values_callable': options.get('default_values_callable'), - })) - unhealthy_versions = [] - for k, v in sorted(item_data['versions'].items(), key=lambda v: parse_version(v[0]), reverse=True): - if not v['healthy']: - unhealthy_versions.append(k) - else: - chart_metadata = v['chart_metadata'] - if not item_data['app_readme']: - item_data['app_readme'] = v['app_readme'] - if not item_data['maintainers'] and chart_metadata.get('maintainers'): - item_data['maintainers'] = chart_metadata['maintainers'] - if not item_data['latest_version']: - item_data['latest_version'] = k - item_data['latest_app_version'] = chart_metadata.get('appVersion') - item_data['latest_human_version'] = '' - if item_data['latest_app_version']: - item_data['latest_human_version'] = f'{item_data["latest_app_version"]}_' - item_data['latest_human_version'] += k - if not item_data['description'] and chart_metadata.get('description'): - item_data['description'] = v['chart_metadata']['description'] - if item_data['title'] == item_data['name'].capitalize() and chart_metadata.get( - 'annotations', {} - ).get('title'): - item_data['title'] = chart_metadata['annotations']['title'] - if item_data['home'] is None and chart_metadata.get('home'): - item_data['home'] = chart_metadata['home'] - if not item_data['sources'] and chart_metadata.get('sources'): - item_data['sources'] = chart_metadata['sources'] - - if unhealthy_versions: - item_data['healthy_error'] = f'Errors were found with {", ".join(unhealthy_versions)} version(s)' - else: - item_data['healthy'] = True - if not retrieve_versions: - item_data.pop('versions') - - return item_data - - -def get_item_details_impl( - item_path: str, schema: str, questions_context: typing.Optional[dict], options: typing.Optional[dict] -) -> dict: - # Each directory under item path represents a version of the item and we need to retrieve details - # for each version available under the item - retrieve_latest_version = options.get('retrieve_latest_version') - item_data = { - 'categories': [], - 'icon_url': None, - 'screenshots': [], - 'tags': [], - 'versions': {}, - } - with open(os.path.join(item_path, 'item.yaml'), 'r') as f: - item_data.update(yaml.safe_load(f.read())) - - item_data.update({k: item_data.get(k) for k in ITEM_KEYS}) - - for version in sorted( - filter(lambda p: os.path.isdir(os.path.join(item_path, p)), os.listdir(item_path)), - reverse=True, key=parse_version, - ): - catalog_path = item_path.rstrip('/').rsplit('/', 2)[0] - version_path = os.path.join(item_path, version) - item_data['versions'][version] = version_details = { - 'healthy': False, - 'supported': False, - 'healthy_error': None, - 'location': version_path, - 'last_update': get_last_updated_date(catalog_path, version_path), - 'required_features': [], - 'human_version': version, - 'version': version, - } - try: - validate_item_version(version_details['location'], f'{schema}.{version}') - except ValidationErrors as verrors: - version_details['healthy_error'] = f'Following error(s) were found with {schema}.{version!r}:\n' - for verror in verrors: - version_details['healthy_error'] += f'{verror[0]}: {verror[1]}' - - # There is no point in trying to see what questions etc the version has as it's invalid - continue - - version_details.update({ - 'healthy': True, - **get_item_version_details(version_details['location'], questions_context) - }) - if retrieve_latest_version: - break - - return item_data - - -def get_item_version_details( - version_path: str, questions_context: typing.Optional[dict], options: typing.Optional[dict] = None -) -> dict: - version_data = {'location': version_path, 'required_features': set()} - for key, filename, parser in ( - ('chart_metadata', 'Chart.yaml', yaml.safe_load), - ('app_metadata', 'metadata.yaml', yaml.safe_load), - ('schema', 'questions.yaml', yaml.safe_load), - ('app_readme', 'app-readme.md', markdown.markdown), - ('detailed_readme', 'README.md', markdown.markdown), - ('changelog', 'CHANGELOG.md', markdown.markdown), - ): - if os.path.exists(os.path.join(version_path, filename)): - with open(os.path.join(version_path, filename), 'r') as f: - version_data[key] = parser(f.read()) - else: - version_data[key] = None - - # We will normalise questions now so that if they have any references, we render them accordingly - # like a field referring to available interfaces on the system - normalise_questions(version_data, questions_context or get_default_questions_context()) - - version_data.update({ - 'supported': version_supported(version_data), - 'required_features': list(version_data['required_features']), - }) - if options and options.get('default_values_callable'): - version_data['values'] = options['default_values_callable'](version_data) - chart_metadata = version_data['chart_metadata'] - if chart_metadata['name'] != 'ix-chart' and chart_metadata.get('appVersion'): - version_data['human_version'] = f'{chart_metadata["appVersion"]}_{chart_metadata["version"]}' - - return version_data - - -def get_default_questions_context() -> dict: - return { - 'nic_choices': [], - 'gpus': {}, - 'timezones': {'Asia/Saigon': 'Asia/Saigon', 'Asia/Damascus': 'Asia/Damascus'}, - 'node_ip': '192.168.0.10', - 'certificates': [], - 'certificate_authorities': [], - 'system.general.config': {'timezone': 'America/Los_Angeles'}, - 'unused_ports': [i for i in range(1025, 65535)], - } diff --git a/catalog_validation/ix-source/catalog_validation/items/ix_values_utils.py b/catalog_validation/ix-source/catalog_validation/items/ix_values_utils.py deleted file mode 100644 index 0fcc046b43..0000000000 --- a/catalog_validation/ix-source/catalog_validation/items/ix_values_utils.py +++ /dev/null @@ -1,58 +0,0 @@ -from jsonschema import validate as json_schema_validate, ValidationError as JsonValidationError - -from catalog_validation.exceptions import ValidationErrors - - -CUSTOM_PORTALS_JSON_SCHEMA = { - 'type': 'array', - 'items': { - 'type': 'object', - 'properties': { - 'portalName': { - 'type': 'string', - }, - 'protocol': { - 'type': 'string', 'enum': ['http', 'https'], - }, - 'useNodeIP': { - 'type': 'boolean', - }, - 'port': { - 'type': 'integer', - }, - 'path': { - 'type': 'string', - }, - }, - 'allOf': [ - { - 'if': { - 'properties': { - 'useNodeIP': { - 'const': False, - }, - }, - }, - 'then': { - 'required': ['host'], - 'properties': { - 'host': { - 'type': 'string', - }, - }, - }, - }], - 'required': ['portalName', 'protocol', 'useNodeIP', 'port'], - }, -} - - -def validate_ix_values_schema(schema, data): - verrors = ValidationErrors() - - try: - json_schema_validate(data, CUSTOM_PORTALS_JSON_SCHEMA) - except JsonValidationError as e: - verrors.add(schema, f'Failed to validate schema: {e}') - - verrors.check() diff --git a/catalog_validation/ix-source/catalog_validation/items/questions_utils.py b/catalog_validation/ix-source/catalog_validation/items/questions_utils.py deleted file mode 100644 index d0255d2add..0000000000 --- a/catalog_validation/ix-source/catalog_validation/items/questions_utils.py +++ /dev/null @@ -1,186 +0,0 @@ -import itertools - -from .utils import ACL_QUESTION, IX_VOLUMES_ACL_QUESTION - - -CUSTOM_PORTALS_KEY = 'iXPortals' -CUSTOM_PORTALS_ENABLE_KEY = 'enableIXPortals' -CUSTOM_PORTAL_GROUP_KEY = 'iXPortalsGroupName' - - -def get_custom_portal_question(group_name: str) -> dict: - return { - 'variable': CUSTOM_PORTALS_KEY, - 'label': 'User Specified Web Portals', - 'description': 'User(s) can specify custom webUI portals', - 'group': group_name, - 'schema': { - 'type': 'list', - 'items': [{ - 'variable': 'portalConfiguration', - 'label': 'Portal Configuration', - 'description': 'Configure WebUI Portal', - 'schema': { - 'type': 'dict', - 'attrs': [ - { - 'variable': 'portalName', - 'label': 'Portal Name', - 'description': 'Specify a UI Portal name to use which would be displayed in the UI', - 'schema': { - 'type': 'string', - 'default': 'Web Portal', - 'empty': False, - }, - }, - { - 'variable': 'protocol', - 'label': 'Protocol for Portal', - 'description': 'Specify protocol for Portal', - 'schema': { - 'type': 'string', - 'default': 'http', - 'enum': [ - {'value': 'http', 'description': 'HTTP Protocol'}, - {'value': 'https', 'description': 'HTTPS Protocol'}, - ], - }, - }, - { - 'variable': 'useNodeIP', - 'label': 'Use Node IP for Portal IP/Domain', - 'schema': { - 'type': 'boolean', - 'default': True, - }, - }, - { - 'variable': 'host', - 'label': 'Portal IP/Domain', - 'schema': { - 'type': 'string', - 'show_if': [['useNodeIP', '=', False]], - '$ref': ['definitions/nodeIP'], - }, - }, - { - 'variable': 'port', - 'label': 'Port', - 'description': 'Specify port to be used for Portal access', - 'schema': { - 'type': 'int', - 'max': 65535, - 'default': 15000, - }, - }, - { - 'variable': 'path', - 'label': 'Path (optional - leave empty if not required)', - 'description': 'Some app(s) might have a sub path i.e http://192.168.0.10:9000/api/', - 'schema': { - 'type': 'string', - }, - }, - ], - }, - }], - }, - } - - -def normalise_questions(version_data: dict, context: dict) -> None: - version_data['required_features'] = set() - version_data['schema']['questions'].extend( - [ - get_custom_portal_question(version_data['schema'][CUSTOM_PORTAL_GROUP_KEY]) - ] if version_data['schema'].get(CUSTOM_PORTALS_ENABLE_KEY) else [] - ) - for question in version_data['schema']['questions']: - normalise_question(question, version_data, context) - version_data['required_features'] = list(version_data['required_features']) - - -def normalise_question(question: dict, version_data: dict, context: dict) -> None: - schema = question['schema'] - for attr in itertools.chain(*[schema.get(k, []) for k in ('attrs', 'items', 'subquestions')]): - normalise_question(attr, version_data, context) - - if '$ref' not in schema: - return - - data = {} - for ref in schema['$ref']: - version_data['required_features'].add(ref) - if ref == 'definitions/interface': - data['enum'] = [ - {'value': i, 'description': f'{i!r} Interface'} for i in context['nic_choices'] - ] - elif ref == 'definitions/gpuConfiguration': - data['attrs'] = [ - { - 'variable': gpu, - 'label': f'GPU Resource ({gpu})', - 'description': 'Please enter the number of GPUs to allocate', - 'schema': { - 'type': 'int', - 'max': int(quantity), - 'enum': [ - {'value': i, 'description': f'Allocate {i!r} {gpu} GPU'} - for i in range(int(quantity) + 1) - ], - 'default': 0, - } - } for gpu, quantity in context['gpus'].items() - ] - elif ref == 'definitions/timezone': - data.update({ - 'enum': [{'value': t, 'description': f'{t!r} timezone'} for t in sorted(context['timezones'])], - 'default': context['system.general.config']['timezone'] - }) - elif ref == 'definitions/nodeIP': - data['default'] = context['node_ip'] - elif ref == 'definitions/certificate': - get_cert_ca_options(schema, data, {'value': None, 'description': 'No Certificate'}) - data['enum'] += [ - {'value': i['id'], 'description': f'{i["name"]!r} Certificate'} - for i in context['certificates'] - ] - elif ref == 'definitions/certificateAuthority': - get_cert_ca_options(schema, data, {'value': None, 'description': 'No Certificate Authority'}) - data['enum'] += [{'value': None, 'description': 'No Certificate Authority'}] + [ - {'value': i['id'], 'description': f'{i["name"]!r} Certificate Authority'} - for i in context['certificate_authorities'] - ] - elif ref == 'definitions/port': - data['enum'] = [{'value': None, 'description': 'No Port Selected'}] if schema.get('null') else [] - data['enum'] += [ - {'value': i, 'description': f'{i!r} Port'} - for i in filter( - lambda p: schema.get('min', 9000) <= p <= schema.get('max', 65534), - context['unused_ports'] - ) - ] - elif ref == 'normalize/acl': - data['attrs'] = ACL_QUESTION - elif ref == 'normalize/ixVolume': - if schema['type'] == 'dict' and any(i['variable'] == 'aclEntries' for i in schema['attrs']): - # get index of aclEntries from attrs - acl_index = next(i for i, v in enumerate(schema['attrs']) if v['variable'] == 'aclEntries') - # insert acl question before aclEntries - schema['attrs'][acl_index]['schema']['attrs'] = IX_VOLUMES_ACL_QUESTION - - schema.update(data) - - -def get_cert_ca_options(schema: dict, data: dict, default_entry: dict): - if schema.get('null', True): - data.update({ - 'enum': [default_entry], - 'default': None, - 'null': True, - }) - else: - data.update({ - 'enum': [], - 'required': True, - }) diff --git a/catalog_validation/ix-source/catalog_validation/items/utils.py b/catalog_validation/ix-source/catalog_validation/items/utils.py deleted file mode 100644 index 64abe39f90..0000000000 --- a/catalog_validation/ix-source/catalog_validation/items/utils.py +++ /dev/null @@ -1,243 +0,0 @@ -import contextlib -import os -import subprocess - -from datetime import datetime -from typing import Optional - -from catalog_validation.schema.migration_schema import MIGRATION_DIRS -from catalog_validation.utils import VALID_TRAIN_REGEX - - -DEVELOPMENT_DIR = 'ix-dev' -RECOMMENDED_APPS_FILENAME = 'recommended_apps.yaml' -RECOMMENDED_APPS_SCHEMA = { - 'type': 'object', - 'patternProperties': { - '.*': { - 'type': 'array', - 'items': {'type': 'string'}, - } - }, -} -TRAIN_IGNORE_DIRS = ['library', 'docs', DEVELOPMENT_DIR] + MIGRATION_DIRS - - -ACL_QUESTION = [ - { - 'variable': 'path', - 'label': 'Host Path', - 'description': 'Host Path to perform ACL', - 'schema': { - 'type': 'hostpath', - 'required': True, - 'empty': False, - } - }, - { - 'variable': 'entries', - 'label': 'ACL Entries', - 'description': 'ACL Entries', - 'schema': { - 'type': 'list', - 'items': [{ - 'variable': 'aclEntry', - 'label': 'ACL Entry', - 'schema': { - 'type': 'dict', - 'attrs': [ - { - 'variable': 'id_type', - 'label': 'ID Type', - 'schema': { - 'type': 'string', - 'enum': [ - {'value': 'USER', 'description': 'Entry is for a USER'}, - {'value': 'GROUP', 'description': 'Entry is for a GROUP'}, - ], - 'default': 'USER', - } - }, - { - 'variable': 'id', - 'label': 'ID', - 'description': 'Make sure to check the ID value is correct and aligns with ' - 'RunAs user context of the application', - 'schema': { - 'type': 'int', - 'required': True, - 'min': 0, - } - }, - { - 'variable': 'access', - 'label': 'Access', - 'schema': { - 'type': 'string', - 'enum': [ - {'value': 'READ', 'description': 'Read Access'}, - {'value': 'MODIFY', 'description': 'Modify Access'}, - {'value': 'FULL_CONTROL', 'description': 'FULL_CONTROL Access'}, - ], - } - } - ], - } - }] - } - }, - { - 'variable': 'options', - 'label': 'ACL Options', - 'schema': { - 'type': 'dict', - 'attrs': [ - { - 'variable': 'force', - 'label': 'Force Flag', - 'description': 'Enabling `Force` applies ACL even if the path has existing data', - 'schema': { - 'type': 'boolean', - 'default': False, - } - }, - ], - }, - }, -] - -IX_VOLUMES_ACL_QUESTION = [ - { - 'variable': 'path', - 'label': 'Path', - 'description': 'Path to perform ACL', - 'schema': { - 'type': 'string', - 'hidden': True - } - }, - ACL_QUESTION[1] -] - - -def get_catalog_json_schema() -> dict: - return { - 'type': 'object', - 'patternProperties': { - '.*': { - 'type': 'object', - 'title': 'Train', - 'patternProperties': { - '.*': { - 'type': 'object', - 'title': 'Item', - 'properties': { - 'name': { - 'type': 'string', - 'title': 'Name', - }, - 'categories': { - 'type': 'array', - 'items': { - 'type': 'string' - }, - }, - 'app_readme': { - 'type': 'string', - }, - 'location': { - 'type': 'string', - }, - 'healthy': { - 'type': 'boolean', - }, - 'healthy_error': { - 'type': ['string', 'null'], - }, - 'last_update': { - 'type': 'string', - 'pattern': r'^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$', - }, - 'latest_version': { - 'type': 'string', - }, - 'latest_app_version': { - 'type': 'string', - }, - 'latest_human_version': { - 'type': 'string', - }, - 'description': { - 'type': ['string', 'null'], - }, - 'title': { - 'type': 'string', - }, - 'icon_url': { - 'type': ['string', 'null'], - }, - 'maintainers': { - 'type': 'array', - 'items': { - 'type': 'object', - 'properties': { - 'name': {'type': 'string'}, - 'url': {'type': ['string', 'null']}, - 'email': {'type': 'string'} - }, - 'required': ['name', 'email'], - } - }, - 'home': { - 'type': 'string', - }, - 'tags': { - 'type': 'array', - 'items': { - 'type': 'string', - } - }, - 'screenshots': { - 'type': 'array', - 'items': { - 'type': 'string', - } - }, - 'sources': { - 'type': 'array', - 'items': { - 'type': 'string', - } - }, - }, - 'required': [ - 'name', 'categories', 'location', 'healthy', 'icon_url', - 'latest_version', 'latest_app_version', 'latest_human_version', - 'last_update', 'recommended', 'healthy_error', 'maintainers', - 'home', 'tags', 'sources', 'screenshots', - ], - } - } - - } - } - } - - -def get_last_updated_date(repo_path: str, folder_path: str) -> Optional[str]: - with contextlib.suppress(Exception): - # We don't want to fail querying items if for whatever reason this fails - output = subprocess.check_output( - ['git', 'log', '-n', '1', '--pretty=format:%ct', f'{folder_path}'], - cwd=repo_path, - stderr=subprocess.DEVNULL - ) - if output: - timestamp = datetime.fromtimestamp(int(output)) - return timestamp.strftime('%Y-%m-%d %H:%M:%S') - - -def valid_train(train_name: str, train_location: str) -> bool: - return VALID_TRAIN_REGEX.match( - train_name - ) and not train_name.startswith('.') and train_name not in TRAIN_IGNORE_DIRS and os.path.isdir(train_location) diff --git a/catalog_validation/ix-source/catalog_validation/items/validate_utils.py b/catalog_validation/ix-source/catalog_validation/items/validate_utils.py deleted file mode 100644 index 3cecf3bafa..0000000000 --- a/catalog_validation/ix-source/catalog_validation/items/validate_utils.py +++ /dev/null @@ -1,9 +0,0 @@ -from catalog_validation.validation import validate_catalog_item, validate_catalog_item_version - - -def validate_item(path: str, schema: str, validate_versions: bool = True): - validate_catalog_item(path, schema, validate_versions) - - -def validate_item_version(path: str, schema: str): - validate_catalog_item_version(path, schema) diff --git a/catalog_validation/ix-source/catalog_validation/k8s/__init__.py b/catalog_validation/ix-source/catalog_validation/k8s/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/catalog_validation/ix-source/catalog_validation/k8s/api_client.py b/catalog_validation/ix-source/catalog_validation/k8s/api_client.py deleted file mode 100644 index cec1da7851..0000000000 --- a/catalog_validation/ix-source/catalog_validation/k8s/api_client.py +++ /dev/null @@ -1,15 +0,0 @@ -from contextlib import contextmanager - -from kubernetes import client, config - -from .utils import KUBECONFIG_FILE - - -@contextmanager -def api_client(): - config.load_kube_config(config_file=KUBECONFIG_FILE) - api_cl = client.api_client.ApiClient() - try: - yield client.CoreV1Api(api_cl) - finally: - api_cl.close() diff --git a/catalog_validation/ix-source/catalog_validation/k8s/utils.py b/catalog_validation/ix-source/catalog_validation/k8s/utils.py deleted file mode 100644 index c973e77e21..0000000000 --- a/catalog_validation/ix-source/catalog_validation/k8s/utils.py +++ /dev/null @@ -1 +0,0 @@ -KUBECONFIG_FILE = '/etc/rancher/k3s/k3s.yaml' diff --git a/catalog_validation/ix-source/catalog_validation/pytest/requirements.txt b/catalog_validation/ix-source/catalog_validation/pytest/requirements.txt deleted file mode 100644 index 1d6ed5ca7b..0000000000 --- a/catalog_validation/ix-source/catalog_validation/pytest/requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ -pytest -pytest-mock \ No newline at end of file diff --git a/catalog_validation/ix-source/catalog_validation/pytest/unit/test_catalog_validate.py b/catalog_validation/ix-source/catalog_validation/pytest/unit/test_catalog_validate.py deleted file mode 100644 index d22b2ac576..0000000000 --- a/catalog_validation/ix-source/catalog_validation/pytest/unit/test_catalog_validate.py +++ /dev/null @@ -1,368 +0,0 @@ -import pytest - -from catalog_validation.exceptions import ValidationErrors -from catalog_validation.utils import WANTED_FILES_IN_ITEM_VERSION -from catalog_validation.validation import ( - validate_train_structure, validate_questions_yaml, validate_catalog_item, - validate_catalog_item_version, validate_variable_uniqueness, -) - - -@pytest.mark.parametrize('train_path,should_work', [ - ('/mnt/mypool/ix-applications/catalogs/github_com_truenas_charts_git_master/charts', True), - ('/mnt/mypool/ix-applications/catalogs/github_com_truenas_charts_git_master/charts/', False), - -]) -def test_validate_train_structure(train_path, should_work): - if should_work: - assert validate_train_structure(train_path) is None - else: - with pytest.raises(ValidationErrors): - validate_train_structure(train_path) - - -@pytest.mark.parametrize('test_yaml,should_work', [ - ( - ''' - groups: - - name: "Machinaris Configuration" - description: "Configure timezone for machianaris" - - portals: - web_portal: - protocols: - - "http" - host: - - "$node_ip" - ports: - - "$variable-machinaris_ui_port" - - questions: - - variable: timezone - label: "Configure timezone" - group: "Machinaris Configuration" - description: "Configure timezone for machianaris" - ''', - True - ), - ( - ''' - groups: - - name: "Machinaris Configuration" - description: "Configure timezone for machianaris" - - portals: - web_portal: - protocols: {} - host: {} - ports: {} - - questions: - - variable: timezone - label: "Configure timezone" - group: "Machinaris Configuration" - description: "Configure timezone for machianaris" - ''', - False - ), - ( - ''' - questions: - - variable: timezone - label: "Configure timezone" - group: "Machinaris Configuration" - description: "Configure timezone for machianaris" - ''', - False - ), - ( - ''' - groups: - - name: "Machinaris Configuration" - description: "Configure timezone for machianaris" - - questions: - - variable: timezone - label: "Configure timezone" - group: "Machinaris Configuration" - description: "Configure timezone for machianaris" - ''', - True - ), - ( - ''' - groups: - - name: "Machinaris Configuration" - description: "Configure timezone for machianaris" - - questions: - - variable: timezone - label: "Network" - group: "Machinaris Network Configuration" - description: "Configure timezone for machianaris" - - ''', - False - ), - ( - ''' - enableIXPortals: true - groups: - - name: "Machinaris Configuration" - description: "Configure timezone for machianaris" - - questions: - - variable: timezone - label: "Configure timezone" - group: "Machinaris Configuration" - description: "Configure timezone for machianaris" - ''', - False - ), - ( - ''' - enableIXPortals: true - iXPortalsGroupName: "Machinaris Configuration" - groups: - - name: "Machinaris Configuration" - description: "Configure timezone for machianaris" - - questions: - - variable: timezone - label: "Configure timezone" - group: "Machinaris Configuration" - description: "Configure timezone for machianaris" - ''', - True - ), - ( - ''' - enableIXPortals: true - iXPortalsGroupName: "Invalid Group name" - groups: - - name: "Machinaris Configuration" - description: "Configure timezone for machianaris" - - questions: - - variable: timezone - label: "Configure timezone" - group: "Machinaris Configuration" - description: "Configure timezone for machianaris" - ''', - False - ), - -]) -def test_validate_questions_yaml(mocker, test_yaml, should_work): - open_file_data = mocker.mock_open(read_data=test_yaml) - mocker.patch('builtins.open', open_file_data) - mocker.patch('catalog_validation.validation.validate_question', return_value=None) - if should_work: - assert validate_questions_yaml(None, 'charts.machinaris.versions.1.1.13.questions_configuration') is None - else: - with pytest.raises(ValidationErrors): - validate_questions_yaml(None, 'charts.machinaris.versions.1.1.13.questions_configuration') - - -@pytest.mark.parametrize('catalog_item_path,test_yaml,should_work', [ - ( - '/mnt/mypool/ix-applications/catalogs/github_com_truenas_charts_git_master/charts/machinaris', - ''' - categories: - - storage - - crypto - icon_url: https://raw.githubusercontent.com/guydavis/machinaris/main/web/static/machinaris.png - ''', - True - ), - ( - '/mnt/mypool/ix-applications/catalogs/github_com_truenas_charts_git_master/charts/machinaris', - ''' - icon_url: https://raw.githubusercontent.com/guydavis/machinaris/main/web/static/machinaris.png - ''', - False - ), -]) -def test_validate_catalog_item(mocker, catalog_item_path, test_yaml, should_work): - mocker.patch('os.path.isdir', side_effect=[True, True, False]) - mocker.patch('os.listdir', return_value=['1.1.13', 'item.yaml']) - open_file_data = mocker.mock_open(read_data=test_yaml) - mocker.patch('builtins.open', open_file_data) - mocker.patch('catalog_validation.validation.validate_catalog_item_version', return_value=None) - if not should_work: - with pytest.raises(ValidationErrors): - validate_catalog_item(catalog_item_path, 'charts.machinaris') - else: - assert validate_catalog_item(catalog_item_path, 'charts.machinaris') is None - - -@pytest.mark.parametrize('chart_yaml,should_work', [ - ( - ''' - name: storj - version: 1.0.4 - ''', - True - ), - ( - ''' - name: storj - version: 1.0.0 - ''', - False - ), - ( - ''' - name: storj_s - version: 1.0.0 - ''', - False - ) -]) -def test_validate_catalog_item_version(mocker, chart_yaml, should_work): - mocker.patch('os.listdir', return_value=WANTED_FILES_IN_ITEM_VERSION) - mocker.patch('os.path.exists', return_value=True) - open_file = mocker.mock_open(read_data=chart_yaml) - mocker.patch('builtins.open', open_file) - mocker.patch('catalog_validation.validation.validate_questions_yaml', return_value=None) - mocker.patch('catalog_validation.validation.validate_ix_values_yaml', return_value=None) - mocker.patch('catalog_validation.validation.validate_app_migrations', return_value=None) - if should_work: - assert validate_catalog_item_version( - '/mnt/mypool/ix-applications/catalogs/github_com_truenas_charts_git_master/charts/storj/1.0.4', - 'charts.storj.versions.1.0.4') is None - else: - with pytest.raises(ValidationErrors): - validate_catalog_item_version( - '/mnt/mypool/ix-applications/catalogs/github_com_truenas_charts_git_master/charts/storj/1.0.4', - 'charts.storj.versions.1.0.4' - ) - - -@pytest.mark.parametrize('data,schema,should_work', [ - ([ - { - 'variable': 'enablePlexPass', - 'label': 'Use PlexPass', - 'group': 'Plex Configuration', - 'schema': { - 'type': 'boolean', - 'default': False - } - }, - { - 'variable': 'dnsConfig', - 'label': 'DNS Configuration', - 'group': 'Advanced DNS Settings', - 'schema': { - 'type': 'dict', - 'attrs': [] - } - }, - ], 'plex.questions', True), - ([ - { - 'variable': 'enablePlexPass', - 'label': 'Use PlexPass', - 'group': 'Plex Configuration', - 'schema': { - 'type': 'boolean', - 'default': False - } - }, - { - 'variable': 'enablePlexPass', - 'label': 'Use PlexPass', - 'group': 'Plex Configuration', - 'schema': { - 'type': 'boolean', - 'default': False - } - }, - ], 'plex.questions', False), - ([ - { - 'variable': 'enablePlexPass', - 'label': 'Use PlexPass', - 'group': 'Plex Configuration', - 'schema': { - 'type': 'boolean', - 'default': False - } - }, - { - 'variable': 'hostPathEnabled', - 'label': 'Enable Host Path for Plex Transcode Volume', - 'type': 'boolean', - 'default': False, - 'show_subquestions_if': False, - 'subquestions': [ - { - 'variable': 'hostPath', - 'label': 'Host Path for Plex Transcode Volume', - 'schema': { - 'type': 'hostpath', - 'required': True, - '$ref': [ - 'validations/lockedHostPath' - ] - } - }, - ] - } - ], 'plex.questions', True), - ([ - { - 'variable': 'enablePlexPass', - 'label': 'Use PlexPass', - 'group': 'Plex Configuration', - 'schema': { - 'type': 'boolean', - 'default': False - } - }, - { - 'variable': 'mountPath', - 'label': 'Plex Transcode Mount Path', - 'description': 'Path where the volume will be mounted inside the pod', - 'schema': { - 'type': 'path', - } - }, - { - 'variable': 'hostPathEnabled', - 'label': 'Enable Host Path for Plex Transcode Volume', - 'type': 'boolean', - 'default': False, - 'show_subquestions_if': False, - 'subquestions': [ - { - 'variable': 'hostPath', - 'label': 'Host Path for Plex Transcode Volume', - 'schema': { - 'type': 'hostpath', - 'required': True, - '$ref': [ - 'validations/lockedHostPath' - ] - } - }, - { - 'variable': 'mountPath', - 'label': 'Plex Transcode Mount Path', - 'description': 'Path where the volume will be mounted inside the pod', - 'schema': { - 'type': 'path', - } - }, - ] - } - ], 'plex.questions', False), -]) -def test_validate_variable_uniqueness(data, schema, should_work): - verrors = ValidationErrors() - if should_work: - assert validate_variable_uniqueness(data, schema, verrors) is None - else: - with pytest.raises(ValidationErrors): - validate_variable_uniqueness(data, schema, verrors) diff --git a/catalog_validation/ix-source/catalog_validation/pytest/unit/test_items_util.py b/catalog_validation/ix-source/catalog_validation/pytest/unit/test_items_util.py deleted file mode 100644 index aab41eb59a..0000000000 --- a/catalog_validation/ix-source/catalog_validation/pytest/unit/test_items_util.py +++ /dev/null @@ -1,107 +0,0 @@ -import pytest - -from catalog_validation.items.items_util import get_item_details, get_item_details_impl - - -QUESTION_CONTEXT = { - 'nic_choices': [], - 'gpus': {}, - 'timezones': {'Asia/Saigon': 'Asia/Saigon', 'Asia/Damascus': 'Asia/Damascus'}, - 'node_ip': '192.168.0.10', - 'certificates': [], - 'certificate_authorities': [], - 'system.general.config': {'timezone': 'America/Los_Angeles'}, -} - - -@pytest.mark.parametrize('item_location,options,items_data', [ - ('/mnt/mypool/ix-applications/catalogs/github_com_truenas_charts_git_master/charts/chia', - {'retrieve_versions': True}, - { - 'name': 'chia', - 'categories': [], - 'app_readme': None, - 'location': '/mnt/mypool/ix-applications/catalogs/github_com_truenas_charts_git_master/charts/chia', - 'healthy': True, - 'healthy_error': None, - 'home': None, - 'last_update': None, - 'versions': {}, - 'maintainers': [], - 'latest_version': None, - 'latest_app_version': None, - 'latest_human_version': None, - 'recommended': False, - 'title': 'Chia', - 'description': None, - 'tags': [], - 'screenshots': [], - 'sources': [], - } - ), -]) -def test_get_item_details(mocker, item_location, options, items_data): - mocker.patch('catalog_validation.items.items_util.validate_item', return_value=None) - mocker.patch('catalog_validation.items.items_util.get_item_details_impl', return_value={}) - assert get_item_details(item_location, QUESTION_CONTEXT, options) == items_data - - -@pytest.mark.parametrize('item_path,schema,options,yaml_data,item_data_impl,open_yaml', [ - ( - '/mnt/mypool/ix-applications/catalogs/github_com_truenas_charts_git_master/charts/chia', - 'charts.chia', - {'retrieve_latest_version': True}, { - 'variable': 'web_port', - 'label': 'Web Port for Diskover', - 'group': 'Networking', - 'schema': { - 'type': 'int', - 'min': 8000, - 'max': 65535, - 'default': 22510, - 'required': True - } - }, { - 'versions': { - '1.3.37': { - 'healthy': True, - 'supported': False, - 'healthy_error': None, - 'last_update': None, - 'location': '/mnt/mypool/ix-applications/catalogs/github_com_truenas_' - 'charts_git_master/charts/chia/1.3.37', - 'required_features': [], - 'human_version': '1.3.37', - 'version': '1.3.37' - } - }, - 'categories': ['storage', 'crypto'], - 'icon_url': 'https://www.chia.net/wp-content/uploads/2022/09/chia-logo.svg', - 'tags': ['finance'], - 'screenshots': ['https://www.chia.net/wp-content/uploads/2022/09/chia-logo.svg'], - 'sources': ['https://hub.docker.com/r/emby/embyserver'], - }, - ''' - screenshots: - - 'https://www.chia.net/wp-content/uploads/2022/09/chia-logo.svg' - tags: - - finance - categories: - - storage - - crypto - icon_url: https://www.chia.net/wp-content/uploads/2022/09/chia-logo.svg - sources: - - https://hub.docker.com/r/emby/embyserver - ''' - ), -]) -def test_get_item_details_impl( - mocker, item_path, schema, options, yaml_data, item_data_impl, open_yaml, -): - open_file_data = mocker.mock_open(read_data=open_yaml) - mocker.patch('builtins.open', open_file_data) - mocker.patch('os.path.isdir', return_value=True) - mocker.patch('os.listdir', return_value=['1.3.37']) - mocker.patch('catalog_validation.items.items_util.validate_item_version', return_value=None) - mocker.patch('catalog_validation.items.items_util.get_item_version_details', return_value={}) - assert get_item_details_impl(item_path, schema, QUESTION_CONTEXT, options) == item_data_impl diff --git a/catalog_validation/ix-source/catalog_validation/pytest/unit/test_normalise_questions.py b/catalog_validation/ix-source/catalog_validation/pytest/unit/test_normalise_questions.py deleted file mode 100644 index 5372d6f63f..0000000000 --- a/catalog_validation/ix-source/catalog_validation/pytest/unit/test_normalise_questions.py +++ /dev/null @@ -1,321 +0,0 @@ -from catalog_validation.items.questions_utils import normalise_question -import pytest - - -VERSION_DATA = { - 'location': '/mnt/mypool/ix-applications/catalogs/github_com_truenas_charts_git_master/charts/syncthing/1.0.14', - 'required_features': { - 'normalize/ixVolume', - 'validations/lockedHostPath', - }, - 'chart_metadata': {}, - 'schema': { - 'variable': 'hostNetwork', - 'label': 'Host Network', - 'group': 'Networking', - }, - 'app_readme': 'there is not any', - 'detailed_readme': 'there is not any', - 'changelog': None, -} - - -@pytest.mark.parametrize('question,normalise_data,context', [ - ( - { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/interface'], - } - }, { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/interface'], - 'enum': [], - } - }, { - 'nic_choices': [], - } - ), - ( - { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/interface'], - } - }, { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/interface'], - 'enum': [{ - 'value': 'ens0', - 'description': "'ens0' Interface" - }], - } - }, { - 'nic_choices': ['ens0'] - } - ), - ( - { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/gpuConfiguration'], - } - }, { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/gpuConfiguration'], - 'attrs': [{ - 'variable': 'test@gpu', - 'label': 'GPU Resource (test@gpu)', - 'description': 'Please enter the number of GPUs to allocate', - 'schema': { - 'type': 'int', - 'max': 3, - 'enum': [ - {'value': i, 'description': f'Allocate {i!r} test@gpu GPU'} - for i in range(4) - ], - 'default': 0, - } - }], - } - }, { - 'gpus': { - 'test@gpu': 3 - } - } - ), - ( - { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/gpuConfiguration'], - } - }, { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/gpuConfiguration'], - 'attrs': [], - } - }, { - 'gpus': {} - } - ), - ( - { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/timezone'], - } - }, { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/timezone'], - 'enum': [{ - 'value': 'Asia/Damascus', - 'description': "'Asia/Damascus' timezone", - }, { - 'value': 'Asia/Saigon', - 'description': "'Asia/Saigon' timezone", - }], - 'default': 'America/Los_Angeles', - } - }, - { - 'timezones': { - 'Asia/Saigon': 'Asia/Saigon', - 'Asia/Damascus': 'Asia/Damascus', - }, - 'system.general.config': { - 'timezone': 'America/Los_Angeles', - } - } - ), - ( - { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/nodeIP'], - } - }, { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/nodeIP'], - 'default': '192.168.0.10', - } - }, - { - 'node_ip': '192.168.0.10' - } - ), - ( - { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/certificate'], - } - }, { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/certificate'], - 'enum': [{ - 'value': None, - 'description': 'No Certificate' - }, - { - 'value': '1', - 'description': "'testcert' Certificate" - } - ], - 'default': None, - 'null': True - } - }, {'certificates': [{ - 'id': '1', - 'name': 'testcert' - }], - } - ), - ( - { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/certificate'], - } - }, { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/certificate'], - 'enum': [{ - 'value': None, - 'description': 'No Certificate' - }], - 'default': None, - 'null': True - } - }, { - 'certificates': [] - } - ), - ( - { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/certificateAuthority'], - } - }, { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/certificateAuthority'], - 'enum': [{ - 'value': None, - 'description': 'No Certificate Authority' - }, { - 'value': None, - 'description': 'No Certificate Authority' - }], - 'default': None, - 'null': True - } - }, { - 'certificate_authorities': [] - } - ), - ( - { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/certificateAuthority'], - } - }, { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/certificateAuthority'], - 'enum': [{ - 'value': None, - 'description': 'No Certificate Authority' - }, { - 'value': None, - 'description': 'No Certificate Authority' - }, - { - 'value': '1', - 'description': "'testca' Certificate Authority" - } - ], - 'default': None, - 'null': True - } - }, { - 'certificate_authorities': [{ - 'id': '1', - 'name': 'testca' - }], - } - ) -]) -def test_normalise_question(question, normalise_data, context): - normalise_question(question, VERSION_DATA, context) - assert question == normalise_data diff --git a/catalog_validation/ix-source/catalog_validation/pytest/unit/test_schema.py b/catalog_validation/ix-source/catalog_validation/pytest/unit/test_schema.py deleted file mode 100644 index a741a0fa08..0000000000 --- a/catalog_validation/ix-source/catalog_validation/pytest/unit/test_schema.py +++ /dev/null @@ -1,577 +0,0 @@ -import pytest - -from catalog_validation.schema.schema_gen import get_schema -from catalog_validation.exceptions import ValidationErrors -from catalog_validation.validation import validate_question - - -@pytest.mark.parametrize('schema,should_work', [ - ( - { - 'type': 'dict', - 'attrs': [] - }, - True - ), - ( - { - 'type': 'dict', - 'attrs': {} - }, - False - ), - ( - { - 'type': 'list' - }, - False - ), - ( - { - 'type': 'list', - 'items': [] - }, - True - ), - ( - { - 'type': 'list', - 'items': {} - }, - False - ), - ( - { - 'type': 'string', - 'editable': True - }, - True - ), - ( - { - 'type': 'string', - 'default': 'hello' - }, - True - ), - ( - { - 'type': 'string', - 'default': 1 - }, - False - ), - ( - { - 'type': 'string', - 'editable': 'true' - }, - False - ), - ( - { - 'type': 'string', - 'private': True - }, - True - ), - ( - { - 'type': 'string', - 'private': 'true' - }, - False - ), - ( - { - 'type': 'string', - 'max_length': 233 - }, - True - ), - ( - { - 'type': 'string', - 'max_length': '233' - }, - False - ), - ( - { - 'type': 'string', - 'min_length': 233 - }, - True - ), - ( - { - 'type': 'string', - 'min_length': '233' - }, - False - ), - ( - { - 'type': 'string', - 'valid_chars': '[a-z]*' - }, - True - ), - ( - { - 'type': 'string', - 'valid_chars': ['a-z'] - }, - False - ), - ( - { - 'type': 'string', 'null': True - }, - True - ), - ( - { - 'type': 'string', - 'null': 'true' - }, False - ), - ( - { - 'type': 'string', - 'immutable': True - }, - True - ), - ( - { - 'type': 'string', - 'immutable': 'true' - }, - False - ), - ( - { - 'type': 'string', - 'required': True - }, - True - ), - ( - { - 'type': 'string', - 'required': 'true' - }, - False - ), - ( - { - 'type': 'string', - 'hidden': True - }, - True - ), - ( - { - 'type': 'string', - 'hidden': 'true' - }, - False - ), - ( - { - 'type': 'string', - 'show_if': 'true' - }, - False - ), - ( - { - 'type': 'string', - 'show_if': [['hello', '=', 'world']] - }, - True - ), - ( - { - 'type': 'string', - 'subquestions': [] - }, - True - ), - ( - { - 'type': 'string', - 'subquestions': {} - }, - False - ), - ( - { - 'type': 'string', - 'show_subquestions_if': None - }, False - ), - ( - { - 'type': 'string', - 'show_subquestions_if': None, - 'subquestions': [] - }, - True - ), - ( - { - 'type': 'string', - 'show_subquestions_if': 1, - 'subquestions': [] - }, - True - ), - ( - { - 'type': 'string', - 'show_subquestions_if': 'test', - 'subquestions': [] - }, - True - ), - ( - { - 'type': 'string', - 'show_subquestions_if': {}, - 'subquestions': [] - }, - True - ), - ( - { - 'type': 'string', - 'show_subquestions_if': [], - 'subquestions': [] - }, - True - ), - ( - { - 'type': 'string', - '$ui-ref': [] - }, - True - ), - ( - { - 'type': 'string', - '$ui-ref': {} - }, - False - ), - ( - { - 'type': 'string', - '$ref': [] - }, - True - ), - ( - { - 'type': 'string', - '$ref': {} - }, - False - ), - ( - { - 'type': 'int', - 'min': 233, - 'max': 2311 - }, - True - ), - ( - { - 'type': 'int', - 'min': '233', - 'max': 2311 - }, - False - ), - ( - { - 'type': 'int', - 'min': 233, - 'max': '2311' - }, - False - ), - ( - { - 'type': 'int', - 'default': 23 - }, - True - ), - ( - { - 'type': 'int', - 'default': '23' - }, - False - ), - ( - { - 'type': 'ipaddr', - 'ipv4': True, - 'ipv6': False, - 'cidr': True - }, - True - ), - ( - { - 'type': 'ipaddr', - 'ipv4': True, - 'ipv6': False, - 'cidr': 'true' - }, - False - ), - ( - { - 'type': 'ipaddr', - 'ipv4': True, - 'ipv6': 'False', - 'cidr': True - }, - False - ), - ( - { - 'type': 'ipaddr', - 'ipv4': 'True', - 'ipv6': False, - 'cidr': True - }, - False - ), - ( - { - 'type': 'string', - 'enum': [{ - 'value': 'test', - 'description': 'test' - }] - }, - True - ), - ( - { - 'type': 'string', - 'enum': [{ - 'value': 'test', - 'description': 'test', - 'obj': {} - }] - }, - False - ), - ( - { - 'type': 'string', - 'enum': [{ - 'value': 'test' - }] - }, - False - ), - ( - { - 'type': 'string', - 'enum': [{ - 'key': 'value' - }] - }, - False - ), - ( - { - 'type': 'string', - 'enum': [{}] - }, - False - ), - ( - { - 'type': 'hostpath' - }, - True - ), - ( - { - 'type': 'hostpath', - 'default': '/root/' - }, - True - ), - ( - { - 'type': 'hostpath', - 'default': 231 - }, - False - ), - ( - { - 'type': 'path' - }, - True - ), - ( - { - 'type': 'path', - 'default': '/root/' - }, - True - ), - ( - { - 'type': 'path', - 'default': 231 - }, - False - ), - ( - { - 'type': 'boolean' - }, - True - ), - ( - { - 'type': 'boolean', - 'default': True - }, - True - ), - ( - { - 'type': 'boolean', - 'default': 'true' - }, - False - ), - ( - { - 'type': 'cron' - }, - True - ), - ( - { - 'type': 'cron', - 'default': {} - }, - True - ), - ( - { - 'type': 'cron', - 'default': [] - }, - False - ), - ( - { - 'type': 'uri' - }, - True - ), - ( - { - 'type': 'uri', - 'default': 'http://www.google.com' - }, - True - ), - ( - { - 'type': 'uri', - 'default': 2133 - }, - False - ), -]) -def test_schema_validation(schema, should_work): - if not should_work: - with pytest.raises(ValidationErrors): - get_schema(schema).validate('') - else: - assert get_schema(schema).validate('') is None - - -@pytest.mark.parametrize('variable,should_work', [ - ( - { - 'variable': 'testing', - 'label': 'Testing', - 'description': 'for testing', - 'group': 'testing', - 'schema': { - 'type': 'boolean', - 'default': True - } - }, - True - ), - ( - { - 'variable': 'testing', - 'description': 'for testing', - 'group': 'testing', - 'schema': { - 'type': 'boolean', - 'default': True - } - }, - False - ), - ( - { - 'variable': 'testing', - 'label': 'Testing', - 'description': 'for testing' - }, - False - ), - ( - { - 'variable': 'testing', - 'label': 'Testing', - 'description': 'for testing', - 'schema': { - 'type': 'boolean', - 'default': True - } - }, - True - ), - ( - { - 'variable': 'testing', - 'label': 'Testing', - 'description': 'for testing', - 'schema': { - 'default': True - } - }, - False - ), -]) -def test_question_variable_validation(variable, should_work): - verrors = ValidationErrors() - validate_question(variable, '', verrors) - if not should_work: - with pytest.raises(ValidationErrors): - verrors.check() - else: - verrors.check() diff --git a/catalog_validation/ix-source/catalog_validation/pytest/unit/test_util.py b/catalog_validation/ix-source/catalog_validation/pytest/unit/test_util.py deleted file mode 100644 index c4e8b75c33..0000000000 --- a/catalog_validation/ix-source/catalog_validation/pytest/unit/test_util.py +++ /dev/null @@ -1,17 +0,0 @@ -import pytest - -from catalog_validation.utils import RE_VERSION_PATTERN - - -@pytest.mark.parametrize('version,result', [ - ('22.04-MASTER-12345678', '22.04'), - ('24.10.1', '24.10.1'), - ('23.12', '23.12'), - ('22.02.0.1', '22.02.0.1'), - ('22.02-ALPHA', '22.02'), - ('24.04-MASTER', '24.04'), - ('20.23-INTERNAL', '20.23'), -]) -def test_version_regex_match(version, result): - match = RE_VERSION_PATTERN.findall(version) - assert len(match) == 1 and match[0] == result diff --git a/catalog_validation/ix-source/catalog_validation/pytest/unit/test_validate_ix_values.py b/catalog_validation/ix-source/catalog_validation/pytest/unit/test_validate_ix_values.py deleted file mode 100644 index f634a92720..0000000000 --- a/catalog_validation/ix-source/catalog_validation/pytest/unit/test_validate_ix_values.py +++ /dev/null @@ -1,94 +0,0 @@ -import pytest -from catalog_validation.validation import validate_ix_values_yaml -from catalog_validation.exceptions import ValidationErrors - - -@pytest.mark.parametrize('schema, ix_values_yaml_path, test_yaml, should_work', [ - - ( - 'charts.chia.versions.1.3.38.ix_values', - '/mnt/crave/ix-applications/catalogs/github_com_truenas_charts_git_master/test/chia/1.3.38/ix_values.yaml', - ''' - image: - pullPolicy: IfNotPresent - repository: ixsystems/chia-docker - tag: v1.6.2 - updateStrategy: Recreate - iXPortals: [{portalName: 'web portal', protocol: 'http', useNodeIP: false, host: '192.168.0.18', port: 9898}] - ''', - True - ), - ( - 'charts.chia.versions.1.3.38.ix_values', - '/mnt/crave/ix-applications/catalogs/github_com_truenas_charts_git_master/test/chia/1.3.38/ix_values.yaml', - ''' - image: - pullPolicy: IfNotPresent - repository: ixsystems/chia-docker - tag: v1.6.2 - updateStrategy: Recreate - iXPortals: [{portalName: 'web portal', protocol: 'http', useNodeIP: true, port: 9898}] - ''', - True - ), - ( - 'charts.chia.versions.1.3.38.ix_values', - '/mnt/crave/ix-applications/catalogs/github_com_truenas_charts_git_master/test/chia/1.3.38/ix_values.yaml', - ''' - image: - pullPolicy: IfNotPresent - repository: ixsystems/chia-docker - tag: v1.6.2 - updateStrategy: Recreate - iXPortals: [{portalName: 'web portal', protocol: 'htts', useNodeIP: true, port: 9898}] - ''', - False - ), - ( - 'charts.chia.versions.1.3.38.ix_values', - '/mnt/crave/ix-applications/catalogs/github_com_truenas_charts_git_master/test/chia/1.3.38/ix_values.yaml', - ''' - image: - pullPolicy: IfNotPresent - repository: ixsystems/chia-docker - tag: v1.6.2 - updateStrategy: Recreate - iXPortals: [{portalName: 'web portal', protocol: 09088, useNodeIP: true, port: '9898'}] - ''', - False - ), - ( - 'charts.chia.versions.1.3.38.ix_values', - '/mnt/crave/ix-applications/catalogs/github_com_truenas_charts_git_master/test/chia/1.3.38/ix_values.yaml', - ''' - image: - pullPolicy: IfNotPresent - repository: ixsystems/chia-docker - tag: v1.6.2 - updateStrategy: Recreate - iXPortals: [{portalName: 'web portal', useNodeIP: true, port: '9898'}] - ''', - False - ), - ( - 'charts.chia.versions.1.3.38.ix_values', - '/mnt/crave/ix-applications/catalogs/github_com_truenas_charts_git_master/test/chia/1.3.38/ix_values.yaml', - '', - False, - ), - ( - 'charts.chia.versions.1.3.38.ix_values', - '/mnt/crave/ix-applications/catalogs/github_com_truenas_charts_git_master/test/chia/1.3.38/ix_values.yaml', - 'image pullPolicy ifNotPresent', - False, - ) -]) -def test_validate_ix_values(mocker, schema, ix_values_yaml_path, test_yaml, should_work): - open_file = mocker.mock_open(read_data=test_yaml) - mocker.patch('builtins.open', open_file) - - if should_work: - assert validate_ix_values_yaml(ix_values_yaml_path, schema) is None - else: - with pytest.raises(ValidationErrors): - validate_ix_values_yaml(ix_values_yaml_path, schema) diff --git a/catalog_validation/ix-source/catalog_validation/pytest/unit/test_validation_utils.py b/catalog_validation/ix-source/catalog_validation/pytest/unit/test_validation_utils.py deleted file mode 100644 index 3f7eb815c3..0000000000 --- a/catalog_validation/ix-source/catalog_validation/pytest/unit/test_validation_utils.py +++ /dev/null @@ -1,104 +0,0 @@ -import pytest - -from catalog_validation.exceptions import ValidationErrors -from catalog_validation.validation_utils import validate_min_max_version_values - - -@pytest.mark.parametrize( - 'annotations_dict,schema,expected_error', - [ - ( - { - 'min_scale_version': '23.04', - 'max_scale_version': '24.04' - }, - 'charts.plex.versions.1.7.56', - None - ), - ( - { - 'min_scale_version': '22.02-RC.2', - 'max_scale_version': '24.04' - }, - 'charts.plex.versions.1.7.56', - None - ), - ( - { - 'min_scale_version': '24.04', - 'max_scale_version': '23.04' - }, - 'charts.plex.versions.1.7.56', - 'Provided min_scale_version is greater than provided max_scale_version' - ), - ( - { - 'min_scale_version': '12', - 'max_scale_version': '24.04' - }, - 'charts.plex.versions.1.7.56', - 'Format of provided min_scale_version value is not correct' - ), - ( - { - 'min_scale_version': '24.04-MASTER-20230928-144829', - 'max_scale_version': '24.04' - }, - 'charts.plex.versions.1.7.56', - 'Format of provided min_scale_version value is not correct' - ), - ( - { - 'min_scale_version': '22.12.2-INTERNAL.9', - 'max_scale_version': '24.04' - }, - 'charts.plex.versions.1.7.56', - 'Format of provided min_scale_version value is not correct' - ), - ( - { - 'min_scale_version': '23.04', - }, - 'charts.plex.versions.1.7.56', - None - ), - ( - { - 'min_scale_version': 24.04, - }, - 'charts.plex.versions.1.7.56', - '\'min_scale_version\' value should be a \'str\'' - ), - ( - { - 'min_scale_version': None - }, - 'charts.plex.versions.1.7.56', - '\'min_scale_version\' value should be a \'str\'' - ), - ( - { - 'min_scale_version': '22.02.CUSTOM', - }, - 'charts.plex.versions.1.7.56', - 'Format of provided min_scale_version value is not correct' - ), - ( - { - 'min_scale_version': 'TrueNAS-SCALE-22.02-RC.1', - 'max_scale_version': '24.04' - }, - 'charts.plex.versions.1.7.56', - 'Format of provided min_scale_version value is not correct' - ), - ] -) -def test_validate_min_max_version_values(annotations_dict, schema, expected_error): - verrors = ValidationErrors() - if expected_error: - with pytest.raises(ValidationErrors) as ve: - validate_min_max_version_values(annotations_dict, verrors, schema) - verrors.check() - assert ve.value.errors[0].errmsg == expected_error - else: - assert validate_min_max_version_values(annotations_dict, verrors, schema) is None diff --git a/catalog_validation/ix-source/catalog_validation/schema/__init__.py b/catalog_validation/ix-source/catalog_validation/schema/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/catalog_validation/ix-source/catalog_validation/schema/attrs.py b/catalog_validation/ix-source/catalog_validation/schema/attrs.py deleted file mode 100644 index dbf525f175..0000000000 --- a/catalog_validation/ix-source/catalog_validation/schema/attrs.py +++ /dev/null @@ -1,282 +0,0 @@ -from jsonschema import validate as json_schema_validate, ValidationError as JsonValidationError - -from catalog_validation.exceptions import ValidationErrors - -from .feature_gen import get_feature -from .variable_gen import generate_variable - - -class Schema: - - DEFAULT_TYPE = NotImplementedError - - def __init__(self, include_subquestions_attrs=True, data=None): - self.required = self.null = self.show_if = self.ref = self.ui_ref = self.type =\ - self.editable = self.hidden = self.default = self._schema_data = None - self._skip_data_values = [] - if include_subquestions_attrs: - self.subquestions = self.show_subquestions_if = None - if data: - self.initialize_values(data) - - def initialize_values(self, data): - self._schema_data = data - for key, value in filter( - lambda k: hasattr(self, k[0]) and k[0] not in self._skip_data_values, data.items() - ): - setattr(self, key, value) - - def get_schema_str(self, schema): - if schema: - return f'{schema}.' - return '' - - def validate(self, schema, data=None): - if data: - self.initialize_values(data) - - if not self._schema_data: - raise Exception('Schema data must be initialized before validating schema') - - verrors = ValidationErrors() - try: - json_schema_validate(self._schema_data, self.json_schema()) - except JsonValidationError as e: - verrors.add(schema, f'Failed to validate schema: {e}') - - verrors.check() - - if '$ref' in self._schema_data: - for index, ref in enumerate(self._schema_data['$ref']): - if not isinstance(ref, str): - verrors.add(f'{schema}.$ref.{index}', 'Must be a string') - continue - - feature_obj = get_feature(ref) - if not feature_obj: - continue - try: - feature_obj.validate(self, f'{schema}.$ref.{index}') - except ValidationErrors as e: - verrors.extend(e) - - verrors.check() - - def json_schema(self): - schema = { - 'type': 'object', - 'properties': { - 'required': { - 'type': 'boolean', - }, - 'null': { - 'type': 'boolean', - }, - 'show_if': { - 'type': 'array', - }, - '$ref': { - 'type': 'array', - }, - '$ui-ref': { - 'type': 'array', - }, - 'subquestions': { - 'type': 'array', - }, - 'show_subquestions_if': { - 'type': ['string', 'integer', 'boolean', 'object', 'array', 'null'], - }, - 'type': { - 'type': 'string', - }, - 'editable': { - 'type': 'boolean', - }, - 'immutable': { - 'type': 'boolean', - }, - 'hidden': { - 'type': 'boolean', - }, - }, - 'required': ['type'], - 'dependentRequired': { - 'show_subquestions_if': ['subquestions'] - } - } - if self.DEFAULT_TYPE: - schema['properties']['default'] = { - 'type': [self.DEFAULT_TYPE] + (['null'] if self.null else []) - } - if hasattr(self, 'enum'): - schema['properties']['enum'] = { - 'type': 'array', - 'items': { - 'type': 'object', - 'properties': { - 'value': {'type': [self.DEFAULT_TYPE] + (['null'] if self.null else [])}, - 'description': {'type': ['string', 'null']}, - }, - 'additionalProperties': False, - 'required': ['value', 'description'] - }, - } - return schema - - -class BooleanSchema(Schema): - DEFAULT_TYPE = 'boolean' - - -class StringSchema(Schema): - DEFAULT_TYPE = 'string' - - def __init__(self, data): - self.min_length = self.max_length = self.enum = self.private = self.valid_chars = self.valid_chars_error = None - super().__init__(data=data) - - def json_schema(self): - schema = super().json_schema() - schema['properties'].update({ - 'min_length': { - 'type': 'integer', - }, - 'max_length': { - 'type': 'integer', - }, - 'private': { - 'type': 'boolean', - }, - 'valid_chars': { - 'type': 'string', - }, - 'valid_chars_error': { - 'type': 'string' - }, - }) - return schema - - -class TextFieldSchema(StringSchema): - def __init__(self, data): - super().__init__(data) - self.max_length = 1024 * 1024 - - def json_schema(self): - schema = super().json_schema() - schema['properties'].update({ - 'max_length': { - 'type': 'integer', - 'const': 1024 * 1024 - }, - 'language': { - 'type': 'string', - 'enum': ['yaml', 'json', 'toml', 'text'], - } - }) - return schema - - -class IntegerSchema(Schema): - DEFAULT_TYPE = 'integer' - - def __init__(self, data): - self.min = self.max = self.enum = None - super().__init__(data=data) - - def json_schema(self): - schema = super().json_schema() - schema['properties'].update({ - 'min': { - 'type': 'integer', - }, - 'max': { - 'type': 'integer', - }, - }) - return schema - - -class PathSchema(Schema): - DEFAULT_TYPE = 'string' - - -class HostPathSchema(Schema): - DEFAULT_TYPE = 'string' - - -class HostPathDirSchema(Schema): - DEFAULT_TYPE = 'string' - - -class HostPathFileSchema(Schema): - DEFAULT_TYPE = 'string' - - -class URISchema(Schema): - DEFAULT_TYPE = 'string' - - -class IPAddrSchema(Schema): - DEFAULT_TYPE = 'string' - - def __init__(self, data): - self.ipv4 = self.ipv6 = self.cidr = None - super().__init__(data=data) - - def json_schema(self): - schema = super().json_schema() - schema['properties'].update({ - 'ipv4': {'type': 'boolean'}, - 'ipv6': {'type': 'boolean'}, - 'cidr': {'type': 'boolean'}, - }) - return schema - - -class CronSchema(Schema): - DEFAULT_TYPE = 'object' - - -class DictSchema(Schema): - DEFAULT_TYPE = 'object' - - def __init__(self, data): - self.attrs = [] - self.additional_attrs = None - super().__init__(data=data) - self._skip_data_values = ['attrs'] - - def initialize_values(self, data): - super().initialize_values(data) - self.attrs = [generate_variable(d) for d in (data.get('attrs') or [])] - - def json_schema(self): - schema = super().json_schema() - schema['additionalProperties'] = bool(self.additional_attrs) - schema['properties']['attrs'] = {'type': 'array'} - schema['required'].append('attrs') - # We do not validate nested children and hence do not add it in the - # json schema as it makes it very complex to handle all the possibilities - return schema - - -class ListSchema(Schema): - - DEFAULT_TYPE = 'array' - - def __init__(self, data): - self.items = [] - super().__init__(False, data=data) - self._skip_data_values = ['items'] - - def initialize_values(self, data): - super().initialize_values(data) - self.items = [generate_variable(d) for d in (data.get('items') or [])] - - def json_schema(self): - schema = super().json_schema() - schema['properties']['items'] = {'type': 'array'} - schema['required'].append('items') - return schema diff --git a/catalog_validation/ix-source/catalog_validation/schema/feature_gen.py b/catalog_validation/ix-source/catalog_validation/schema/feature_gen.py deleted file mode 100644 index 62dd657fd2..0000000000 --- a/catalog_validation/ix-source/catalog_validation/schema/feature_gen.py +++ /dev/null @@ -1,4 +0,0 @@ -def get_feature(feature): - from .features import FEATURES - if feature in FEATURES: - return FEATURES[FEATURES.index(feature)] diff --git a/catalog_validation/ix-source/catalog_validation/schema/features.py b/catalog_validation/ix-source/catalog_validation/schema/features.py deleted file mode 100644 index c69c7b44c0..0000000000 --- a/catalog_validation/ix-source/catalog_validation/schema/features.py +++ /dev/null @@ -1,158 +0,0 @@ -from catalog_validation.exceptions import ValidationErrors - -from .schema_gen import DictSchema, IntegerSchema, StringSchema - - -class Feature: - - NAME = NotImplementedError - VALID_SCHEMAS = [] - - def __str__(self): - return self.NAME - - def validate(self, schema_obj, schema_str): - verrors = ValidationErrors() - if not isinstance(schema_obj, tuple(self.VALID_SCHEMAS)): - verrors.add( - f'{schema_str}.type', - f'Schema must be one of {", ".join(str(v) for v in self.VALID_SCHEMAS)} schema types' - ) - - if not verrors: - self._validate(verrors, schema_obj, schema_str) - verrors.check() - - def _validate(self, verrors, schema_obj, schema_str): - pass - - def __eq__(self, other): - return self.NAME == (other if isinstance(other, str) else other.NAME) - - -class IXVolumeFeature(Feature): - - NAME = 'normalize/ixVolume' - VALID_SCHEMAS = [DictSchema, StringSchema] - - def _validate(self, verrors, schema_obj, schema_str): - if isinstance(schema_obj, StringSchema): - return - - attrs = schema_obj.attrs - if 'datasetName' not in attrs: - verrors.add(f'{schema_str}.attrs', 'Variable "datasetName" must be specified.') - elif not isinstance(attrs[attrs.index('datasetName')].schema, StringSchema): - verrors.add(f'{schema_str}.attrs', 'Variable "datasetName" must be of string type.') - - if 'aclEntries' in attrs and not isinstance(attrs[attrs.index('aclEntries')].schema, DictSchema): - verrors.add(f'{schema_str}.attrs', 'Variable "aclEntries" must be of dict type.') - - if 'properties' in attrs: - index = attrs.index('properties') - properties = attrs[index] - properties_schema = properties.schema - supported_props = { - 'recordsize': { - 'valid_schema_type': [StringSchema], - }, - } - not_supported = set([str(v) for v in properties_schema.attrs]) - set(supported_props) - if not_supported: - verrors.add( - f'{schema_str}.attrs.{index}.attrs', f'{", ".join(not_supported)} properties are not supported' - ) - - for prop_index, prop in enumerate(properties_schema.attrs): - if prop.name not in supported_props: - continue - - prop_schema = prop.schema - check_prop = supported_props[prop.name] - if not isinstance(prop_schema, tuple(check_prop['valid_schema_type'])): - verrors.add( - f'{schema_str}.attrs.{index}.attrs.{prop_index}', - f'{prop.name!r} must be of ' - f'{", ".join([str(s) for s in check_prop["valid_schema_type"]])} type(s)' - ) - - -class NormalizeInterfaceConfiguration(Feature): - NAME = 'normalize/interfaceConfiguration' - VALID_SCHEMAS = [DictSchema] - - -class DefinitionInterfaceFeature(Feature): - - NAME = 'definitions/interface' - VALID_SCHEMAS = [StringSchema] - - -class DefinitionGPUConfigurationFeature(Feature): - - NAME = 'definitions/gpuConfiguration' - VALID_SCHEMAS = [DictSchema] - - -class DefinitionTimezoneFeature(Feature): - - NAME = 'definitions/timezone' - VALID_SCHEMAS = [StringSchema] - - -class DefinitionNodeIPFeature(Feature): - - NAME = 'definitions/nodeIP' - VALID_SCHEMAS = [StringSchema] - - -class ValidationNodePortFeature(Feature): - - NAME = 'validations/nodePort' - VALID_SCHEMAS = [IntegerSchema] - - -class CertificateFeature(Feature): - - NAME = 'definitions/certificate' - VALID_SCHEMAS = [IntegerSchema] - - -class CertificateAuthorityFeature(Feature): - - NAME = 'definitions/certificateAuthority' - VALID_SCHEMAS = [IntegerSchema] - - -class ContainerImageFeature(Feature): - - NAME = 'validations/containerImage' - VALID_SCHEMAS = [DictSchema] - - def _validate(self, verrors, schema_obj, schema_str): - attrs = schema_obj.attrs - for check_attr in ('repository', 'tag'): - if check_attr not in attrs: - verrors.add(f'{schema_str}.attrs', f'Variable {check_attr!r} must be specified.') - elif not isinstance(attrs[attrs.index(check_attr)].schema, StringSchema): - verrors.add(f'{schema_str}.attrs', f'Variable {check_attr!r} must be of string type.') - - -class ACLFeature(Feature): - - NAME = 'normalize/acl' - VALID_SCHEMAS = [DictSchema] - - -FEATURES = [ - ACLFeature(), - IXVolumeFeature(), - DefinitionInterfaceFeature(), - DefinitionGPUConfigurationFeature(), - DefinitionTimezoneFeature(), - DefinitionNodeIPFeature(), - ValidationNodePortFeature(), - CertificateFeature(), - CertificateAuthorityFeature(), - ContainerImageFeature(), -] diff --git a/catalog_validation/ix-source/catalog_validation/schema/migration_schema.py b/catalog_validation/ix-source/catalog_validation/schema/migration_schema.py deleted file mode 100644 index 9b535d9a26..0000000000 --- a/catalog_validation/ix-source/catalog_validation/schema/migration_schema.py +++ /dev/null @@ -1,42 +0,0 @@ -import re - - -APP_MIGRATION_DIR = 'migrations' -APP_MIGRATION_SCHEMA = { - 'type': 'array', - 'items': { - 'type': 'object', - 'properties': { - 'app_name': {'type': 'string'}, - 'action': {'type': 'string', 'enum': ['move']}, - }, - 'required': [ - 'app_name', - 'action' - ], - 'allOf': [ - { - 'if': { - 'properties': { - 'action': { - 'const': 'move', - }, - }, - }, - 'then': { - 'properties': { - 'old_train': {'type': 'string'}, - 'new_train': {'type': 'string'}, - }, - 'required': [ - 'new_train', - 'old_train', - ], - }, - }, - ], - }, -} -MIGRATION_DIRS = ['.migrations', 'ix-migrations'] -RE_MIGRATION_NAME_STR = r'^\d+\w+.json' -RE_MIGRATION_NAME = re.compile(RE_MIGRATION_NAME_STR) diff --git a/catalog_validation/ix-source/catalog_validation/schema/schema_gen.py b/catalog_validation/ix-source/catalog_validation/schema/schema_gen.py deleted file mode 100644 index 34d7ba296d..0000000000 --- a/catalog_validation/ix-source/catalog_validation/schema/schema_gen.py +++ /dev/null @@ -1,43 +0,0 @@ -from .attrs import ( - BooleanSchema, StringSchema, TextFieldSchema, IntegerSchema, PathSchema, HostPathSchema, HostPathDirSchema, - HostPathFileSchema, ListSchema, DictSchema, IPAddrSchema, CronSchema, URISchema -) - - -def get_schema(schema_data): - schema = None - if not isinstance(schema_data, dict): - return schema - - s_type = schema_data.get('type') - if s_type == 'boolean': - schema = BooleanSchema - elif s_type == 'string': - schema = StringSchema - elif s_type == 'text': - schema = TextFieldSchema - elif s_type == 'int': - schema = IntegerSchema - elif s_type == 'path': - schema = PathSchema - elif s_type == 'hostpath': - schema = HostPathSchema - elif s_type == 'hostpathdirectory': - schema = HostPathDirSchema - elif s_type == 'hostpathfile': - schema = HostPathFileSchema - elif s_type == 'list': - schema = ListSchema - elif s_type == 'dict': - schema = DictSchema - elif s_type == 'ipaddr': - schema = IPAddrSchema - elif s_type == 'cron': - schema = CronSchema - elif s_type == 'uri': - schema = URISchema - - if schema: - schema = schema(data=schema_data) - - return schema diff --git a/catalog_validation/ix-source/catalog_validation/schema/variable.py b/catalog_validation/ix-source/catalog_validation/schema/variable.py deleted file mode 100644 index e11d522af5..0000000000 --- a/catalog_validation/ix-source/catalog_validation/schema/variable.py +++ /dev/null @@ -1,37 +0,0 @@ -from catalog_validation.exceptions import ValidationErrors - -from .schema_gen import get_schema - - -class Variable: - def __init__(self, data): - self.name = self.label = self.description = self.group = None - self.schema = None - self.update_from_data(data) - - def update_from_data(self, data): - self.name = data.get('variable') - self.label = data.get('label') - self.description = data.get('description') - self.schema = get_schema(data.get('schema')) - - def validate(self, schema): - verrors = ValidationErrors() - if not self.name: - verrors.add(f'{schema}.variable', 'Variable value must be specified') - - if not self.schema: - verrors.add(f'{schema}.schema', 'Schema must be specified for variable') - else: - try: - self.schema.validate(f'{schema}.schema') - except ValidationErrors as ve: - verrors.extend(ve) - - verrors.check() - - def __str__(self): - return self.name - - def __eq__(self, other): - return (other if isinstance(other, str) else other.name) == self.name diff --git a/catalog_validation/ix-source/catalog_validation/schema/variable_gen.py b/catalog_validation/ix-source/catalog_validation/schema/variable_gen.py deleted file mode 100644 index 8784e4f975..0000000000 --- a/catalog_validation/ix-source/catalog_validation/schema/variable_gen.py +++ /dev/null @@ -1,3 +0,0 @@ -def generate_variable(variable_data): - from .variable import Variable - return Variable(variable_data) diff --git a/catalog_validation/ix-source/catalog_validation/scripts/__init__.py b/catalog_validation/ix-source/catalog_validation/scripts/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/catalog_validation/ix-source/catalog_validation/scripts/catalog_update.py b/catalog_validation/ix-source/catalog_validation/scripts/catalog_update.py deleted file mode 100644 index 0d52a8b6c8..0000000000 --- a/catalog_validation/ix-source/catalog_validation/scripts/catalog_update.py +++ /dev/null @@ -1,171 +0,0 @@ -#!/usr/bin/env python -import argparse -import contextlib -import json -import os -import shutil -import typing - -from jsonschema import validate as json_schema_validate, ValidationError as JsonValidationError - -from catalog_validation.ci.utils import ( - get_app_version, get_ci_development_directory, OPTIONAL_METADATA_FILES, - REQUIRED_METADATA_FILES, version_has_been_bumped, get_to_keep_versions -) -from catalog_validation.exceptions import ValidationErrors -from catalog_validation.items.catalog import get_items_in_trains, retrieve_train_names, retrieve_trains_data -from catalog_validation.items.utils import get_catalog_json_schema -from catalog_validation.utils import CACHED_CATALOG_FILE_NAME, CACHED_VERSION_FILE_NAME -from catalog_validation.validation import validate_catalog_item_version_data -from collections import defaultdict - - -def get_trains(location: str) -> typing.Tuple[dict, dict]: - preferred_trains: list = [] - trains_to_traverse = retrieve_train_names(location) - catalog_data = {} - versions_data = {} - for train_name, train_data in retrieve_trains_data( - get_items_in_trains(trains_to_traverse, location), location, preferred_trains, trains_to_traverse - )[0].items(): - catalog_data[train_name] = {} - versions_data[train_name] = {} - for app_name, app_data in train_data.items(): - catalog_data[train_name][app_name] = {} - versions_data[train_name][app_name] = {} - for k, v in app_data.items(): - if k == 'versions': - versions_data[train_name][app_name][k] = v - else: - catalog_data[train_name][app_name][k] = v - - return catalog_data, versions_data - - -def validate_train_data(train_data): - verrors = ValidationErrors() - try: - json_schema_validate(train_data, get_catalog_json_schema()) - except (json.JSONDecodeError, JsonValidationError) as e: - verrors.add( - 'catalog_json', - f'Failed to validate contents of train data: {e!r}' - ) - verrors.check() - - -def validate_versions_data(versions_data): - verrors = ValidationErrors() - for train_name, train_data in versions_data.items(): - for app_name, app_version_data in train_data.items(): - validate_catalog_item_version_data(app_version_data['versions'], f'{train_name}.{app_name}', verrors) - verrors.check() - - -def get_apps_to_publish(catalog_path: str) -> dict: - ci_dev_dir = get_ci_development_directory(catalog_path) - to_publish_apps = defaultdict(list) - for train_name in os.listdir(ci_dev_dir): - train_path = os.path.join(ci_dev_dir, train_name) - if not os.path.isdir(train_path): - continue - - for app_name in os.listdir(train_path): - app_path = os.path.join(train_path, app_name) - if not os.path.isdir(app_path): - continue - - app_current_version = get_app_version(app_path) - if version_has_been_bumped(os.path.join(catalog_path, train_name, app_name), app_current_version): - to_publish_apps[train_name].append({'name': app_name, 'version': app_current_version}) - - return to_publish_apps - - -def publish_updated_apps(catalog_path: str) -> None: - ci_dev_directory = get_ci_development_directory(catalog_path) - if not os.path.isdir(ci_dev_directory): - return - - for train_name, apps in get_apps_to_publish(catalog_path).items(): - dev_train_path = os.path.join(ci_dev_directory, train_name) - publish_train_path = os.path.join(catalog_path, train_name) - os.makedirs(publish_train_path, exist_ok=True) - - for app in apps: - app_name, app_version = app['name'], app['version'] - dev_app_path = os.path.join(dev_train_path, app_name) - publish_app_path = os.path.join(publish_train_path, app_name) - publish_app_version_path = os.path.join(publish_app_path, app_version) - required_versions = get_to_keep_versions(dev_app_path) - os.makedirs(publish_app_path, exist_ok=True) - - dev_item_yaml_path = os.path.join(dev_app_path, 'item.yaml') - publish_item_yaml_path = os.path.join(publish_app_path, 'item.yaml') - shutil.copy(dev_item_yaml_path, publish_item_yaml_path) - shutil.copytree(dev_app_path, publish_app_version_path) - - for file_name in OPTIONAL_METADATA_FILES + REQUIRED_METADATA_FILES: - with contextlib.suppress(OSError): - os.unlink(os.path.join(publish_app_version_path, file_name)) - - ix_values_path = os.path.join(publish_app_version_path, 'ix_values.yaml') - values_path = os.path.join(publish_app_version_path, 'values.yaml') - if not os.path.exists(ix_values_path) and os.path.exists(values_path): - shutil.move(values_path, ix_values_path) - - for version in os.listdir(publish_app_path): - version_path = os.path.join(publish_app_path, version) - if not os.path.isdir(version_path) or version in required_versions: - continue - - if version != app_version: - shutil.rmtree(version_path) - - print( - f'[\033[92mOK\x1B[0m]\tPublished {app_name!r} having {app_version!r} version ' - f'to {train_name!r} train successfully!' - ) - - -def update_catalog_file(location: str) -> None: - catalog_file_path = os.path.join(location, CACHED_CATALOG_FILE_NAME) - catalog_data, versions_data = get_trains(location) - validate_train_data(catalog_data) - validate_versions_data(versions_data) - - with open(catalog_file_path, 'w') as f: - f.write(json.dumps(catalog_data, indent=4)) - - print(f'[\033[92mOK\x1B[0m]\tUpdated {catalog_file_path!r} successfully!') - - for train_name, train_data in versions_data.items(): - for app_name, app_data in train_data.items(): - version_path = os.path.join(location, train_name, app_name, CACHED_VERSION_FILE_NAME) - with open(version_path, 'w') as f: - f.write(json.dumps(app_data['versions'], indent=4)) - - print(f'[\033[92mOK\x1B[0m]\tUpdated {version_path!r} successfully!') - - -def main(): - parser = argparse.ArgumentParser() - subparsers = parser.add_subparsers(help='sub-command help', dest='action') - - publish_setup = subparsers.add_parser('publish', help='Publish apps of TrueNAS catalog') - publish_setup.add_argument('--path', help='Specify path of TrueNAS catalog') - - parser_setup = subparsers.add_parser('update', help='Update TrueNAS catalog') - parser_setup.add_argument('--path', help='Specify path of TrueNAS catalog') - - args = parser.parse_args() - if args.action == 'publish': - publish_updated_apps(args.path) - elif args.action == 'update': - update_catalog_file(args.path) - else: - parser.print_help() - - -if __name__ == '__main__': - main() diff --git a/catalog_validation/ix-source/catalog_validation/scripts/catalog_validate.py b/catalog_validation/ix-source/catalog_validation/scripts/catalog_validate.py deleted file mode 100644 index 6d4b8d3f3d..0000000000 --- a/catalog_validation/ix-source/catalog_validation/scripts/catalog_validate.py +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env python -import argparse - -from catalog_validation.exceptions import CatalogDoesNotExist, ValidationErrors -from catalog_validation.validation import validate_catalog - - -def validate(catalog_path): - - try: - validate_catalog(catalog_path) - except CatalogDoesNotExist: - print(f'[\033[91mFAILED\x1B[0m]\tSpecified {catalog_path!r} path does not exist') - exit(1) - except ValidationErrors as verrors: - print('[\033[91mFAILED\x1B[0m]\tFollowing validation failures were found:') - for index, verror in enumerate(verrors.errors): - print(f'[\033[91m{index}\x1B[0m]\t{verror}') - exit(1) - else: - print('[\033[92mOK\x1B[0m]\tPASSED VALIDATION CHECKS') - - -def main(): - parser = argparse.ArgumentParser() - subparsers = parser.add_subparsers(help='sub-command help', dest='action') - - parser_setup = subparsers.add_parser('validate', help='Validate TrueNAS catalog') - parser_setup.add_argument('--path', help='Specify path of TrueNAS catalog') - - args = parser.parse_args() - if args.action == 'validate': - validate(args.path) - else: - parser.print_help() - - -if __name__ == '__main__': - main() diff --git a/catalog_validation/ix-source/catalog_validation/scripts/dev_apps_validate.py b/catalog_validation/ix-source/catalog_validation/scripts/dev_apps_validate.py deleted file mode 100644 index 1ce514beae..0000000000 --- a/catalog_validation/ix-source/catalog_validation/scripts/dev_apps_validate.py +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env python -import argparse - -from catalog_validation.ci.validate import validate_dev_directory_structure -from catalog_validation.git_utils import get_changed_apps - - -def main(): - parser = argparse.ArgumentParser() - subparsers = parser.add_subparsers(help='sub-command help', dest='action') - - parser_setup = subparsers.add_parser( - 'validate', help='Validate TrueNAS dev catalog items' - ) - parser_setup.add_argument('--path', help='Specify path of TrueNAS dev catalog', required=True) - parser_setup.add_argument( - '--base_branch', help='Specify base branch to find changed catalog items', default='master' - ) - - args = parser.parse_args() - if args.action == 'validate': - validate_dev_directory_structure(args.path, get_changed_apps(args.path, args.base_branch)) - else: - parser.print_help() - - -if __name__ == '__main__': - main() diff --git a/catalog_validation/ix-source/catalog_validation/utils.py b/catalog_validation/ix-source/catalog_validation/utils.py deleted file mode 100644 index 42874798fd..0000000000 --- a/catalog_validation/ix-source/catalog_validation/utils.py +++ /dev/null @@ -1,225 +0,0 @@ -import re - - -CACHED_CATALOG_FILE_NAME = 'catalog.json' -CACHED_VERSION_FILE_NAME = 'app_versions.json' -METADATA_JSON_SCHEMA = { - 'type': 'object', - 'properties': { - 'runAsContext': { - 'type': 'array', - 'items': { - 'type': 'object', - 'properties': { - 'description': {'type': 'string'}, - 'gid': {'type': 'integer'}, - 'groupName': {'type': 'string'}, - 'userName': {'type': 'string'}, - 'uid': {'type': 'integer'}, - }, - 'required': ['description'], - }, - }, - 'capabilities': { - 'type': 'array', - 'items': { - 'type': 'object', - 'properties': { - 'description': {'type': 'string'}, - 'name': {'type': 'string'}, - }, - 'required': ['description', 'name'], - }, - }, - 'hostMounts': { - 'type': 'array', - 'items': { - 'type': 'object', - 'properties': { - 'description': {'type': 'string'}, - 'hostPath': {'type': 'string'}, - }, - 'required': ['description', 'hostPath'], - }, - }, - }, -} -RE_SCALE_VERSION = re.compile(r'^(\d{2}\.\d{2}(?:\.\d)*(?:-?(?:RC|BETA)\.?\d?)?)$') # 24.04 / 24.04.1 / 24.04-RC.1 -RE_VERSION_PATTERN = re.compile(r'(\d{2}\.\d{2}(?:\.\d)*)') # We are only interested in XX.XX here -VALID_TRAIN_REGEX = re.compile(r'^\w+[\w.-]*$') -VERSION_VALIDATION_SCHEMA = { - 'type': 'object', - 'title': 'Versions', - 'patternProperties': { - '[0-9]+.[0-9]+.[0-9]+': { - 'type': 'object', - 'properties': { - 'healthy': { - 'type': 'boolean', - }, - 'supported': { - 'type': 'boolean', - }, - 'healthy_error': { - 'type': ['string', 'null'] - }, - 'location': { - 'type': 'string', - 'pattern': r'^(\/[a-zA-Z0-9_.-]+)+$' - }, - 'last_update': { - 'type': 'string', - 'pattern': '^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$' - }, - 'required_features': { - 'type': 'array', - 'items': { - 'type': 'string' - } - }, - 'human_version': { - 'type': 'string' - }, - 'version': { - 'type': 'string', - 'pattern': '[0-9]+.[0-9]+.[0-9]+' - }, - 'chart_metadata': { - 'type': 'object', - 'properties': { - 'name': { - 'type': 'string' - }, - 'description': { - 'type': 'string' - }, - 'annotations': { - 'type': 'object' - }, - 'type': { - 'type': 'string' - }, - 'version': { - 'type': 'string', - 'pattern': '[0-9]+.[0-9]+.[0-9]+' - }, - 'apiVersion': { - 'type': 'string', - }, - 'appVersion': { - 'type': 'string' - }, - 'kubeVersion': { - 'type': 'string' - }, - 'app_readme': {'type': 'string'}, - 'detailed_readme': {'type': 'string'}, - 'changelog': {'type': ['string', 'null']}, - 'maintainers': { - 'type': 'array', - 'items': { - 'type': 'object', - 'properties': { - 'name': {'type': 'string'}, - 'url': {'type': ['string', 'null']}, - 'email': {'type': 'string'}, - }, - 'required': ['name', 'email'], - } - }, - 'dependencies': { - 'type': 'array', - 'items': { - 'type': 'object', - 'properties': { - 'name': {'type': 'string'}, - 'repository': {'type': 'string'}, - 'version': {'type': 'string'} - } - } - }, - 'home': {'type': 'string'}, - 'icon': {'type': 'string'}, - 'sources': { - 'type': 'array', - 'items': { - 'type': 'string' - } - }, - 'keywords': { - 'type': 'array', - 'items': { - 'type': 'string' - } - }, - } - }, - 'app_metadata': { - **METADATA_JSON_SCHEMA, - 'type': ['object', 'null'], - }, - 'schema': { - 'type': 'object', - 'properties': { - 'groups': { - 'type': 'array', - 'items': { - 'type': 'object', - 'properties': { - 'name': { - 'type': 'string' - }, - 'description': { - 'type': 'string' - }, - }, - 'required': ['description', 'name'], - } - }, - 'portals': { - 'type': 'object' - }, - 'questions': { - 'type': 'array', - 'items': { - 'type': 'object', - 'properties': { - 'variable': {'type': 'string'}, - 'label': {'type': 'string'}, - 'group': {'type': 'string'}, - 'schema': { - 'type': 'object', - 'properties': { - 'type': {'type': 'string'} - }, - 'required': ['type'] - } - } - } - } - }, - 'required': ['groups', 'questions'] - }, - }, - 'required': [ - 'healthy', 'supported', 'healthy_error', 'location', 'last_update', 'required_features', - 'human_version', 'version', 'chart_metadata', 'app_metadata', 'schema', - ], - }, - }, - 'additionalProperties': False -} -WANTED_FILES_IN_ITEM_VERSION = {'questions.yaml', 'app-readme.md', 'Chart.yaml', 'README.md'} - - -def validate_key_value_types(data_to_check, mapping, verrors, schema): - for key_mapping in mapping: - if len(key_mapping) == 2: - key, value_type, required = *key_mapping, True - else: - key, value_type, required = key_mapping - - if required and key not in data_to_check: - verrors.add(f'{schema}.{key}', f'Missing required {key!r} key.') - elif key in data_to_check and not isinstance(data_to_check[key], value_type): - verrors.add(f'{schema}.{key}', f'{key!r} value should be a {value_type.__name__!r}') diff --git a/catalog_validation/ix-source/catalog_validation/validation.py b/catalog_validation/ix-source/catalog_validation/validation.py deleted file mode 100644 index 5d348f3949..0000000000 --- a/catalog_validation/ix-source/catalog_validation/validation.py +++ /dev/null @@ -1,459 +0,0 @@ -import concurrent.futures -import json -import jsonschema -import os -import yaml - -from jsonschema import validate as json_schema_validate, ValidationError as JsonValidationError -from middlewared.validators import validate_filters -from semantic_version import Version -from typing import Optional - -from .exceptions import CatalogDoesNotExist, ValidationErrors -from .items.ix_values_utils import validate_ix_values_schema -from .items.questions_utils import ( - CUSTOM_PORTALS_KEY, CUSTOM_PORTALS_ENABLE_KEY, CUSTOM_PORTAL_GROUP_KEY, -) -from .items.utils import get_catalog_json_schema, RECOMMENDED_APPS_FILENAME, RECOMMENDED_APPS_SCHEMA, TRAIN_IGNORE_DIRS -from .schema.migration_schema import ( - APP_MIGRATION_SCHEMA, MIGRATION_DIRS, RE_MIGRATION_NAME, RE_MIGRATION_NAME_STR, APP_MIGRATION_DIR, -) -from .schema.variable import Variable -from .validation_utils import validate_chart_version -from .utils import ( - CACHED_CATALOG_FILE_NAME, CACHED_VERSION_FILE_NAME, METADATA_JSON_SCHEMA, validate_key_value_types, - VALID_TRAIN_REGEX, VERSION_VALIDATION_SCHEMA, WANTED_FILES_IN_ITEM_VERSION -) - - -def validate_catalog(catalog_path): - if not os.path.exists(catalog_path): - raise CatalogDoesNotExist(catalog_path) - - verrors = ValidationErrors() - items = [] - item_futures = [] - cached_catalog_file_path = os.path.join(catalog_path, CACHED_CATALOG_FILE_NAME) - if not os.path.exists(cached_catalog_file_path): - verrors.add( - 'cached_catalog_file', - f'{CACHED_CATALOG_FILE_NAME!r} metadata file must be specified for a valid catalog' - ) - else: - try: - with open(cached_catalog_file_path, 'r') as f: - json_schema_validate(json.loads(f.read()), get_catalog_json_schema()) - - except (json.JSONDecodeError, JsonValidationError) as e: - verrors.add( - 'cached_catalog_file', - f'Failed to validate contents of {cached_catalog_file_path!r}: {e!r}' - ) - - verrors.check() - - validate_recommended_apps_file(catalog_path) - - for file_dir in os.listdir(catalog_path): - complete_path = os.path.join(catalog_path, file_dir) - if file_dir not in MIGRATION_DIRS and ( - file_dir.startswith('.') or not os.path.isdir(complete_path) or file_dir in TRAIN_IGNORE_DIRS - ): - continue - if file_dir in MIGRATION_DIRS: - if all(os.path.exists(migration_dir) for migration_dir in map( - lambda d: os.path.join(catalog_path, d), MIGRATION_DIRS - )): - verrors.add( - 'app_migrations', f'Both {", ".join(MIGRATION_DIRS)!r} cannot be used to specify app migrations' - ) - else: - for directory in MIGRATION_DIRS: - migration_dir = os.path.join(catalog_path, directory) - if not os.path.exists(migration_dir): - continue - if os.path.isdir(migration_dir): - try: - validate_migrations(migration_dir) - except ValidationErrors as e: - verrors.extend(e) - else: - verrors.add('app_migrations', f'{directory!r} is not a directory') - else: - try: - validate_train_structure(complete_path) - except ValidationErrors as e: - verrors.extend(e) - else: - items.extend(get_train_items(complete_path)) - - with concurrent.futures.ProcessPoolExecutor(max_workers=5 if len(items) > 10 else 2) as exc: - for item in items: - item_futures.append(exc.submit(validate_catalog_item, item[0], item[1])) - - for future in item_futures: - try: - future.result() - except ValidationErrors as e: - verrors.extend(e) - - verrors.check() - - -def validate_recommended_apps_file(catalog_location: str) -> None: - verrors = ValidationErrors() - try: - with open(os.path.join(catalog_location, RECOMMENDED_APPS_FILENAME), 'r') as f: - data = yaml.safe_load(f.read()) - json_schema_validate(data, RECOMMENDED_APPS_SCHEMA) - except FileNotFoundError: - return - except yaml.YAMLError: - verrors.add(RECOMMENDED_APPS_FILENAME, 'Must be a valid yaml file') - except JsonValidationError as e: - verrors.add(RECOMMENDED_APPS_FILENAME, f'Invalid format specified: {e}') - - verrors.check() - - -def validate_migrations(migration_dir): - verrors = ValidationErrors() - for migration_file in os.listdir(migration_dir): - if not RE_MIGRATION_NAME.findall(migration_file): - verrors.add( - f'app_migrations.{migration_file}', - 'Invalid naming scheme used for migration file name. ' - f'It should be conforming to {RE_MIGRATION_NAME_STR!r} pattern.' - ) - else: - try: - with open(os.path.join(migration_dir, migration_file), 'r') as f: - data = json.loads(f.read()) - jsonschema.validate(data, APP_MIGRATION_SCHEMA) - except (json.JSONDecodeError, jsonschema.ValidationError) as e: - verrors.add( - f'app_migrations.{migration_file}', - f'Failed to validate migration file structure: {e}' - ) - verrors.check() - - -def validate_train_structure(train_path): - train = os.path.basename(train_path) - verrors = ValidationErrors() - if not VALID_TRAIN_REGEX.match(train): - verrors.add(train, 'Train name is invalid.') - - verrors.check() - - -def get_train_items(train_path): - train = os.path.basename(train_path) - items = [] - for catalog_item in os.listdir(train_path): - item_path = os.path.join(train_path, catalog_item) - if not os.path.isdir(item_path): - continue - items.append((item_path, f'{train}.{catalog_item}')) - return items - - -def validate_catalog_item(catalog_item_path, schema, validate_versions=True): - # We should ensure that each catalog item has at least 1 version available - # Also that we have item.yaml present - verrors = ValidationErrors() - item_name = os.path.join(catalog_item_path) - files = [] - versions = [] - - if not os.path.isdir(catalog_item_path): - verrors.add(schema, 'Catalog item must be a directory') - verrors.check() - - for file_dir in os.listdir(catalog_item_path): - complete_path = os.path.join(catalog_item_path, file_dir) - if os.path.isdir(complete_path): - versions.append(complete_path) - else: - files.append(file_dir) - - if not versions: - verrors.add(f'{schema}.versions', f'No versions found for {item_name} item.') - - if 'item.yaml' not in files: - verrors.add(f'{schema}.item', 'Item configuration (item.yaml) not found') - else: - with open(os.path.join(catalog_item_path, 'item.yaml'), 'r') as f: - item_config = yaml.safe_load(f.read()) - - validate_key_value_types( - item_config, ( - ('categories', list), ('tags', list, False), ('screenshots', list, False), - ), verrors, f'{schema}.item_config' - ) - - cached_version_file_path = os.path.join(catalog_item_path, CACHED_VERSION_FILE_NAME) - if os.path.exists(cached_version_file_path): - try: - with open(cached_version_file_path, 'r') as f: - validate_catalog_item_version_data( - json.loads(f.read()), f'{schema}.{CACHED_VERSION_FILE_NAME}', verrors - ) - except json.JSONDecodeError: - verrors.add( - f'{schema}.{CACHED_VERSION_FILE_NAME}', f'{CACHED_VERSION_FILE_NAME!r} is not a valid json file' - ) - - for version_path in (versions if validate_versions else []): - try: - validate_catalog_item_version(version_path, f'{schema}.versions.{os.path.basename(version_path)}') - except ValidationErrors as e: - verrors.extend(e) - - verrors.check() - - -def validate_app_migrations(verrors, version_path, schema): - app_migration_path = os.path.join(version_path, APP_MIGRATION_DIR) - - if not os.path.exists(app_migration_path): - return verrors - - for migration_file in os.listdir(app_migration_path): - migration_file_path = os.path.join(app_migration_path, migration_file) - if not os.access(migration_file_path, os.X_OK): - verrors.add(schema, f'{migration_file!r} is not executable') - return verrors - - -def validate_catalog_item_version_data(version_data: dict, schema: str, verrors: ValidationErrors) -> ValidationErrors: - try: - json_schema_validate(version_data, VERSION_VALIDATION_SCHEMA) - except JsonValidationError as e: - verrors.add(schema, f'Invalid format specified for application versions: {e}') - return verrors - - -def validate_catalog_item_version( - version_path: str, schema: str, version_name: Optional[str] = None, item_name: Optional[str] = None, - validate_values: bool = False, -): - verrors = ValidationErrors() - version_name = version_name or os.path.basename(version_path) - item_name = item_name or version_path.split('/')[-2] - try: - Version(version_name) - except ValueError: - verrors.add(f'{schema}.name', f'{version_name!r} is not a valid version name.') - - files_diff = WANTED_FILES_IN_ITEM_VERSION ^ set( - f for f in os.listdir(version_path) if f in WANTED_FILES_IN_ITEM_VERSION - ) - if files_diff: - verrors.add(f'{schema}.required_files', f'Missing {", ".join(files_diff)} required configuration files.') - - chart_version_path = os.path.join(version_path, 'Chart.yaml') - validate_chart_version(verrors, chart_version_path, schema, item_name, version_name) - - questions_path = os.path.join(version_path, 'questions.yaml') - if os.path.exists(questions_path): - try: - validate_questions_yaml(questions_path, f'{schema}.questions_configuration') - except ValidationErrors as v: - verrors.extend(v) - - for values_file in ['ix_values.yaml'] + (['values.yaml'] if validate_values else []): - values_path = os.path.join(version_path, values_file) - if os.path.exists(values_path): - try: - validate_ix_values_yaml(values_path, f'{schema}.values_configuration') - except ValidationErrors as v: - verrors.extend(v) - - metadata_path = os.path.join(version_path, 'metadata.yaml') - if os.path.exists(metadata_path): - try: - validate_metadata_yaml(metadata_path, f'{schema}.metadata_configuration') - except ValidationErrors as v: - verrors.extend(v) - - validate_app_migrations(verrors, version_path, f'{schema}.app_migrations') - - verrors.check() - - -def validate_ix_values_yaml(ix_values_yaml_path, schema): - verrors = ValidationErrors() - - with open(ix_values_yaml_path, 'r') as f: - try: - ix_values = yaml.safe_load(f.read()) - except yaml.YAMLError: - verrors.add(schema, 'Must be a valid yaml file') - - verrors.check() - - if isinstance(ix_values, dict): - portals = ix_values.get(CUSTOM_PORTALS_KEY) - if portals: - try: - validate_ix_values_schema(schema, portals) - except ValidationErrors as ve: - verrors.extend(ve) - else: - verrors.add(schema, 'Must be a dictionary') - - verrors.check() - - -def validate_metadata_yaml(metadata_yaml_path, schema): - verrors = ValidationErrors() - with open(metadata_yaml_path, 'r') as f: - try: - metadata = yaml.safe_load(f.read()) - except yaml.YAMLError: - verrors.add(schema, 'Must be a valid yaml file') - else: - try: - json_schema_validate(metadata, METADATA_JSON_SCHEMA) - except JsonValidationError as e: - verrors.add(schema, f'Invalid format specified for application metadata: {e}') - - verrors.check() - - -def validate_questions_yaml(questions_yaml_path, schema): - verrors = ValidationErrors() - - with open(questions_yaml_path, 'r') as f: - try: - questions_config = yaml.safe_load(f.read()) - except yaml.YAMLError: - verrors.add(schema, 'Must be a valid yaml file') - else: - if not isinstance(questions_config, dict): - verrors.add(schema, 'Must be a dictionary') - - verrors.check() - - validate_key_value_types( - questions_config, ( - ('groups', list), ('questions', list), ('portals', dict, False), (CUSTOM_PORTALS_ENABLE_KEY, bool, False), - (CUSTOM_PORTAL_GROUP_KEY, str, False), - ), verrors, schema - ) - - verrors.check() - - groups = [] - for index, group in enumerate(questions_config['groups']): - if not isinstance(group, dict): - verrors.add(f'{schema}.groups.{index}', 'Type of group should be a dictionary.') - continue - - if group.get('name'): - groups.append(group['name']) - - validate_key_value_types(group, (('name', str), ('description', str)), verrors, f'{schema}.group.{index}') - - for index, portal_details in enumerate((questions_config.get('portals') or {}).items()): - portal_type, portal_schema = portal_details - error_schema = f'{schema}.portals.{index}' - if not isinstance(portal_type, str): - verrors.add(error_schema, 'Portal type must be a string') - if not isinstance(portal_schema, dict): - verrors.add(error_schema, 'Portal schema must be a dictionary') - else: - validate_key_value_types( - portal_schema, (('protocols', list), ('host', list), ('ports', list), ('path', str, False)), - verrors, error_schema - ) - - validate_variable_uniqueness(questions_config['questions'], f'{schema}.questions', verrors) - for index, question in enumerate(questions_config['questions']): - validate_question(question, f'{schema}.questions.{index}', verrors, (('group', str),)) - if question.get('group') and question['group'] not in groups: - verrors.add(f'{schema}.questions.{index}.group', f'Please specify a group declared in "{schema}.groups"') - - if questions_config.get(CUSTOM_PORTALS_ENABLE_KEY): - if not questions_config.get(CUSTOM_PORTAL_GROUP_KEY): - verrors.add( - f'{schema}.{CUSTOM_PORTALS_ENABLE_KEY}', - f'{CUSTOM_PORTAL_GROUP_KEY!r} must be specified when user specified portals are desired' - ) - elif questions_config[CUSTOM_PORTAL_GROUP_KEY] not in groups: - verrors.add( - f'{schema}.{CUSTOM_PORTAL_GROUP_KEY}', - 'Specified group not declared under "groups"' - ) - - verrors.check() - - -def validate_variable_uniqueness(data, schema, verrors): - variables = [] - for index, question in enumerate(data): - if question['variable'] in variables: - verrors.add( - f'{schema}.{index}', f'Variable name {question["variable"]!r} has been used again which is not allowed' - ) - else: - variables.append(question['variable']) - sub_questions = question.get('subquestions') or [] - for sub_index, sub_question in enumerate(sub_questions): - if sub_question['variable'] in variables: - verrors.add( - f'{schema}.{index}.subquestions.{sub_index}', - f'Variable name {sub_question["variable"]!r} has been used again which is not allowed' - ) - else: - variables.append(sub_question['variable']) - - verrors.check() - - -def validate_question(question_data, schema, verrors, validate_top_level_attrs=None): - if not isinstance(question_data, dict): - verrors.add(schema, 'Question must be a valid dictionary.') - return - - validate_top_level_attrs = validate_top_level_attrs or tuple() - validate_key_value_types( - question_data, (('variable', str), ('label', str), ('schema', dict)) + validate_top_level_attrs, verrors, schema - ) - if type(question_data.get('schema')) != dict: - return - - if question_data['variable'] == CUSTOM_PORTALS_KEY: - verrors.add( - f'{schema}.variable', - f'{CUSTOM_PORTALS_KEY!r} is a reserved variable name and cannot be specified by app developer' - ) - # No need to validate the question data etc here - return - - try: - Variable(question_data).validate(schema) - except ValidationErrors as ve: - verrors.extend(ve) - return - - schema_data = question_data['schema'] - variable_type = schema_data['type'] - - if filters := schema_data.get('show_if'): - validate_filters(filters) - - for condition, key, schema_str in ( - (variable_type != 'list', 'subquestions', f'{schema}.schema.subquestions'), - (variable_type == 'list', 'items', f'{schema}.schema.items'), - (variable_type == 'dict', 'attrs', f'{schema}.schema.attrs'), - ): - if not (condition and type(schema_data.get(key)) == list): - continue - - if variable_type == 'dict': - validate_variable_uniqueness(schema_data[key], f'{schema}.{schema_str}', verrors) - - for index, item in enumerate(schema_data[key]): - validate_question(item, f'{schema_str}.{index}', verrors) diff --git a/catalog_validation/ix-source/catalog_validation/validation_utils.py b/catalog_validation/ix-source/catalog_validation/validation_utils.py deleted file mode 100644 index c6ad270f7d..0000000000 --- a/catalog_validation/ix-source/catalog_validation/validation_utils.py +++ /dev/null @@ -1,94 +0,0 @@ -import os -import yaml - -from middlewared.plugins.update_.utils import can_update -from semantic_version import Version -from typing import Optional - -from .exceptions import ValidationErrors -from .utils import validate_key_value_types, RE_SCALE_VERSION - - -def validate_min_max_version_values(annotations_dict, verrors, schema): - validate_key_value_types( - annotations_dict, (('min_scale_version', str, False), ('max_scale_version', str, False)), verrors, schema - ) - - if verrors: - # No point in proceeding further - return - - for version in filter(lambda v: v in annotations_dict, ['min_scale_version', 'max_scale_version']): - if not RE_SCALE_VERSION.match(annotations_dict[version]): - verrors.add( - f'{schema}.{version}', - f'Format of provided {version} value is not correct' - ) - - if ( - not verrors and all(version in annotations_dict for version in ['min_scale_version', 'max_scale_version']) and - annotations_dict['min_scale_version'] != annotations_dict['max_scale_version'] and - not can_update(annotations_dict['min_scale_version'], annotations_dict['max_scale_version']) - ): - verrors.add(schema, 'Provided min_scale_version is greater than provided max_scale_version') - - -def validate_chart_version( - verrors: ValidationErrors, chart_version_path: str, schema: str, item_name: str, version_name: Optional[str] = None, -) -> ValidationErrors: - if os.path.exists(chart_version_path): - with open(chart_version_path, 'r') as f: - try: - chart_config = yaml.safe_load(f.read()) - except yaml.YAMLError: - verrors.add(schema, 'Must be a valid yaml file') - else: - if not isinstance(chart_config, dict): - verrors.add(schema, 'Must be a dictionary') - else: - if chart_config.get('name') != item_name: - verrors.add(f'{schema}.item_name', 'Item name not correctly set in "Chart.yaml".') - - if not isinstance(chart_config.get('annotations', {}), dict): - verrors.add(f'{schema}.annotations', 'Annotations must be a dictionary') - elif chart_config.get('annotations'): - validate_min_max_version_values(chart_config['annotations'], verrors, schema) - - if not isinstance(chart_config.get('sources', []), list): - verrors.add(f'{schema}.sources', 'Sources must be a list') - else: - for index, source in enumerate(chart_config.get('sources', [])): - if not isinstance(source, str): - verrors.add(f'{schema}.sources.{index}', 'Source must be a string') - - if not isinstance(chart_config.get('maintainers', []), list): - verrors.add(f'{schema}.maintainers', 'Maintainers must be a list') - else: - for index, maintainer in enumerate(chart_config.get('maintainers', [])): - if not isinstance(maintainer, dict): - verrors.add(f'{schema}.maintainers.{index}', 'Maintainer must be a dictionary') - elif not all(k in maintainer and isinstance(maintainer[k], str) for k in ('name', 'email')): - verrors.add( - f'{schema}.maintainers.{index}', - 'Maintainer must have name and email attributes defined and be strings.' - ) - - chart_version = chart_config.get('version') - if chart_version is None: - verrors.add(f'{schema}.version', 'Version must be configured in "Chart.yaml"') - else: - try: - Version(chart_version) - except ValueError: - verrors.add(f'{schema}.version', f'{chart_version!r} is not a valid version name') - - if version_name is not None and chart_version != version_name: - verrors.add( - f'{schema}.version', - 'Configured version in "Chart.yaml" does not match version directory name.' - ) - - else: - verrors.add(schema, 'Missing chart version file') - - return verrors diff --git a/catalog_validation/ix-source/debian/changelog b/catalog_validation/ix-source/debian/changelog deleted file mode 100644 index 0019cb792f..0000000000 --- a/catalog_validation/ix-source/debian/changelog +++ /dev/null @@ -1,5 +0,0 @@ -catalog-validation (0.1-0~truenas+1) bullseye-truenas-unstable; urgency=medium - - * Initial release - - -- Waqar Ahmed Fri, 27 Nov 2020 00:26:21 +0500 diff --git a/catalog_validation/ix-source/debian/control b/catalog_validation/ix-source/debian/control deleted file mode 100644 index 3034a70dcc..0000000000 --- a/catalog_validation/ix-source/debian/control +++ /dev/null @@ -1,27 +0,0 @@ -Source: catalog-validation -Section: contrib/python -Priority: optional -Maintainer: Waqar Ahmed -Build-Depends: debhelper-compat (= 12), - dh-python, - python3-dev, - python3-jsonschema, - python3-semantic-version, - python3-kubernetes, - python3-yaml, - python3-setuptools -Standards-Version: 4.4.1 -Homepage: https://github.com/truenas/catalog_validation -Testsuite: autopkgtest-pkg-python - -Package: python3-catalog-validation -Architecture: any -Depends: python3-semantic-version, - python3-jsonschema, - python3-kubernetes, - python3-yaml, - ${shlibs:Depends}, - ${misc:Depends}, - ${python3:Depends} -Description: Validate TrueNAS Catalogs - This package helps validate truenas catalogs. diff --git a/catalog_validation/ix-source/debian/rules b/catalog_validation/ix-source/debian/rules deleted file mode 100644 index 3bb0ffc007..0000000000 --- a/catalog_validation/ix-source/debian/rules +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/make -f -export DH_VERBOSE = 1 - -export PYBUILD_NAME=catalog_validation - -%: - dh $@ --with python3 --buildsystem=pybuild diff --git a/catalog_validation/ix-source/debian/source/format b/catalog_validation/ix-source/debian/source/format deleted file mode 100644 index 163aaf8d82..0000000000 --- a/catalog_validation/ix-source/debian/source/format +++ /dev/null @@ -1 +0,0 @@ -3.0 (quilt) diff --git a/catalog_validation/ix-source/debian/source/options b/catalog_validation/ix-source/debian/source/options deleted file mode 100644 index cb61fa5267..0000000000 --- a/catalog_validation/ix-source/debian/source/options +++ /dev/null @@ -1 +0,0 @@ -extend-diff-ignore = "^[^/]*[.]egg-info/" diff --git a/catalog_validation/ix-source/requirements.txt b/catalog_validation/ix-source/requirements.txt deleted file mode 100644 index 4b3e302bb9..0000000000 --- a/catalog_validation/ix-source/requirements.txt +++ /dev/null @@ -1,6 +0,0 @@ -gitpython -jsonschema==4.23.0 -kubernetes -markdown -pyyaml -semantic_version diff --git a/catalog_validation/ix-source/setup.cfg b/catalog_validation/ix-source/setup.cfg deleted file mode 100644 index aa079ec57f..0000000000 --- a/catalog_validation/ix-source/setup.cfg +++ /dev/null @@ -1,2 +0,0 @@ -[flake8] -max-line-length=120 diff --git a/catalog_validation/ix-source/setup.py b/catalog_validation/ix-source/setup.py deleted file mode 100644 index a64ad68046..0000000000 --- a/catalog_validation/ix-source/setup.py +++ /dev/null @@ -1,21 +0,0 @@ -from distutils.core import setup -from setuptools import find_packages - -VERSION = '0.1' - -setup( - name='catalog_validation', - description='Validate TrueNAS Catalog(s)', - version=VERSION, - include_package_data=True, - packages=find_packages(), - license='GNU3', - platforms='any', - entry_points={ - 'console_scripts': [ - 'catalog_validate = catalog_validation.scripts.catalog_validate:main', - 'catalog_update = catalog_validation.scripts.catalog_update:main', - 'dev_charts_validate = catalog_validation.scripts.dev_apps_validate:main', - ], - }, -) diff --git a/catalog_validation/truecharts-fork/.github/workflows/ci.yml b/catalog_validation/truecharts-fork/.github/workflows/ci.yml deleted file mode 100644 index ccca3e06e9..0000000000 --- a/catalog_validation/truecharts-fork/.github/workflows/ci.yml +++ /dev/null @@ -1,34 +0,0 @@ -name: CI - -on: [push] - -jobs: - build-deb: - runs-on: ubuntu-latest - container: - image: tccr.io/truecharts/catalog_validation:latest - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Build deb package - run: > - dpkg-buildpackage - -B - --no-sign - -jauto - - - name: Create artifacts dir - run: mkdir artifacts - if: success() - - - name: Move artifacts - run: mv ../*.deb artifacts - if: success() - - - uses: actions/upload-artifact@v4 - with: - name: py-catalog-validation - path: artifacts - if: success() diff --git a/catalog_validation/truecharts-fork/.github/workflows/containers.build.yaml b/catalog_validation/truecharts-fork/.github/workflows/containers.build.yaml deleted file mode 100644 index 398120d87b..0000000000 --- a/catalog_validation/truecharts-fork/.github/workflows/containers.build.yaml +++ /dev/null @@ -1,180 +0,0 @@ -name: build_image - -on: - push: - branches: - - 'master' - -jobs: - build: - permissions: - actions: read # for detecting the Github Actions environment. - id-token: write # for creating OIDC tokens for signing. - packages: write # for uploading attestations. - name: Build - runs-on: ubuntu-22.04 - if: "!contains(github.event.head_commit.message, '[ci-skip]')" - steps: - - name: Checkout - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 - - # Define if tests and push should be run against which versions/platforms - - name: Prepare - id: prep - run: | - PLATFORM="linux/amd64" - echo ::set-output name=platform::${PLATFORM} - - if [ "${{github.event_name}}" == "pull_request" ]; then - echo ::set-output name=push::false - echo ::set-output name=cache_from::"type=registry,ref=ghcr.io/${{ github.repository_owner }}/${{ matrix.container }}:buildcache" || echo ::set-output name=cache_from::"" - echo ::set-output name=cache_to::"" - else - echo ::set-output name=push::true - echo ::set-output name=cache_from::"type=registry,ref=ghcr.io/${{ github.repository_owner }}/${{ matrix.container }}:buildcache" - echo ::set-output name=cache_to::"type=registry,ref=ghcr.io/${{ github.repository_owner }}/${{ matrix.container }}:buildcache,mode=max" - fi - - name: Get Time - id: time - uses: nanzm/get-time-action@887e4db9af58ebae64998b7105921b816af77977 # v2.0 - with: - timeZone: 1 - format: 'YYYYMMDDHHmmss' - - - name: Set up QEMU - uses: docker/setup-qemu-action@49b3bc8e6bdd4a60e6116a5414239cba5943d3cf # v3 - with: - platforms: amd64 - - - uses: sigstore/cosign-installer@main - - - name: Install Syft - uses: anchore/sbom-action/download-syft@61119d458adab75f756bc0b9e4bde25725f86a7a # v0.17.2 - - - name: Login to Quay - uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3 - if: github.event_name != 'pull_request' - with: - registry: quay.io - username: ${{ secrets.QUAY_USER }} - password: ${{ secrets.QUAY_SECRET }} - - - name: Login to GHCR - uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3 - if: github.event_name != 'pull_request' - with: - registry: ghcr.io - username: ${{ secrets.GHCR_USERNAME }} - password: ${{ secrets.GHCR_TOKEN }} - - - name: Docker meta - id: meta - uses: docker/metadata-action@8e5442c4ef9f78752691e2d8f8d19755c6f78e81 # v5 - with: - # list of Docker images to use as base name for tags - images: | - quay.io/truecharts/catalog_validation - ghcr.io/truecharts/catalog_validation - tccr.io/truecharts/catalog_validation - - # Install and configure Buildx - - name: Set up Docker Buildx - id: buildx - uses: docker/setup-buildx-action@988b5a0280414f521da01fcc63a27aeeb4b104db # v3 - with: - install: true - version: latest - driver-opts: image=moby/buildkit:latest - - # Creates a local build to run tests on - - name: Build and Load local test-container - if: ${{ steps.prep.outputs.goss == 'true' }} - uses: docker/build-push-action@ca052bb54ab0790a636c9b5f226502c73d547a25 # v5 - with: - build-args: | - CONTAINER_NAME=catalog_validation - context: . - file: ./Dockerfile - load: true - tags: | - ghcr.io/${{ github.repository_owner }}/catalog_validation:test - - # Push if not a PR, otherwise just test the build process for all requested platforms - - name: Build and Push - id: push - uses: docker/build-push-action@ca052bb54ab0790a636c9b5f226502c73d547a25 # v5 - with: - build-args: | - CONTAINER_NAME=catalog_validation - context: . - platforms: ${{ steps.prep.outputs.platform }} - file: ./Dockerfile - push: ${{ steps.prep.outputs.push }} - labels: ${{ steps.meta.outputs.labels }} - tags: | - quay.io/truecharts/catalog_validation:latest - quay.io/truecharts/catalog_validation:build${{ steps.time.outputs.time }} - - - name: Set quay to Public - if: github.event_name != 'pull_request' - run: | - curl -X POST -H "Content-Type: application/json" -d '{"visibility": "public"}' -H "Authorization: Bearer ${{ secrets.QUAY_TOKEN }}" "https://quay.io/api/v1/repository/truecharts/catalog_validation/changevisibility" - - - name: Sign the images - if: github.event_name != 'pull_request' - run: | - cosign sign quay.io/truecharts/catalog_validation@${{ steps.push.outputs.digest }} -y -a "repo=${{ github.repository }}" -a "workflow=${{ github.workflow }}" -a "ref=${{ github.sha }}" - - - name: Verify the pushed tags - if: github.event_name != 'pull_request' - run: | - cosign verify quay.io/truecharts/catalog_validation@${{ steps.push.outputs.digest }} --certificate-oidc-issuer=https://token.actions.githubusercontent.com --certificate-identity=https://github.com/truecharts/catalog_validation/.github/workflows/containers.build.yaml@refs/heads/master - - - name: Generate SBOM - if: github.event_name != 'pull_request' - run: | - syft "quay.io/truecharts/catalog_validation:build${{ steps.time.outputs.time }}@${{ steps.push.outputs.digest }}" -o spdx-json=catalog_validation-sbom-spdx.json - - - name: Attach SBOM to image - if: github.event_name != 'pull_request' - run: | - cosign attest --predicate catalog_validation-sbom-spdx.json --type spdx "quay.io/truecharts/catalog_validation@${{ steps.push.outputs.digest }}" -y - - - - name: Verify SBOM attestation - if: github.event_name != 'pull_request' - run: | - cosign verify-attestation quay.io/truecharts/catalog_validation@${{ steps.push.outputs.digest }} --type https://spdx.dev/Document --certificate-oidc-issuer=https://token.actions.githubusercontent.com --certificate-identity=https://github.com/truecharts/catalog_validation/.github/workflows/containers.build.yaml@refs/heads/master | jq '.payload |= @base64d | .payload | fromjson' - - - name: Generate provenance - id: gen-prov - if: github.event_name != 'pull_request' - run: | - wget https://github.com/slsa-framework/slsa-github-generator/releases/download/v1.5.0/slsa-generator-container-linux-amd64 - chmod +x slsa-generator-container-linux-amd64 - # Generate a predicate only. - ./slsa-generator-container-linux-amd64 generate --predicate="catalog_validation-predicate.json" - env: - UNTRUSTED_IMAGE: "quay.io/truecharts/catalog_validation" - UNTRUSTED_DIGEST: "${{ steps.push.outputs.digest }}" - GITHUB_CONTEXT: "${{ toJSON(github) }}" - - - name: Sign provenance - id: sign-prov - if: github.event_name != 'pull_request' - run: | - cosign attest --predicate="catalog_validation-predicate.json" \ - --type slsaprovenance \ - --yes \ - "quay.io/truecharts/catalog_validation@${{ steps.push.outputs.digest }}" - env: - COSIGN_EXPERIMENTAL: 1 - - - name: Verify provenance attestation - if: github.event_name != 'pull_request' - id: verf-prov - run: | - cosign verify-attestation quay.io/truecharts/catalog_validation@${{ steps.push.outputs.digest }} --type slsaprovenance --certificate-oidc-issuer=https://token.actions.githubusercontent.com --certificate-identity=https://github.com/truecharts/catalog_validation/.github/workflows/containers.build.yaml@refs/heads/master | jq '.payload |= @base64d | .payload | fromjson' - env: - COSIGN_EXPERIMENTAL: 1 - diff --git a/catalog_validation/truecharts-fork/.github/workflows/lint.yml b/catalog_validation/truecharts-fork/.github/workflows/lint.yml deleted file mode 100644 index 8a0b5c627d..0000000000 --- a/catalog_validation/truecharts-fork/.github/workflows/lint.yml +++ /dev/null @@ -1,21 +0,0 @@ -name: flake8 - -on: [push] - -jobs: - build: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - name: Set up Python 3.8 - uses: actions/setup-python@v5 - with: - python-version: 3.8 - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install flake8 - - name: Analysing the code with flake8 - run: flake8 . diff --git a/catalog_validation/truecharts-fork/.github/workflows/test.yaml b/catalog_validation/truecharts-fork/.github/workflows/test.yaml deleted file mode 100644 index 0a5c384bdf..0000000000 --- a/catalog_validation/truecharts-fork/.github/workflows/test.yaml +++ /dev/null @@ -1,24 +0,0 @@ -name: catalog_validation_test - -on: [push] - -jobs: - build: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - name: Set up Python 3.8 - uses: actions/setup-python@v5 - with: - python-version: 3.8 - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install -r catalog_validation/pytest/requirements.txt - pip install -r requirements.txt - - name: Installing catalog validation - run: python setup.py install - - name: Running test - run: pytest catalog_validation/pytest/ diff --git a/catalog_validation/truecharts-fork/.gitignore b/catalog_validation/truecharts-fork/.gitignore deleted file mode 100644 index 99ac911613..0000000000 --- a/catalog_validation/truecharts-fork/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -catalog_validation/__pycache__ -catalog_validation/schema/__pycache__ diff --git a/catalog_validation/truecharts-fork/Dockerfile b/catalog_validation/truecharts-fork/Dockerfile deleted file mode 100644 index d5e9bc466b..0000000000 --- a/catalog_validation/truecharts-fork/Dockerfile +++ /dev/null @@ -1,24 +0,0 @@ -FROM debian:bookworm - -RUN apt-get update - -RUN apt-get install -y \ - debhelper-compat \ - dh-python \ - python3-dev \ - python3-setuptools \ - devscripts \ - python3-jsonschema \ - python3-semantic-version \ - python3-kubernetes \ - python3-yaml \ - python3-pip - -ENV PYTHONUNBUFFERED 1 -ENV WORK_DIR /app -RUN mkdir -p ${WORK_DIR} -WORKDIR ${WORK_DIR} - -ADD . ${WORK_DIR}/ -RUN pip install --break-system-packages -r requirements.txt -RUN pip install --break-system-packages -U . diff --git a/catalog_validation/truecharts-fork/LICENSE b/catalog_validation/truecharts-fork/LICENSE deleted file mode 100644 index f288702d2f..0000000000 --- a/catalog_validation/truecharts-fork/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/catalog_validation/truecharts-fork/README.md b/catalog_validation/truecharts-fork/README.md deleted file mode 100644 index e142d11146..0000000000 --- a/catalog_validation/truecharts-fork/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# catalogs_validation -Validate truenas compliant catalog structure / format. diff --git a/catalog_validation/truecharts-fork/catalog_validation/__init__.py b/catalog_validation/truecharts-fork/catalog_validation/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/catalog_validation/truecharts-fork/catalog_validation/ci/__init__.py b/catalog_validation/truecharts-fork/catalog_validation/ci/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/catalog_validation/truecharts-fork/catalog_validation/ci/utils.py b/catalog_validation/truecharts-fork/catalog_validation/ci/utils.py deleted file mode 100644 index 2b8f0914fd..0000000000 --- a/catalog_validation/truecharts-fork/catalog_validation/ci/utils.py +++ /dev/null @@ -1,54 +0,0 @@ -import os -import yaml - -from catalog_validation.items.utils import DEVELOPMENT_DIR -from jsonschema import validate as json_schema_validate -from semantic_version import Version - - -DEV_DIRECTORY_RELATIVE_PATH: str = os.path.join('library', DEVELOPMENT_DIR) -TO_KEEP_VERSIONS = 'to_keep_versions.yaml' -OPTIONAL_METADATA_FILES = ['upgrade_info.json', 'upgrade_strategy', TO_KEEP_VERSIONS] -REQUIRED_METADATA_FILES = ['item.yaml'] -UPDATE_STRATEGY_FILE = 'upgrade_strategy' - - -REQUIRED_VERSIONS_SCHEMA = { - 'type': 'array', - 'items': { - 'type': 'string', - 'pattern': '[0-9]+.[0-9]+.[0-9]+' - } -} - - -def get_app_version(app_path: str) -> str: - # This assumes that file exists and version is specified and is good - with open(os.path.join(app_path, 'Chart.yaml'), 'r') as f: - return yaml.safe_load(f.read())['version'] - - -def get_ci_development_directory(catalog_path: str) -> str: - return os.path.join(catalog_path, DEV_DIRECTORY_RELATIVE_PATH) - - -def get_to_keep_versions(app_dir_path: str) -> list: - required_version_path = os.path.join(app_dir_path, TO_KEEP_VERSIONS) - if not os.path.exists(required_version_path): - return [] - - with open(required_version_path, 'r') as f: - data = yaml.safe_load(f.read()) - json_schema_validate(data, REQUIRED_VERSIONS_SCHEMA) - return data - - -def version_has_been_bumped(app_path: str, new_version: str) -> bool: - if not os.path.isdir(app_path): - return True - - versions = [ - Version(version) for version in filter(lambda v: os.path.isdir(os.path.join(app_path, v)), os.listdir(app_path)) - ] - versions.sort() - return not versions or Version(new_version) > versions[-1] diff --git a/catalog_validation/truecharts-fork/catalog_validation/ci/validate.py b/catalog_validation/truecharts-fork/catalog_validation/ci/validate.py deleted file mode 100644 index 6de3a360b2..0000000000 --- a/catalog_validation/truecharts-fork/catalog_validation/ci/validate.py +++ /dev/null @@ -1,96 +0,0 @@ -import os -import yaml - -from catalog_validation.exceptions import ValidationErrors -from catalog_validation.validation import validate_catalog_item_version, validate_chart_version -from jsonschema import ValidationError as JsonValidationError - -from .utils import ( - get_app_version, get_ci_development_directory, REQUIRED_METADATA_FILES, version_has_been_bumped, - TO_KEEP_VERSIONS, REQUIRED_VERSIONS_SCHEMA, get_to_keep_versions, UPDATE_STRATEGY_FILE -) - - -def validate_dev_directory_structure(catalog_path: str, to_check_apps: dict) -> None: - verrors = ValidationErrors() - dev_directory = get_ci_development_directory(catalog_path) - if not os.path.exists(dev_directory): - return - - for train_name in filter( - lambda name: name in to_check_apps and os.path.isdir(os.path.join(dev_directory, name)), - os.listdir(dev_directory) - ): - validate_train( - catalog_path, os.path.join(dev_directory, train_name), f'dev.{train_name}', to_check_apps[train_name] - ) - verrors.check() - - -def validate_train(catalog_path: str, train_path: str, schema: str, to_check_apps: list) -> None: - verrors = ValidationErrors() - train_name = os.path.basename(train_path) - for app_name in filter( - lambda name: os.path.isdir(os.path.join(train_path, name)), os.listdir(train_path) - ): - if app_name not in to_check_apps: - continue - - app_path = os.path.join(train_path, app_name) - try: - validate_app(app_path, f'{schema}.{app_name}') - except ValidationErrors as ve: - verrors.extend(ve) - else: - published_train_app_path = os.path.join(catalog_path, train_name, app_name) - if not os.path.exists(published_train_app_path): - # The application is new and we are good - continue - - if not version_has_been_bumped(published_train_app_path, get_app_version(app_path)): - verrors.add( - f'{schema}.{app_name}.version', - 'Version must be bumped as app has been changed but version has not been updated' - ) - - verrors.check() - - -def validate_keep_versions(app_dir_path: str, schema: str, verrors: ValidationErrors) -> ValidationErrors: - try: - get_to_keep_versions(app_dir_path) - except yaml.YAMLError: - verrors.add(f'{schema}.{REQUIRED_VERSIONS_SCHEMA}', 'Invalid yaml format') - except JsonValidationError: - verrors.add( - f'{schema}.{REQUIRED_VERSIONS_SCHEMA}', - f'Invalid json schema {TO_KEEP_VERSIONS} must contain list of required versions' - ) - - -def validate_upgrate_strategy(app_path, schema, verrors): - upgrade_strategy_path = os.path.join(app_path, UPDATE_STRATEGY_FILE) - if os.path.exists(upgrade_strategy_path) and not os.access(upgrade_strategy_path, os.X_OK): - verrors.add(schema, f'{upgrade_strategy_path!r} is not executable') - - -def validate_app(app_dir_path: str, schema: str) -> None: - app_name = os.path.basename(app_dir_path) - chart_version_path = os.path.join(app_dir_path, 'Chart.yaml') - verrors = validate_chart_version(ValidationErrors(), chart_version_path, schema, app_name) - validate_keep_versions(app_dir_path, app_name, verrors) - verrors.check() - - validate_catalog_item_version(app_dir_path, schema, get_app_version(app_dir_path), app_name, True) - - required_files = set(REQUIRED_METADATA_FILES) - available_files = set( - f for f in filter(lambda f: os.path.isfile(os.path.join(app_dir_path, f)), os.listdir(app_dir_path)) - ) - if missing_files := required_files - available_files: - verrors.add( - f'{schema}.required_files', - f'{", ".join(missing_files)!r} file(s) must be specified' - ) - validate_upgrate_strategy(app_dir_path, f'{schema}.{UPDATE_STRATEGY_FILE}', verrors) - verrors.check() diff --git a/catalog_validation/truecharts-fork/catalog_validation/exceptions.py b/catalog_validation/truecharts-fork/catalog_validation/exceptions.py deleted file mode 100644 index 5fba74a23a..0000000000 --- a/catalog_validation/truecharts-fork/catalog_validation/exceptions.py +++ /dev/null @@ -1,67 +0,0 @@ -import errno - - -class ValidationException(Exception): - def __init__(self, error_msg, error_no=errno.EFAULT): - self.errmsg = error_msg - self.errno = error_no - - def get_error_name(self): - return errno.errorcode.get(self.errno) or 'EUNKNOWN' - - def __str__(self): - return f'[{self.get_error_name()}] {self.errmsg}' - - -class ValidationError(ValidationException): - def __init__(self, attribute, errmsg, errno=errno.EFAULT): - self.attribute = attribute - self.errmsg = errmsg - self.errno = errno - - def __str__(self): - return f'[{self.get_error_name()}] {self.attribute}: {self.errmsg}' - - -class ValidationErrors(ValidationException): - def __init__(self, errors=None): - self.errors = errors or [] - - def add(self, attribute, errmsg, errno=errno.EINVAL): - self.errors.append(ValidationError(attribute, errmsg, errno)) - - def add_validation_error(self, validation_error): - self.errors.append(validation_error) - - def add_child(self, attribute, child): - for e in child.errors: - self.add(f"{attribute}.{e.attribute}", e.errmsg, e.errno) - - def check(self): - if self: - raise self - - def extend(self, errors): - for e in errors.errors: - self.add(e.attribute, e.errmsg, e.errno) - - def __iter__(self): - for e in self.errors: - yield e.attribute, e.errmsg, e.errno - - def __bool__(self): - return bool(self.errors) - - def __str__(self): - output = '' - for e in self.errors: - output += str(e) + '\n' - return output - - def __contains__(self, item): - return item in [e.attribute for e in self.errors] - - -class CatalogDoesNotExist(ValidationException): - def __init__(self, path): - super().__init__(f'Failed to find a catalog at {path}', errno.ENOENT) diff --git a/catalog_validation/truecharts-fork/catalog_validation/git_utils.py b/catalog_validation/truecharts-fork/catalog_validation/git_utils.py deleted file mode 100644 index adbcf5fb0c..0000000000 --- a/catalog_validation/truecharts-fork/catalog_validation/git_utils.py +++ /dev/null @@ -1,42 +0,0 @@ -import os -import subprocess - -from catalog_validation.ci.utils import DEV_DIRECTORY_RELATIVE_PATH, get_ci_development_directory -from catalog_validation.items.utils import valid_train -from collections import defaultdict - -from .ci.utils import OPTIONAL_METADATA_FILES -from .exceptions import CatalogDoesNotExist - - -def get_changed_apps(catalog_path: str, base_branch: str = 'master') -> dict: - if not os.path.exists(catalog_path): - raise CatalogDoesNotExist(catalog_path) - - cp = subprocess.run( - ['git', '-C', catalog_path, '--no-pager', 'diff', '--name-only', base_branch], - capture_output=True, check=True, - ) - dev_directory_path = get_ci_development_directory(catalog_path) - to_check_apps = defaultdict(list) - for file_path in filter( - lambda path: path and path.startswith(f'{DEV_DIRECTORY_RELATIVE_PATH}/'), - map(str.strip, cp.stdout.decode().split('\n')) - ): - dev_dir_relative_path = file_path.strip(f'{DEV_DIRECTORY_RELATIVE_PATH}/') - train_name = dev_dir_relative_path.split('/', 1)[0] - if not valid_train(train_name, os.path.join(dev_directory_path, train_name)): - continue - - app_name = dev_dir_relative_path.split('/')[1] - base_name = os.path.basename(file_path) - - if base_name in OPTIONAL_METADATA_FILES: - continue - if not os.path.isdir(os.path.join(dev_directory_path, train_name, app_name)): - continue - - if app_name not in to_check_apps[train_name]: - to_check_apps[train_name].append(app_name) - - return to_check_apps diff --git a/catalog_validation/truecharts-fork/catalog_validation/items/__init__.py b/catalog_validation/truecharts-fork/catalog_validation/items/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/catalog_validation/truecharts-fork/catalog_validation/items/catalog.py b/catalog_validation/truecharts-fork/catalog_validation/items/catalog.py deleted file mode 100644 index 2fcdea5373..0000000000 --- a/catalog_validation/truecharts-fork/catalog_validation/items/catalog.py +++ /dev/null @@ -1,83 +0,0 @@ -import concurrent.futures -import functools -import os -import typing -import yaml - -from jsonschema import validate as json_schema_validate, ValidationError as JsonValidationError - -from .items_util import get_item_details, get_default_questions_context -from .utils import RECOMMENDED_APPS_FILENAME, RECOMMENDED_APPS_SCHEMA, valid_train - - -def item_details(items: dict, location: str, questions_context: typing.Optional[dict], item_key: str) -> dict: - train = items[item_key] - item = item_key.removesuffix(f'_{train}') - item_location = os.path.join(location, train, item) - return get_item_details(item_location, questions_context, {'retrieve_versions': True}) - - -def retrieve_train_names(location: str, all_trains=True, trains_filter=None) -> list: - train_names = [] - trains_filter = trains_filter or [] - for train in os.listdir(location): - if not (all_trains or train in trains_filter) or not valid_train(train, os.path.join(location, train)): - continue - train_names.append(train) - return train_names - - -def get_items_in_trains(trains_to_traverse: list, catalog_location: str) -> dict: - items = {} - for train in trains_to_traverse: - items.update({ - f'{i}_{train}': train for i in os.listdir(os.path.join(catalog_location, train)) - if os.path.isdir(os.path.join(catalog_location, train, i)) - }) - - return items - - -def retrieve_trains_data( - items: dict, catalog_location: str, preferred_trains: list, - trains_to_traverse: list, job: typing.Any = None, questions_context: typing.Optional[dict] = None -) -> typing.Tuple[dict, set]: - questions_context = questions_context or get_default_questions_context() - trains = { - 'charts': {}, - 'test': {}, - **{k: {} for k in trains_to_traverse}, - } - unhealthy_apps = set() - - total_items = len(items) - with concurrent.futures.ProcessPoolExecutor(max_workers=(20 if total_items > 10 else 5)) as exc: - for index, result in enumerate(zip(items, exc.map( - functools.partial(item_details, items, catalog_location, questions_context), - items, chunksize=(10 if total_items > 10 else 5) - ))): - item_key = result[0] - item_info = result[1] - train = items[item_key] - item = item_key.removesuffix(f'_{train}') - if job: - job.set_progress( - int((index / total_items) * 80) + 10, - f'Retrieved information of {item!r} item from {train!r} train' - ) - trains[train][item] = item_info - if train in preferred_trains and not trains[train][item]['healthy']: - unhealthy_apps.add(f'{item} ({train} train)') - - return trains, unhealthy_apps - - -def retrieve_recommended_apps(catalog_location: str) -> typing.Dict[str, list]: - try: - with open(os.path.join(catalog_location, RECOMMENDED_APPS_FILENAME), 'r') as f: - data = yaml.safe_load(f.read()) - json_schema_validate(data, RECOMMENDED_APPS_SCHEMA) - except (FileNotFoundError, JsonValidationError, yaml.YAMLError): - return {} - else: - return data diff --git a/catalog_validation/truecharts-fork/catalog_validation/items/features.py b/catalog_validation/truecharts-fork/catalog_validation/items/features.py deleted file mode 100644 index 3ec64c8f22..0000000000 --- a/catalog_validation/truecharts-fork/catalog_validation/items/features.py +++ /dev/null @@ -1,19 +0,0 @@ -SUPPORTED_FEATURES = { - 'normalize/interfaceConfiguration', - 'normalize/ixVolume', - 'definitions/certificate', - 'definitions/certificateAuthority', - 'definitions/interface', - 'definitions/gpuConfiguration', - 'definitions/timezone', - 'definitions/nodeIP', - 'validations/containerImage', - 'validations/nodePort', - 'validations/hostPath', - 'validations/lockedHostPath', - 'validations/hostPathAttachments', -} - - -def version_supported(version_details: dict) -> bool: - return not bool(set(version_details['required_features']) - SUPPORTED_FEATURES) diff --git a/catalog_validation/truecharts-fork/catalog_validation/items/items_util.py b/catalog_validation/truecharts-fork/catalog_validation/items/items_util.py deleted file mode 100644 index 466bf284ab..0000000000 --- a/catalog_validation/truecharts-fork/catalog_validation/items/items_util.py +++ /dev/null @@ -1,214 +0,0 @@ -import markdown -import os -import typing -import yaml - -from pkg_resources import parse_version - -from catalog_validation.exceptions import ValidationErrors - -from .features import version_supported -from .questions_utils import normalise_questions -from .utils import get_last_updated_date -from .validate_utils import validate_item, validate_item_version - - -ITEM_KEYS = ['icon_url'] - - -def get_item_details_base() -> dict: - return { - 'app_readme': None, - 'categories': [], - 'description': None, - 'healthy': False, # healthy means that each version the item hosts is valid and healthy - 'healthy_error': None, # An error string explaining why the item is not healthy - 'home': None, - 'location': None, - 'latest_version': None, - 'latest_app_version': None, - 'latest_human_version': None, - 'last_update': None, - 'name': None, - 'recommended': False, - 'title': None, - 'versions': {}, - 'maintainers': [], - 'tags': [], - 'screenshots': [], - 'sources': [], - } - - -def get_item_details( - item_location: str, questions_context: typing.Optional[dict] = None, options: typing.Optional[dict] = None -) -> dict: - catalog_path = item_location.rstrip('/').rsplit('/', 2)[0] - item = item_location.rsplit('/', 1)[-1] - train = item_location.rsplit('/', 2)[-2] - - options = options or {} - retrieve_versions = options.get('retrieve_versions', True) - item_data = get_item_details_base() - item_data.update({ - 'location': item_location, - 'last_update': get_last_updated_date(catalog_path, item_location), - 'name': item, - 'title': item.capitalize(), - }) - - schema = f'{train}.{item}' - try: - validate_item(item_location, schema, False) - except ValidationErrors as verrors: - item_data['healthy_error'] = f'Following error(s) were found with {item!r}:\n' - for verror in verrors: - item_data['healthy_error'] += f'{verror[0]}: {verror[1]}' - - # If the item format is not valid - there is no point descending any further into versions - if not retrieve_versions: - item_data.pop('versions') - return item_data - - item_data.update(get_item_details_impl(item_location, schema, questions_context, { - 'retrieve_latest_version': not retrieve_versions, - 'default_values_callable': options.get('default_values_callable'), - })) - unhealthy_versions = [] - for k, v in sorted(item_data['versions'].items(), key=lambda v: parse_version(v[0]), reverse=True): - if not v['healthy']: - unhealthy_versions.append(k) - else: - chart_metadata = v['chart_metadata'] - if not item_data['app_readme']: - item_data['app_readme'] = v['app_readme'] - if not item_data['maintainers'] and chart_metadata.get('maintainers'): - item_data['maintainers'] = chart_metadata['maintainers'] - if not item_data['latest_version']: - item_data['latest_version'] = k - item_data['latest_app_version'] = chart_metadata.get('appVersion') - item_data['latest_human_version'] = '' - if item_data['latest_app_version']: - item_data['latest_human_version'] = f'{item_data["latest_app_version"]}_' - item_data['latest_human_version'] += k - if not item_data['description'] and chart_metadata.get('description'): - item_data['description'] = v['chart_metadata']['description'] - if item_data['title'] == item_data['name'].capitalize() and chart_metadata.get( - 'annotations', {} - ).get('title'): - item_data['title'] = chart_metadata['annotations']['title'] - if item_data['home'] is None and chart_metadata.get('home'): - item_data['home'] = chart_metadata['home'] - if not item_data['sources'] and chart_metadata.get('sources'): - item_data['sources'] = chart_metadata['sources'] - - if unhealthy_versions: - item_data['healthy_error'] = f'Errors were found with {", ".join(unhealthy_versions)} version(s)' - else: - item_data['healthy'] = True - if not retrieve_versions: - item_data.pop('versions') - - return item_data - - -def get_item_details_impl( - item_path: str, schema: str, questions_context: typing.Optional[dict], options: typing.Optional[dict] -) -> dict: - # Each directory under item path represents a version of the item and we need to retrieve details - # for each version available under the item - retrieve_latest_version = options.get('retrieve_latest_version') - item_data = { - 'categories': [], - 'icon_url': None, - 'screenshots': [], - 'tags': [], - 'versions': {}, - } - with open(os.path.join(item_path, 'item.yaml'), 'r') as f: - item_data.update(yaml.safe_load(f.read())) - - item_data.update({k: item_data.get(k) for k in ITEM_KEYS}) - - for version in sorted( - filter(lambda p: os.path.isdir(os.path.join(item_path, p)), os.listdir(item_path)), - reverse=True, key=parse_version, - ): - catalog_path = item_path.rstrip('/').rsplit('/', 2)[0] - version_path = os.path.join(item_path, version) - item_data['versions'][version] = version_details = { - 'healthy': False, - 'supported': False, - 'healthy_error': None, - 'location': version_path, - 'last_update': get_last_updated_date(catalog_path, version_path), - 'required_features': [], - 'human_version': version, - 'version': version, - } - try: - validate_item_version(version_details['location'], f'{schema}.{version}') - except ValidationErrors as verrors: - version_details['healthy_error'] = f'Following error(s) were found with {schema}.{version!r}:\n' - for verror in verrors: - version_details['healthy_error'] += f'{verror[0]}: {verror[1]}' - - # There is no point in trying to see what questions etc the version has as it's invalid - continue - - version_details.update({ - 'healthy': True, - **get_item_version_details(version_details['location'], questions_context) - }) - if retrieve_latest_version: - break - - return item_data - - -def get_item_version_details( - version_path: str, questions_context: typing.Optional[dict], options: typing.Optional[dict] = None -) -> dict: - version_data = {'location': version_path, 'required_features': set()} - for key, filename, parser in ( - ('chart_metadata', 'Chart.yaml', yaml.safe_load), - ('app_metadata', 'metadata.yaml', yaml.safe_load), - ('schema', 'questions.yaml', yaml.safe_load), - ('app_readme', 'app-readme.md', markdown.markdown), - ('detailed_readme', 'README.md', markdown.markdown), - ('changelog', 'CHANGELOG.md', markdown.markdown), - ): - if os.path.exists(os.path.join(version_path, filename)): - with open(os.path.join(version_path, filename), 'r') as f: - version_data[key] = parser(f.read()) - else: - version_data[key] = None - - # We will normalise questions now so that if they have any references, we render them accordingly - # like a field referring to available interfaces on the system - normalise_questions(version_data, questions_context or get_default_questions_context()) - - version_data.update({ - 'supported': version_supported(version_data), - 'required_features': list(version_data['required_features']), - }) - if options and options.get('default_values_callable'): - version_data['values'] = options['default_values_callable'](version_data) - chart_metadata = version_data['chart_metadata'] - if chart_metadata['name'] != 'ix-chart' and chart_metadata.get('appVersion'): - version_data['human_version'] = f'{chart_metadata["appVersion"]}_{chart_metadata["version"]}' - - return version_data - - -def get_default_questions_context() -> dict: - return { - 'nic_choices': [], - 'gpus': {}, - 'timezones': {'Asia/Saigon': 'Asia/Saigon', 'Asia/Damascus': 'Asia/Damascus'}, - 'node_ip': '192.168.0.10', - 'certificates': [], - 'certificate_authorities': [], - 'system.general.config': {'timezone': 'America/Los_Angeles'}, - 'unused_ports': [i for i in range(1025, 65535)], - } diff --git a/catalog_validation/truecharts-fork/catalog_validation/items/ix_values_utils.py b/catalog_validation/truecharts-fork/catalog_validation/items/ix_values_utils.py deleted file mode 100644 index 0fcc046b43..0000000000 --- a/catalog_validation/truecharts-fork/catalog_validation/items/ix_values_utils.py +++ /dev/null @@ -1,58 +0,0 @@ -from jsonschema import validate as json_schema_validate, ValidationError as JsonValidationError - -from catalog_validation.exceptions import ValidationErrors - - -CUSTOM_PORTALS_JSON_SCHEMA = { - 'type': 'array', - 'items': { - 'type': 'object', - 'properties': { - 'portalName': { - 'type': 'string', - }, - 'protocol': { - 'type': 'string', 'enum': ['http', 'https'], - }, - 'useNodeIP': { - 'type': 'boolean', - }, - 'port': { - 'type': 'integer', - }, - 'path': { - 'type': 'string', - }, - }, - 'allOf': [ - { - 'if': { - 'properties': { - 'useNodeIP': { - 'const': False, - }, - }, - }, - 'then': { - 'required': ['host'], - 'properties': { - 'host': { - 'type': 'string', - }, - }, - }, - }], - 'required': ['portalName', 'protocol', 'useNodeIP', 'port'], - }, -} - - -def validate_ix_values_schema(schema, data): - verrors = ValidationErrors() - - try: - json_schema_validate(data, CUSTOM_PORTALS_JSON_SCHEMA) - except JsonValidationError as e: - verrors.add(schema, f'Failed to validate schema: {e}') - - verrors.check() diff --git a/catalog_validation/truecharts-fork/catalog_validation/items/questions_utils.py b/catalog_validation/truecharts-fork/catalog_validation/items/questions_utils.py deleted file mode 100644 index d0255d2add..0000000000 --- a/catalog_validation/truecharts-fork/catalog_validation/items/questions_utils.py +++ /dev/null @@ -1,186 +0,0 @@ -import itertools - -from .utils import ACL_QUESTION, IX_VOLUMES_ACL_QUESTION - - -CUSTOM_PORTALS_KEY = 'iXPortals' -CUSTOM_PORTALS_ENABLE_KEY = 'enableIXPortals' -CUSTOM_PORTAL_GROUP_KEY = 'iXPortalsGroupName' - - -def get_custom_portal_question(group_name: str) -> dict: - return { - 'variable': CUSTOM_PORTALS_KEY, - 'label': 'User Specified Web Portals', - 'description': 'User(s) can specify custom webUI portals', - 'group': group_name, - 'schema': { - 'type': 'list', - 'items': [{ - 'variable': 'portalConfiguration', - 'label': 'Portal Configuration', - 'description': 'Configure WebUI Portal', - 'schema': { - 'type': 'dict', - 'attrs': [ - { - 'variable': 'portalName', - 'label': 'Portal Name', - 'description': 'Specify a UI Portal name to use which would be displayed in the UI', - 'schema': { - 'type': 'string', - 'default': 'Web Portal', - 'empty': False, - }, - }, - { - 'variable': 'protocol', - 'label': 'Protocol for Portal', - 'description': 'Specify protocol for Portal', - 'schema': { - 'type': 'string', - 'default': 'http', - 'enum': [ - {'value': 'http', 'description': 'HTTP Protocol'}, - {'value': 'https', 'description': 'HTTPS Protocol'}, - ], - }, - }, - { - 'variable': 'useNodeIP', - 'label': 'Use Node IP for Portal IP/Domain', - 'schema': { - 'type': 'boolean', - 'default': True, - }, - }, - { - 'variable': 'host', - 'label': 'Portal IP/Domain', - 'schema': { - 'type': 'string', - 'show_if': [['useNodeIP', '=', False]], - '$ref': ['definitions/nodeIP'], - }, - }, - { - 'variable': 'port', - 'label': 'Port', - 'description': 'Specify port to be used for Portal access', - 'schema': { - 'type': 'int', - 'max': 65535, - 'default': 15000, - }, - }, - { - 'variable': 'path', - 'label': 'Path (optional - leave empty if not required)', - 'description': 'Some app(s) might have a sub path i.e http://192.168.0.10:9000/api/', - 'schema': { - 'type': 'string', - }, - }, - ], - }, - }], - }, - } - - -def normalise_questions(version_data: dict, context: dict) -> None: - version_data['required_features'] = set() - version_data['schema']['questions'].extend( - [ - get_custom_portal_question(version_data['schema'][CUSTOM_PORTAL_GROUP_KEY]) - ] if version_data['schema'].get(CUSTOM_PORTALS_ENABLE_KEY) else [] - ) - for question in version_data['schema']['questions']: - normalise_question(question, version_data, context) - version_data['required_features'] = list(version_data['required_features']) - - -def normalise_question(question: dict, version_data: dict, context: dict) -> None: - schema = question['schema'] - for attr in itertools.chain(*[schema.get(k, []) for k in ('attrs', 'items', 'subquestions')]): - normalise_question(attr, version_data, context) - - if '$ref' not in schema: - return - - data = {} - for ref in schema['$ref']: - version_data['required_features'].add(ref) - if ref == 'definitions/interface': - data['enum'] = [ - {'value': i, 'description': f'{i!r} Interface'} for i in context['nic_choices'] - ] - elif ref == 'definitions/gpuConfiguration': - data['attrs'] = [ - { - 'variable': gpu, - 'label': f'GPU Resource ({gpu})', - 'description': 'Please enter the number of GPUs to allocate', - 'schema': { - 'type': 'int', - 'max': int(quantity), - 'enum': [ - {'value': i, 'description': f'Allocate {i!r} {gpu} GPU'} - for i in range(int(quantity) + 1) - ], - 'default': 0, - } - } for gpu, quantity in context['gpus'].items() - ] - elif ref == 'definitions/timezone': - data.update({ - 'enum': [{'value': t, 'description': f'{t!r} timezone'} for t in sorted(context['timezones'])], - 'default': context['system.general.config']['timezone'] - }) - elif ref == 'definitions/nodeIP': - data['default'] = context['node_ip'] - elif ref == 'definitions/certificate': - get_cert_ca_options(schema, data, {'value': None, 'description': 'No Certificate'}) - data['enum'] += [ - {'value': i['id'], 'description': f'{i["name"]!r} Certificate'} - for i in context['certificates'] - ] - elif ref == 'definitions/certificateAuthority': - get_cert_ca_options(schema, data, {'value': None, 'description': 'No Certificate Authority'}) - data['enum'] += [{'value': None, 'description': 'No Certificate Authority'}] + [ - {'value': i['id'], 'description': f'{i["name"]!r} Certificate Authority'} - for i in context['certificate_authorities'] - ] - elif ref == 'definitions/port': - data['enum'] = [{'value': None, 'description': 'No Port Selected'}] if schema.get('null') else [] - data['enum'] += [ - {'value': i, 'description': f'{i!r} Port'} - for i in filter( - lambda p: schema.get('min', 9000) <= p <= schema.get('max', 65534), - context['unused_ports'] - ) - ] - elif ref == 'normalize/acl': - data['attrs'] = ACL_QUESTION - elif ref == 'normalize/ixVolume': - if schema['type'] == 'dict' and any(i['variable'] == 'aclEntries' for i in schema['attrs']): - # get index of aclEntries from attrs - acl_index = next(i for i, v in enumerate(schema['attrs']) if v['variable'] == 'aclEntries') - # insert acl question before aclEntries - schema['attrs'][acl_index]['schema']['attrs'] = IX_VOLUMES_ACL_QUESTION - - schema.update(data) - - -def get_cert_ca_options(schema: dict, data: dict, default_entry: dict): - if schema.get('null', True): - data.update({ - 'enum': [default_entry], - 'default': None, - 'null': True, - }) - else: - data.update({ - 'enum': [], - 'required': True, - }) diff --git a/catalog_validation/truecharts-fork/catalog_validation/items/utils.py b/catalog_validation/truecharts-fork/catalog_validation/items/utils.py deleted file mode 100644 index e2a4e16bfc..0000000000 --- a/catalog_validation/truecharts-fork/catalog_validation/items/utils.py +++ /dev/null @@ -1,223 +0,0 @@ -import contextlib -import os -import subprocess - -from datetime import datetime -from typing import Optional - -from catalog_validation.schema.migration_schema import MIGRATION_DIRS -from catalog_validation.utils import VALID_TRAIN_REGEX - - -DEVELOPMENT_DIR = 'ix-dev' -RECOMMENDED_APPS_FILENAME = 'recommended_apps.yaml' -RECOMMENDED_APPS_SCHEMA = { - 'type': 'object', - 'patternProperties': { - '.*': { - 'type': 'array', - 'items': {'type': 'string'}, - } - }, -} -TRAIN_IGNORE_DIRS = ['library', 'docs', DEVELOPMENT_DIR] + MIGRATION_DIRS - - -ACL_QUESTION = [ - { - 'variable': 'path', - 'label': 'Host Path', - 'description': 'Host Path to perform ACL', - 'schema': { - 'type': 'hostpath', - 'required': True, - 'empty': False, - } - }, - { - 'variable': 'entries', - 'label': 'ACL Entries', - 'description': 'ACL Entries', - 'schema': { - 'type': 'list', - 'items': [{ - 'variable': 'aclEntry', - 'label': 'ACL Entry', - 'schema': { - 'type': 'dict', - 'attrs': [ - { - 'variable': 'id_type', - 'label': 'ID Type', - 'schema': { - 'type': 'string', - 'enum': [ - {'value': 'USER', 'description': 'Entry is for a USER'}, - {'value': 'GROUP', 'description': 'Entry is for a GROUP'}, - ], - 'default': 'USER', - } - }, - { - 'variable': 'id', - 'label': 'ID', - 'schema': { - 'type': 'int', - 'required': True, - 'min': 0, - } - }, - { - 'variable': 'access', - 'label': 'Access', - 'schema': { - 'type': 'string', - 'enum': [ - {'value': 'READ', 'description': 'Read Access'}, - {'value': 'MODIFY', 'description': 'Modify Access'}, - {'value': 'FULL_CONTROL', 'description': 'FULL_CONTROL Access'}, - ], - } - } - ], - } - }] - } - } -] - -IX_VOLUMES_ACL_QUESTION = [ - { - 'variable': 'path', - 'label': 'Path', - 'description': 'Path to perform ACL', - 'schema': { - 'type': 'string', - 'hidden': True - } - }, - ACL_QUESTION[1] -] - - -def get_catalog_json_schema() -> dict: - return { - 'type': 'object', - 'patternProperties': { - '.*': { - 'type': 'object', - 'title': 'Train', - 'patternProperties': { - '.*': { - 'type': 'object', - 'title': 'Item', - 'properties': { - 'name': { - 'type': 'string', - 'title': 'Name', - }, - 'categories': { - 'type': 'array', - 'items': { - 'type': 'string' - }, - }, - 'app_readme': { - 'type': 'string', - }, - 'location': { - 'type': 'string', - }, - 'healthy': { - 'type': 'boolean', - }, - 'healthy_error': { - 'type': ['string', 'null'], - }, - 'last_update': { - 'type': 'string', - 'pattern': r'^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$', - }, - 'latest_version': { - 'type': 'string', - }, - 'latest_app_version': { - 'type': 'string', - }, - 'latest_human_version': { - 'type': 'string', - }, - 'description': { - 'type': ['string', 'null'], - }, - 'title': { - 'type': 'string', - }, - 'icon_url': { - 'type': ['string', 'null'], - }, - 'maintainers': { - 'type': 'array', - 'items': { - 'type': 'object', - 'properties': { - 'name': {'type': 'string'}, - 'url': {'type': ['string', 'null']}, - 'email': {'type': 'string'} - }, - 'required': ['name', 'email'], - } - }, - 'home': { - 'type': 'string', - }, - 'tags': { - 'type': 'array', - 'items': { - 'type': 'string', - } - }, - 'screenshots': { - 'type': 'array', - 'items': { - 'type': 'string', - } - }, - 'sources': { - 'type': 'array', - 'items': { - 'type': 'string', - } - }, - }, - 'required': [ - 'name', 'categories', 'location', 'healthy', 'icon_url', - 'latest_version', 'latest_app_version', 'latest_human_version', - 'last_update', 'recommended', 'healthy_error', 'maintainers', - 'home', 'tags', 'sources', 'screenshots', - ], - } - } - - } - } - } - - -def get_last_updated_date(repo_path: str, folder_path: str) -> Optional[str]: - with contextlib.suppress(Exception): - # We don't want to fail querying items if for whatever reason this fails - output = subprocess.check_output( - ['git', 'log', '-n', '1', '--pretty=format:%ct', f'{folder_path}'], - cwd=repo_path, - stderr=subprocess.DEVNULL - ) - if output: - timestamp = datetime.fromtimestamp(int(output)) - return timestamp.strftime('%Y-%m-%d %H:%M:%S') - - -def valid_train(train_name: str, train_location: str) -> bool: - return VALID_TRAIN_REGEX.match( - train_name - ) and not train_name.startswith('.') and train_name not in TRAIN_IGNORE_DIRS and os.path.isdir(train_location) diff --git a/catalog_validation/truecharts-fork/catalog_validation/items/validate_utils.py b/catalog_validation/truecharts-fork/catalog_validation/items/validate_utils.py deleted file mode 100644 index 3cecf3bafa..0000000000 --- a/catalog_validation/truecharts-fork/catalog_validation/items/validate_utils.py +++ /dev/null @@ -1,9 +0,0 @@ -from catalog_validation.validation import validate_catalog_item, validate_catalog_item_version - - -def validate_item(path: str, schema: str, validate_versions: bool = True): - validate_catalog_item(path, schema, validate_versions) - - -def validate_item_version(path: str, schema: str): - validate_catalog_item_version(path, schema) diff --git a/catalog_validation/truecharts-fork/catalog_validation/k8s/__init__.py b/catalog_validation/truecharts-fork/catalog_validation/k8s/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/catalog_validation/truecharts-fork/catalog_validation/k8s/api_client.py b/catalog_validation/truecharts-fork/catalog_validation/k8s/api_client.py deleted file mode 100644 index cec1da7851..0000000000 --- a/catalog_validation/truecharts-fork/catalog_validation/k8s/api_client.py +++ /dev/null @@ -1,15 +0,0 @@ -from contextlib import contextmanager - -from kubernetes import client, config - -from .utils import KUBECONFIG_FILE - - -@contextmanager -def api_client(): - config.load_kube_config(config_file=KUBECONFIG_FILE) - api_cl = client.api_client.ApiClient() - try: - yield client.CoreV1Api(api_cl) - finally: - api_cl.close() diff --git a/catalog_validation/truecharts-fork/catalog_validation/k8s/utils.py b/catalog_validation/truecharts-fork/catalog_validation/k8s/utils.py deleted file mode 100644 index c973e77e21..0000000000 --- a/catalog_validation/truecharts-fork/catalog_validation/k8s/utils.py +++ /dev/null @@ -1 +0,0 @@ -KUBECONFIG_FILE = '/etc/rancher/k3s/k3s.yaml' diff --git a/catalog_validation/truecharts-fork/catalog_validation/pytest/requirements.txt b/catalog_validation/truecharts-fork/catalog_validation/pytest/requirements.txt deleted file mode 100644 index 1d6ed5ca7b..0000000000 --- a/catalog_validation/truecharts-fork/catalog_validation/pytest/requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ -pytest -pytest-mock \ No newline at end of file diff --git a/catalog_validation/truecharts-fork/catalog_validation/pytest/unit/test_catalog_validate.py b/catalog_validation/truecharts-fork/catalog_validation/pytest/unit/test_catalog_validate.py deleted file mode 100644 index 85fc5ff733..0000000000 --- a/catalog_validation/truecharts-fork/catalog_validation/pytest/unit/test_catalog_validate.py +++ /dev/null @@ -1,367 +0,0 @@ -import pytest - -from catalog_validation.exceptions import ValidationErrors -from catalog_validation.utils import WANTED_FILES_IN_ITEM_VERSION -from catalog_validation.validation import ( - validate_train_structure, validate_questions_yaml, validate_catalog_item, - validate_catalog_item_version, validate_variable_uniqueness, -) - - -@pytest.mark.parametrize('train_path,should_work', [ - ('/mnt/mypool/ix-applications/catalogs/github_com_truenas_charts_git_master/charts', True), - ('/mnt/mypool/ix-applications/catalogs/github_com_truenas_charts_git_master/charts/', False), - -]) -def test_validate_train_structure(train_path, should_work): - if should_work: - assert validate_train_structure(train_path) is None - else: - with pytest.raises(ValidationErrors): - validate_train_structure(train_path) - - -@pytest.mark.parametrize('test_yaml,should_work', [ - ( - ''' - groups: - - name: "Machinaris Configuration" - description: "Configure timezone for machianaris" - - portals: - web_portal: - protocols: - - "http" - host: - - "$node_ip" - ports: - - "$variable-machinaris_ui_port" - - questions: - - variable: timezone - label: "Configure timezone" - group: "Machinaris Configuration" - description: "Configure timezone for machianaris" - ''', - True - ), - ( - ''' - groups: - - name: "Machinaris Configuration" - description: "Configure timezone for machianaris" - - portals: - web_portal: - protocols: {} - host: {} - ports: {} - - questions: - - variable: timezone - label: "Configure timezone" - group: "Machinaris Configuration" - description: "Configure timezone for machianaris" - ''', - False - ), - ( - ''' - questions: - - variable: timezone - label: "Configure timezone" - group: "Machinaris Configuration" - description: "Configure timezone for machianaris" - ''', - False - ), - ( - ''' - groups: - - name: "Machinaris Configuration" - description: "Configure timezone for machianaris" - - questions: - - variable: timezone - label: "Configure timezone" - group: "Machinaris Configuration" - description: "Configure timezone for machianaris" - ''', - True - ), - ( - ''' - groups: - - name: "Machinaris Configuration" - description: "Configure timezone for machianaris" - - questions: - - variable: timezone - label: "Network" - group: "Machinaris Network Configuration" - description: "Configure timezone for machianaris" - - ''', - False - ), - ( - ''' - enableIXPortals: true - groups: - - name: "Machinaris Configuration" - description: "Configure timezone for machianaris" - - questions: - - variable: timezone - label: "Configure timezone" - group: "Machinaris Configuration" - description: "Configure timezone for machianaris" - ''', - False - ), - ( - ''' - enableIXPortals: true - iXPortalsGroupName: "Machinaris Configuration" - groups: - - name: "Machinaris Configuration" - description: "Configure timezone for machianaris" - - questions: - - variable: timezone - label: "Configure timezone" - group: "Machinaris Configuration" - description: "Configure timezone for machianaris" - ''', - True - ), - ( - ''' - enableIXPortals: true - iXPortalsGroupName: "Invalid Group name" - groups: - - name: "Machinaris Configuration" - description: "Configure timezone for machianaris" - - questions: - - variable: timezone - label: "Configure timezone" - group: "Machinaris Configuration" - description: "Configure timezone for machianaris" - ''', - False - ), - -]) -def test_validate_questions_yaml(mocker, test_yaml, should_work): - open_file_data = mocker.mock_open(read_data=test_yaml) - mocker.patch('builtins.open', open_file_data) - mocker.patch('catalog_validation.validation.validate_question', return_value=None) - if should_work: - assert validate_questions_yaml(None, 'charts.machinaris.versions.1.1.13.questions_configuration') is None - else: - with pytest.raises(ValidationErrors): - validate_questions_yaml(None, 'charts.machinaris.versions.1.1.13.questions_configuration') - - -@pytest.mark.parametrize('catalog_item_path,test_yaml,should_work', [ - ( - '/mnt/mypool/ix-applications/catalogs/github_com_truenas_charts_git_master/charts/machinaris', - ''' - categories: - - storage - - crypto - icon_url: https://raw.githubusercontent.com/guydavis/machinaris/main/web/static/machinaris.png - ''', - True - ), - ( - '/mnt/mypool/ix-applications/catalogs/github_com_truenas_charts_git_master/charts/machinaris', - ''' - icon_url: https://raw.githubusercontent.com/guydavis/machinaris/main/web/static/machinaris.png - ''', - False - ), -]) -def test_validate_catalog_item(mocker, catalog_item_path, test_yaml, should_work): - mocker.patch('os.path.isdir', side_effect=[True, True, False]) - mocker.patch('os.listdir', return_value=['1.1.13', 'item.yaml']) - open_file_data = mocker.mock_open(read_data=test_yaml) - mocker.patch('builtins.open', open_file_data) - mocker.patch('catalog_validation.validation.validate_catalog_item_version', return_value=None) - if not should_work: - with pytest.raises(ValidationErrors): - validate_catalog_item(catalog_item_path, 'charts.machinaris') - else: - assert validate_catalog_item(catalog_item_path, 'charts.machinaris') is None - - -@pytest.mark.parametrize('chart_yaml,should_work', [ - ( - ''' - name: storj - version: 1.0.4 - ''', - True - ), - ( - ''' - name: storj - version: 1.0.0 - ''', - False - ), - ( - ''' - name: storj_s - version: 1.0.0 - ''', - False - ) -]) -def test_validate_catalog_item_version(mocker, chart_yaml, should_work): - mocker.patch('os.listdir', return_value=WANTED_FILES_IN_ITEM_VERSION) - mocker.patch('os.path.exists', return_value=True) - open_file = mocker.mock_open(read_data=chart_yaml) - mocker.patch('builtins.open', open_file) - mocker.patch('catalog_validation.validation.validate_questions_yaml', return_value=None) - mocker.patch('catalog_validation.validation.validate_ix_values_yaml', return_value=None) - if should_work: - assert validate_catalog_item_version( - '/mnt/mypool/ix-applications/catalogs/github_com_truenas_charts_git_master/charts/storj/1.0.4', - 'charts.storj.versions.1.0.4') is None - else: - with pytest.raises(ValidationErrors): - validate_catalog_item_version( - '/mnt/mypool/ix-applications/catalogs/github_com_truenas_charts_git_master/charts/storj/1.0.4', - 'charts.storj.versions.1.0.4' - ) - - -@pytest.mark.parametrize('data,schema,should_work', [ - ([ - { - 'variable': 'enablePlexPass', - 'label': 'Use PlexPass', - 'group': 'Plex Configuration', - 'schema': { - 'type': 'boolean', - 'default': False - } - }, - { - 'variable': 'dnsConfig', - 'label': 'DNS Configuration', - 'group': 'Advanced DNS Settings', - 'schema': { - 'type': 'dict', - 'attrs': [] - } - }, - ], 'plex.questions', True), - ([ - { - 'variable': 'enablePlexPass', - 'label': 'Use PlexPass', - 'group': 'Plex Configuration', - 'schema': { - 'type': 'boolean', - 'default': False - } - }, - { - 'variable': 'enablePlexPass', - 'label': 'Use PlexPass', - 'group': 'Plex Configuration', - 'schema': { - 'type': 'boolean', - 'default': False - } - }, - ], 'plex.questions', False), - ([ - { - 'variable': 'enablePlexPass', - 'label': 'Use PlexPass', - 'group': 'Plex Configuration', - 'schema': { - 'type': 'boolean', - 'default': False - } - }, - { - 'variable': 'hostPathEnabled', - 'label': 'Enable Host Path for Plex Transcode Volume', - 'type': 'boolean', - 'default': False, - 'show_subquestions_if': False, - 'subquestions': [ - { - 'variable': 'hostPath', - 'label': 'Host Path for Plex Transcode Volume', - 'schema': { - 'type': 'hostpath', - 'required': True, - '$ref': [ - 'validations/lockedHostPath' - ] - } - }, - ] - } - ], 'plex.questions', True), - ([ - { - 'variable': 'enablePlexPass', - 'label': 'Use PlexPass', - 'group': 'Plex Configuration', - 'schema': { - 'type': 'boolean', - 'default': False - } - }, - { - 'variable': 'mountPath', - 'label': 'Plex Transcode Mount Path', - 'description': 'Path where the volume will be mounted inside the pod', - 'schema': { - 'type': 'path', - } - }, - { - 'variable': 'hostPathEnabled', - 'label': 'Enable Host Path for Plex Transcode Volume', - 'type': 'boolean', - 'default': False, - 'show_subquestions_if': False, - 'subquestions': [ - { - 'variable': 'hostPath', - 'label': 'Host Path for Plex Transcode Volume', - 'schema': { - 'type': 'hostpath', - 'required': True, - '$ref': [ - 'validations/lockedHostPath' - ] - } - }, - { - 'variable': 'mountPath', - 'label': 'Plex Transcode Mount Path', - 'description': 'Path where the volume will be mounted inside the pod', - 'schema': { - 'type': 'path', - } - }, - ] - } - ], 'plex.questions', False), -]) -def test_validate_variable_uniqueness(data, schema, should_work): - verrors = ValidationErrors() - if should_work: - assert validate_variable_uniqueness(data, schema, verrors) is None - else: - with pytest.raises(ValidationErrors): - validate_variable_uniqueness(data, schema, verrors) diff --git a/catalog_validation/truecharts-fork/catalog_validation/pytest/unit/test_items_util.py b/catalog_validation/truecharts-fork/catalog_validation/pytest/unit/test_items_util.py deleted file mode 100644 index aab41eb59a..0000000000 --- a/catalog_validation/truecharts-fork/catalog_validation/pytest/unit/test_items_util.py +++ /dev/null @@ -1,107 +0,0 @@ -import pytest - -from catalog_validation.items.items_util import get_item_details, get_item_details_impl - - -QUESTION_CONTEXT = { - 'nic_choices': [], - 'gpus': {}, - 'timezones': {'Asia/Saigon': 'Asia/Saigon', 'Asia/Damascus': 'Asia/Damascus'}, - 'node_ip': '192.168.0.10', - 'certificates': [], - 'certificate_authorities': [], - 'system.general.config': {'timezone': 'America/Los_Angeles'}, -} - - -@pytest.mark.parametrize('item_location,options,items_data', [ - ('/mnt/mypool/ix-applications/catalogs/github_com_truenas_charts_git_master/charts/chia', - {'retrieve_versions': True}, - { - 'name': 'chia', - 'categories': [], - 'app_readme': None, - 'location': '/mnt/mypool/ix-applications/catalogs/github_com_truenas_charts_git_master/charts/chia', - 'healthy': True, - 'healthy_error': None, - 'home': None, - 'last_update': None, - 'versions': {}, - 'maintainers': [], - 'latest_version': None, - 'latest_app_version': None, - 'latest_human_version': None, - 'recommended': False, - 'title': 'Chia', - 'description': None, - 'tags': [], - 'screenshots': [], - 'sources': [], - } - ), -]) -def test_get_item_details(mocker, item_location, options, items_data): - mocker.patch('catalog_validation.items.items_util.validate_item', return_value=None) - mocker.patch('catalog_validation.items.items_util.get_item_details_impl', return_value={}) - assert get_item_details(item_location, QUESTION_CONTEXT, options) == items_data - - -@pytest.mark.parametrize('item_path,schema,options,yaml_data,item_data_impl,open_yaml', [ - ( - '/mnt/mypool/ix-applications/catalogs/github_com_truenas_charts_git_master/charts/chia', - 'charts.chia', - {'retrieve_latest_version': True}, { - 'variable': 'web_port', - 'label': 'Web Port for Diskover', - 'group': 'Networking', - 'schema': { - 'type': 'int', - 'min': 8000, - 'max': 65535, - 'default': 22510, - 'required': True - } - }, { - 'versions': { - '1.3.37': { - 'healthy': True, - 'supported': False, - 'healthy_error': None, - 'last_update': None, - 'location': '/mnt/mypool/ix-applications/catalogs/github_com_truenas_' - 'charts_git_master/charts/chia/1.3.37', - 'required_features': [], - 'human_version': '1.3.37', - 'version': '1.3.37' - } - }, - 'categories': ['storage', 'crypto'], - 'icon_url': 'https://www.chia.net/wp-content/uploads/2022/09/chia-logo.svg', - 'tags': ['finance'], - 'screenshots': ['https://www.chia.net/wp-content/uploads/2022/09/chia-logo.svg'], - 'sources': ['https://hub.docker.com/r/emby/embyserver'], - }, - ''' - screenshots: - - 'https://www.chia.net/wp-content/uploads/2022/09/chia-logo.svg' - tags: - - finance - categories: - - storage - - crypto - icon_url: https://www.chia.net/wp-content/uploads/2022/09/chia-logo.svg - sources: - - https://hub.docker.com/r/emby/embyserver - ''' - ), -]) -def test_get_item_details_impl( - mocker, item_path, schema, options, yaml_data, item_data_impl, open_yaml, -): - open_file_data = mocker.mock_open(read_data=open_yaml) - mocker.patch('builtins.open', open_file_data) - mocker.patch('os.path.isdir', return_value=True) - mocker.patch('os.listdir', return_value=['1.3.37']) - mocker.patch('catalog_validation.items.items_util.validate_item_version', return_value=None) - mocker.patch('catalog_validation.items.items_util.get_item_version_details', return_value={}) - assert get_item_details_impl(item_path, schema, QUESTION_CONTEXT, options) == item_data_impl diff --git a/catalog_validation/truecharts-fork/catalog_validation/pytest/unit/test_normalise_questions.py b/catalog_validation/truecharts-fork/catalog_validation/pytest/unit/test_normalise_questions.py deleted file mode 100644 index 5372d6f63f..0000000000 --- a/catalog_validation/truecharts-fork/catalog_validation/pytest/unit/test_normalise_questions.py +++ /dev/null @@ -1,321 +0,0 @@ -from catalog_validation.items.questions_utils import normalise_question -import pytest - - -VERSION_DATA = { - 'location': '/mnt/mypool/ix-applications/catalogs/github_com_truenas_charts_git_master/charts/syncthing/1.0.14', - 'required_features': { - 'normalize/ixVolume', - 'validations/lockedHostPath', - }, - 'chart_metadata': {}, - 'schema': { - 'variable': 'hostNetwork', - 'label': 'Host Network', - 'group': 'Networking', - }, - 'app_readme': 'there is not any', - 'detailed_readme': 'there is not any', - 'changelog': None, -} - - -@pytest.mark.parametrize('question,normalise_data,context', [ - ( - { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/interface'], - } - }, { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/interface'], - 'enum': [], - } - }, { - 'nic_choices': [], - } - ), - ( - { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/interface'], - } - }, { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/interface'], - 'enum': [{ - 'value': 'ens0', - 'description': "'ens0' Interface" - }], - } - }, { - 'nic_choices': ['ens0'] - } - ), - ( - { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/gpuConfiguration'], - } - }, { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/gpuConfiguration'], - 'attrs': [{ - 'variable': 'test@gpu', - 'label': 'GPU Resource (test@gpu)', - 'description': 'Please enter the number of GPUs to allocate', - 'schema': { - 'type': 'int', - 'max': 3, - 'enum': [ - {'value': i, 'description': f'Allocate {i!r} test@gpu GPU'} - for i in range(4) - ], - 'default': 0, - } - }], - } - }, { - 'gpus': { - 'test@gpu': 3 - } - } - ), - ( - { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/gpuConfiguration'], - } - }, { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/gpuConfiguration'], - 'attrs': [], - } - }, { - 'gpus': {} - } - ), - ( - { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/timezone'], - } - }, { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/timezone'], - 'enum': [{ - 'value': 'Asia/Damascus', - 'description': "'Asia/Damascus' timezone", - }, { - 'value': 'Asia/Saigon', - 'description': "'Asia/Saigon' timezone", - }], - 'default': 'America/Los_Angeles', - } - }, - { - 'timezones': { - 'Asia/Saigon': 'Asia/Saigon', - 'Asia/Damascus': 'Asia/Damascus', - }, - 'system.general.config': { - 'timezone': 'America/Los_Angeles', - } - } - ), - ( - { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/nodeIP'], - } - }, { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/nodeIP'], - 'default': '192.168.0.10', - } - }, - { - 'node_ip': '192.168.0.10' - } - ), - ( - { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/certificate'], - } - }, { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/certificate'], - 'enum': [{ - 'value': None, - 'description': 'No Certificate' - }, - { - 'value': '1', - 'description': "'testcert' Certificate" - } - ], - 'default': None, - 'null': True - } - }, {'certificates': [{ - 'id': '1', - 'name': 'testcert' - }], - } - ), - ( - { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/certificate'], - } - }, { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/certificate'], - 'enum': [{ - 'value': None, - 'description': 'No Certificate' - }], - 'default': None, - 'null': True - } - }, { - 'certificates': [] - } - ), - ( - { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/certificateAuthority'], - } - }, { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/certificateAuthority'], - 'enum': [{ - 'value': None, - 'description': 'No Certificate Authority' - }, { - 'value': None, - 'description': 'No Certificate Authority' - }], - 'default': None, - 'null': True - } - }, { - 'certificate_authorities': [] - } - ), - ( - { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/certificateAuthority'], - } - }, { - 'variable': 'datasetName', - 'label': 'Plots Volume Name', - 'schema': { - 'type': 'string', - 'hidden': True, - '$ref': ['definitions/certificateAuthority'], - 'enum': [{ - 'value': None, - 'description': 'No Certificate Authority' - }, { - 'value': None, - 'description': 'No Certificate Authority' - }, - { - 'value': '1', - 'description': "'testca' Certificate Authority" - } - ], - 'default': None, - 'null': True - } - }, { - 'certificate_authorities': [{ - 'id': '1', - 'name': 'testca' - }], - } - ) -]) -def test_normalise_question(question, normalise_data, context): - normalise_question(question, VERSION_DATA, context) - assert question == normalise_data diff --git a/catalog_validation/truecharts-fork/catalog_validation/pytest/unit/test_schema.py b/catalog_validation/truecharts-fork/catalog_validation/pytest/unit/test_schema.py deleted file mode 100644 index a741a0fa08..0000000000 --- a/catalog_validation/truecharts-fork/catalog_validation/pytest/unit/test_schema.py +++ /dev/null @@ -1,577 +0,0 @@ -import pytest - -from catalog_validation.schema.schema_gen import get_schema -from catalog_validation.exceptions import ValidationErrors -from catalog_validation.validation import validate_question - - -@pytest.mark.parametrize('schema,should_work', [ - ( - { - 'type': 'dict', - 'attrs': [] - }, - True - ), - ( - { - 'type': 'dict', - 'attrs': {} - }, - False - ), - ( - { - 'type': 'list' - }, - False - ), - ( - { - 'type': 'list', - 'items': [] - }, - True - ), - ( - { - 'type': 'list', - 'items': {} - }, - False - ), - ( - { - 'type': 'string', - 'editable': True - }, - True - ), - ( - { - 'type': 'string', - 'default': 'hello' - }, - True - ), - ( - { - 'type': 'string', - 'default': 1 - }, - False - ), - ( - { - 'type': 'string', - 'editable': 'true' - }, - False - ), - ( - { - 'type': 'string', - 'private': True - }, - True - ), - ( - { - 'type': 'string', - 'private': 'true' - }, - False - ), - ( - { - 'type': 'string', - 'max_length': 233 - }, - True - ), - ( - { - 'type': 'string', - 'max_length': '233' - }, - False - ), - ( - { - 'type': 'string', - 'min_length': 233 - }, - True - ), - ( - { - 'type': 'string', - 'min_length': '233' - }, - False - ), - ( - { - 'type': 'string', - 'valid_chars': '[a-z]*' - }, - True - ), - ( - { - 'type': 'string', - 'valid_chars': ['a-z'] - }, - False - ), - ( - { - 'type': 'string', 'null': True - }, - True - ), - ( - { - 'type': 'string', - 'null': 'true' - }, False - ), - ( - { - 'type': 'string', - 'immutable': True - }, - True - ), - ( - { - 'type': 'string', - 'immutable': 'true' - }, - False - ), - ( - { - 'type': 'string', - 'required': True - }, - True - ), - ( - { - 'type': 'string', - 'required': 'true' - }, - False - ), - ( - { - 'type': 'string', - 'hidden': True - }, - True - ), - ( - { - 'type': 'string', - 'hidden': 'true' - }, - False - ), - ( - { - 'type': 'string', - 'show_if': 'true' - }, - False - ), - ( - { - 'type': 'string', - 'show_if': [['hello', '=', 'world']] - }, - True - ), - ( - { - 'type': 'string', - 'subquestions': [] - }, - True - ), - ( - { - 'type': 'string', - 'subquestions': {} - }, - False - ), - ( - { - 'type': 'string', - 'show_subquestions_if': None - }, False - ), - ( - { - 'type': 'string', - 'show_subquestions_if': None, - 'subquestions': [] - }, - True - ), - ( - { - 'type': 'string', - 'show_subquestions_if': 1, - 'subquestions': [] - }, - True - ), - ( - { - 'type': 'string', - 'show_subquestions_if': 'test', - 'subquestions': [] - }, - True - ), - ( - { - 'type': 'string', - 'show_subquestions_if': {}, - 'subquestions': [] - }, - True - ), - ( - { - 'type': 'string', - 'show_subquestions_if': [], - 'subquestions': [] - }, - True - ), - ( - { - 'type': 'string', - '$ui-ref': [] - }, - True - ), - ( - { - 'type': 'string', - '$ui-ref': {} - }, - False - ), - ( - { - 'type': 'string', - '$ref': [] - }, - True - ), - ( - { - 'type': 'string', - '$ref': {} - }, - False - ), - ( - { - 'type': 'int', - 'min': 233, - 'max': 2311 - }, - True - ), - ( - { - 'type': 'int', - 'min': '233', - 'max': 2311 - }, - False - ), - ( - { - 'type': 'int', - 'min': 233, - 'max': '2311' - }, - False - ), - ( - { - 'type': 'int', - 'default': 23 - }, - True - ), - ( - { - 'type': 'int', - 'default': '23' - }, - False - ), - ( - { - 'type': 'ipaddr', - 'ipv4': True, - 'ipv6': False, - 'cidr': True - }, - True - ), - ( - { - 'type': 'ipaddr', - 'ipv4': True, - 'ipv6': False, - 'cidr': 'true' - }, - False - ), - ( - { - 'type': 'ipaddr', - 'ipv4': True, - 'ipv6': 'False', - 'cidr': True - }, - False - ), - ( - { - 'type': 'ipaddr', - 'ipv4': 'True', - 'ipv6': False, - 'cidr': True - }, - False - ), - ( - { - 'type': 'string', - 'enum': [{ - 'value': 'test', - 'description': 'test' - }] - }, - True - ), - ( - { - 'type': 'string', - 'enum': [{ - 'value': 'test', - 'description': 'test', - 'obj': {} - }] - }, - False - ), - ( - { - 'type': 'string', - 'enum': [{ - 'value': 'test' - }] - }, - False - ), - ( - { - 'type': 'string', - 'enum': [{ - 'key': 'value' - }] - }, - False - ), - ( - { - 'type': 'string', - 'enum': [{}] - }, - False - ), - ( - { - 'type': 'hostpath' - }, - True - ), - ( - { - 'type': 'hostpath', - 'default': '/root/' - }, - True - ), - ( - { - 'type': 'hostpath', - 'default': 231 - }, - False - ), - ( - { - 'type': 'path' - }, - True - ), - ( - { - 'type': 'path', - 'default': '/root/' - }, - True - ), - ( - { - 'type': 'path', - 'default': 231 - }, - False - ), - ( - { - 'type': 'boolean' - }, - True - ), - ( - { - 'type': 'boolean', - 'default': True - }, - True - ), - ( - { - 'type': 'boolean', - 'default': 'true' - }, - False - ), - ( - { - 'type': 'cron' - }, - True - ), - ( - { - 'type': 'cron', - 'default': {} - }, - True - ), - ( - { - 'type': 'cron', - 'default': [] - }, - False - ), - ( - { - 'type': 'uri' - }, - True - ), - ( - { - 'type': 'uri', - 'default': 'http://www.google.com' - }, - True - ), - ( - { - 'type': 'uri', - 'default': 2133 - }, - False - ), -]) -def test_schema_validation(schema, should_work): - if not should_work: - with pytest.raises(ValidationErrors): - get_schema(schema).validate('') - else: - assert get_schema(schema).validate('') is None - - -@pytest.mark.parametrize('variable,should_work', [ - ( - { - 'variable': 'testing', - 'label': 'Testing', - 'description': 'for testing', - 'group': 'testing', - 'schema': { - 'type': 'boolean', - 'default': True - } - }, - True - ), - ( - { - 'variable': 'testing', - 'description': 'for testing', - 'group': 'testing', - 'schema': { - 'type': 'boolean', - 'default': True - } - }, - False - ), - ( - { - 'variable': 'testing', - 'label': 'Testing', - 'description': 'for testing' - }, - False - ), - ( - { - 'variable': 'testing', - 'label': 'Testing', - 'description': 'for testing', - 'schema': { - 'type': 'boolean', - 'default': True - } - }, - True - ), - ( - { - 'variable': 'testing', - 'label': 'Testing', - 'description': 'for testing', - 'schema': { - 'default': True - } - }, - False - ), -]) -def test_question_variable_validation(variable, should_work): - verrors = ValidationErrors() - validate_question(variable, '', verrors) - if not should_work: - with pytest.raises(ValidationErrors): - verrors.check() - else: - verrors.check() diff --git a/catalog_validation/truecharts-fork/catalog_validation/pytest/unit/test_validate_ix_values.py b/catalog_validation/truecharts-fork/catalog_validation/pytest/unit/test_validate_ix_values.py deleted file mode 100644 index f634a92720..0000000000 --- a/catalog_validation/truecharts-fork/catalog_validation/pytest/unit/test_validate_ix_values.py +++ /dev/null @@ -1,94 +0,0 @@ -import pytest -from catalog_validation.validation import validate_ix_values_yaml -from catalog_validation.exceptions import ValidationErrors - - -@pytest.mark.parametrize('schema, ix_values_yaml_path, test_yaml, should_work', [ - - ( - 'charts.chia.versions.1.3.38.ix_values', - '/mnt/crave/ix-applications/catalogs/github_com_truenas_charts_git_master/test/chia/1.3.38/ix_values.yaml', - ''' - image: - pullPolicy: IfNotPresent - repository: ixsystems/chia-docker - tag: v1.6.2 - updateStrategy: Recreate - iXPortals: [{portalName: 'web portal', protocol: 'http', useNodeIP: false, host: '192.168.0.18', port: 9898}] - ''', - True - ), - ( - 'charts.chia.versions.1.3.38.ix_values', - '/mnt/crave/ix-applications/catalogs/github_com_truenas_charts_git_master/test/chia/1.3.38/ix_values.yaml', - ''' - image: - pullPolicy: IfNotPresent - repository: ixsystems/chia-docker - tag: v1.6.2 - updateStrategy: Recreate - iXPortals: [{portalName: 'web portal', protocol: 'http', useNodeIP: true, port: 9898}] - ''', - True - ), - ( - 'charts.chia.versions.1.3.38.ix_values', - '/mnt/crave/ix-applications/catalogs/github_com_truenas_charts_git_master/test/chia/1.3.38/ix_values.yaml', - ''' - image: - pullPolicy: IfNotPresent - repository: ixsystems/chia-docker - tag: v1.6.2 - updateStrategy: Recreate - iXPortals: [{portalName: 'web portal', protocol: 'htts', useNodeIP: true, port: 9898}] - ''', - False - ), - ( - 'charts.chia.versions.1.3.38.ix_values', - '/mnt/crave/ix-applications/catalogs/github_com_truenas_charts_git_master/test/chia/1.3.38/ix_values.yaml', - ''' - image: - pullPolicy: IfNotPresent - repository: ixsystems/chia-docker - tag: v1.6.2 - updateStrategy: Recreate - iXPortals: [{portalName: 'web portal', protocol: 09088, useNodeIP: true, port: '9898'}] - ''', - False - ), - ( - 'charts.chia.versions.1.3.38.ix_values', - '/mnt/crave/ix-applications/catalogs/github_com_truenas_charts_git_master/test/chia/1.3.38/ix_values.yaml', - ''' - image: - pullPolicy: IfNotPresent - repository: ixsystems/chia-docker - tag: v1.6.2 - updateStrategy: Recreate - iXPortals: [{portalName: 'web portal', useNodeIP: true, port: '9898'}] - ''', - False - ), - ( - 'charts.chia.versions.1.3.38.ix_values', - '/mnt/crave/ix-applications/catalogs/github_com_truenas_charts_git_master/test/chia/1.3.38/ix_values.yaml', - '', - False, - ), - ( - 'charts.chia.versions.1.3.38.ix_values', - '/mnt/crave/ix-applications/catalogs/github_com_truenas_charts_git_master/test/chia/1.3.38/ix_values.yaml', - 'image pullPolicy ifNotPresent', - False, - ) -]) -def test_validate_ix_values(mocker, schema, ix_values_yaml_path, test_yaml, should_work): - open_file = mocker.mock_open(read_data=test_yaml) - mocker.patch('builtins.open', open_file) - - if should_work: - assert validate_ix_values_yaml(ix_values_yaml_path, schema) is None - else: - with pytest.raises(ValidationErrors): - validate_ix_values_yaml(ix_values_yaml_path, schema) diff --git a/catalog_validation/truecharts-fork/catalog_validation/schema/__init__.py b/catalog_validation/truecharts-fork/catalog_validation/schema/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/catalog_validation/truecharts-fork/catalog_validation/schema/attrs.py b/catalog_validation/truecharts-fork/catalog_validation/schema/attrs.py deleted file mode 100644 index 6e65d6761e..0000000000 --- a/catalog_validation/truecharts-fork/catalog_validation/schema/attrs.py +++ /dev/null @@ -1,262 +0,0 @@ -from jsonschema import validate as json_schema_validate, ValidationError as JsonValidationError - -from catalog_validation.exceptions import ValidationErrors - -from .feature_gen import get_feature -from .variable_gen import generate_variable - - -class Schema: - - DEFAULT_TYPE = NotImplementedError - - def __init__(self, include_subquestions_attrs=True, data=None): - self.required = self.null = self.show_if = self.ref = self.ui_ref = self.type =\ - self.editable = self.hidden = self.default = self._schema_data = None - self._skip_data_values = [] - if include_subquestions_attrs: - self.subquestions = self.show_subquestions_if = None - if data: - self.initialize_values(data) - - def initialize_values(self, data): - self._schema_data = data - for key, value in filter( - lambda k: hasattr(self, k[0]) and k[0] not in self._skip_data_values, data.items() - ): - setattr(self, key, value) - - def get_schema_str(self, schema): - if schema: - return f'{schema}.' - return '' - - def validate(self, schema, data=None): - if data: - self.initialize_values(data) - - if not self._schema_data: - raise Exception('Schema data must be initialized before validating schema') - - verrors = ValidationErrors() - try: - json_schema_validate(self._schema_data, self.json_schema()) - except JsonValidationError as e: - verrors.add(schema, f'Failed to validate schema: {e}') - - verrors.check() - - if '$ref' in self._schema_data: - for index, ref in enumerate(self._schema_data['$ref']): - if not isinstance(ref, str): - verrors.add(f'{schema}.$ref.{index}', 'Must be a string') - continue - - feature_obj = get_feature(ref) - if not feature_obj: - continue - try: - feature_obj.validate(self, f'{schema}.$ref.{index}') - except ValidationErrors as e: - verrors.extend(e) - - verrors.check() - - def json_schema(self): - schema = { - 'type': 'object', - 'properties': { - 'required': { - 'type': 'boolean', - }, - 'null': { - 'type': 'boolean', - }, - 'show_if': { - 'type': 'array', - }, - '$ref': { - 'type': 'array', - }, - '$ui-ref': { - 'type': 'array', - }, - 'subquestions': { - 'type': 'array', - }, - 'show_subquestions_if': { - 'type': ['string', 'integer', 'boolean', 'object', 'array', 'null'], - }, - 'type': { - 'type': 'string', - }, - 'editable': { - 'type': 'boolean', - }, - 'immutable': { - 'type': 'boolean', - }, - 'hidden': { - 'type': 'boolean', - }, - }, - 'required': ['type'], - 'dependentRequired': { - 'show_subquestions_if': ['subquestions'] - } - } - if self.DEFAULT_TYPE: - schema['properties']['default'] = { - 'type': [self.DEFAULT_TYPE] + (['null'] if self.null else []) - } - if hasattr(self, 'enum'): - schema['properties']['enum'] = { - 'type': 'array', - 'items': { - 'type': 'object', - 'properties': { - 'value': {'type': [self.DEFAULT_TYPE] + (['null'] if self.null else [])}, - 'description': {'type': ['string', 'null']}, - }, - 'additionalProperties': False, - 'required': ['value', 'description'] - }, - } - return schema - - -class BooleanSchema(Schema): - DEFAULT_TYPE = 'boolean' - - -class StringSchema(Schema): - DEFAULT_TYPE = 'string' - - def __init__(self, data): - self.min_length = self.max_length = self.enum = self.private = self.valid_chars = self.valid_chars_error = None - super().__init__(data=data) - - def json_schema(self): - schema = super().json_schema() - schema['properties'].update({ - 'min_length': { - 'type': 'integer', - }, - 'max_length': { - 'type': 'integer', - }, - 'private': { - 'type': 'boolean', - }, - 'valid_chars': { - 'type': 'string', - }, - 'valid_chars_error': { - 'type': 'string' - }, - }) - return schema - - -class IntegerSchema(Schema): - DEFAULT_TYPE = 'integer' - - def __init__(self, data): - self.min = self.max = self.enum = None - super().__init__(data=data) - - def json_schema(self): - schema = super().json_schema() - schema['properties'].update({ - 'min': { - 'type': 'integer', - }, - 'max': { - 'type': 'integer', - }, - }) - return schema - - -class PathSchema(Schema): - DEFAULT_TYPE = 'string' - - -class HostPathSchema(Schema): - DEFAULT_TYPE = 'string' - - -class HostPathDirSchema(Schema): - DEFAULT_TYPE = 'string' - - -class HostPathFileSchema(Schema): - DEFAULT_TYPE = 'string' - - -class URISchema(Schema): - DEFAULT_TYPE = 'string' - - -class IPAddrSchema(Schema): - DEFAULT_TYPE = 'string' - - def __init__(self, data): - self.ipv4 = self.ipv6 = self.cidr = None - super().__init__(data=data) - - def json_schema(self): - schema = super().json_schema() - schema['properties'].update({ - 'ipv4': {'type': 'boolean'}, - 'ipv6': {'type': 'boolean'}, - 'cidr': {'type': 'boolean'}, - }) - return schema - - -class CronSchema(Schema): - DEFAULT_TYPE = 'object' - - -class DictSchema(Schema): - DEFAULT_TYPE = 'object' - - def __init__(self, data): - self.attrs = [] - self.additional_attrs = None - super().__init__(data=data) - self._skip_data_values = ['attrs'] - - def initialize_values(self, data): - super().initialize_values(data) - self.attrs = [generate_variable(d) for d in (data.get('attrs') or [])] - - def json_schema(self): - schema = super().json_schema() - schema['additionalProperties'] = bool(self.additional_attrs) - schema['properties']['attrs'] = {'type': 'array'} - schema['required'].append('attrs') - # We do not validate nested children and hence do not add it in the - # json schema as it makes it very complex to handle all the possibilities - return schema - - -class ListSchema(Schema): - - DEFAULT_TYPE = 'array' - - def __init__(self, data): - self.items = [] - super().__init__(False, data=data) - self._skip_data_values = ['items'] - - def initialize_values(self, data): - super().initialize_values(data) - self.items = [generate_variable(d) for d in (data.get('items') or [])] - - def json_schema(self): - schema = super().json_schema() - schema['properties']['items'] = {'type': 'array'} - schema['required'].append('items') - return schema diff --git a/catalog_validation/truecharts-fork/catalog_validation/schema/feature_gen.py b/catalog_validation/truecharts-fork/catalog_validation/schema/feature_gen.py deleted file mode 100644 index 62dd657fd2..0000000000 --- a/catalog_validation/truecharts-fork/catalog_validation/schema/feature_gen.py +++ /dev/null @@ -1,4 +0,0 @@ -def get_feature(feature): - from .features import FEATURES - if feature in FEATURES: - return FEATURES[FEATURES.index(feature)] diff --git a/catalog_validation/truecharts-fork/catalog_validation/schema/features.py b/catalog_validation/truecharts-fork/catalog_validation/schema/features.py deleted file mode 100644 index c69c7b44c0..0000000000 --- a/catalog_validation/truecharts-fork/catalog_validation/schema/features.py +++ /dev/null @@ -1,158 +0,0 @@ -from catalog_validation.exceptions import ValidationErrors - -from .schema_gen import DictSchema, IntegerSchema, StringSchema - - -class Feature: - - NAME = NotImplementedError - VALID_SCHEMAS = [] - - def __str__(self): - return self.NAME - - def validate(self, schema_obj, schema_str): - verrors = ValidationErrors() - if not isinstance(schema_obj, tuple(self.VALID_SCHEMAS)): - verrors.add( - f'{schema_str}.type', - f'Schema must be one of {", ".join(str(v) for v in self.VALID_SCHEMAS)} schema types' - ) - - if not verrors: - self._validate(verrors, schema_obj, schema_str) - verrors.check() - - def _validate(self, verrors, schema_obj, schema_str): - pass - - def __eq__(self, other): - return self.NAME == (other if isinstance(other, str) else other.NAME) - - -class IXVolumeFeature(Feature): - - NAME = 'normalize/ixVolume' - VALID_SCHEMAS = [DictSchema, StringSchema] - - def _validate(self, verrors, schema_obj, schema_str): - if isinstance(schema_obj, StringSchema): - return - - attrs = schema_obj.attrs - if 'datasetName' not in attrs: - verrors.add(f'{schema_str}.attrs', 'Variable "datasetName" must be specified.') - elif not isinstance(attrs[attrs.index('datasetName')].schema, StringSchema): - verrors.add(f'{schema_str}.attrs', 'Variable "datasetName" must be of string type.') - - if 'aclEntries' in attrs and not isinstance(attrs[attrs.index('aclEntries')].schema, DictSchema): - verrors.add(f'{schema_str}.attrs', 'Variable "aclEntries" must be of dict type.') - - if 'properties' in attrs: - index = attrs.index('properties') - properties = attrs[index] - properties_schema = properties.schema - supported_props = { - 'recordsize': { - 'valid_schema_type': [StringSchema], - }, - } - not_supported = set([str(v) for v in properties_schema.attrs]) - set(supported_props) - if not_supported: - verrors.add( - f'{schema_str}.attrs.{index}.attrs', f'{", ".join(not_supported)} properties are not supported' - ) - - for prop_index, prop in enumerate(properties_schema.attrs): - if prop.name not in supported_props: - continue - - prop_schema = prop.schema - check_prop = supported_props[prop.name] - if not isinstance(prop_schema, tuple(check_prop['valid_schema_type'])): - verrors.add( - f'{schema_str}.attrs.{index}.attrs.{prop_index}', - f'{prop.name!r} must be of ' - f'{", ".join([str(s) for s in check_prop["valid_schema_type"]])} type(s)' - ) - - -class NormalizeInterfaceConfiguration(Feature): - NAME = 'normalize/interfaceConfiguration' - VALID_SCHEMAS = [DictSchema] - - -class DefinitionInterfaceFeature(Feature): - - NAME = 'definitions/interface' - VALID_SCHEMAS = [StringSchema] - - -class DefinitionGPUConfigurationFeature(Feature): - - NAME = 'definitions/gpuConfiguration' - VALID_SCHEMAS = [DictSchema] - - -class DefinitionTimezoneFeature(Feature): - - NAME = 'definitions/timezone' - VALID_SCHEMAS = [StringSchema] - - -class DefinitionNodeIPFeature(Feature): - - NAME = 'definitions/nodeIP' - VALID_SCHEMAS = [StringSchema] - - -class ValidationNodePortFeature(Feature): - - NAME = 'validations/nodePort' - VALID_SCHEMAS = [IntegerSchema] - - -class CertificateFeature(Feature): - - NAME = 'definitions/certificate' - VALID_SCHEMAS = [IntegerSchema] - - -class CertificateAuthorityFeature(Feature): - - NAME = 'definitions/certificateAuthority' - VALID_SCHEMAS = [IntegerSchema] - - -class ContainerImageFeature(Feature): - - NAME = 'validations/containerImage' - VALID_SCHEMAS = [DictSchema] - - def _validate(self, verrors, schema_obj, schema_str): - attrs = schema_obj.attrs - for check_attr in ('repository', 'tag'): - if check_attr not in attrs: - verrors.add(f'{schema_str}.attrs', f'Variable {check_attr!r} must be specified.') - elif not isinstance(attrs[attrs.index(check_attr)].schema, StringSchema): - verrors.add(f'{schema_str}.attrs', f'Variable {check_attr!r} must be of string type.') - - -class ACLFeature(Feature): - - NAME = 'normalize/acl' - VALID_SCHEMAS = [DictSchema] - - -FEATURES = [ - ACLFeature(), - IXVolumeFeature(), - DefinitionInterfaceFeature(), - DefinitionGPUConfigurationFeature(), - DefinitionTimezoneFeature(), - DefinitionNodeIPFeature(), - ValidationNodePortFeature(), - CertificateFeature(), - CertificateAuthorityFeature(), - ContainerImageFeature(), -] diff --git a/catalog_validation/truecharts-fork/catalog_validation/schema/migration_schema.py b/catalog_validation/truecharts-fork/catalog_validation/schema/migration_schema.py deleted file mode 100644 index 9b535d9a26..0000000000 --- a/catalog_validation/truecharts-fork/catalog_validation/schema/migration_schema.py +++ /dev/null @@ -1,42 +0,0 @@ -import re - - -APP_MIGRATION_DIR = 'migrations' -APP_MIGRATION_SCHEMA = { - 'type': 'array', - 'items': { - 'type': 'object', - 'properties': { - 'app_name': {'type': 'string'}, - 'action': {'type': 'string', 'enum': ['move']}, - }, - 'required': [ - 'app_name', - 'action' - ], - 'allOf': [ - { - 'if': { - 'properties': { - 'action': { - 'const': 'move', - }, - }, - }, - 'then': { - 'properties': { - 'old_train': {'type': 'string'}, - 'new_train': {'type': 'string'}, - }, - 'required': [ - 'new_train', - 'old_train', - ], - }, - }, - ], - }, -} -MIGRATION_DIRS = ['.migrations', 'ix-migrations'] -RE_MIGRATION_NAME_STR = r'^\d+\w+.json' -RE_MIGRATION_NAME = re.compile(RE_MIGRATION_NAME_STR) diff --git a/catalog_validation/truecharts-fork/catalog_validation/schema/schema_gen.py b/catalog_validation/truecharts-fork/catalog_validation/schema/schema_gen.py deleted file mode 100644 index 2504257361..0000000000 --- a/catalog_validation/truecharts-fork/catalog_validation/schema/schema_gen.py +++ /dev/null @@ -1,41 +0,0 @@ -from .attrs import ( - BooleanSchema, StringSchema, IntegerSchema, PathSchema, HostPathSchema, HostPathDirSchema, - HostPathFileSchema, ListSchema, DictSchema, IPAddrSchema, CronSchema, URISchema -) - - -def get_schema(schema_data): - schema = None - if not isinstance(schema_data, dict): - return schema - - s_type = schema_data.get('type') - if s_type == 'boolean': - schema = BooleanSchema - elif s_type == 'string': - schema = StringSchema - elif s_type == 'int': - schema = IntegerSchema - elif s_type == 'path': - schema = PathSchema - elif s_type == 'hostpath': - schema = HostPathSchema - elif s_type == 'hostpathdirectory': - schema = HostPathDirSchema - elif s_type == 'hostpathfile': - schema = HostPathFileSchema - elif s_type == 'list': - schema = ListSchema - elif s_type == 'dict': - schema = DictSchema - elif s_type == 'ipaddr': - schema = IPAddrSchema - elif s_type == 'cron': - schema = CronSchema - elif s_type == 'uri': - schema = URISchema - - if schema: - schema = schema(data=schema_data) - - return schema diff --git a/catalog_validation/truecharts-fork/catalog_validation/schema/variable.py b/catalog_validation/truecharts-fork/catalog_validation/schema/variable.py deleted file mode 100644 index e11d522af5..0000000000 --- a/catalog_validation/truecharts-fork/catalog_validation/schema/variable.py +++ /dev/null @@ -1,37 +0,0 @@ -from catalog_validation.exceptions import ValidationErrors - -from .schema_gen import get_schema - - -class Variable: - def __init__(self, data): - self.name = self.label = self.description = self.group = None - self.schema = None - self.update_from_data(data) - - def update_from_data(self, data): - self.name = data.get('variable') - self.label = data.get('label') - self.description = data.get('description') - self.schema = get_schema(data.get('schema')) - - def validate(self, schema): - verrors = ValidationErrors() - if not self.name: - verrors.add(f'{schema}.variable', 'Variable value must be specified') - - if not self.schema: - verrors.add(f'{schema}.schema', 'Schema must be specified for variable') - else: - try: - self.schema.validate(f'{schema}.schema') - except ValidationErrors as ve: - verrors.extend(ve) - - verrors.check() - - def __str__(self): - return self.name - - def __eq__(self, other): - return (other if isinstance(other, str) else other.name) == self.name diff --git a/catalog_validation/truecharts-fork/catalog_validation/schema/variable_gen.py b/catalog_validation/truecharts-fork/catalog_validation/schema/variable_gen.py deleted file mode 100644 index 8784e4f975..0000000000 --- a/catalog_validation/truecharts-fork/catalog_validation/schema/variable_gen.py +++ /dev/null @@ -1,3 +0,0 @@ -def generate_variable(variable_data): - from .variable import Variable - return Variable(variable_data) diff --git a/catalog_validation/truecharts-fork/catalog_validation/scripts/__init__.py b/catalog_validation/truecharts-fork/catalog_validation/scripts/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/catalog_validation/truecharts-fork/catalog_validation/scripts/catalog_update.py b/catalog_validation/truecharts-fork/catalog_validation/scripts/catalog_update.py deleted file mode 100644 index 0d52a8b6c8..0000000000 --- a/catalog_validation/truecharts-fork/catalog_validation/scripts/catalog_update.py +++ /dev/null @@ -1,171 +0,0 @@ -#!/usr/bin/env python -import argparse -import contextlib -import json -import os -import shutil -import typing - -from jsonschema import validate as json_schema_validate, ValidationError as JsonValidationError - -from catalog_validation.ci.utils import ( - get_app_version, get_ci_development_directory, OPTIONAL_METADATA_FILES, - REQUIRED_METADATA_FILES, version_has_been_bumped, get_to_keep_versions -) -from catalog_validation.exceptions import ValidationErrors -from catalog_validation.items.catalog import get_items_in_trains, retrieve_train_names, retrieve_trains_data -from catalog_validation.items.utils import get_catalog_json_schema -from catalog_validation.utils import CACHED_CATALOG_FILE_NAME, CACHED_VERSION_FILE_NAME -from catalog_validation.validation import validate_catalog_item_version_data -from collections import defaultdict - - -def get_trains(location: str) -> typing.Tuple[dict, dict]: - preferred_trains: list = [] - trains_to_traverse = retrieve_train_names(location) - catalog_data = {} - versions_data = {} - for train_name, train_data in retrieve_trains_data( - get_items_in_trains(trains_to_traverse, location), location, preferred_trains, trains_to_traverse - )[0].items(): - catalog_data[train_name] = {} - versions_data[train_name] = {} - for app_name, app_data in train_data.items(): - catalog_data[train_name][app_name] = {} - versions_data[train_name][app_name] = {} - for k, v in app_data.items(): - if k == 'versions': - versions_data[train_name][app_name][k] = v - else: - catalog_data[train_name][app_name][k] = v - - return catalog_data, versions_data - - -def validate_train_data(train_data): - verrors = ValidationErrors() - try: - json_schema_validate(train_data, get_catalog_json_schema()) - except (json.JSONDecodeError, JsonValidationError) as e: - verrors.add( - 'catalog_json', - f'Failed to validate contents of train data: {e!r}' - ) - verrors.check() - - -def validate_versions_data(versions_data): - verrors = ValidationErrors() - for train_name, train_data in versions_data.items(): - for app_name, app_version_data in train_data.items(): - validate_catalog_item_version_data(app_version_data['versions'], f'{train_name}.{app_name}', verrors) - verrors.check() - - -def get_apps_to_publish(catalog_path: str) -> dict: - ci_dev_dir = get_ci_development_directory(catalog_path) - to_publish_apps = defaultdict(list) - for train_name in os.listdir(ci_dev_dir): - train_path = os.path.join(ci_dev_dir, train_name) - if not os.path.isdir(train_path): - continue - - for app_name in os.listdir(train_path): - app_path = os.path.join(train_path, app_name) - if not os.path.isdir(app_path): - continue - - app_current_version = get_app_version(app_path) - if version_has_been_bumped(os.path.join(catalog_path, train_name, app_name), app_current_version): - to_publish_apps[train_name].append({'name': app_name, 'version': app_current_version}) - - return to_publish_apps - - -def publish_updated_apps(catalog_path: str) -> None: - ci_dev_directory = get_ci_development_directory(catalog_path) - if not os.path.isdir(ci_dev_directory): - return - - for train_name, apps in get_apps_to_publish(catalog_path).items(): - dev_train_path = os.path.join(ci_dev_directory, train_name) - publish_train_path = os.path.join(catalog_path, train_name) - os.makedirs(publish_train_path, exist_ok=True) - - for app in apps: - app_name, app_version = app['name'], app['version'] - dev_app_path = os.path.join(dev_train_path, app_name) - publish_app_path = os.path.join(publish_train_path, app_name) - publish_app_version_path = os.path.join(publish_app_path, app_version) - required_versions = get_to_keep_versions(dev_app_path) - os.makedirs(publish_app_path, exist_ok=True) - - dev_item_yaml_path = os.path.join(dev_app_path, 'item.yaml') - publish_item_yaml_path = os.path.join(publish_app_path, 'item.yaml') - shutil.copy(dev_item_yaml_path, publish_item_yaml_path) - shutil.copytree(dev_app_path, publish_app_version_path) - - for file_name in OPTIONAL_METADATA_FILES + REQUIRED_METADATA_FILES: - with contextlib.suppress(OSError): - os.unlink(os.path.join(publish_app_version_path, file_name)) - - ix_values_path = os.path.join(publish_app_version_path, 'ix_values.yaml') - values_path = os.path.join(publish_app_version_path, 'values.yaml') - if not os.path.exists(ix_values_path) and os.path.exists(values_path): - shutil.move(values_path, ix_values_path) - - for version in os.listdir(publish_app_path): - version_path = os.path.join(publish_app_path, version) - if not os.path.isdir(version_path) or version in required_versions: - continue - - if version != app_version: - shutil.rmtree(version_path) - - print( - f'[\033[92mOK\x1B[0m]\tPublished {app_name!r} having {app_version!r} version ' - f'to {train_name!r} train successfully!' - ) - - -def update_catalog_file(location: str) -> None: - catalog_file_path = os.path.join(location, CACHED_CATALOG_FILE_NAME) - catalog_data, versions_data = get_trains(location) - validate_train_data(catalog_data) - validate_versions_data(versions_data) - - with open(catalog_file_path, 'w') as f: - f.write(json.dumps(catalog_data, indent=4)) - - print(f'[\033[92mOK\x1B[0m]\tUpdated {catalog_file_path!r} successfully!') - - for train_name, train_data in versions_data.items(): - for app_name, app_data in train_data.items(): - version_path = os.path.join(location, train_name, app_name, CACHED_VERSION_FILE_NAME) - with open(version_path, 'w') as f: - f.write(json.dumps(app_data['versions'], indent=4)) - - print(f'[\033[92mOK\x1B[0m]\tUpdated {version_path!r} successfully!') - - -def main(): - parser = argparse.ArgumentParser() - subparsers = parser.add_subparsers(help='sub-command help', dest='action') - - publish_setup = subparsers.add_parser('publish', help='Publish apps of TrueNAS catalog') - publish_setup.add_argument('--path', help='Specify path of TrueNAS catalog') - - parser_setup = subparsers.add_parser('update', help='Update TrueNAS catalog') - parser_setup.add_argument('--path', help='Specify path of TrueNAS catalog') - - args = parser.parse_args() - if args.action == 'publish': - publish_updated_apps(args.path) - elif args.action == 'update': - update_catalog_file(args.path) - else: - parser.print_help() - - -if __name__ == '__main__': - main() diff --git a/catalog_validation/truecharts-fork/catalog_validation/scripts/catalog_validate.py b/catalog_validation/truecharts-fork/catalog_validation/scripts/catalog_validate.py deleted file mode 100644 index 1094bdf136..0000000000 --- a/catalog_validation/truecharts-fork/catalog_validation/scripts/catalog_validate.py +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env python -import argparse - -from catalog_validation.exceptions import CatalogDoesNotExist, ValidationErrors -from catalog_validation.validation import validate_catalog - - -def validate(catalog_path, ignore_catalog_json=False): - - try: - validate_catalog(catalog_path, ignore_catalog_json) - except CatalogDoesNotExist: - print(f'[\033[91mFAILED\x1B[0m]\tSpecified {catalog_path!r} path does not exist') - exit(1) - except ValidationErrors as verrors: - print('[\033[91mFAILED\x1B[0m]\tFollowing validation failures were found:') - for index, verror in enumerate(verrors.errors): - print(f'[\033[91m{index}\x1B[0m]\t{verror}') - exit(1) - else: - print('[\033[92mOK\x1B[0m]\tPASSED VALIDATION CHECKS') - - -def main(): - parser = argparse.ArgumentParser() - subparsers = parser.add_subparsers(help='sub-command help', dest='action') - - parser_setup = subparsers.add_parser('validate', help='Validate TrueNAS catalog') - parser_setup.add_argument('--path', help='Specify path of TrueNAS catalog') - parser_setup.add_argument('--ignore-catalog-json', help='Will not validate the catalog.json file', action=argparse.BooleanOptionalAction) - - args = parser.parse_args() - if args.action == 'validate': - validate(args.path, args.ignore_catalog_json) - else: - parser.print_help() - - -if __name__ == '__main__': - main() diff --git a/catalog_validation/truecharts-fork/catalog_validation/scripts/dev_apps_validate.py b/catalog_validation/truecharts-fork/catalog_validation/scripts/dev_apps_validate.py deleted file mode 100644 index 1ce514beae..0000000000 --- a/catalog_validation/truecharts-fork/catalog_validation/scripts/dev_apps_validate.py +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env python -import argparse - -from catalog_validation.ci.validate import validate_dev_directory_structure -from catalog_validation.git_utils import get_changed_apps - - -def main(): - parser = argparse.ArgumentParser() - subparsers = parser.add_subparsers(help='sub-command help', dest='action') - - parser_setup = subparsers.add_parser( - 'validate', help='Validate TrueNAS dev catalog items' - ) - parser_setup.add_argument('--path', help='Specify path of TrueNAS dev catalog', required=True) - parser_setup.add_argument( - '--base_branch', help='Specify base branch to find changed catalog items', default='master' - ) - - args = parser.parse_args() - if args.action == 'validate': - validate_dev_directory_structure(args.path, get_changed_apps(args.path, args.base_branch)) - else: - parser.print_help() - - -if __name__ == '__main__': - main() diff --git a/catalog_validation/truecharts-fork/catalog_validation/utils.py b/catalog_validation/truecharts-fork/catalog_validation/utils.py deleted file mode 100644 index 3a99c38cc3..0000000000 --- a/catalog_validation/truecharts-fork/catalog_validation/utils.py +++ /dev/null @@ -1,223 +0,0 @@ -import re - - -CACHED_CATALOG_FILE_NAME = 'catalog.json' -CACHED_VERSION_FILE_NAME = 'app_versions.json' -METADATA_JSON_SCHEMA = { - 'type': 'object', - 'properties': { - 'runAsContext': { - 'type': 'array', - 'items': { - 'type': 'object', - 'properties': { - 'description': {'type': 'string'}, - 'gid': {'type': 'integer'}, - 'groupName': {'type': 'string'}, - 'userName': {'type': 'string'}, - 'uid': {'type': 'integer'}, - }, - 'required': ['description'], - }, - }, - 'capabilities': { - 'type': 'array', - 'items': { - 'type': 'object', - 'properties': { - 'description': {'type': 'string'}, - 'name': {'type': 'string'}, - }, - 'required': ['description', 'name'], - }, - }, - 'hostMounts': { - 'type': 'array', - 'items': { - 'type': 'object', - 'properties': { - 'description': {'type': 'string'}, - 'hostPath': {'type': 'string'}, - }, - 'required': ['description', 'hostPath'], - }, - }, - }, -} -VALID_TRAIN_REGEX = re.compile(r'^\w+[\w.-]*$') -VERSION_VALIDATION_SCHEMA = { - 'type': 'object', - 'title': 'Versions', - 'patternProperties': { - '[0-9]+.[0-9]+.[0-9]+': { - 'type': 'object', - 'properties': { - 'healthy': { - 'type': 'boolean', - }, - 'supported': { - 'type': 'boolean', - }, - 'healthy_error': { - 'type': ['string', 'null'] - }, - 'location': { - 'type': 'string', - 'pattern': r'^(\/[a-zA-Z0-9_.-]+)+$' - }, - 'last_update': { - 'type': 'string', - 'pattern': '^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$' - }, - 'required_features': { - 'type': 'array', - 'items': { - 'type': 'string' - } - }, - 'human_version': { - 'type': 'string' - }, - 'version': { - 'type': 'string', - 'pattern': '[0-9]+.[0-9]+.[0-9]+' - }, - 'chart_metadata': { - 'type': 'object', - 'properties': { - 'name': { - 'type': 'string' - }, - 'description': { - 'type': 'string' - }, - 'annotations': { - 'type': 'object' - }, - 'type': { - 'type': 'string' - }, - 'version': { - 'type': 'string', - 'pattern': '[0-9]+.[0-9]+.[0-9]+' - }, - 'apiVersion': { - 'type': 'string', - }, - 'appVersion': { - 'type': 'string' - }, - 'kubeVersion': { - 'type': 'string' - }, - 'app_readme': {'type': 'string'}, - 'detailed_readme': {'type': 'string'}, - 'changelog': {'type': ['string', 'null']}, - 'maintainers': { - 'type': 'array', - 'items': { - 'type': 'object', - 'properties': { - 'name': {'type': 'string'}, - 'url': {'type': ['string', 'null']}, - 'email': {'type': 'string'}, - }, - 'required': ['name', 'email'], - } - }, - 'dependencies': { - 'type': 'array', - 'items': { - 'type': 'object', - 'properties': { - 'name': {'type': 'string'}, - 'repository': {'type': 'string'}, - 'version': {'type': 'string'} - } - } - }, - 'home': {'type': 'string'}, - 'icon': {'type': 'string'}, - 'sources': { - 'type': 'array', - 'items': { - 'type': 'string' - } - }, - 'keywords': { - 'type': 'array', - 'items': { - 'type': 'string' - } - }, - } - }, - 'app_metadata': { - **METADATA_JSON_SCHEMA, - 'type': ['object', 'null'], - }, - 'schema': { - 'type': 'object', - 'properties': { - 'groups': { - 'type': 'array', - 'items': { - 'type': 'object', - 'properties': { - 'name': { - 'type': 'string' - }, - 'description': { - 'type': 'string' - }, - }, - 'required': ['description', 'name'], - } - }, - 'portals': { - 'type': 'object' - }, - 'questions': { - 'type': 'array', - 'items': { - 'type': 'object', - 'properties': { - 'variable': {'type': 'string'}, - 'label': {'type': 'string'}, - 'group': {'type': 'string'}, - 'schema': { - 'type': 'object', - 'properties': { - 'type': {'type': 'string'} - }, - 'required': ['type'] - } - } - } - } - }, - 'required': ['groups', 'questions'] - }, - }, - 'required': [ - 'healthy', 'supported', 'healthy_error', 'location', 'last_update', 'required_features', - 'human_version', 'version', 'chart_metadata', 'app_metadata', 'schema', - ], - }, - }, - 'additionalProperties': False -} -WANTED_FILES_IN_ITEM_VERSION = {'questions.yaml', 'app-readme.md', 'Chart.yaml', 'README.md'} - - -def validate_key_value_types(data_to_check, mapping, verrors, schema): - for key_mapping in mapping: - if len(key_mapping) == 2: - key, value_type, required = *key_mapping, True - else: - key, value_type, required = key_mapping - - if required and key not in data_to_check: - verrors.add(f'{schema}.{key}', f'Missing required {key!r} key.') - elif key in data_to_check and not isinstance(data_to_check[key], value_type): - verrors.add(f'{schema}.{key}', f'{key!r} value should be a {value_type.__name__!r}') diff --git a/catalog_validation/truecharts-fork/catalog_validation/validation.py b/catalog_validation/truecharts-fork/catalog_validation/validation.py deleted file mode 100644 index cd3cfdcfcf..0000000000 --- a/catalog_validation/truecharts-fork/catalog_validation/validation.py +++ /dev/null @@ -1,459 +0,0 @@ -import concurrent.futures -import json -import jsonschema -import os -import yaml - -from jsonschema import validate as json_schema_validate, ValidationError as JsonValidationError -from semantic_version import Version -from typing import Optional - -from .exceptions import CatalogDoesNotExist, ValidationErrors -from .items.ix_values_utils import validate_ix_values_schema -from .items.questions_utils import ( - CUSTOM_PORTALS_KEY, CUSTOM_PORTALS_ENABLE_KEY, CUSTOM_PORTAL_GROUP_KEY, -) -from .items.utils import get_catalog_json_schema, RECOMMENDED_APPS_FILENAME, RECOMMENDED_APPS_SCHEMA, TRAIN_IGNORE_DIRS -from .schema.migration_schema import ( - APP_MIGRATION_SCHEMA, MIGRATION_DIRS, RE_MIGRATION_NAME, RE_MIGRATION_NAME_STR, APP_MIGRATION_DIR, -) -from .schema.variable import Variable -from .validation_utils import validate_chart_version -from .utils import ( - CACHED_CATALOG_FILE_NAME, CACHED_VERSION_FILE_NAME, METADATA_JSON_SCHEMA, validate_key_value_types, - VALID_TRAIN_REGEX, VERSION_VALIDATION_SCHEMA, WANTED_FILES_IN_ITEM_VERSION -) - - -def validate_catalog(catalog_path, ignore_catalog_json=False): - if not os.path.exists(catalog_path): - raise CatalogDoesNotExist(catalog_path) - - verrors = ValidationErrors() - items = [] - item_futures = [] - - if not ignore_catalog_json: - cached_catalog_file_path = os.path.join(catalog_path, CACHED_CATALOG_FILE_NAME) - if not os.path.exists(cached_catalog_file_path): - verrors.add( - 'cached_catalog_file', - f'{CACHED_CATALOG_FILE_NAME!r} metadata file must be specified for a valid catalog' - ) - else: - try: - with open(cached_catalog_file_path, 'r') as f: - json_schema_validate(json.loads(f.read()), get_catalog_json_schema()) - - except (json.JSONDecodeError, JsonValidationError) as e: - verrors.add( - 'cached_catalog_file', - f'Failed to validate contents of {cached_catalog_file_path!r}: {e!r}' - ) - - verrors.check() - - validate_recommended_apps_file(catalog_path) - - for file_dir in os.listdir(catalog_path): - complete_path = os.path.join(catalog_path, file_dir) - if file_dir not in MIGRATION_DIRS and ( - file_dir.startswith('.') or not os.path.isdir(complete_path) or file_dir in TRAIN_IGNORE_DIRS - ): - continue - if file_dir in MIGRATION_DIRS: - if all(os.path.exists(migration_dir) for migration_dir in map( - lambda d: os.path.join(catalog_path, d), MIGRATION_DIRS - )): - verrors.add( - 'app_migrations', f'Both {", ".join(MIGRATION_DIRS)!r} cannot be used to specify app migrations' - ) - else: - for directory in MIGRATION_DIRS: - migration_dir = os.path.join(catalog_path, directory) - if not os.path.exists(migration_dir): - continue - if os.path.isdir(migration_dir): - try: - validate_migrations(migration_dir) - except ValidationErrors as e: - verrors.extend(e) - else: - verrors.add('app_migrations', f'{directory!r} is not a directory') - else: - try: - validate_train_structure(complete_path) - except ValidationErrors as e: - verrors.extend(e) - else: - items.extend(get_train_items(complete_path)) - - with concurrent.futures.ProcessPoolExecutor(max_workers=20 if len(items) > 10 else 5) as exc: - for item in items: - item_futures.append(exc.submit(validate_catalog_item, item[0], item[1])) - - for future in item_futures: - try: - future.result() - except ValidationErrors as e: - verrors.extend(e) - - verrors.check() - - -def validate_recommended_apps_file(catalog_location: str) -> None: - verrors = ValidationErrors() - try: - with open(os.path.join(catalog_location, RECOMMENDED_APPS_FILENAME), 'r') as f: - data = yaml.safe_load(f.read()) - json_schema_validate(data, RECOMMENDED_APPS_SCHEMA) - except FileNotFoundError: - return - except yaml.YAMLError: - verrors.add(RECOMMENDED_APPS_FILENAME, 'Must be a valid yaml file') - except JsonValidationError as e: - verrors.add(RECOMMENDED_APPS_FILENAME, f'Invalid format specified: {e}') - - verrors.check() - - -def validate_migrations(migration_dir): - verrors = ValidationErrors() - for migration_file in os.listdir(migration_dir): - if not RE_MIGRATION_NAME.findall(migration_file): - verrors.add( - f'app_migrations.{migration_file}', - 'Invalid naming scheme used for migration file name. ' - f'It should be conforming to {RE_MIGRATION_NAME_STR!r} pattern.' - ) - else: - try: - with open(os.path.join(migration_dir, migration_file), 'r') as f: - data = json.loads(f.read()) - jsonschema.validate(data, APP_MIGRATION_SCHEMA) - except (json.JSONDecodeError, jsonschema.ValidationError) as e: - verrors.add( - f'app_migrations.{migration_file}', - f'Failed to validate migration file structure: {e}' - ) - verrors.check() - - -def validate_train_structure(train_path): - train = os.path.basename(train_path) - verrors = ValidationErrors() - if not VALID_TRAIN_REGEX.match(train): - verrors.add(train, 'Train name is invalid.') - print(f' procssing train: {train} ') - verrors.check() - - -def get_train_items(train_path): - train = os.path.basename(train_path) - items = [] - for catalog_item in os.listdir(train_path): - item_path = os.path.join(train_path, catalog_item) - if not os.path.isdir(item_path): - continue - items.append((item_path, f'{train}.{catalog_item}')) - return items - - -def validate_catalog_item(catalog_item_path, schema, validate_versions=True): - # We should ensure that each catalog item has at least 1 version available - # Also that we have item.yaml present - verrors = ValidationErrors() - item_name = os.path.join(catalog_item_path) - files = [] - versions = [] - print(f' procssing catalog item: {item_name} ') - if not os.path.isdir(catalog_item_path): - verrors.add(schema, 'Catalog item must be a directory') - verrors.check() - - for file_dir in os.listdir(catalog_item_path): - complete_path = os.path.join(catalog_item_path, file_dir) - if os.path.isdir(complete_path): - versions.append(complete_path) - else: - files.append(file_dir) - - if not versions: - verrors.add(f'{schema}.versions', f'No versions found for {item_name} item.') - - if 'item.yaml' not in files: - verrors.add(f'{schema}.item', 'Item configuration (item.yaml) not found') - else: - with open(os.path.join(catalog_item_path, 'item.yaml'), 'r') as f: - item_config = yaml.safe_load(f.read()) - - validate_key_value_types( - item_config, ( - ('categories', list), ('tags', list, False), ('screenshots', list, False), - ), verrors, f'{schema}.item_config' - ) - - cached_version_file_path = os.path.join(catalog_item_path, CACHED_VERSION_FILE_NAME) - if os.path.exists(cached_version_file_path): - try: - with open(cached_version_file_path, 'r') as f: - validate_catalog_item_version_data( - json.loads(f.read()), f'{schema}.{CACHED_VERSION_FILE_NAME}', verrors - ) - except json.JSONDecodeError: - verrors.add( - f'{schema}.{CACHED_VERSION_FILE_NAME}', f'{CACHED_VERSION_FILE_NAME!r} is not a valid json file' - ) - - for version_path in (versions if validate_versions else []): - try: - validate_catalog_item_version(version_path, f'{schema}.versions.{os.path.basename(version_path)}') - except ValidationErrors as e: - verrors.extend(e) - - verrors.check() - - -def validate_app_migrations(version_path, schema): - verrors = ValidationErrors() - app_migration_path = os.path.join(version_path, APP_MIGRATION_DIR) - - if not os.path.exists(app_migration_path): - return verrors - - for migration_file in os.listdir(app_migration_path): - migration_file_path = os.path.join(app_migration_path, migration_file) - if not os.access(migration_file_path, os.X_OK): - verrors.add(schema, f'{migration_file!r} is not executable') - return verrors - - -def validate_catalog_item_version_data(version_data: dict, schema: str, verrors: ValidationErrors) -> ValidationErrors: - try: - json_schema_validate(version_data, VERSION_VALIDATION_SCHEMA) - except JsonValidationError as e: - verrors.add(schema, f'Invalid format specified for application versions: {e}') - return verrors - - -def validate_catalog_item_version( - version_path: str, schema: str, version_name: Optional[str] = None, item_name: Optional[str] = None, - validate_values: bool = False, -): - verrors = ValidationErrors() - version_name = version_name or os.path.basename(version_path) - item_name = item_name or version_path.split('/')[-2] - try: - Version(version_name) - except ValueError: - verrors.add(f'{schema}.name', f'{version_name!r} is not a valid version name.') - print(f' procssing catalog item version: {version_name} ') - - files_diff = WANTED_FILES_IN_ITEM_VERSION ^ set( - f for f in os.listdir(version_path) if f in WANTED_FILES_IN_ITEM_VERSION - ) - if files_diff: - verrors.add(f'{schema}.required_files', f'Missing {", ".join(files_diff)} required configuration files.') - - chart_version_path = os.path.join(version_path, 'Chart.yaml') - validate_chart_version(verrors, chart_version_path, schema, item_name, version_name) - - questions_path = os.path.join(version_path, 'questions.yaml') - if os.path.exists(questions_path): - try: - validate_questions_yaml(questions_path, f'{schema}.questions_configuration') - except ValidationErrors as v: - verrors.extend(v) - - for values_file in ['ix_values.yaml'] + (['values.yaml'] if validate_values else []): - values_path = os.path.join(version_path, values_file) - if os.path.exists(values_path): - try: - validate_ix_values_yaml(values_path, f'{schema}.values_configuration') - except ValidationErrors as v: - verrors.extend(v) - - metadata_path = os.path.join(version_path, 'metadata.yaml') - if os.path.exists(metadata_path): - try: - validate_metadata_yaml(metadata_path, f'{schema}.metadata_configuration') - except ValidationErrors as v: - verrors.extend(v) - - validate_app_migrations(version_path, f'{schema}.app_migrations') - - verrors.check() - - -def validate_ix_values_yaml(ix_values_yaml_path, schema): - verrors = ValidationErrors() - - with open(ix_values_yaml_path, 'r') as f: - try: - ix_values = yaml.safe_load(f.read()) - except yaml.YAMLError: - verrors.add(schema, 'Must be a valid yaml file') - - verrors.check() - - if isinstance(ix_values, dict): - portals = ix_values.get(CUSTOM_PORTALS_KEY) - if portals: - try: - validate_ix_values_schema(schema, portals) - except ValidationErrors as ve: - verrors.extend(ve) - else: - verrors.add(schema, 'Must be a dictionary') - - verrors.check() - - -def validate_metadata_yaml(metadata_yaml_path, schema): - verrors = ValidationErrors() - with open(metadata_yaml_path, 'r') as f: - try: - metadata = yaml.safe_load(f.read()) - except yaml.YAMLError: - verrors.add(schema, 'Must be a valid yaml file') - else: - try: - json_schema_validate(metadata, METADATA_JSON_SCHEMA) - except JsonValidationError as e: - verrors.add(schema, f'Invalid format specified for application metadata: {e}') - - verrors.check() - - -def validate_questions_yaml(questions_yaml_path, schema): - verrors = ValidationErrors() - - with open(questions_yaml_path, 'r') as f: - try: - questions_config = yaml.safe_load(f.read()) - except yaml.YAMLError: - verrors.add(schema, 'Must be a valid yaml file') - else: - if not isinstance(questions_config, dict): - verrors.add(schema, 'Must be a dictionary') - - verrors.check() - - validate_key_value_types( - questions_config, ( - ('groups', list), ('questions', list), ('portals', dict, False), (CUSTOM_PORTALS_ENABLE_KEY, bool, False), - (CUSTOM_PORTAL_GROUP_KEY, str, False), - ), verrors, schema - ) - - verrors.check() - - groups = [] - for index, group in enumerate(questions_config['groups']): - if not isinstance(group, dict): - verrors.add(f'{schema}.groups.{index}', 'Type of group should be a dictionary.') - continue - - if group.get('name'): - groups.append(group['name']) - - validate_key_value_types(group, (('name', str), ('description', str)), verrors, f'{schema}.group.{index}') - - for index, portal_details in enumerate((questions_config.get('portals') or {}).items()): - portal_type, portal_schema = portal_details - error_schema = f'{schema}.portals.{index}' - if not isinstance(portal_type, str): - verrors.add(error_schema, 'Portal type must be a string') - if not isinstance(portal_schema, dict): - verrors.add(error_schema, 'Portal schema must be a dictionary') - else: - validate_key_value_types( - portal_schema, (('protocols', list), ('host', list), ('ports', list), ('path', str, False)), - verrors, error_schema - ) - - validate_variable_uniqueness(questions_config['questions'], f'{schema}.questions', verrors) - for index, question in enumerate(questions_config['questions']): - validate_question(question, f'{schema}.questions.{index}', verrors, (('group', str),)) - if question.get('group') and question['group'] not in groups: - verrors.add(f'{schema}.questions.{index}.group', f'Please specify a group declared in "{schema}.groups"') - - if questions_config.get(CUSTOM_PORTALS_ENABLE_KEY): - if not questions_config.get(CUSTOM_PORTAL_GROUP_KEY): - verrors.add( - f'{schema}.{CUSTOM_PORTALS_ENABLE_KEY}', - f'{CUSTOM_PORTAL_GROUP_KEY!r} must be specified when user specified portals are desired' - ) - elif questions_config[CUSTOM_PORTAL_GROUP_KEY] not in groups: - verrors.add( - f'{schema}.{CUSTOM_PORTAL_GROUP_KEY}', - 'Specified group not declared under "groups"' - ) - - verrors.check() - - -def validate_variable_uniqueness(data, schema, verrors): - variables = [] - for index, question in enumerate(data): - if question['variable'] in variables: - verrors.add( - f'{schema}.{index}', f'Variable name {question["variable"]!r} has been used again which is not allowed' - ) - else: - variables.append(question['variable']) - sub_questions = question.get('subquestions') or [] - for sub_index, sub_question in enumerate(sub_questions): - if sub_question['variable'] in variables: - verrors.add( - f'{schema}.{index}.subquestions.{sub_index}', - f'Variable name {sub_question["variable"]!r} has been used again which is not allowed' - ) - else: - variables.append(sub_question['variable']) - - verrors.check() - - -def validate_question(question_data, schema, verrors, validate_top_level_attrs=None): - if not isinstance(question_data, dict): - verrors.add(schema, 'Question must be a valid dictionary.') - return - - validate_top_level_attrs = validate_top_level_attrs or tuple() - validate_key_value_types( - question_data, (('variable', str), ('label', str), ('schema', dict)) + validate_top_level_attrs, verrors, schema - ) - if type(question_data.get('schema')) != dict: - return - - if question_data['variable'] == CUSTOM_PORTALS_KEY: - verrors.add( - f'{schema}.variable', - f'{CUSTOM_PORTALS_KEY!r} is a reserved variable name and cannot be specified by app developer' - ) - # No need to validate the question data etc here - return - - try: - Variable(question_data).validate(schema) - except ValidationErrors as ve: - verrors.extend(ve) - return - - schema_data = question_data['schema'] - variable_type = schema_data['type'] - - for condition, key, schema_str in ( - (variable_type != 'list', 'subquestions', f'{schema}.schema.subquestions'), - (variable_type == 'list', 'items', f'{schema}.schema.items'), - (variable_type == 'dict', 'attrs', f'{schema}.schema.attrs'), - ): - if not (condition and type(schema_data.get(key)) == list): - continue - - if variable_type == 'dict': - validate_variable_uniqueness(schema_data[key], f'{schema}.{schema_str}', verrors) - - for index, item in enumerate(schema_data[key]): - validate_question(item, f'{schema_str}.{index}', verrors) diff --git a/catalog_validation/truecharts-fork/catalog_validation/validation_utils.py b/catalog_validation/truecharts-fork/catalog_validation/validation_utils.py deleted file mode 100644 index e8ba485159..0000000000 --- a/catalog_validation/truecharts-fork/catalog_validation/validation_utils.py +++ /dev/null @@ -1,66 +0,0 @@ -import os -import yaml - -from semantic_version import Version -from typing import Optional - -from .exceptions import ValidationErrors - - -def validate_chart_version( - verrors: ValidationErrors, chart_version_path: str, schema: str, item_name: str, version_name: Optional[str] = None, -) -> ValidationErrors: - if os.path.exists(chart_version_path): - with open(chart_version_path, 'r') as f: - try: - chart_config = yaml.safe_load(f.read()) - except yaml.YAMLError: - verrors.add(schema, 'Must be a valid yaml file') - else: - if not isinstance(chart_config, dict): - verrors.add(schema, 'Must be a dictionary') - else: - if chart_config.get('name') != item_name: - verrors.add(f'{schema}.item_name', 'Item name not correctly set in "Chart.yaml".') - - if not isinstance(chart_config.get('annotations', {}), dict): - verrors.add(f'{schema}.annotations', 'Annotations must be a dictionary') - - if not isinstance(chart_config.get('sources', []), list): - verrors.add(f'{schema}.sources', 'Sources must be a list') - else: - for index, source in enumerate(chart_config.get('sources', [])): - if not isinstance(source, str): - verrors.add(f'{schema}.sources.{index}', 'Source must be a string') - - if not isinstance(chart_config.get('maintainers', []), list): - verrors.add(f'{schema}.maintainers', 'Maintainers must be a list') - else: - for index, maintainer in enumerate(chart_config.get('maintainers', [])): - if not isinstance(maintainer, dict): - verrors.add(f'{schema}.maintainers.{index}', 'Maintainer must be a dictionary') - elif not all(k in maintainer and isinstance(maintainer[k], str) for k in ('name', 'email')): - verrors.add( - f'{schema}.maintainers.{index}', - 'Maintainer must have name and email attributes defined and be strings.' - ) - - chart_version = chart_config.get('version') - if chart_version is None: - verrors.add(f'{schema}.version', 'Version must be configured in "Chart.yaml"') - else: - try: - Version(chart_version) - except ValueError: - verrors.add(f'{schema}.version', f'{chart_version!r} is not a valid version name') - - if version_name is not None and chart_version != version_name: - verrors.add( - f'{schema}.version', - 'Configured version in "Chart.yaml" does not match version directory name.' - ) - - else: - verrors.add(schema, 'Missing chart version file') - - return verrors diff --git a/catalog_validation/truecharts-fork/debian/changelog b/catalog_validation/truecharts-fork/debian/changelog deleted file mode 100644 index 0019cb792f..0000000000 --- a/catalog_validation/truecharts-fork/debian/changelog +++ /dev/null @@ -1,5 +0,0 @@ -catalog-validation (0.1-0~truenas+1) bullseye-truenas-unstable; urgency=medium - - * Initial release - - -- Waqar Ahmed Fri, 27 Nov 2020 00:26:21 +0500 diff --git a/catalog_validation/truecharts-fork/debian/control b/catalog_validation/truecharts-fork/debian/control deleted file mode 100644 index 3034a70dcc..0000000000 --- a/catalog_validation/truecharts-fork/debian/control +++ /dev/null @@ -1,27 +0,0 @@ -Source: catalog-validation -Section: contrib/python -Priority: optional -Maintainer: Waqar Ahmed -Build-Depends: debhelper-compat (= 12), - dh-python, - python3-dev, - python3-jsonschema, - python3-semantic-version, - python3-kubernetes, - python3-yaml, - python3-setuptools -Standards-Version: 4.4.1 -Homepage: https://github.com/truenas/catalog_validation -Testsuite: autopkgtest-pkg-python - -Package: python3-catalog-validation -Architecture: any -Depends: python3-semantic-version, - python3-jsonschema, - python3-kubernetes, - python3-yaml, - ${shlibs:Depends}, - ${misc:Depends}, - ${python3:Depends} -Description: Validate TrueNAS Catalogs - This package helps validate truenas catalogs. diff --git a/catalog_validation/truecharts-fork/debian/rules b/catalog_validation/truecharts-fork/debian/rules deleted file mode 100644 index 3bb0ffc007..0000000000 --- a/catalog_validation/truecharts-fork/debian/rules +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/make -f -export DH_VERBOSE = 1 - -export PYBUILD_NAME=catalog_validation - -%: - dh $@ --with python3 --buildsystem=pybuild diff --git a/catalog_validation/truecharts-fork/debian/source/format b/catalog_validation/truecharts-fork/debian/source/format deleted file mode 100644 index 163aaf8d82..0000000000 --- a/catalog_validation/truecharts-fork/debian/source/format +++ /dev/null @@ -1 +0,0 @@ -3.0 (quilt) diff --git a/catalog_validation/truecharts-fork/debian/source/options b/catalog_validation/truecharts-fork/debian/source/options deleted file mode 100644 index cb61fa5267..0000000000 --- a/catalog_validation/truecharts-fork/debian/source/options +++ /dev/null @@ -1 +0,0 @@ -extend-diff-ignore = "^[^/]*[.]egg-info/" diff --git a/catalog_validation/truecharts-fork/requirements.txt b/catalog_validation/truecharts-fork/requirements.txt deleted file mode 100644 index 4b3e302bb9..0000000000 --- a/catalog_validation/truecharts-fork/requirements.txt +++ /dev/null @@ -1,6 +0,0 @@ -gitpython -jsonschema==4.23.0 -kubernetes -markdown -pyyaml -semantic_version diff --git a/catalog_validation/truecharts-fork/setup.cfg b/catalog_validation/truecharts-fork/setup.cfg deleted file mode 100644 index aa079ec57f..0000000000 --- a/catalog_validation/truecharts-fork/setup.cfg +++ /dev/null @@ -1,2 +0,0 @@ -[flake8] -max-line-length=120 diff --git a/catalog_validation/truecharts-fork/setup.py b/catalog_validation/truecharts-fork/setup.py deleted file mode 100644 index a64ad68046..0000000000 --- a/catalog_validation/truecharts-fork/setup.py +++ /dev/null @@ -1,21 +0,0 @@ -from distutils.core import setup -from setuptools import find_packages - -VERSION = '0.1' - -setup( - name='catalog_validation', - description='Validate TrueNAS Catalog(s)', - version=VERSION, - include_package_data=True, - packages=find_packages(), - license='GNU3', - platforms='any', - entry_points={ - 'console_scripts': [ - 'catalog_validate = catalog_validation.scripts.catalog_validate:main', - 'catalog_update = catalog_validation.scripts.catalog_update:main', - 'dev_charts_validate = catalog_validation.scripts.dev_apps_validate:main', - ], - }, -) diff --git a/github/label-commenter-config.yml b/github/label-commenter-config.yml deleted file mode 100644 index ec8613d8c5..0000000000 --- a/github/label-commenter-config.yml +++ /dev/null @@ -1,35 +0,0 @@ ---- -labels: - - name: incomplete-template - labeled: - issue: - body: | - :wave: @{{ issue.user.login }}, please follow the template provided. - action: close - locking: lock - lock_reason: resolved - - - name: support - labeled: - issue: - body: | - :wave: @{{ issue.user.login }}, we use the issue tracker exclusively - for bug reports and feature requests. However, this issue appears - to be a support request. Please use our support channels - to get help. - - [Docs](https://docs.k8s-at-home.com/) - - [Discord](https://discord.gg/sTMX7Vh) - - [GitHub Discussions](https://github.com/k8s-at-home/organization/discussions) - action: close - - - name: incomplete-docs - labeled: - pr: - body: | - :wave: @{{ pull_request.user.login }}, thanks for taking the time to submit this PR. 🙏🏽 - - We have noticed that the chart documentation has not been completely updated for this PR. - Could you please make sure that the following items have been updated: - - `version` in `Chart.yaml` has been updated per [semver](http://semver.org/) - - The `artifacthub.io/changes` chart annotation contains a summary of the updates for this new version. See [Artifact Hub documentation](https://artifacthub.io/docs/topics/annotations/helm/#supported-annotations) for more info. - - [Documentation strings](https://github.com/norwoodj/helm-docs#valuesyaml-metadata) have been added to the keys in `values.yaml`. diff --git a/github/stale.yml b/github/stale.yml deleted file mode 100644 index 616be956c3..0000000000 --- a/github/stale.yml +++ /dev/null @@ -1,32 +0,0 @@ -# Configuration for probot-stale - https://github.com/probot/stale - -# Number of days of inactivity before an Issue or Pull Request becomes stale -daysUntilStale: 45 - -# Number of days of inactivity before a stale Issue or Pull Request is closed. -daysUntilClose: 5 - -# Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable -exemptLabels: -- on-hold -- pinned - -# Label to use when marking as stale -staleLabel: stale - -issues: - # Comment to post when marking as stale. Set to `false` to disable - markComment: > - This Issue has been automatically marked as "stale" because it has not had recent activity (for 45 days). It will be closed if no further activity occurs. Thanks for the feedback. - # Comment to post when closing a stale Issue or Pull Request. - closeComment: > - Due to the lack of activity in the last 5 days since it was marked as "stale", we proceed to close this Issue. Do not hesitate to reopen it later if necessary. -pulls: - # Comment to post when marking as stale. Set to `false` to disable - markComment: > - This Pull Request has been automatically marked as "stale" because it has not had recent activity (for 45 days). It will be closed if no further activity occurs. Thank you for your contribution. - # Comment to post when closing a stale Issue or Pull Request. - closeComment: > - Due to the lack of activity in the last 5 days since it was marked as "stale", we proceed to close this Pull Request. Do not hesitate to reopen it later if necessary. -# Limit the number of actions per hour, from 1-30. Default is 30 -limitPerRun: 30 diff --git a/github/workflows/metadata-label-commenter.yaml b/github/workflows/metadata-label-commenter.yaml deleted file mode 100644 index 168a041aa5..0000000000 --- a/github/workflows/metadata-label-commenter.yaml +++ /dev/null @@ -1,32 +0,0 @@ ---- -name: "Metadata: Label Commenter" - -on: - workflow_dispatch: - issues: - types: - - labeled - - unlabeled - pull_request_target: - types: - - labeled - - unlabeled - -permissions: - contents: read - issues: write - pull-requests: write - -jobs: - comment: - name: Label commenter - runs-on: ubuntu-20.04 - steps: - - uses: actions/checkout@v3 - with: - token: ${{ secrets.BOT_TOKEN }} - ref: master - - - uses: peaceiris/actions-label-commenter@v1 - with: - github_token: ${{ secrets.BOT_TOKEN }} diff --git a/github/workflows/metadata-label-pr.yaml b/github/workflows/metadata-label-pr.yaml deleted file mode 100644 index 12cb7138e1..0000000000 --- a/github/workflows/metadata-label-pr.yaml +++ /dev/null @@ -1,33 +0,0 @@ ---- -name: "Metadata: Label pull requests" - -on: - workflow_dispatch: - pull_request_target: - types: - - opened - - edited - - closed - - reopened - - ready_for_review - - synchronize - -jobs: - label-size: - name: Label Size - runs-on: ubuntu-latest - steps: - - name: Label Size - uses: pascalgn/size-label-action@v0.4.3 - env: - GITHUB_TOKEN: "${{ secrets.BOT_TOKEN }}" - with: - sizes: > - { - "0": "XS", - "20": "S", - "50": "M", - "200": "L", - "800": "XL", - "2000": "XXL" - } diff --git a/github/workflows/prune.yaml b/github/workflows/prune.yaml deleted file mode 100644 index 9c72f020c5..0000000000 --- a/github/workflows/prune.yaml +++ /dev/null @@ -1,49 +0,0 @@ -name: "Prune Versions" - -on: - workflow_dispatch: - -jobs: - Prune: - runs-on: ubuntu-latest - name: "Pruning" - steps: - - name: Checkout branch - uses: actions/checkout@v2 - with: - fetch-depth: 0 - token: ${{ secrets.BOT_TOKEN }} - - - name: Prune App Versions - run: | - for train in stable incubator dependency core dev games enterprise - do - for chart in ${train}/*; do - if [ -f "${chart}/item.yaml" ]; then - maxchartversion=$(ls ${chart} | grep -v item.yaml | sort -Vr | head -n1) - maxchartversion=${maxchartversion%/} - chartname=$(basename ${chart}) - for version in ${chart}/*; do - versionname=$(basename ${version}) - if [ -f "${version}/Chart.yaml" ]; then - if [[ "${versionname}" != "${maxchartversion}" ]]; then - echo "Removing older version ${versionname} for ${chartname}" - rm -Rf ${version} - else - echo "${versionname} is the latest version, skipping..." - fi - fi - done - else - echo "Invalid App" - fi - done - done - - - name: Commit and Push Pruned catalog - run: | - git config user.name "TrueCharts-Bot" - git config user.email "bot@truecharts.org" - git add --all - git commit -sm "Daily Prune" || exit 0 - git push diff --git a/github/workflows/schedule-sync-labels.yaml b/github/workflows/schedule-sync-labels.yaml deleted file mode 100644 index 001877c309..0000000000 --- a/github/workflows/schedule-sync-labels.yaml +++ /dev/null @@ -1,25 +0,0 @@ ---- -name: "Schedule: Sync labels" - -on: # yamllint disable-line rule:truthy - workflow_dispatch: - schedule: - - cron: "0 * * * *" - -jobs: - labels: - name: Sync Labels - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v3 - with: - token: ${{ secrets.BOT_TOKEN }} - - - name: Sync Labels - uses: EndBug/label-sync@v2 - with: - config-file: | - https://raw.githubusercontent.com/truecharts/.github/main/.github/labels.yaml - token: "${{ secrets.BOT_TOKEN }}" - delete-other-labels: true diff --git a/github/workflows/stale.yaml b/github/workflows/stale.yaml deleted file mode 100644 index fb649a1487..0000000000 --- a/github/workflows/stale.yaml +++ /dev/null @@ -1,38 +0,0 @@ ---- -name: "Mark or close stale issues and PRs" -on: - workflow_dispatch: - schedule: - # Run the stalebot every day at 8pm UTC - - cron: "00 20 * * *" - -jobs: - stale: - runs-on: ubuntu-20.04 - steps: - - name: Check for stale issues and PRs - uses: actions/stale@v5 - with: - repo-token: ${{ secrets.BOT_TOKEN }} - days-before-issue-stale: 180 - days-before-pr-stale: 180 - days-before-close: 14 - days-before-pr-close: 14 - stale-issue-message: > - This issue has been automatically marked as stale because it has not had recent activity. - It will be closed in two weeks if no further activity occurs. - Thank you for your contributions. - stale-pr-message: > - This pull request has been automatically marked as stale because it has not had - recent activity. It will be closed in two weeks if no further activity occurs. - Thank you for your contributions. - close-issue-message: > - This issue has been automatically closed due to inactivity. - Please re-open if this still requires investigation. - close-pr-message: > - This pull request has been automatically closed due to inactivity. - Please re-open if these changes are still required. - stale-pr-label: "stale" - stale-issue-label: "stale" - exempt-issue-labels: "keepalive" - exempt-pr-labels: "keepalive" diff --git a/premium/vaultwarden/app_versions.json b/premium/vaultwarden/app_versions.json index 8cb8d9ee30..9165d9d4f4 100644 --- a/premium/vaultwarden/app_versions.json +++ b/premium/vaultwarden/app_versions.json @@ -3,13 +3,13 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/premium/vaultwarden/27.1.2", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/premium/vaultwarden/27.1.2", + "last_update": "2024-09-20 02:39:05", "required_features": [ - "definitions/timezone", - "normalize/interfaceConfiguration", "definitions/certificate", - "definitions/interface" + "normalize/interfaceConfiguration", + "definitions/interface", + "definitions/timezone" ], "human_version": "1.30.5_27.1.2", "version": "27.1.2", @@ -25,7 +25,7 @@ "dependencies": [ { "name": "common", - "version": "23.0.10", + "version": "23.0.11", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -6172,13 +6172,13 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/premium/vaultwarden/27.1.1", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/premium/vaultwarden/27.1.1", + "last_update": "2024-09-20 02:39:05", "required_features": [ - "definitions/timezone", - "normalize/interfaceConfiguration", "definitions/certificate", - "definitions/interface" + "normalize/interfaceConfiguration", + "definitions/interface", + "definitions/timezone" ], "human_version": "1.30.5_27.1.1", "version": "27.1.1", @@ -6194,7 +6194,7 @@ "dependencies": [ { "name": "common", - "version": "23.0.9", + "version": "23.0.11", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -12341,13 +12341,13 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/premium/vaultwarden/26.8.15", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/premium/vaultwarden/26.8.15", + "last_update": "2024-09-22 11:56:32", "required_features": [ - "definitions/timezone", - "normalize/interfaceConfiguration", "definitions/certificate", - "definitions/interface" + "normalize/interfaceConfiguration", + "definitions/interface", + "definitions/timezone" ], "human_version": "1.30.5_26.8.15", "version": "26.8.15", @@ -12365,7 +12365,7 @@ "dependencies": [ { "name": "common", - "version": "20.3.12", + "version": "20.4.1", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -18620,13 +18620,13 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/premium/vaultwarden/26.8.14", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/premium/vaultwarden/26.8.14", + "last_update": "2024-09-22 11:56:32", "required_features": [ - "definitions/timezone", - "normalize/interfaceConfiguration", "definitions/certificate", - "definitions/interface" + "normalize/interfaceConfiguration", + "definitions/interface", + "definitions/timezone" ], "human_version": "1.30.5_26.8.14", "version": "26.8.14", @@ -18644,7 +18644,7 @@ "dependencies": [ { "name": "common", - "version": "20.3.11", + "version": "20.4.1", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", diff --git a/stable/lidarr/19.2.0/.helmignore b/stable/lidarr/19.2.0/.helmignore deleted file mode 100644 index 77ca5567b2..0000000000 --- a/stable/lidarr/19.2.0/.helmignore +++ /dev/null @@ -1,30 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ -# OWNERS file for Kubernetes -OWNERS -# helm-docs templates -*.gotmpl -# docs folder -/docs -# icon -icon.png diff --git a/stable/lidarr/19.2.0/CHANGELOG.md b/stable/lidarr/19.2.0/CHANGELOG.md deleted file mode 100644 index 90e04097fe..0000000000 --- a/stable/lidarr/19.2.0/CHANGELOG.md +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: Changelog ---- - - -*for the complete changelog, please refer to the website* - -**Important:** - - - -## [lidarr-19.1.19](https://github.com/truecharts/charts/compare/lidarr-19.1.18...lidarr-19.1.19) (2024-02-12) - -### Chore - - - -- update container image ghcr.io/onedr0p/lidarr-develop to v2.1.7.4030[@01d40bb](https://github.com/01d40bb) by renovate ([#18169](https://github.com/truecharts/charts/issues/18169)) - - -## [lidarr-19.1.18](https://github.com/truecharts/charts/compare/lidarr-19.1.17...lidarr-19.1.18) (2024-02-05) - -### Chore - - - -- update container image ghcr.io/onedr0p/lidarr-develop to 2.1.6.3993[@36b75d7](https://github.com/36b75d7) by renovate ([#17955](https://github.com/truecharts/charts/issues/17955)) - - -## [lidarr-19.1.17](https://github.com/truecharts/charts/compare/lidarr-19.1.16...lidarr-19.1.17) (2024-02-05) - -### Chore - - - -- update container image ghcr.io/onedr0p/lidarr-develop to v2.1.6.3993[@90ddf2d](https://github.com/90ddf2d) by renovate ([#17914](https://github.com/truecharts/charts/issues/17914)) - - -## [lidarr-19.1.16](https://github.com/truecharts/charts/compare/lidarr-19.1.15...lidarr-19.1.16) (2024-02-03) - -### Chore - - - -- update container image common to v17.2.30[@19ad5ec](https://github.com/19ad5ec) by renovate ([#17804](https://github.com/truecharts/charts/issues/17804)) - - -## [lidarr-19.1.15](https://github.com/truecharts/charts/compare/lidarr-19.1.14...lidarr-19.1.15) (2024-01-29) - -### Chore - - - -- update container image ghcr.io/onedr0p/exportarr to v1.6.1[@60cf3d4](https://github.com/60cf3d4) by renovate ([#17725](https://github.com/truecharts/charts/issues/17725)) - - -## [lidarr-19.1.14](https://github.com/truecharts/charts/compare/lidarr-19.1.13...lidarr-19.1.14) (2024-01-29) - -### Chore - - - -- update container image ghcr.io/onedr0p/lidarr-develop to v2.1.4.3941[@de7dac0](https://github.com/de7dac0) by renovate ([#17674](https://github.com/truecharts/charts/issues/17674)) - - -## [lidarr-19.1.13](https://github.com/truecharts/charts/compare/lidarr-19.1.12...lidarr-19.1.13) (2024-01-26) - -### Chore - - - -- update container image common to v17.2.29[@d7c41a3](https://github.com/d7c41a3) by renovate ([#17545](https://github.com/truecharts/charts/issues/17545)) - - -## [lidarr-19.1.12](https://github.com/truecharts/charts/compare/lidarr-19.1.11...lidarr-19.1.12) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.28[@918b4c5](https://github.com/918b4c5) by renovate ([#17478](https://github.com/truecharts/charts/issues/17478)) - - -## [lidarr-19.1.11](https://github.com/truecharts/charts/compare/lidarr-19.1.10...lidarr-19.1.11) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.26[@24c98f7](https://github.com/24c98f7) by renovate ([#17409](https://github.com/truecharts/charts/issues/17409)) - - -## [lidarr-19.1.10](https://github.com/truecharts/charts/compare/lidarr-19.1.9...lidarr-19.1.10) (2024-01-21) - -### Chore - - - -- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) diff --git a/stable/lidarr/19.2.0/Chart.yaml b/stable/lidarr/19.2.0/Chart.yaml deleted file mode 100644 index 29cc15fffe..0000000000 --- a/stable/lidarr/19.2.0/Chart.yaml +++ /dev/null @@ -1,38 +0,0 @@ -annotations: - max_scale_version: 24.04.0 - min_scale_version: 23.10.0 - truecharts.org/category: media - truecharts.org/max_helm_version: "3.14" - truecharts.org/min_helm_version: "3.12" - truecharts.org/train: stable -apiVersion: v2 -appVersion: 2.1.7.4030 -dependencies: - - name: common - version: 17.5.1 - repository: oci://tccr.io/truecharts - condition: "" - alias: "" - tags: [] - import-values: [] -deprecated: false -description: Looks and smells like Sonarr but made for music -home: https://truecharts.org/charts/stable/lidarr -icon: https://truecharts.org/img/hotlink-ok/chart-icons/lidarr.png -keywords: - - lidarr - - torrent - - usenet -kubeVersion: ">=1.24.0-0" -maintainers: - - name: TrueCharts - email: info@truecharts.org - url: https://truecharts.org -name: lidarr -sources: - - https://github.com/Lidarr/Lidarr - - https://github.com/truecharts/charts/tree/master/charts/stable/lidarr - - https://ghcr.io/onedr0p/exportarr - - https://ghcr.io/onedr0p/lidarr-develop -type: application -version: 19.2.0 diff --git a/stable/lidarr/19.2.0/README.md b/stable/lidarr/19.2.0/README.md deleted file mode 100644 index 5dd4de9f50..0000000000 --- a/stable/lidarr/19.2.0/README.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: README ---- - -## General Info - -TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. -However only installations using the TrueNAS SCALE Apps system are supported. - -For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/lidarr) - -**This chart is not maintained by the upstream project and any issues with the chart should be raised [here](https://github.com/truecharts/charts/issues/new/choose)** - -## Support - -- Please check our [quick-start guides for TrueNAS SCALE](https://truecharts.org/manual/SCALE/guides/scale-intro). -- See the [Website](https://truecharts.org) -- Check our [Discord](https://discord.gg/tVsPTHWTtr) -- Open a [issue](https://github.com/truecharts/charts/issues/new/choose) - ---- - -## Sponsor TrueCharts - -TrueCharts can only exist due to the incredible effort of our staff. -Please consider making a [donation](https://truecharts.org/sponsor) or contributing back to the project any way you can! - -_All Rights Reserved - The TrueCharts Project_ diff --git a/stable/lidarr/19.2.0/app-readme.md b/stable/lidarr/19.2.0/app-readme.md deleted file mode 100644 index ab0ee61c1d..0000000000 --- a/stable/lidarr/19.2.0/app-readme.md +++ /dev/null @@ -1,8 +0,0 @@ -Looks and smells like Sonarr but made for music - -This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/lidarr](https://truecharts.org/charts/stable/lidarr) - ---- - -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/lidarr/19.2.0/charts/common-17.4.2.tgz b/stable/lidarr/19.2.0/charts/common-17.4.2.tgz deleted file mode 100644 index 31f3a104561f859f297067776ab86a1503525be4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100097 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 l8bLay74+E3;;+DksJU3 diff --git a/stable/lidarr/19.2.0/ix_values.yaml b/stable/lidarr/19.2.0/ix_values.yaml deleted file mode 100644 index cb96d5890a..0000000000 --- a/stable/lidarr/19.2.0/ix_values.yaml +++ /dev/null @@ -1,109 +0,0 @@ -image: - repository: ghcr.io/onedr0p/lidarr-develop - pullPolicy: IfNotPresent - tag: 2.1.7.4030@sha256:01d40bb9a759a3be757a9af235a14dafcef131b5014a6a2f4a32075b5fa940c5 -exportarrImage: - repository: ghcr.io/onedr0p/exportarr - pullPolicy: IfNotPresent - tag: v1.6.1@sha256:60cf3d44aa0b7dea2a65160b2e2e373c1ae38cd6b12a45fe81b8afa45ac31c22 -securityContext: - container: - readOnlyRootFilesystem: false -service: - main: - ports: - main: - port: 8686 - metrics: - enabled: true - type: ClusterIP - targetSelector: exportarr - ports: - metrics: - enabled: true - port: 8687 - targetSelector: exportarr -workload: - main: - podSpec: - containers: - main: - probes: - liveness: - enabled: true - type: http - path: /ping - readiness: - enabled: true - type: http - path: /ping - startup: - enabled: true - type: http - path: /ping - env: - LIDARR__PORT: "{{ .Values.service.main.ports.main.port }}" - LIDARR__AUTHENTICATION_METHOD: "" - exportarr: - enabled: true - type: Deployment - strategy: RollingUpdate - replicas: 1 - podSpec: - containers: - exportarr: - primary: true - enabled: true - imageSelector: exportarrImage - args: - - lidarr - 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 - CONFIG: "/config/config.xml" -persistence: - config: - enabled: true - targetSelector: - main: - main: - mountPath: /config - exportarr: - exportarr: - mountPath: /config - readOnly: true -metrics: - main: - enabled: true - type: "servicemonitor" - endpoints: - - port: metrics - path: /metrics - targetSelector: metrics - prometheusRule: - enabled: false -portal: - open: - enabled: true -updated: true diff --git a/stable/lidarr/19.2.0/questions.yaml b/stable/lidarr/19.2.0/questions.yaml deleted file mode 100755 index ef193035d0..0000000000 --- a/stable/lidarr/19.2.0/questions.yaml +++ /dev/null @@ -1,2927 +0,0 @@ -groups: - - name: Container Image - description: Image to be used for container - - name: General Settings - description: General Deployment Settings - - name: Workload Settings - description: Workload Settings - - name: App Configuration - description: App Specific Config Options - - name: Networking and Services - description: Configure Network and Services for Container - - name: Storage and Persistence - description: Persist and Share Data that is Separate from the Container - - name: Ingress - description: Ingress Configuration - - name: Security and Permissions - description: Configure Security Context and Permissions - - name: Resources and Devices - description: "Specify Resources/Devices to be Allocated to Workload" - - name: Middlewares - description: Traefik Middlewares - - name: Metrics - description: Metrics - - name: Addons - description: Addon Configuration - - name: Backup Configuration - description: Configure Velero Backup Schedule - - name: Advanced - description: Advanced Configuration - - name: Postgresql - description: Postgresql - - name: Documentation - description: Documentation - -portals: - open: - protocols: - - "$kubernetes-resource_configmap_tcportal-open_protocol" - host: - - "$kubernetes-resource_configmap_tcportal-open_host" - ports: - - "$kubernetes-resource_configmap_tcportal-open_port" - -questions: - - variable: global - group: General Settings - label: "Global Settings" - schema: - additional_attrs: true - type: dict - attrs: - - variable: stopAll - label: Stop All - description: "Stops All Running pods and hibernates cnpg" - schema: - type: boolean - default: false - - - variable: workload - group: "Workload Settings" - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: main - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: type - label: Type (Advanced) - schema: - type: string - default: Deployment - enum: - - value: Deployment - description: Deployment - - value: DaemonSet - description: DaemonSet - - - variable: replicas - label: Replicas (Advanced) - description: Set the number of Replicas - schema: - type: int - show_if: [["type", "!=", "DaemonSet"]] - default: 1 - - - variable: podSpec - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: containers - label: Containers - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: Main Container - schema: - additional_attrs: true - type: dict - attrs: - - - variable: env - group: App Configuration - label: Image Environment - schema: - additional_attrs: true - type: dict - attrs: - - variable: LIDARR__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 Settings" - schema: - type: string - default: "Etc/UTC" - $ref: - - "definitions/timezone" - - - variable: podOptions - group: "General Settings" - label: "Global Pod Options (Advanced)" - schema: - additional_attrs: true - type: dict - attrs: - - variable: expertPodOpts - label: "Expert - Pod Options" - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hostNetwork - label: "Host Networking" - schema: - type: boolean - default: false - - variable: dnsConfig - label: "DNS Configuration" - schema: - type: dict - additional_attrs: true - attrs: - - variable: options - label: "Options" - schema: - type: list - default: [{"name": "ndots", "value": "1"}] - items: - - variable: optionsEntry - label: "Option Entry" - schema: - type: dict - additional_attrs: true - attrs: - - variable: name - label: "Name" - schema: - type: string - required: true - - variable: value - label: "Value" - schema: - type: string - - variable: nameservers - label: "Nameservers" - schema: - type: list - default: [] - items: - - variable: nsEntry - label: "Nameserver Entry" - schema: - type: string - required: true - - variable: searches - label: "Searches" - schema: - type: list - default: [] - items: - - variable: searchEntry - label: "Search Entry" - schema: - type: string - required: true - - - variable: imagePullSecretList - group: "General Settings" - label: "Image Pull Secrets" - schema: - type: list - default: [] - items: - - variable: pullsecretentry - label: "Pull Secret" - schema: - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: true - - variable: data - label: Data - schema: - type: dict - additional_attrs: true - attrs: - - variable: registry - label: "Registry" - schema: - type: string - required: true - default: "https://index.docker.io/v1/" - - variable: username - label: "Username" - schema: - type: string - required: true - default: "" - - variable: password - label: "Password" - schema: - type: string - required: true - private: true - default: "" - - variable: email - label: "Email" - schema: - type: string - required: true - default: "" - - - variable: service - group: Networking and Services - label: Configure Service(s) - schema: - additional_attrs: true - type: dict - attrs: - - - variable: 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: 8686 - required: true - - variable: serviceexpert - group: Networking and Services - label: Show Expert Config - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - - variable: scaleExternalInterface - description: Add External Interfaces - label: Add external Interfaces - group: Networking - schema: - type: list - items: - - variable: interfaceConfiguration - description: Interface Configuration - label: Interface Configuration - schema: - additional_attrs: true - type: dict - $ref: - - "normalize/interfaceConfiguration" - attrs: - - variable: hostInterface - description: Please Specify Host Interface - label: Host Interface - schema: - type: string - required: true - $ref: - - "definitions/interface" - - variable: ipam - description: Define how IP Address will be managed - label: IP Address Management - schema: - additional_attrs: true - type: dict - required: true - attrs: - - variable: type - description: Specify type for IPAM - label: IPAM Type - schema: - type: string - required: true - enum: - - value: dhcp - description: Use DHCP - - value: static - description: Use Static IP - - variable: staticIPConfigurations - label: Static IP Addresses - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticIP - label: Static IP - schema: - type: ipaddr - cidr: true - - variable: staticRoutes - label: Static Routes - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticRouteConfiguration - label: Static Route Configuration - schema: - additional_attrs: true - type: dict - attrs: - - variable: destination - label: Destination - schema: - type: ipaddr - cidr: true - required: true - - variable: gateway - label: Gateway - schema: - type: ipaddr - cidr: false - required: true - - - variable: serviceList - label: Add Manual Custom Services - group: Networking and Services - schema: - type: list - default: [] - items: - - variable: serviceListEntry - label: Custom Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the service - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: LoadBalancer - description: LoadBalancer (Expose Ports) - - value: ClusterIP - description: ClusterIP (Do Not Expose Ports) - - value: Simple - description: Deprecated CHANGE THIS - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: advancedsvcset - label: Show Advanced Service Settings - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: externalIPs - label: "External IP's" - description: "External IP's" - schema: - type: list - default: [] - items: - - variable: externalIP - label: External IP - schema: - type: string - - variable: ipFamilyPolicy - label: IP Family Policy - description: Specify the IP Policy - schema: - type: string - default: SingleStack - enum: - - value: SingleStack - description: SingleStack - - value: PreferDualStack - description: PreferDualStack - - value: RequireDualStack - description: RequireDualStack - - variable: ipFamilies - label: IP Families - description: (Advanced) The IP Families that should be used - schema: - type: list - default: [] - items: - - variable: ipFamily - label: IP Family - schema: - type: string - - variable: portsList - label: Additional Service Ports - schema: - type: list - default: [] - items: - - variable: portsListEntry - label: Custom ports - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Port - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Port Name - schema: - type: string - default: "" - - variable: protocol - label: Port Type - schema: - type: string - default: tcp - enum: - - value: http - description: HTTP - - value: https - description: HTTPS - - value: tcp - description: TCP - - value: udp - description: UDP - - variable: targetPort - label: Target Port - description: This port exposes the container port on the service - schema: - type: int - required: true - - variable: port - label: Container Port - schema: - type: int - required: true - - - variable: persistence - label: Integrated Persistent Storage - description: Integrated Persistent Storage - group: Storage and 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: 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: Storage and Persistence - schema: - type: list - default: [] - items: - - variable: persistenceListEntry - label: Custom Storage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the storage - schema: - type: boolean - default: true - hidden: true - - variable: type - label: Type of Storage - description: Sets the persistence type, Anything other than PVC could break rollback! - schema: - type: string - default: hostPath - enum: - - value: pvc - description: PVC - - value: hostPath - description: Host Path - - value: emptyDir - description: emptyDir - - value: nfs - description: NFS Share - - variable: server - label: NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: path - label: Path on NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: iscsi - label: iSCSI Options - schema: - show_if: [["type", "=", "iscsi"]] - type: dict - additional_attrs: true - attrs: - - variable: targetPortal - label: targetPortal - schema: - type: string - required: true - default: "" - - variable: iqn - label: iqn - schema: - type: string - required: true - default: "" - - variable: lun - label: lun - schema: - type: int - default: 0 - - variable: authSession - label: authSession - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: authDiscovery - label: authDiscovery - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: autoPermissions - label: Automatic Permissions Configuration - description: Automatically set permissions - schema: - show_if: [["type", "!=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: chown - label: Run CHOWN - description: | - It will run CHOWN on the path with the given fsGroup - schema: - type: boolean - default: false - - variable: chmod - label: Run CHMOD - description: | - It will run CHMOD on the path with the given value
- Format should be 3 digits, e.g. 770 - schema: - type: string - valid_chars: '[0-9]{3}' - default: "" - - variable: recursive - label: Recursive - description: | - It will run CHOWN and CHMOD recursively - schema: - type: boolean - default: false - - variable: readOnly - label: Read Only - schema: - type: boolean - default: false - - variable: hostPath - label: Host Path - description: Path inside the container the storage is mounted - schema: - show_if: [["type", "=", "hostPath"]] - type: hostpath - - variable: mountPath - label: Mount Path - description: Path inside the container the storage is mounted - schema: - type: string - default: "" - required: true - valid_chars: '^\/([a-zA-Z0-9._-]+(\s?[a-zA-Z0-9._-]+|\/?))+$' - - variable: medium - label: EmptyDir Medium - schema: - show_if: [["type", "=", "emptyDir"]] - type: string - default: "" - enum: - - value: "" - description: Default - - value: Memory - description: Memory - - variable: size - label: Size Quotum of Storage - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: 256Gi - - variable: storageClass - label: 'storageClass (Advanced)' - description: 'sets the storageClass to something other than iX default. Only for advanced usecases!' - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: "" - - variable: static - label: 'Static Fixed PVC Bindings (Experimental)' - description: Link a PVC to a specific storage location - schema: - show_if: [["type", "=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: mode - label: mode - description: | - disabled: use normal dynamic PVCs - smb: connect to an SMB share - nfs: connect to an NFS share - schema: - type: string - default: "disabled" - enum: - - value: "disabled" - description: disabled - - value: smb - description: smb - - value: nfs - description: nfs - - variable: server - label: Server - description: server to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "myserver" - - variable: share - label: Share - description: share to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "/myshare" - - variable: user - label: User - description: connecting user - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "myuser" - - variable: domain - label: Domain - description: user domain - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: password - label: Password - description: connecting password - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: volumeSnapshots - label: 'Volume Snapshots (Experimental)' - description: Add an entry to the list to force creation of a volumeSnapshot of this PVC - schema: - show_if: [["type", "=", "pvc"]] - type: list - default: [] - items: - - variable: volumeSnapshotEntry - label: Custom volumeSnapshot - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - description: 'WARNING: renaming this, means deletion of the snapshot with the old name!' - schema: - type: string - default: "mysnapshot" - required: true - - variable: volumeSnapshotClassName - label: 'volumeSnapshot Class Name (Advanced)' - description: For use with PVCs using a non-default storageClass - schema: - type: string - default: "" - - - variable: ingress - label: "" - group: Ingress - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: "Main Ingress" - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name (Optional) - description: Defaults to chart name - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description (Optional) - description: Defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: icon - label: Icon (Optional) - description: Defaults to chart icon - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - variable: widget - label: Widget Settings - schema: - type: dict - additional_attrs: true - show_if: [["enabled", "=", true]] - attrs: - - variable: enabled - label: Enable Widget - description: When disabled all widget annotations are skipped. - schema: - type: boolean - default: true - - variable: custom - label: Options - schema: - type: dict - additional_attrs: true - attrs: - - variable: key - label: API-key (key) - schema: - type: string - default: "" - - variable: customkv - label: Custom Options - schema: - type: list - default: [] - items: - - variable: option - label: Option - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - default: "" - required: true - - variable: value - label: Value - schema: - type: string - default: "" - required: true - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - - variable: ingressList - label: Add Manual Custom Ingresses - group: Ingress - schema: - type: list - default: [] - items: - - variable: ingressListEntry - label: Custom Ingress - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: ingressClassName - label: IngressClass Name - schema: - type: string - default: "" - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: overrideService - label: Linked Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Service Name - schema: - type: string - default: "" - - variable: port - label: Service Port - schema: - type: int - - variable: tls - label: TLS-Settings - schema: - type: list - default: [] - show_if: [["certificateIssuer", "=", ""]] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your Cert-Manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: Use Custom Secret (Advanced) - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: "Allow Cross Origin Requests" - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: namespace - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description - description: defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - - variable: securityContext - group: Security and Permissions - label: Security Context - schema: - additional_attrs: true - type: dict - attrs: - - variable: container - label: Container - schema: - additional_attrs: true - type: dict - attrs: - # Settings from questions.yaml get appended here on a per-app basis - - - variable: runAsUser - label: "runAsUser" - description: "The UserID of the user running the application" - schema: - type: int - default: 568 - - variable: runAsGroup - label: "runAsGroup" - description: "The groupID 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 and Devices - label: "Resource Limits" - schema: - additional_attrs: true - type: dict - attrs: - - variable: limits - label: Advanced Limit Resource Consumption - schema: - additional_attrs: true - type: dict - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 4000m - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: RAM - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 8Gi - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: 'intel.com/i915' - label: Add Intel i915 GPUs - schema: - type: int - default: 0 - - variable: 'nvidia.com/gpu' - label: Add NVIDIA GPUs (Experimental) - schema: - type: int - default: 0 - - variable: 'amd.com/gpu' - label: Add AMD GPUs - schema: - type: int - default: 0 - - variable: requests - label: "Minimum Resources Required (request)" - schema: - additional_attrs: true - type: dict - hidden: true - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 10m - hidden: true - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: "RAM" - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 50Mi - hidden: true - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: deviceList - label: Mount USB Devices - group: Resources and Devices - schema: - type: list - default: [] - items: - - variable: deviceListEntry - label: Device - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Storage - schema: - type: boolean - default: true - - variable: type - label: (Advanced) Type of Storage - description: Sets the persistence type - schema: - type: string - default: device - hidden: true - - variable: readOnly - label: readOnly - schema: - type: boolean - default: false - - variable: hostPath - label: Host Device Path - description: Path to the device on the host system - schema: - type: path - - variable: mountPath - label: Container Device Path - description: Path inside the container the device is mounted - schema: - type: string - default: "/dev/ttyACM0" - - variable: scaleGPU - label: GPU Configuration - group: Resources and Devices - schema: - type: list - default: [] - items: - - variable: scaleGPUEntry - label: GPU - schema: - additional_attrs: true - type: dict - attrs: - # Specify GPU configuration - - variable: gpu - label: Select GPU - schema: - additional_attrs: true - type: dict - $ref: - - "definitions/gpuConfiguration" - attrs: [] - - variable: workaround - label: "Workaround" - schema: - type: string - default: workaround - hidden: true - - - variable: metrics - group: Metrics - label: Prometheus Metrics - schema: - additional_attrs: true - type: dict - attrs: - - variable: main - label: Main Metrics - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - description: Enable Prometheus Metrics - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - - variable: prometheusRule - label: PrometheusRule - description: Enable and configure Prometheus Rules for the App. - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - description: Enable Prometheus Metrics - schema: - type: boolean - default: false - # TODO: Rule List section - -# - variable: horizontalPodAutoscaler -# group: Advanced -# label: (Advanced) Horizontal Pod Autoscaler -# schema: -# type: list -# default: [] -# items: -# - variable: hpaEntry -# label: HPA Entry -# schema: -# additional_attrs: true -# type: dict -# attrs: -# - variable: name -# label: Name -# schema: -# type: string -# required: true -# default: "" -# - variable: enabled -# label: Enabled -# schema: -# type: boolean -# default: false -# show_subquestions_if: true -# subquestions: -# - variable: target -# label: Target -# description: Deployment name, Defaults to Main Deployment -# schema: -# type: string -# default: "" -# - variable: minReplicas -# label: Minimum Replicas -# schema: -# type: int -# default: 1 -# - variable: maxReplicas -# label: Maximum Replicas -# schema: -# type: int -# default: 5 -# - variable: targetCPUUtilizationPercentage -# label: Target CPU Utilization Percentage -# schema: -# type: int -# default: 80 -# - variable: targetMemoryUtilizationPercentage -# label: Target Memory Utilization Percentage -# schema: -# type: int -# default: 80 - - variable: networkPolicy - group: Advanced - label: (Advanced) Network Policy - schema: - type: list - default: [] - items: - - variable: netPolicyEntry - label: Network Policy Entry - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - default: "" - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: policyType - label: Policy Type - schema: - type: string - default: "" - enum: - - value: "" - description: Default - - value: ingress - description: Ingress - - value: egress - description: Egress - - value: ingress-egress - description: Ingress and Egress - - variable: egress - label: Egress - schema: - type: list - default: [] - items: - - variable: egressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: to - label: To - schema: - type: list - default: [] - items: - - variable: toEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - variable: ingress - label: Ingress - schema: - type: list - default: [] - items: - - variable: ingressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: from - label: From - schema: - type: list - default: [] - items: - - variable: fromEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - - variable: addons - group: Addons - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: codeserver - label: Codeserver - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: service - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: NodePort - description: Deprecated CHANGE THIS - - value: ClusterIP - description: ClusterIP - - value: LoadBalancer - description: LoadBalancer - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: ports - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: codeserver - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - default: 36107 - - variable: ingress - label: "Ingress" - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - variable: scaleCert - label: 'Use TrueNAS SCALE Certificate (Deprecated)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: int - $ref: - - "definitions/certificate" - - variable: envList - label: Codeserver Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: netshoot - label: Netshoot - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: envList - label: Netshoot Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: vpn - label: VPN - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Type - schema: - type: string - default: disabled - enum: - - value: disabled - description: disabled - - value: gluetun - description: Gluetun - - value: tailscale - description: Tailscale - - value: openvpn - description: OpenVPN (Deprecated) - - value: wireguard - description: Wireguard (Deprecated) - - variable: openvpn - label: OpenVPN Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "openvpn"]] - attrs: - - variable: username - label: Authentication Username (Optional) - description: Authentication Username, Optional - schema: - type: string - default: "" - - variable: password - label: Authentication Password - description: Authentication Credentials - schema: - type: string - show_if: [["username", "!=", ""]] - default: "" - required: true - - variable: tailscale - label: Tailscale Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "tailscale"]] - attrs: - - variable: authkey - label: Authentication Key - description: Provide an auth key to automatically authenticate the node as your user account. - schema: - type: string - private: true - default: "" - - variable: auth_once - label: Auth Once - description: Only attempt to log in if not already logged in. - schema: - type: boolean - default: true - - variable: accept_dns - label: Accept DNS - description: Accept DNS configuration from the admin console. - schema: - type: boolean - default: false - - variable: userspace - label: Userspace - description: Userspace Networking mode allows running Tailscale where you do not have access to create a VPN tunnel device. - schema: - type: boolean - default: false - - variable: routes - label: Routes - description: Expose physical subnet routes to your entire Tailscale network. - schema: - type: string - default: "" - - variable: dest_ip - label: Destination IP - description: Tells the DNAT mechanism which Destination IP to set in the IP header, and where to send packets that are matched. - schema: - type: string - default: "" - - variable: sock5_server - label: Sock5 Server - description: The address on which to listen for SOCKS5 proxying into the tailscale net. - schema: - type: string - default: "" - - variable: outbound_http_proxy_listen - label: Outbound HTTP Proxy Listen - description: The address on which to listen for HTTP proxying into the tailscale net. - schema: - type: string - default: "" - - variable: extra_args - label: Extra Args - description: Extra Args - schema: - type: string - default: "" - - variable: daemon_extra_args - label: Tailscale Daemon Extra Args - description: Tailscale Daemon Extra Args - schema: - type: string - default: "" - - variable: killSwitch - label: Enable Killswitch - schema: - type: boolean - show_if: [["type", "!=", "disabled"]] - default: true - - variable: excludedNetworks_IPv4 - label: Killswitch Excluded IPv4 networks - description: List of Killswitch Excluded IPv4 Addresses - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv4 - label: IPv4 Network - schema: - type: string - required: true - - variable: excludedNetworks_IPv6 - label: Killswitch Excluded IPv6 networks - description: "List of Killswitch Excluded IPv6 Addresses" - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv6 - label: IPv6 Network - schema: - type: string - required: true - - variable: configFile - label: VPN Config File Location - schema: - type: string - show_if: [["type", "!=", "disabled"]] - default: "" - - - variable: envList - label: VPN Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - max_length: 10240 - - - variable: docs - group: Documentation - label: Please read the documentation at https://truecharts.org - description: Please read the documentation at -
https://truecharts.org - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDocs - label: I have checked the documentation - schema: - type: boolean - default: true - - variable: donateNag - group: Documentation - label: Please consider supporting TrueCharts, see https://truecharts.org/sponsor - description: Please consider supporting TrueCharts, see -
https://truecharts.org/sponsor - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDonate - label: I have considered donating - schema: - type: boolean - default: true - hidden: true - diff --git a/stable/lidarr/19.2.0/templates/NOTES.txt b/stable/lidarr/19.2.0/templates/NOTES.txt deleted file mode 100644 index efcb74cb77..0000000000 --- a/stable/lidarr/19.2.0/templates/NOTES.txt +++ /dev/null @@ -1 +0,0 @@ -{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/lidarr/19.2.0/templates/common.yaml b/stable/lidarr/19.2.0/templates/common.yaml deleted file mode 100644 index 3c93f57861..0000000000 --- a/stable/lidarr/19.2.0/templates/common.yaml +++ /dev/null @@ -1,11 +0,0 @@ -{{/* Make sure all variables are set properly */}} -{{- include "tc.v1.common.loader.init" . -}} - -{{/* Disable [exportarr] if requested */}} -{{- if not .Values.metrics.main.enabled -}} - {{- $_ := set .Values.workload.exportarr "enabled" false -}} - {{- $_ := set .Values.service.metrics "enabled" false -}} -{{- end -}} - -{{/* Render the templates */}} -{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/lidarr/19.2.0/values.yaml b/stable/lidarr/19.2.0/values.yaml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/stable/lidarr/19.3.0/.helmignore b/stable/lidarr/19.3.0/.helmignore deleted file mode 100644 index 77ca5567b2..0000000000 --- a/stable/lidarr/19.3.0/.helmignore +++ /dev/null @@ -1,30 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ -# OWNERS file for Kubernetes -OWNERS -# helm-docs templates -*.gotmpl -# docs folder -/docs -# icon -icon.png diff --git a/stable/lidarr/19.3.0/CHANGELOG.md b/stable/lidarr/19.3.0/CHANGELOG.md deleted file mode 100644 index 3060a388e2..0000000000 --- a/stable/lidarr/19.3.0/CHANGELOG.md +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: Changelog ---- - - -*for the complete changelog, please refer to the website* - -**Important:** - - - - -## [lidarr-19.1.19](https://github.com/truecharts/charts/compare/lidarr-19.1.18...lidarr-19.1.19) (2024-02-12) - -### Chore - - - -- update container image ghcr.io/onedr0p/lidarr-develop to v2.1.7.4030[@01d40bb](https://github.com/01d40bb) by renovate ([#18169](https://github.com/truecharts/charts/issues/18169)) - - -## [lidarr-19.1.18](https://github.com/truecharts/charts/compare/lidarr-19.1.17...lidarr-19.1.18) (2024-02-05) - -### Chore - - - -- update container image ghcr.io/onedr0p/lidarr-develop to 2.1.6.3993[@36b75d7](https://github.com/36b75d7) by renovate ([#17955](https://github.com/truecharts/charts/issues/17955)) - - -## [lidarr-19.1.17](https://github.com/truecharts/charts/compare/lidarr-19.1.16...lidarr-19.1.17) (2024-02-05) - -### Chore - - - -- update container image ghcr.io/onedr0p/lidarr-develop to v2.1.6.3993[@90ddf2d](https://github.com/90ddf2d) by renovate ([#17914](https://github.com/truecharts/charts/issues/17914)) - - -## [lidarr-19.1.16](https://github.com/truecharts/charts/compare/lidarr-19.1.15...lidarr-19.1.16) (2024-02-03) - -### Chore - - - -- update container image common to v17.2.30[@19ad5ec](https://github.com/19ad5ec) by renovate ([#17804](https://github.com/truecharts/charts/issues/17804)) - - -## [lidarr-19.1.15](https://github.com/truecharts/charts/compare/lidarr-19.1.14...lidarr-19.1.15) (2024-01-29) - -### Chore - - - -- update container image ghcr.io/onedr0p/exportarr to v1.6.1[@60cf3d4](https://github.com/60cf3d4) by renovate ([#17725](https://github.com/truecharts/charts/issues/17725)) - - -## [lidarr-19.1.14](https://github.com/truecharts/charts/compare/lidarr-19.1.13...lidarr-19.1.14) (2024-01-29) - -### Chore - - - -- update container image ghcr.io/onedr0p/lidarr-develop to v2.1.4.3941[@de7dac0](https://github.com/de7dac0) by renovate ([#17674](https://github.com/truecharts/charts/issues/17674)) - - -## [lidarr-19.1.13](https://github.com/truecharts/charts/compare/lidarr-19.1.12...lidarr-19.1.13) (2024-01-26) - -### Chore - - - -- update container image common to v17.2.29[@d7c41a3](https://github.com/d7c41a3) by renovate ([#17545](https://github.com/truecharts/charts/issues/17545)) - - -## [lidarr-19.1.12](https://github.com/truecharts/charts/compare/lidarr-19.1.11...lidarr-19.1.12) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.28[@918b4c5](https://github.com/918b4c5) by renovate ([#17478](https://github.com/truecharts/charts/issues/17478)) - - -## [lidarr-19.1.11](https://github.com/truecharts/charts/compare/lidarr-19.1.10...lidarr-19.1.11) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.26[@24c98f7](https://github.com/24c98f7) by renovate ([#17409](https://github.com/truecharts/charts/issues/17409)) - - -## [lidarr-19.1.10](https://github.com/truecharts/charts/compare/lidarr-19.1.9...lidarr-19.1.10) (2024-01-21) - -### Chore - - - -- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) \ No newline at end of file diff --git a/stable/lidarr/19.3.0/Chart.yaml b/stable/lidarr/19.3.0/Chart.yaml deleted file mode 100644 index fd2d65a043..0000000000 --- a/stable/lidarr/19.3.0/Chart.yaml +++ /dev/null @@ -1,38 +0,0 @@ -annotations: - max_scale_version: 24.04.0 - min_scale_version: 23.10.0 - truecharts.org/category: media - truecharts.org/max_helm_version: "3.14" - truecharts.org/min_helm_version: "3.12" - truecharts.org/train: stable -apiVersion: v2 -appVersion: 2.1.7.4030 -dependencies: - - name: common - version: 17.5.1 - repository: oci://tccr.io/truecharts - condition: "" - alias: "" - tags: [] - import-values: [] -deprecated: false -description: Looks and smells like Sonarr but made for music -home: https://truecharts.org/charts/stable/lidarr -icon: https://truecharts.org/img/hotlink-ok/chart-icons/lidarr.png -keywords: - - lidarr - - torrent - - usenet -kubeVersion: ">=1.24.0-0" -maintainers: - - name: TrueCharts - email: info@truecharts.org - url: https://truecharts.org -name: lidarr -sources: - - https://github.com/Lidarr/Lidarr - - https://github.com/truecharts/charts/tree/master/charts/stable/lidarr - - https://ghcr.io/onedr0p/lidarr-develop - - https://ghcr.io/onedr0p/exportarr -type: application -version: 19.3.0 diff --git a/stable/lidarr/19.3.0/README.md b/stable/lidarr/19.3.0/README.md deleted file mode 100644 index 5dd4de9f50..0000000000 --- a/stable/lidarr/19.3.0/README.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: README ---- - -## General Info - -TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. -However only installations using the TrueNAS SCALE Apps system are supported. - -For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/lidarr) - -**This chart is not maintained by the upstream project and any issues with the chart should be raised [here](https://github.com/truecharts/charts/issues/new/choose)** - -## Support - -- Please check our [quick-start guides for TrueNAS SCALE](https://truecharts.org/manual/SCALE/guides/scale-intro). -- See the [Website](https://truecharts.org) -- Check our [Discord](https://discord.gg/tVsPTHWTtr) -- Open a [issue](https://github.com/truecharts/charts/issues/new/choose) - ---- - -## Sponsor TrueCharts - -TrueCharts can only exist due to the incredible effort of our staff. -Please consider making a [donation](https://truecharts.org/sponsor) or contributing back to the project any way you can! - -_All Rights Reserved - The TrueCharts Project_ diff --git a/stable/lidarr/19.3.0/app-readme.md b/stable/lidarr/19.3.0/app-readme.md deleted file mode 100644 index ab0ee61c1d..0000000000 --- a/stable/lidarr/19.3.0/app-readme.md +++ /dev/null @@ -1,8 +0,0 @@ -Looks and smells like Sonarr but made for music - -This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/lidarr](https://truecharts.org/charts/stable/lidarr) - ---- - -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/lidarr/19.3.0/charts/common-17.5.0.tgz b/stable/lidarr/19.3.0/charts/common-17.5.0.tgz deleted file mode 100644 index 3a5534883aaac1a331bf10ad166cff7fe5d2dd75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100452 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 z 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 Wm9Bh-<^K-=0RR7ge;?HVjtl_2wPFzf diff --git a/stable/lidarr/19.3.0/ix_values.yaml b/stable/lidarr/19.3.0/ix_values.yaml deleted file mode 100644 index cb96d5890a..0000000000 --- a/stable/lidarr/19.3.0/ix_values.yaml +++ /dev/null @@ -1,109 +0,0 @@ -image: - repository: ghcr.io/onedr0p/lidarr-develop - pullPolicy: IfNotPresent - tag: 2.1.7.4030@sha256:01d40bb9a759a3be757a9af235a14dafcef131b5014a6a2f4a32075b5fa940c5 -exportarrImage: - repository: ghcr.io/onedr0p/exportarr - pullPolicy: IfNotPresent - tag: v1.6.1@sha256:60cf3d44aa0b7dea2a65160b2e2e373c1ae38cd6b12a45fe81b8afa45ac31c22 -securityContext: - container: - readOnlyRootFilesystem: false -service: - main: - ports: - main: - port: 8686 - metrics: - enabled: true - type: ClusterIP - targetSelector: exportarr - ports: - metrics: - enabled: true - port: 8687 - targetSelector: exportarr -workload: - main: - podSpec: - containers: - main: - probes: - liveness: - enabled: true - type: http - path: /ping - readiness: - enabled: true - type: http - path: /ping - startup: - enabled: true - type: http - path: /ping - env: - LIDARR__PORT: "{{ .Values.service.main.ports.main.port }}" - LIDARR__AUTHENTICATION_METHOD: "" - exportarr: - enabled: true - type: Deployment - strategy: RollingUpdate - replicas: 1 - podSpec: - containers: - exportarr: - primary: true - enabled: true - imageSelector: exportarrImage - args: - - lidarr - 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 - CONFIG: "/config/config.xml" -persistence: - config: - enabled: true - targetSelector: - main: - main: - mountPath: /config - exportarr: - exportarr: - mountPath: /config - readOnly: true -metrics: - main: - enabled: true - type: "servicemonitor" - endpoints: - - port: metrics - path: /metrics - targetSelector: metrics - prometheusRule: - enabled: false -portal: - open: - enabled: true -updated: true diff --git a/stable/lidarr/19.3.0/questions.yaml b/stable/lidarr/19.3.0/questions.yaml deleted file mode 100755 index ef193035d0..0000000000 --- a/stable/lidarr/19.3.0/questions.yaml +++ /dev/null @@ -1,2927 +0,0 @@ -groups: - - name: Container Image - description: Image to be used for container - - name: General Settings - description: General Deployment Settings - - name: Workload Settings - description: Workload Settings - - name: App Configuration - description: App Specific Config Options - - name: Networking and Services - description: Configure Network and Services for Container - - name: Storage and Persistence - description: Persist and Share Data that is Separate from the Container - - name: Ingress - description: Ingress Configuration - - name: Security and Permissions - description: Configure Security Context and Permissions - - name: Resources and Devices - description: "Specify Resources/Devices to be Allocated to Workload" - - name: Middlewares - description: Traefik Middlewares - - name: Metrics - description: Metrics - - name: Addons - description: Addon Configuration - - name: Backup Configuration - description: Configure Velero Backup Schedule - - name: Advanced - description: Advanced Configuration - - name: Postgresql - description: Postgresql - - name: Documentation - description: Documentation - -portals: - open: - protocols: - - "$kubernetes-resource_configmap_tcportal-open_protocol" - host: - - "$kubernetes-resource_configmap_tcportal-open_host" - ports: - - "$kubernetes-resource_configmap_tcportal-open_port" - -questions: - - variable: global - group: General Settings - label: "Global Settings" - schema: - additional_attrs: true - type: dict - attrs: - - variable: stopAll - label: Stop All - description: "Stops All Running pods and hibernates cnpg" - schema: - type: boolean - default: false - - - variable: workload - group: "Workload Settings" - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: main - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: type - label: Type (Advanced) - schema: - type: string - default: Deployment - enum: - - value: Deployment - description: Deployment - - value: DaemonSet - description: DaemonSet - - - variable: replicas - label: Replicas (Advanced) - description: Set the number of Replicas - schema: - type: int - show_if: [["type", "!=", "DaemonSet"]] - default: 1 - - - variable: podSpec - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: containers - label: Containers - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: Main Container - schema: - additional_attrs: true - type: dict - attrs: - - - variable: env - group: App Configuration - label: Image Environment - schema: - additional_attrs: true - type: dict - attrs: - - variable: LIDARR__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 Settings" - schema: - type: string - default: "Etc/UTC" - $ref: - - "definitions/timezone" - - - variable: podOptions - group: "General Settings" - label: "Global Pod Options (Advanced)" - schema: - additional_attrs: true - type: dict - attrs: - - variable: expertPodOpts - label: "Expert - Pod Options" - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hostNetwork - label: "Host Networking" - schema: - type: boolean - default: false - - variable: dnsConfig - label: "DNS Configuration" - schema: - type: dict - additional_attrs: true - attrs: - - variable: options - label: "Options" - schema: - type: list - default: [{"name": "ndots", "value": "1"}] - items: - - variable: optionsEntry - label: "Option Entry" - schema: - type: dict - additional_attrs: true - attrs: - - variable: name - label: "Name" - schema: - type: string - required: true - - variable: value - label: "Value" - schema: - type: string - - variable: nameservers - label: "Nameservers" - schema: - type: list - default: [] - items: - - variable: nsEntry - label: "Nameserver Entry" - schema: - type: string - required: true - - variable: searches - label: "Searches" - schema: - type: list - default: [] - items: - - variable: searchEntry - label: "Search Entry" - schema: - type: string - required: true - - - variable: imagePullSecretList - group: "General Settings" - label: "Image Pull Secrets" - schema: - type: list - default: [] - items: - - variable: pullsecretentry - label: "Pull Secret" - schema: - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: true - - variable: data - label: Data - schema: - type: dict - additional_attrs: true - attrs: - - variable: registry - label: "Registry" - schema: - type: string - required: true - default: "https://index.docker.io/v1/" - - variable: username - label: "Username" - schema: - type: string - required: true - default: "" - - variable: password - label: "Password" - schema: - type: string - required: true - private: true - default: "" - - variable: email - label: "Email" - schema: - type: string - required: true - default: "" - - - variable: service - group: Networking and Services - label: Configure Service(s) - schema: - additional_attrs: true - type: dict - attrs: - - - variable: 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: 8686 - required: true - - variable: serviceexpert - group: Networking and Services - label: Show Expert Config - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - - variable: scaleExternalInterface - description: Add External Interfaces - label: Add external Interfaces - group: Networking - schema: - type: list - items: - - variable: interfaceConfiguration - description: Interface Configuration - label: Interface Configuration - schema: - additional_attrs: true - type: dict - $ref: - - "normalize/interfaceConfiguration" - attrs: - - variable: hostInterface - description: Please Specify Host Interface - label: Host Interface - schema: - type: string - required: true - $ref: - - "definitions/interface" - - variable: ipam - description: Define how IP Address will be managed - label: IP Address Management - schema: - additional_attrs: true - type: dict - required: true - attrs: - - variable: type - description: Specify type for IPAM - label: IPAM Type - schema: - type: string - required: true - enum: - - value: dhcp - description: Use DHCP - - value: static - description: Use Static IP - - variable: staticIPConfigurations - label: Static IP Addresses - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticIP - label: Static IP - schema: - type: ipaddr - cidr: true - - variable: staticRoutes - label: Static Routes - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticRouteConfiguration - label: Static Route Configuration - schema: - additional_attrs: true - type: dict - attrs: - - variable: destination - label: Destination - schema: - type: ipaddr - cidr: true - required: true - - variable: gateway - label: Gateway - schema: - type: ipaddr - cidr: false - required: true - - - variable: serviceList - label: Add Manual Custom Services - group: Networking and Services - schema: - type: list - default: [] - items: - - variable: serviceListEntry - label: Custom Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the service - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: LoadBalancer - description: LoadBalancer (Expose Ports) - - value: ClusterIP - description: ClusterIP (Do Not Expose Ports) - - value: Simple - description: Deprecated CHANGE THIS - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: advancedsvcset - label: Show Advanced Service Settings - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: externalIPs - label: "External IP's" - description: "External IP's" - schema: - type: list - default: [] - items: - - variable: externalIP - label: External IP - schema: - type: string - - variable: ipFamilyPolicy - label: IP Family Policy - description: Specify the IP Policy - schema: - type: string - default: SingleStack - enum: - - value: SingleStack - description: SingleStack - - value: PreferDualStack - description: PreferDualStack - - value: RequireDualStack - description: RequireDualStack - - variable: ipFamilies - label: IP Families - description: (Advanced) The IP Families that should be used - schema: - type: list - default: [] - items: - - variable: ipFamily - label: IP Family - schema: - type: string - - variable: portsList - label: Additional Service Ports - schema: - type: list - default: [] - items: - - variable: portsListEntry - label: Custom ports - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Port - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Port Name - schema: - type: string - default: "" - - variable: protocol - label: Port Type - schema: - type: string - default: tcp - enum: - - value: http - description: HTTP - - value: https - description: HTTPS - - value: tcp - description: TCP - - value: udp - description: UDP - - variable: targetPort - label: Target Port - description: This port exposes the container port on the service - schema: - type: int - required: true - - variable: port - label: Container Port - schema: - type: int - required: true - - - variable: persistence - label: Integrated Persistent Storage - description: Integrated Persistent Storage - group: Storage and 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: 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: Storage and Persistence - schema: - type: list - default: [] - items: - - variable: persistenceListEntry - label: Custom Storage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the storage - schema: - type: boolean - default: true - hidden: true - - variable: type - label: Type of Storage - description: Sets the persistence type, Anything other than PVC could break rollback! - schema: - type: string - default: hostPath - enum: - - value: pvc - description: PVC - - value: hostPath - description: Host Path - - value: emptyDir - description: emptyDir - - value: nfs - description: NFS Share - - variable: server - label: NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: path - label: Path on NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: iscsi - label: iSCSI Options - schema: - show_if: [["type", "=", "iscsi"]] - type: dict - additional_attrs: true - attrs: - - variable: targetPortal - label: targetPortal - schema: - type: string - required: true - default: "" - - variable: iqn - label: iqn - schema: - type: string - required: true - default: "" - - variable: lun - label: lun - schema: - type: int - default: 0 - - variable: authSession - label: authSession - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: authDiscovery - label: authDiscovery - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: autoPermissions - label: Automatic Permissions Configuration - description: Automatically set permissions - schema: - show_if: [["type", "!=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: chown - label: Run CHOWN - description: | - It will run CHOWN on the path with the given fsGroup - schema: - type: boolean - default: false - - variable: chmod - label: Run CHMOD - description: | - It will run CHMOD on the path with the given value
- Format should be 3 digits, e.g. 770 - schema: - type: string - valid_chars: '[0-9]{3}' - default: "" - - variable: recursive - label: Recursive - description: | - It will run CHOWN and CHMOD recursively - schema: - type: boolean - default: false - - variable: readOnly - label: Read Only - schema: - type: boolean - default: false - - variable: hostPath - label: Host Path - description: Path inside the container the storage is mounted - schema: - show_if: [["type", "=", "hostPath"]] - type: hostpath - - variable: mountPath - label: Mount Path - description: Path inside the container the storage is mounted - schema: - type: string - default: "" - required: true - valid_chars: '^\/([a-zA-Z0-9._-]+(\s?[a-zA-Z0-9._-]+|\/?))+$' - - variable: medium - label: EmptyDir Medium - schema: - show_if: [["type", "=", "emptyDir"]] - type: string - default: "" - enum: - - value: "" - description: Default - - value: Memory - description: Memory - - variable: size - label: Size Quotum of Storage - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: 256Gi - - variable: storageClass - label: 'storageClass (Advanced)' - description: 'sets the storageClass to something other than iX default. Only for advanced usecases!' - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: "" - - variable: static - label: 'Static Fixed PVC Bindings (Experimental)' - description: Link a PVC to a specific storage location - schema: - show_if: [["type", "=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: mode - label: mode - description: | - disabled: use normal dynamic PVCs - smb: connect to an SMB share - nfs: connect to an NFS share - schema: - type: string - default: "disabled" - enum: - - value: "disabled" - description: disabled - - value: smb - description: smb - - value: nfs - description: nfs - - variable: server - label: Server - description: server to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "myserver" - - variable: share - label: Share - description: share to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "/myshare" - - variable: user - label: User - description: connecting user - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "myuser" - - variable: domain - label: Domain - description: user domain - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: password - label: Password - description: connecting password - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: volumeSnapshots - label: 'Volume Snapshots (Experimental)' - description: Add an entry to the list to force creation of a volumeSnapshot of this PVC - schema: - show_if: [["type", "=", "pvc"]] - type: list - default: [] - items: - - variable: volumeSnapshotEntry - label: Custom volumeSnapshot - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - description: 'WARNING: renaming this, means deletion of the snapshot with the old name!' - schema: - type: string - default: "mysnapshot" - required: true - - variable: volumeSnapshotClassName - label: 'volumeSnapshot Class Name (Advanced)' - description: For use with PVCs using a non-default storageClass - schema: - type: string - default: "" - - - variable: ingress - label: "" - group: Ingress - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: "Main Ingress" - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name (Optional) - description: Defaults to chart name - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description (Optional) - description: Defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: icon - label: Icon (Optional) - description: Defaults to chart icon - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - variable: widget - label: Widget Settings - schema: - type: dict - additional_attrs: true - show_if: [["enabled", "=", true]] - attrs: - - variable: enabled - label: Enable Widget - description: When disabled all widget annotations are skipped. - schema: - type: boolean - default: true - - variable: custom - label: Options - schema: - type: dict - additional_attrs: true - attrs: - - variable: key - label: API-key (key) - schema: - type: string - default: "" - - variable: customkv - label: Custom Options - schema: - type: list - default: [] - items: - - variable: option - label: Option - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - default: "" - required: true - - variable: value - label: Value - schema: - type: string - default: "" - required: true - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - - variable: ingressList - label: Add Manual Custom Ingresses - group: Ingress - schema: - type: list - default: [] - items: - - variable: ingressListEntry - label: Custom Ingress - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: ingressClassName - label: IngressClass Name - schema: - type: string - default: "" - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: overrideService - label: Linked Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Service Name - schema: - type: string - default: "" - - variable: port - label: Service Port - schema: - type: int - - variable: tls - label: TLS-Settings - schema: - type: list - default: [] - show_if: [["certificateIssuer", "=", ""]] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your Cert-Manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: Use Custom Secret (Advanced) - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: "Allow Cross Origin Requests" - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: namespace - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description - description: defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - - variable: securityContext - group: Security and Permissions - label: Security Context - schema: - additional_attrs: true - type: dict - attrs: - - variable: container - label: Container - schema: - additional_attrs: true - type: dict - attrs: - # Settings from questions.yaml get appended here on a per-app basis - - - variable: runAsUser - label: "runAsUser" - description: "The UserID of the user running the application" - schema: - type: int - default: 568 - - variable: runAsGroup - label: "runAsGroup" - description: "The groupID 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 and Devices - label: "Resource Limits" - schema: - additional_attrs: true - type: dict - attrs: - - variable: limits - label: Advanced Limit Resource Consumption - schema: - additional_attrs: true - type: dict - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 4000m - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: RAM - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 8Gi - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: 'intel.com/i915' - label: Add Intel i915 GPUs - schema: - type: int - default: 0 - - variable: 'nvidia.com/gpu' - label: Add NVIDIA GPUs (Experimental) - schema: - type: int - default: 0 - - variable: 'amd.com/gpu' - label: Add AMD GPUs - schema: - type: int - default: 0 - - variable: requests - label: "Minimum Resources Required (request)" - schema: - additional_attrs: true - type: dict - hidden: true - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 10m - hidden: true - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: "RAM" - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 50Mi - hidden: true - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: deviceList - label: Mount USB Devices - group: Resources and Devices - schema: - type: list - default: [] - items: - - variable: deviceListEntry - label: Device - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Storage - schema: - type: boolean - default: true - - variable: type - label: (Advanced) Type of Storage - description: Sets the persistence type - schema: - type: string - default: device - hidden: true - - variable: readOnly - label: readOnly - schema: - type: boolean - default: false - - variable: hostPath - label: Host Device Path - description: Path to the device on the host system - schema: - type: path - - variable: mountPath - label: Container Device Path - description: Path inside the container the device is mounted - schema: - type: string - default: "/dev/ttyACM0" - - variable: scaleGPU - label: GPU Configuration - group: Resources and Devices - schema: - type: list - default: [] - items: - - variable: scaleGPUEntry - label: GPU - schema: - additional_attrs: true - type: dict - attrs: - # Specify GPU configuration - - variable: gpu - label: Select GPU - schema: - additional_attrs: true - type: dict - $ref: - - "definitions/gpuConfiguration" - attrs: [] - - variable: workaround - label: "Workaround" - schema: - type: string - default: workaround - hidden: true - - - variable: metrics - group: Metrics - label: Prometheus Metrics - schema: - additional_attrs: true - type: dict - attrs: - - variable: main - label: Main Metrics - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - description: Enable Prometheus Metrics - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - - variable: prometheusRule - label: PrometheusRule - description: Enable and configure Prometheus Rules for the App. - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - description: Enable Prometheus Metrics - schema: - type: boolean - default: false - # TODO: Rule List section - -# - variable: horizontalPodAutoscaler -# group: Advanced -# label: (Advanced) Horizontal Pod Autoscaler -# schema: -# type: list -# default: [] -# items: -# - variable: hpaEntry -# label: HPA Entry -# schema: -# additional_attrs: true -# type: dict -# attrs: -# - variable: name -# label: Name -# schema: -# type: string -# required: true -# default: "" -# - variable: enabled -# label: Enabled -# schema: -# type: boolean -# default: false -# show_subquestions_if: true -# subquestions: -# - variable: target -# label: Target -# description: Deployment name, Defaults to Main Deployment -# schema: -# type: string -# default: "" -# - variable: minReplicas -# label: Minimum Replicas -# schema: -# type: int -# default: 1 -# - variable: maxReplicas -# label: Maximum Replicas -# schema: -# type: int -# default: 5 -# - variable: targetCPUUtilizationPercentage -# label: Target CPU Utilization Percentage -# schema: -# type: int -# default: 80 -# - variable: targetMemoryUtilizationPercentage -# label: Target Memory Utilization Percentage -# schema: -# type: int -# default: 80 - - variable: networkPolicy - group: Advanced - label: (Advanced) Network Policy - schema: - type: list - default: [] - items: - - variable: netPolicyEntry - label: Network Policy Entry - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - default: "" - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: policyType - label: Policy Type - schema: - type: string - default: "" - enum: - - value: "" - description: Default - - value: ingress - description: Ingress - - value: egress - description: Egress - - value: ingress-egress - description: Ingress and Egress - - variable: egress - label: Egress - schema: - type: list - default: [] - items: - - variable: egressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: to - label: To - schema: - type: list - default: [] - items: - - variable: toEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - variable: ingress - label: Ingress - schema: - type: list - default: [] - items: - - variable: ingressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: from - label: From - schema: - type: list - default: [] - items: - - variable: fromEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - - variable: addons - group: Addons - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: codeserver - label: Codeserver - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: service - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: NodePort - description: Deprecated CHANGE THIS - - value: ClusterIP - description: ClusterIP - - value: LoadBalancer - description: LoadBalancer - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: ports - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: codeserver - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - default: 36107 - - variable: ingress - label: "Ingress" - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - variable: scaleCert - label: 'Use TrueNAS SCALE Certificate (Deprecated)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: int - $ref: - - "definitions/certificate" - - variable: envList - label: Codeserver Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: netshoot - label: Netshoot - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: envList - label: Netshoot Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: vpn - label: VPN - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Type - schema: - type: string - default: disabled - enum: - - value: disabled - description: disabled - - value: gluetun - description: Gluetun - - value: tailscale - description: Tailscale - - value: openvpn - description: OpenVPN (Deprecated) - - value: wireguard - description: Wireguard (Deprecated) - - variable: openvpn - label: OpenVPN Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "openvpn"]] - attrs: - - variable: username - label: Authentication Username (Optional) - description: Authentication Username, Optional - schema: - type: string - default: "" - - variable: password - label: Authentication Password - description: Authentication Credentials - schema: - type: string - show_if: [["username", "!=", ""]] - default: "" - required: true - - variable: tailscale - label: Tailscale Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "tailscale"]] - attrs: - - variable: authkey - label: Authentication Key - description: Provide an auth key to automatically authenticate the node as your user account. - schema: - type: string - private: true - default: "" - - variable: auth_once - label: Auth Once - description: Only attempt to log in if not already logged in. - schema: - type: boolean - default: true - - variable: accept_dns - label: Accept DNS - description: Accept DNS configuration from the admin console. - schema: - type: boolean - default: false - - variable: userspace - label: Userspace - description: Userspace Networking mode allows running Tailscale where you do not have access to create a VPN tunnel device. - schema: - type: boolean - default: false - - variable: routes - label: Routes - description: Expose physical subnet routes to your entire Tailscale network. - schema: - type: string - default: "" - - variable: dest_ip - label: Destination IP - description: Tells the DNAT mechanism which Destination IP to set in the IP header, and where to send packets that are matched. - schema: - type: string - default: "" - - variable: sock5_server - label: Sock5 Server - description: The address on which to listen for SOCKS5 proxying into the tailscale net. - schema: - type: string - default: "" - - variable: outbound_http_proxy_listen - label: Outbound HTTP Proxy Listen - description: The address on which to listen for HTTP proxying into the tailscale net. - schema: - type: string - default: "" - - variable: extra_args - label: Extra Args - description: Extra Args - schema: - type: string - default: "" - - variable: daemon_extra_args - label: Tailscale Daemon Extra Args - description: Tailscale Daemon Extra Args - schema: - type: string - default: "" - - variable: killSwitch - label: Enable Killswitch - schema: - type: boolean - show_if: [["type", "!=", "disabled"]] - default: true - - variable: excludedNetworks_IPv4 - label: Killswitch Excluded IPv4 networks - description: List of Killswitch Excluded IPv4 Addresses - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv4 - label: IPv4 Network - schema: - type: string - required: true - - variable: excludedNetworks_IPv6 - label: Killswitch Excluded IPv6 networks - description: "List of Killswitch Excluded IPv6 Addresses" - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv6 - label: IPv6 Network - schema: - type: string - required: true - - variable: configFile - label: VPN Config File Location - schema: - type: string - show_if: [["type", "!=", "disabled"]] - default: "" - - - variable: envList - label: VPN Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - max_length: 10240 - - - variable: docs - group: Documentation - label: Please read the documentation at https://truecharts.org - description: Please read the documentation at -
https://truecharts.org - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDocs - label: I have checked the documentation - schema: - type: boolean - default: true - - variable: donateNag - group: Documentation - label: Please consider supporting TrueCharts, see https://truecharts.org/sponsor - description: Please consider supporting TrueCharts, see -
https://truecharts.org/sponsor - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDonate - label: I have considered donating - schema: - type: boolean - default: true - hidden: true - diff --git a/stable/lidarr/19.3.0/templates/NOTES.txt b/stable/lidarr/19.3.0/templates/NOTES.txt deleted file mode 100644 index efcb74cb77..0000000000 --- a/stable/lidarr/19.3.0/templates/NOTES.txt +++ /dev/null @@ -1 +0,0 @@ -{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/lidarr/19.3.0/templates/common.yaml b/stable/lidarr/19.3.0/templates/common.yaml deleted file mode 100644 index 3c93f57861..0000000000 --- a/stable/lidarr/19.3.0/templates/common.yaml +++ /dev/null @@ -1,11 +0,0 @@ -{{/* Make sure all variables are set properly */}} -{{- include "tc.v1.common.loader.init" . -}} - -{{/* Disable [exportarr] if requested */}} -{{- if not .Values.metrics.main.enabled -}} - {{- $_ := set .Values.workload.exportarr "enabled" false -}} - {{- $_ := set .Values.service.metrics "enabled" false -}} -{{- end -}} - -{{/* Render the templates */}} -{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/lidarr/19.3.0/values.yaml b/stable/lidarr/19.3.0/values.yaml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/stable/lidarr/20.3.0/.helmignore b/stable/lidarr/20.3.0/.helmignore deleted file mode 100644 index 77ca5567b2..0000000000 --- a/stable/lidarr/20.3.0/.helmignore +++ /dev/null @@ -1,30 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ -# OWNERS file for Kubernetes -OWNERS -# helm-docs templates -*.gotmpl -# docs folder -/docs -# icon -icon.png diff --git a/stable/lidarr/20.3.0/CHANGELOG.md b/stable/lidarr/20.3.0/CHANGELOG.md deleted file mode 100644 index 35ff69ac49..0000000000 --- a/stable/lidarr/20.3.0/CHANGELOG.md +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: Changelog ---- - - -*for the complete changelog, please refer to the website* - -**Important:** - - - - - - - - - - - -## [lidarr-19.1.19](https://github.com/truecharts/charts/compare/lidarr-19.1.18...lidarr-19.1.19) (2024-02-12) - -### Chore - - - -- update container image ghcr.io/onedr0p/lidarr-develop to v2.1.7.4030[@01d40bb](https://github.com/01d40bb) by renovate ([#18169](https://github.com/truecharts/charts/issues/18169)) - - -## [lidarr-19.1.18](https://github.com/truecharts/charts/compare/lidarr-19.1.17...lidarr-19.1.18) (2024-02-05) - -### Chore - - - -- update container image ghcr.io/onedr0p/lidarr-develop to 2.1.6.3993[@36b75d7](https://github.com/36b75d7) by renovate ([#17955](https://github.com/truecharts/charts/issues/17955)) - - -## [lidarr-19.1.17](https://github.com/truecharts/charts/compare/lidarr-19.1.16...lidarr-19.1.17) (2024-02-05) - -### Chore - - - -- update container image ghcr.io/onedr0p/lidarr-develop to v2.1.6.3993[@90ddf2d](https://github.com/90ddf2d) by renovate ([#17914](https://github.com/truecharts/charts/issues/17914)) - - -## [lidarr-19.1.16](https://github.com/truecharts/charts/compare/lidarr-19.1.15...lidarr-19.1.16) (2024-02-03) - -### Chore - - - -- update container image common to v17.2.30[@19ad5ec](https://github.com/19ad5ec) by renovate ([#17804](https://github.com/truecharts/charts/issues/17804)) - - -## [lidarr-19.1.15](https://github.com/truecharts/charts/compare/lidarr-19.1.14...lidarr-19.1.15) (2024-01-29) - -### Chore - - - -- update container image ghcr.io/onedr0p/exportarr to v1.6.1[@60cf3d4](https://github.com/60cf3d4) by renovate ([#17725](https://github.com/truecharts/charts/issues/17725)) - - -## [lidarr-19.1.14](https://github.com/truecharts/charts/compare/lidarr-19.1.13...lidarr-19.1.14) (2024-01-29) - -### Chore - - - -- update container image ghcr.io/onedr0p/lidarr-develop to v2.1.4.3941[@de7dac0](https://github.com/de7dac0) by renovate ([#17674](https://github.com/truecharts/charts/issues/17674)) - - -## [lidarr-19.1.13](https://github.com/truecharts/charts/compare/lidarr-19.1.12...lidarr-19.1.13) (2024-01-26) - -### Chore - - - -- update container image common to v17.2.29[@d7c41a3](https://github.com/d7c41a3) by renovate ([#17545](https://github.com/truecharts/charts/issues/17545)) - - -## [lidarr-19.1.12](https://github.com/truecharts/charts/compare/lidarr-19.1.11...lidarr-19.1.12) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.28[@918b4c5](https://github.com/918b4c5) by renovate ([#17478](https://github.com/truecharts/charts/issues/17478)) - - -## [lidarr-19.1.11](https://github.com/truecharts/charts/compare/lidarr-19.1.10...lidarr-19.1.11) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.26[@24c98f7](https://github.com/24c98f7) by renovate ([#17409](https://github.com/truecharts/charts/issues/17409)) - diff --git a/stable/lidarr/20.3.0/Chart.yaml b/stable/lidarr/20.3.0/Chart.yaml deleted file mode 100644 index d15f5c206e..0000000000 --- a/stable/lidarr/20.3.0/Chart.yaml +++ /dev/null @@ -1,38 +0,0 @@ -annotations: - max_scale_version: 24.04.0 - min_scale_version: 23.10.0 - 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: 2.2.0.4045 -dependencies: - - name: common - version: 18.2.1 - repository: oci://tccr.io/truecharts - condition: "" - alias: "" - tags: [] - import-values: [] -deprecated: false -description: Looks and smells like Sonarr but made for music -home: https://truecharts.org/charts/stable/lidarr -icon: https://truecharts.org/img/hotlink-ok/chart-icons/lidarr.png -keywords: - - lidarr - - torrent - - usenet -kubeVersion: ">=1.24.0-0" -maintainers: - - name: TrueCharts - email: info@truecharts.org - url: https://truecharts.org -name: lidarr -sources: - - https://github.com/Lidarr/Lidarr - - https://github.com/truecharts/charts/tree/master/charts/stable/lidarr - - https://ghcr.io/onedr0p/lidarr-develop - - https://ghcr.io/onedr0p/exportarr -type: application -version: 20.3.0 diff --git a/stable/lidarr/20.3.0/README.md b/stable/lidarr/20.3.0/README.md deleted file mode 100644 index 5dd4de9f50..0000000000 --- a/stable/lidarr/20.3.0/README.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: README ---- - -## General Info - -TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. -However only installations using the TrueNAS SCALE Apps system are supported. - -For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/lidarr) - -**This chart is not maintained by the upstream project and any issues with the chart should be raised [here](https://github.com/truecharts/charts/issues/new/choose)** - -## Support - -- Please check our [quick-start guides for TrueNAS SCALE](https://truecharts.org/manual/SCALE/guides/scale-intro). -- See the [Website](https://truecharts.org) -- Check our [Discord](https://discord.gg/tVsPTHWTtr) -- Open a [issue](https://github.com/truecharts/charts/issues/new/choose) - ---- - -## Sponsor TrueCharts - -TrueCharts can only exist due to the incredible effort of our staff. -Please consider making a [donation](https://truecharts.org/sponsor) or contributing back to the project any way you can! - -_All Rights Reserved - The TrueCharts Project_ diff --git a/stable/lidarr/20.3.0/app-readme.md b/stable/lidarr/20.3.0/app-readme.md deleted file mode 100644 index ab0ee61c1d..0000000000 --- a/stable/lidarr/20.3.0/app-readme.md +++ /dev/null @@ -1,8 +0,0 @@ -Looks and smells like Sonarr but made for music - -This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/lidarr](https://truecharts.org/charts/stable/lidarr) - ---- - -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/lidarr/20.3.0/charts/common-18.1.2.tgz b/stable/lidarr/20.3.0/charts/common-18.1.2.tgz deleted file mode 100644 index afb1de8120d9e1088c1711607a6c323d4dae355b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99288 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 Du(4)S diff --git a/stable/lidarr/20.3.0/ix_values.yaml b/stable/lidarr/20.3.0/ix_values.yaml deleted file mode 100644 index 10a558c79f..0000000000 --- a/stable/lidarr/20.3.0/ix_values.yaml +++ /dev/null @@ -1,109 +0,0 @@ -image: - repository: ghcr.io/onedr0p/lidarr-develop - pullPolicy: IfNotPresent - tag: 2.2.0.4045@sha256:c325ecc0a9a5ee604d06d21c6dab5bf4506c29622f108205b2f3eb42e0792a2e -exportarrImage: - repository: ghcr.io/onedr0p/exportarr - pullPolicy: IfNotPresent - tag: v1.6.1@sha256:60cf3d44aa0b7dea2a65160b2e2e373c1ae38cd6b12a45fe81b8afa45ac31c22 -securityContext: - container: - readOnlyRootFilesystem: false -service: - main: - ports: - main: - port: 8686 - metrics: - enabled: true - type: ClusterIP - targetSelector: exportarr - ports: - metrics: - enabled: true - port: 8687 - targetSelector: exportarr -workload: - main: - podSpec: - containers: - main: - probes: - liveness: - enabled: true - type: http - path: /ping - readiness: - enabled: true - type: http - path: /ping - startup: - enabled: true - type: http - path: /ping - env: - LIDARR__PORT: "{{ .Values.service.main.ports.main.port }}" - LIDARR__AUTHENTICATION_METHOD: "" - exportarr: - enabled: true - type: Deployment - strategy: RollingUpdate - replicas: 1 - podSpec: - containers: - exportarr: - primary: true - enabled: true - imageSelector: exportarrImage - args: - - lidarr - 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 - CONFIG: "/config/config.xml" -persistence: - config: - enabled: true - targetSelector: - main: - main: - mountPath: /config - exportarr: - exportarr: - mountPath: /config - readOnly: true -metrics: - main: - enabled: true - type: "servicemonitor" - endpoints: - - port: metrics - path: /metrics - targetSelector: metrics - prometheusRule: - enabled: false -portal: - open: - enabled: true -updated: true diff --git a/stable/lidarr/20.3.0/questions.yaml b/stable/lidarr/20.3.0/questions.yaml deleted file mode 100755 index 86ad1ce49c..0000000000 --- a/stable/lidarr/20.3.0/questions.yaml +++ /dev/null @@ -1,2899 +0,0 @@ -groups: - - name: Container Image - description: Image to be used for container - - name: General Settings - description: General Deployment Settings - - name: Workload Settings - description: Workload Settings - - name: App Configuration - description: App Specific Config Options - - name: Networking and Services - description: Configure Network and Services for Container - - name: Storage and Persistence - description: Persist and Share Data that is Separate from the Container - - name: Ingress - description: Ingress Configuration - - name: Security and Permissions - description: Configure Security Context and Permissions - - name: Resources and Devices - description: "Specify Resources/Devices to be Allocated to Workload" - - name: Middlewares - description: Traefik Middlewares - - name: Metrics - description: Metrics - - name: Addons - description: Addon Configuration - - name: Backup Configuration - description: Configure Velero Backup Schedule - - name: Advanced - description: Advanced Configuration - - name: Postgresql - description: Postgresql - - name: Documentation - description: Documentation - -portals: - open: - protocols: - - "$kubernetes-resource_configmap_tcportal-open_protocol" - host: - - "$kubernetes-resource_configmap_tcportal-open_host" - ports: - - "$kubernetes-resource_configmap_tcportal-open_port" - -questions: - - variable: global - group: General Settings - label: "Global Settings" - schema: - additional_attrs: true - type: dict - attrs: - - variable: stopAll - label: Stop All - description: "Stops All Running pods and hibernates cnpg" - schema: - type: boolean - default: false - - - variable: workload - group: "Workload Settings" - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: main - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: type - label: Type (Advanced) - schema: - type: string - default: Deployment - enum: - - value: Deployment - description: Deployment - - value: DaemonSet - description: DaemonSet - - - variable: replicas - label: Replicas (Advanced) - description: Set the number of Replicas - schema: - type: int - show_if: [["type", "!=", "DaemonSet"]] - default: 1 - - - variable: podSpec - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: containers - label: Containers - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: Main Container - schema: - additional_attrs: true - type: dict - attrs: - - - variable: env - group: App Configuration - label: Image Environment - schema: - additional_attrs: true - type: dict - attrs: - - variable: LIDARR__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 Settings" - schema: - type: string - default: "Etc/UTC" - $ref: - - "definitions/timezone" - - - variable: podOptions - group: "General Settings" - label: "Global Pod Options (Advanced)" - schema: - additional_attrs: true - type: dict - attrs: - - variable: expertPodOpts - label: "Expert - Pod Options" - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hostNetwork - label: "Host Networking" - schema: - type: boolean - default: false - - variable: dnsConfig - label: "DNS Configuration" - schema: - type: dict - additional_attrs: true - attrs: - - variable: options - label: "Options" - schema: - type: list - default: [{"name": "ndots", "value": "1"}] - items: - - variable: optionsEntry - label: "Option Entry" - schema: - type: dict - additional_attrs: true - attrs: - - variable: name - label: "Name" - schema: - type: string - required: true - - variable: value - label: "Value" - schema: - type: string - - variable: nameservers - label: "Nameservers" - schema: - type: list - default: [] - items: - - variable: nsEntry - label: "Nameserver Entry" - schema: - type: string - required: true - - variable: searches - label: "Searches" - schema: - type: list - default: [] - items: - - variable: searchEntry - label: "Search Entry" - schema: - type: string - required: true - - - variable: imagePullSecretList - group: "General Settings" - label: "Image Pull Secrets" - schema: - type: list - default: [] - items: - - variable: pullsecretentry - label: "Pull Secret" - schema: - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: true - - variable: data - label: Data - schema: - type: dict - additional_attrs: true - attrs: - - variable: registry - label: "Registry" - schema: - type: string - required: true - default: "https://index.docker.io/v1/" - - variable: username - label: "Username" - schema: - type: string - required: true - default: "" - - variable: password - label: "Password" - schema: - type: string - required: true - private: true - default: "" - - variable: email - label: "Email" - schema: - type: string - required: true - default: "" - - - variable: service - group: Networking and Services - label: Configure Service(s) - schema: - additional_attrs: true - type: dict - attrs: - - - variable: 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: 8686 - required: true - - variable: serviceexpert - group: Networking and Services - label: Show Expert Config - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - - variable: scaleExternalInterface - description: Add External Interfaces - label: Add external Interfaces - group: Networking - schema: - type: list - items: - - variable: interfaceConfiguration - description: Interface Configuration - label: Interface Configuration - schema: - additional_attrs: true - type: dict - $ref: - - "normalize/interfaceConfiguration" - attrs: - - variable: hostInterface - description: Please Specify Host Interface - label: Host Interface - schema: - type: string - required: true - $ref: - - "definitions/interface" - - variable: ipam - description: Define how IP Address will be managed - label: IP Address Management - schema: - additional_attrs: true - type: dict - required: true - attrs: - - variable: type - description: Specify type for IPAM - label: IPAM Type - schema: - type: string - required: true - enum: - - value: dhcp - description: Use DHCP - - value: static - description: Use Static IP - - variable: staticIPConfigurations - label: Static IP Addresses - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticIP - label: Static IP - schema: - type: ipaddr - cidr: true - - variable: staticRoutes - label: Static Routes - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticRouteConfiguration - label: Static Route Configuration - schema: - additional_attrs: true - type: dict - attrs: - - variable: destination - label: Destination - schema: - type: ipaddr - cidr: true - required: true - - variable: gateway - label: Gateway - schema: - type: ipaddr - cidr: false - required: true - - - variable: serviceList - label: Add Manual Custom Services - group: Networking and Services - schema: - type: list - default: [] - items: - - variable: serviceListEntry - label: Custom Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the service - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: LoadBalancer - description: LoadBalancer (Expose Ports) - - value: ClusterIP - description: ClusterIP (Do Not Expose Ports) - - value: Simple - description: Deprecated CHANGE THIS - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: advancedsvcset - label: Show Advanced Service Settings - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: externalIPs - label: "External IP's" - description: "External IP's" - schema: - type: list - default: [] - items: - - variable: externalIP - label: External IP - schema: - type: string - - variable: ipFamilyPolicy - label: IP Family Policy - description: Specify the IP Policy - schema: - type: string - default: SingleStack - enum: - - value: SingleStack - description: SingleStack - - value: PreferDualStack - description: PreferDualStack - - value: RequireDualStack - description: RequireDualStack - - variable: ipFamilies - label: IP Families - description: (Advanced) The IP Families that should be used - schema: - type: list - default: [] - items: - - variable: ipFamily - label: IP Family - schema: - type: string - - variable: portsList - label: Additional Service Ports - schema: - type: list - default: [] - items: - - variable: portsListEntry - label: Custom ports - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Port - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Port Name - schema: - type: string - default: "" - - variable: protocol - label: Port Type - schema: - type: string - default: tcp - enum: - - value: http - description: HTTP - - value: https - description: HTTPS - - value: tcp - description: TCP - - value: udp - description: UDP - - variable: targetPort - label: Target Port - description: This port exposes the container port on the service - schema: - type: int - required: true - - variable: port - label: Container Port - schema: - type: int - required: true - - - variable: persistence - label: Integrated Persistent Storage - description: Integrated Persistent Storage - group: Storage and 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: 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: Storage and Persistence - schema: - type: list - default: [] - items: - - variable: persistenceListEntry - label: Custom Storage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the storage - schema: - type: boolean - default: true - hidden: true - - variable: type - label: Type of Storage - description: Sets the persistence type, Anything other than PVC could break rollback! - schema: - type: string - default: hostPath - enum: - - value: pvc - description: PVC - - value: hostPath - description: Host Path - - value: emptyDir - description: emptyDir - - value: nfs - description: NFS Share - - variable: server - label: NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: path - label: Path on NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: iscsi - label: iSCSI Options - schema: - show_if: [["type", "=", "iscsi"]] - type: dict - additional_attrs: true - attrs: - - variable: targetPortal - label: targetPortal - schema: - type: string - required: true - default: "" - - variable: iqn - label: iqn - schema: - type: string - required: true - default: "" - - variable: lun - label: lun - schema: - type: int - default: 0 - - variable: authSession - label: authSession - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: authDiscovery - label: authDiscovery - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: autoPermissions - label: Automatic Permissions Configuration - description: Automatically set permissions - schema: - show_if: [["type", "!=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: chown - label: Run CHOWN - description: | - It will run CHOWN on the path with the given fsGroup - schema: - type: boolean - default: false - - variable: chmod - label: Run CHMOD - description: | - It will run CHMOD on the path with the given value
- Format should be 3 digits, e.g. 770 - schema: - type: string - valid_chars: '[0-9]{3}' - default: "" - - variable: recursive - label: Recursive - description: | - It will run CHOWN and CHMOD recursively - schema: - type: boolean - default: false - - variable: readOnly - label: Read Only - schema: - type: boolean - default: false - - variable: hostPath - label: Host Path - description: Path inside the container the storage is mounted - schema: - show_if: [["type", "=", "hostPath"]] - type: hostpath - - variable: mountPath - label: Mount Path - description: Path inside the container the storage is mounted - schema: - type: string - default: "" - required: true - valid_chars: '^\/([a-zA-Z0-9._-]+(\s?[a-zA-Z0-9._-]+|\/?))+$' - - variable: medium - label: EmptyDir Medium - schema: - show_if: [["type", "=", "emptyDir"]] - type: string - default: "" - enum: - - value: "" - description: Default - - value: Memory - description: Memory - - variable: size - label: Size Quotum of Storage - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: 256Gi - - variable: storageClass - label: 'storageClass (Advanced)' - description: 'sets the storageClass to something other than iX default. Only for advanced usecases!' - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: "" - - variable: static - label: 'Static Fixed PVC Bindings (Experimental)' - description: Link a PVC to a specific storage location - schema: - show_if: [["type", "=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: mode - label: mode - description: | - disabled: use normal dynamic PVCs - smb: connect to an SMB share - nfs: connect to an NFS share - schema: - type: string - default: "disabled" - enum: - - value: "disabled" - description: disabled - - value: smb - description: smb - - value: nfs - description: nfs - - variable: server - label: Server - description: server to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "myserver" - - variable: share - label: Share - description: share to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "/myshare" - - variable: user - label: User - description: connecting user - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "myuser" - - variable: domain - label: Domain - description: user domain - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: password - label: Password - description: connecting password - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: volumeSnapshots - label: 'Volume Snapshots (Experimental)' - description: Add an entry to the list to force creation of a volumeSnapshot of this PVC - schema: - show_if: [["type", "=", "pvc"]] - type: list - default: [] - items: - - variable: volumeSnapshotEntry - label: Custom volumeSnapshot - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - description: 'WARNING: renaming this, means deletion of the snapshot with the old name!' - schema: - type: string - default: "mysnapshot" - required: true - - variable: volumeSnapshotClassName - label: 'volumeSnapshot Class Name (Advanced)' - description: For use with PVCs using a non-default storageClass - schema: - type: string - default: "" - - - variable: ingress - label: "" - group: Ingress - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: "Main Ingress" - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name (Optional) - description: Defaults to chart name - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description (Optional) - description: Defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: icon - label: Icon (Optional) - description: Defaults to chart icon - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - variable: widget - label: Widget Settings - schema: - type: dict - additional_attrs: true - show_if: [["enabled", "=", true]] - attrs: - - variable: enabled - label: Enable Widget - description: When disabled all widget annotations are skipped. - schema: - type: boolean - default: true - - variable: custom - label: Options - schema: - type: dict - additional_attrs: true - attrs: - - variable: key - label: API-key (key) - schema: - type: string - default: "" - - variable: customkv - label: Custom Options - schema: - type: list - default: [] - items: - - variable: option - label: Option - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - default: "" - required: true - - variable: value - label: Value - schema: - type: string - default: "" - required: true - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - - variable: ingressList - label: Add Manual Custom Ingresses - group: Ingress - schema: - type: list - default: [] - items: - - variable: ingressListEntry - label: Custom Ingress - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: ingressClassName - label: IngressClass Name - schema: - type: string - default: "" - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: overrideService - label: Linked Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Service Name - schema: - type: string - default: "" - - variable: port - label: Service Port - schema: - type: int - - variable: tls - label: TLS-Settings - schema: - type: list - default: [] - show_if: [["certificateIssuer", "=", ""]] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your Cert-Manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: Use Custom Secret (Advanced) - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: "Allow Cross Origin Requests" - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: namespace - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description - description: defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - - variable: securityContext - group: Security and Permissions - label: Security Context - schema: - additional_attrs: true - type: dict - attrs: - - variable: container - label: Container - schema: - additional_attrs: true - type: dict - attrs: - # Settings from questions.yaml get appended here on a per-app basis - - - variable: runAsUser - label: "runAsUser" - description: "The UserID of the user running the application" - schema: - type: int - default: 568 - - variable: runAsGroup - label: "runAsGroup" - description: "The groupID 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 and Devices - label: "Resource Limits" - schema: - additional_attrs: true - type: dict - attrs: - - variable: limits - label: Advanced Limit Resource Consumption - schema: - additional_attrs: true - type: dict - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 4000m - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: RAM - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 8Gi - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: 'gpu.intel.com/i915' - label: Add Intel i915 GPUs - schema: - type: int - default: 0 - - variable: 'nvidia.com/gpu' - label: Add NVIDIA GPUs (Experimental) - schema: - type: int - default: 0 - - variable: 'amd.com/gpu' - label: Add AMD GPUs - schema: - type: int - default: 0 - - variable: requests - label: "Minimum Resources Required (request)" - schema: - additional_attrs: true - type: dict - hidden: true - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 10m - hidden: true - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: "RAM" - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 50Mi - hidden: true - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: deviceList - label: Mount USB Devices - group: Resources and Devices - schema: - type: list - default: [] - items: - - variable: deviceListEntry - label: Device - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Storage - schema: - type: boolean - default: true - - variable: type - label: (Advanced) Type of Storage - description: Sets the persistence type - schema: - type: string - default: device - hidden: true - - variable: readOnly - label: readOnly - schema: - type: boolean - default: false - - variable: hostPath - label: Host Device Path - description: Path to the device on the host system - schema: - type: path - - variable: mountPath - label: Container Device Path - description: Path inside the container the device is mounted - schema: - type: string - default: "/dev/ttyACM0" - - - variable: metrics - group: Metrics - label: Prometheus Metrics - schema: - additional_attrs: true - type: dict - attrs: - - variable: main - label: Main Metrics - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - description: Enable Prometheus Metrics - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - - variable: prometheusRule - label: PrometheusRule - description: Enable and configure Prometheus Rules for the App. - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - description: Enable Prometheus Metrics - schema: - type: boolean - default: false - # TODO: Rule List section - -# - variable: horizontalPodAutoscaler -# group: Advanced -# label: (Advanced) Horizontal Pod Autoscaler -# schema: -# type: list -# default: [] -# items: -# - variable: hpaEntry -# label: HPA Entry -# schema: -# additional_attrs: true -# type: dict -# attrs: -# - variable: name -# label: Name -# schema: -# type: string -# required: true -# default: "" -# - variable: enabled -# label: Enabled -# schema: -# type: boolean -# default: false -# show_subquestions_if: true -# subquestions: -# - variable: target -# label: Target -# description: Deployment name, Defaults to Main Deployment -# schema: -# type: string -# default: "" -# - variable: minReplicas -# label: Minimum Replicas -# schema: -# type: int -# default: 1 -# - variable: maxReplicas -# label: Maximum Replicas -# schema: -# type: int -# default: 5 -# - variable: targetCPUUtilizationPercentage -# label: Target CPU Utilization Percentage -# schema: -# type: int -# default: 80 -# - variable: targetMemoryUtilizationPercentage -# label: Target Memory Utilization Percentage -# schema: -# type: int -# default: 80 - - variable: networkPolicy - group: Advanced - label: (Advanced) Network Policy - schema: - type: list - default: [] - items: - - variable: netPolicyEntry - label: Network Policy Entry - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - default: "" - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: policyType - label: Policy Type - schema: - type: string - default: "" - enum: - - value: "" - description: Default - - value: ingress - description: Ingress - - value: egress - description: Egress - - value: ingress-egress - description: Ingress and Egress - - variable: egress - label: Egress - schema: - type: list - default: [] - items: - - variable: egressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: to - label: To - schema: - type: list - default: [] - items: - - variable: toEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - variable: ingress - label: Ingress - schema: - type: list - default: [] - items: - - variable: ingressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: from - label: From - schema: - type: list - default: [] - items: - - variable: fromEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - - variable: addons - group: Addons - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: codeserver - label: Codeserver - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: service - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: NodePort - description: Deprecated CHANGE THIS - - value: ClusterIP - description: ClusterIP - - value: LoadBalancer - description: LoadBalancer - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: ports - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: codeserver - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - default: 36107 - - variable: ingress - label: "Ingress" - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - variable: scaleCert - label: 'Use TrueNAS SCALE Certificate (Deprecated)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: int - $ref: - - "definitions/certificate" - - variable: envList - label: Codeserver Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: netshoot - label: Netshoot - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: envList - label: Netshoot Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: vpn - label: VPN - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Type - schema: - type: string - default: disabled - enum: - - value: disabled - description: disabled - - value: gluetun - description: Gluetun - - value: tailscale - description: Tailscale - - value: openvpn - description: OpenVPN (Deprecated) - - value: wireguard - description: Wireguard (Deprecated) - - variable: openvpn - label: OpenVPN Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "openvpn"]] - attrs: - - variable: username - label: Authentication Username (Optional) - description: Authentication Username, Optional - schema: - type: string - default: "" - - variable: password - label: Authentication Password - description: Authentication Credentials - schema: - type: string - show_if: [["username", "!=", ""]] - default: "" - required: true - - variable: tailscale - label: Tailscale Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "tailscale"]] - attrs: - - variable: authkey - label: Authentication Key - description: Provide an auth key to automatically authenticate the node as your user account. - schema: - type: string - private: true - default: "" - - variable: auth_once - label: Auth Once - description: Only attempt to log in if not already logged in. - schema: - type: boolean - default: true - - variable: accept_dns - label: Accept DNS - description: Accept DNS configuration from the admin console. - schema: - type: boolean - default: false - - variable: userspace - label: Userspace - description: Userspace Networking mode allows running Tailscale where you do not have access to create a VPN tunnel device. - schema: - type: boolean - default: false - - variable: routes - label: Routes - description: Expose physical subnet routes to your entire Tailscale network. - schema: - type: string - default: "" - - variable: dest_ip - label: Destination IP - description: Tells the DNAT mechanism which Destination IP to set in the IP header, and where to send packets that are matched. - schema: - type: string - default: "" - - variable: sock5_server - label: Sock5 Server - description: The address on which to listen for SOCKS5 proxying into the tailscale net. - schema: - type: string - default: "" - - variable: outbound_http_proxy_listen - label: Outbound HTTP Proxy Listen - description: The address on which to listen for HTTP proxying into the tailscale net. - schema: - type: string - default: "" - - variable: extra_args - label: Extra Args - description: Extra Args - schema: - type: string - default: "" - - variable: daemon_extra_args - label: Tailscale Daemon Extra Args - description: Tailscale Daemon Extra Args - schema: - type: string - default: "" - - variable: killSwitch - label: Enable Killswitch - schema: - type: boolean - show_if: [["type", "!=", "disabled"]] - default: true - - variable: excludedNetworks_IPv4 - label: Killswitch Excluded IPv4 networks - description: List of Killswitch Excluded IPv4 Addresses - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv4 - label: IPv4 Network - schema: - type: string - required: true - - variable: excludedNetworks_IPv6 - label: Killswitch Excluded IPv6 networks - description: "List of Killswitch Excluded IPv6 Addresses" - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv6 - label: IPv6 Network - schema: - type: string - required: true - - variable: configFile - label: VPN Config File Location - schema: - type: string - show_if: [["type", "!=", "disabled"]] - default: "" - - - variable: envList - label: VPN Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - max_length: 10240 - - - variable: docs - group: Documentation - label: Please read the documentation at https://truecharts.org - description: Please read the documentation at -
https://truecharts.org - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDocs - label: I have checked the documentation - schema: - type: boolean - default: true - - variable: donateNag - group: Documentation - label: Please consider supporting TrueCharts, see https://truecharts.org/sponsor - description: Please consider supporting TrueCharts, see -
https://truecharts.org/sponsor - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDonate - label: I have considered donating - schema: - type: boolean - default: true - hidden: true - diff --git a/stable/lidarr/20.3.0/templates/NOTES.txt b/stable/lidarr/20.3.0/templates/NOTES.txt deleted file mode 100644 index efcb74cb77..0000000000 --- a/stable/lidarr/20.3.0/templates/NOTES.txt +++ /dev/null @@ -1 +0,0 @@ -{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/lidarr/20.3.0/templates/common.yaml b/stable/lidarr/20.3.0/templates/common.yaml deleted file mode 100644 index 3c93f57861..0000000000 --- a/stable/lidarr/20.3.0/templates/common.yaml +++ /dev/null @@ -1,11 +0,0 @@ -{{/* Make sure all variables are set properly */}} -{{- include "tc.v1.common.loader.init" . -}} - -{{/* Disable [exportarr] if requested */}} -{{- if not .Values.metrics.main.enabled -}} - {{- $_ := set .Values.workload.exportarr "enabled" false -}} - {{- $_ := set .Values.service.metrics "enabled" false -}} -{{- end -}} - -{{/* Render the templates */}} -{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/lidarr/20.3.0/values.yaml b/stable/lidarr/20.3.0/values.yaml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/stable/lidarr/20.3.1/.helmignore b/stable/lidarr/20.3.1/.helmignore deleted file mode 100644 index 77ca5567b2..0000000000 --- a/stable/lidarr/20.3.1/.helmignore +++ /dev/null @@ -1,30 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ -# OWNERS file for Kubernetes -OWNERS -# helm-docs templates -*.gotmpl -# docs folder -/docs -# icon -icon.png diff --git a/stable/lidarr/20.3.1/CHANGELOG.md b/stable/lidarr/20.3.1/CHANGELOG.md deleted file mode 100644 index 296ec6ac72..0000000000 --- a/stable/lidarr/20.3.1/CHANGELOG.md +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: Changelog ---- - - -*for the complete changelog, please refer to the website* - -**Important:** - - - - - - - - - - - - -## [lidarr-19.1.19](https://github.com/truecharts/charts/compare/lidarr-19.1.18...lidarr-19.1.19) (2024-02-12) - -### Chore - - - -- update container image ghcr.io/onedr0p/lidarr-develop to v2.1.7.4030[@01d40bb](https://github.com/01d40bb) by renovate ([#18169](https://github.com/truecharts/charts/issues/18169)) - - -## [lidarr-19.1.18](https://github.com/truecharts/charts/compare/lidarr-19.1.17...lidarr-19.1.18) (2024-02-05) - -### Chore - - - -- update container image ghcr.io/onedr0p/lidarr-develop to 2.1.6.3993[@36b75d7](https://github.com/36b75d7) by renovate ([#17955](https://github.com/truecharts/charts/issues/17955)) - - -## [lidarr-19.1.17](https://github.com/truecharts/charts/compare/lidarr-19.1.16...lidarr-19.1.17) (2024-02-05) - -### Chore - - - -- update container image ghcr.io/onedr0p/lidarr-develop to v2.1.6.3993[@90ddf2d](https://github.com/90ddf2d) by renovate ([#17914](https://github.com/truecharts/charts/issues/17914)) - - -## [lidarr-19.1.16](https://github.com/truecharts/charts/compare/lidarr-19.1.15...lidarr-19.1.16) (2024-02-03) - -### Chore - - - -- update container image common to v17.2.30[@19ad5ec](https://github.com/19ad5ec) by renovate ([#17804](https://github.com/truecharts/charts/issues/17804)) - - -## [lidarr-19.1.15](https://github.com/truecharts/charts/compare/lidarr-19.1.14...lidarr-19.1.15) (2024-01-29) - -### Chore - - - -- update container image ghcr.io/onedr0p/exportarr to v1.6.1[@60cf3d4](https://github.com/60cf3d4) by renovate ([#17725](https://github.com/truecharts/charts/issues/17725)) - - -## [lidarr-19.1.14](https://github.com/truecharts/charts/compare/lidarr-19.1.13...lidarr-19.1.14) (2024-01-29) - -### Chore - - - -- update container image ghcr.io/onedr0p/lidarr-develop to v2.1.4.3941[@de7dac0](https://github.com/de7dac0) by renovate ([#17674](https://github.com/truecharts/charts/issues/17674)) - - -## [lidarr-19.1.13](https://github.com/truecharts/charts/compare/lidarr-19.1.12...lidarr-19.1.13) (2024-01-26) - -### Chore - - - -- update container image common to v17.2.29[@d7c41a3](https://github.com/d7c41a3) by renovate ([#17545](https://github.com/truecharts/charts/issues/17545)) - - -## [lidarr-19.1.12](https://github.com/truecharts/charts/compare/lidarr-19.1.11...lidarr-19.1.12) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.28[@918b4c5](https://github.com/918b4c5) by renovate ([#17478](https://github.com/truecharts/charts/issues/17478)) - - -## [lidarr-19.1.11](https://github.com/truecharts/charts/compare/lidarr-19.1.10...lidarr-19.1.11) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.26[@24c98f7](https://github.com/24c98f7) by renovate ([#17409](https://github.com/truecharts/charts/issues/17409)) diff --git a/stable/lidarr/20.3.1/Chart.yaml b/stable/lidarr/20.3.1/Chart.yaml deleted file mode 100644 index c44e922e03..0000000000 --- a/stable/lidarr/20.3.1/Chart.yaml +++ /dev/null @@ -1,38 +0,0 @@ -annotations: - max_scale_version: 24.04.0 - min_scale_version: 23.10.0 - 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: 2.2.0.4053 -dependencies: - - name: common - version: 18.2.1 - repository: oci://tccr.io/truecharts - condition: "" - alias: "" - tags: [] - import-values: [] -deprecated: false -description: Looks and smells like Sonarr but made for music -home: https://truecharts.org/charts/stable/lidarr -icon: https://truecharts.org/img/hotlink-ok/chart-icons/lidarr.png -keywords: - - lidarr - - torrent - - usenet -kubeVersion: '>=1.24.0-0' -maintainers: - - name: TrueCharts - email: info@truecharts.org - url: https://truecharts.org -name: lidarr -sources: - - https://github.com/Lidarr/Lidarr - - https://github.com/truecharts/charts/tree/master/charts/stable/lidarr - - https://ghcr.io/onedr0p/exportarr - - https://ghcr.io/onedr0p/lidarr-develop -type: application -version: 20.3.1 diff --git a/stable/lidarr/20.3.1/README.md b/stable/lidarr/20.3.1/README.md deleted file mode 100644 index 5dd4de9f50..0000000000 --- a/stable/lidarr/20.3.1/README.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: README ---- - -## General Info - -TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. -However only installations using the TrueNAS SCALE Apps system are supported. - -For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/lidarr) - -**This chart is not maintained by the upstream project and any issues with the chart should be raised [here](https://github.com/truecharts/charts/issues/new/choose)** - -## Support - -- Please check our [quick-start guides for TrueNAS SCALE](https://truecharts.org/manual/SCALE/guides/scale-intro). -- See the [Website](https://truecharts.org) -- Check our [Discord](https://discord.gg/tVsPTHWTtr) -- Open a [issue](https://github.com/truecharts/charts/issues/new/choose) - ---- - -## Sponsor TrueCharts - -TrueCharts can only exist due to the incredible effort of our staff. -Please consider making a [donation](https://truecharts.org/sponsor) or contributing back to the project any way you can! - -_All Rights Reserved - The TrueCharts Project_ diff --git a/stable/lidarr/20.3.1/app-readme.md b/stable/lidarr/20.3.1/app-readme.md deleted file mode 100644 index ab0ee61c1d..0000000000 --- a/stable/lidarr/20.3.1/app-readme.md +++ /dev/null @@ -1,8 +0,0 @@ -Looks and smells like Sonarr but made for music - -This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/lidarr](https://truecharts.org/charts/stable/lidarr) - ---- - -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/lidarr/20.3.1/charts/common-18.1.2.tgz b/stable/lidarr/20.3.1/charts/common-18.1.2.tgz deleted file mode 100644 index afb1de8120d9e1088c1711607a6c323d4dae355b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99288 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 Du(4)S diff --git a/stable/lidarr/20.3.1/ix_values.yaml b/stable/lidarr/20.3.1/ix_values.yaml deleted file mode 100644 index 0e1808bf75..0000000000 --- a/stable/lidarr/20.3.1/ix_values.yaml +++ /dev/null @@ -1,109 +0,0 @@ -image: - repository: ghcr.io/onedr0p/lidarr-develop - pullPolicy: IfNotPresent - tag: 2.2.0.4053@sha256:0dc627db78c12432cb0d39df036fcc26dc8e392d7e565f5d0c8d95a376811b07 -exportarrImage: - repository: ghcr.io/onedr0p/exportarr - pullPolicy: IfNotPresent - tag: v1.6.1@sha256:60cf3d44aa0b7dea2a65160b2e2e373c1ae38cd6b12a45fe81b8afa45ac31c22 -securityContext: - container: - readOnlyRootFilesystem: false -service: - main: - ports: - main: - port: 8686 - metrics: - enabled: true - type: ClusterIP - targetSelector: exportarr - ports: - metrics: - enabled: true - port: 8687 - targetSelector: exportarr -workload: - main: - podSpec: - containers: - main: - probes: - liveness: - enabled: true - type: http - path: /ping - readiness: - enabled: true - type: http - path: /ping - startup: - enabled: true - type: http - path: /ping - env: - LIDARR__PORT: "{{ .Values.service.main.ports.main.port }}" - LIDARR__AUTHENTICATION_METHOD: "" - exportarr: - enabled: true - type: Deployment - strategy: RollingUpdate - replicas: 1 - podSpec: - containers: - exportarr: - primary: true - enabled: true - imageSelector: exportarrImage - args: - - lidarr - 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 - CONFIG: "/config/config.xml" -persistence: - config: - enabled: true - targetSelector: - main: - main: - mountPath: /config - exportarr: - exportarr: - mountPath: /config - readOnly: true -metrics: - main: - enabled: true - type: "servicemonitor" - endpoints: - - port: metrics - path: /metrics - targetSelector: metrics - prometheusRule: - enabled: false -portal: - open: - enabled: true -updated: true diff --git a/stable/lidarr/20.3.1/questions.yaml b/stable/lidarr/20.3.1/questions.yaml deleted file mode 100755 index 86ad1ce49c..0000000000 --- a/stable/lidarr/20.3.1/questions.yaml +++ /dev/null @@ -1,2899 +0,0 @@ -groups: - - name: Container Image - description: Image to be used for container - - name: General Settings - description: General Deployment Settings - - name: Workload Settings - description: Workload Settings - - name: App Configuration - description: App Specific Config Options - - name: Networking and Services - description: Configure Network and Services for Container - - name: Storage and Persistence - description: Persist and Share Data that is Separate from the Container - - name: Ingress - description: Ingress Configuration - - name: Security and Permissions - description: Configure Security Context and Permissions - - name: Resources and Devices - description: "Specify Resources/Devices to be Allocated to Workload" - - name: Middlewares - description: Traefik Middlewares - - name: Metrics - description: Metrics - - name: Addons - description: Addon Configuration - - name: Backup Configuration - description: Configure Velero Backup Schedule - - name: Advanced - description: Advanced Configuration - - name: Postgresql - description: Postgresql - - name: Documentation - description: Documentation - -portals: - open: - protocols: - - "$kubernetes-resource_configmap_tcportal-open_protocol" - host: - - "$kubernetes-resource_configmap_tcportal-open_host" - ports: - - "$kubernetes-resource_configmap_tcportal-open_port" - -questions: - - variable: global - group: General Settings - label: "Global Settings" - schema: - additional_attrs: true - type: dict - attrs: - - variable: stopAll - label: Stop All - description: "Stops All Running pods and hibernates cnpg" - schema: - type: boolean - default: false - - - variable: workload - group: "Workload Settings" - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: main - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: type - label: Type (Advanced) - schema: - type: string - default: Deployment - enum: - - value: Deployment - description: Deployment - - value: DaemonSet - description: DaemonSet - - - variable: replicas - label: Replicas (Advanced) - description: Set the number of Replicas - schema: - type: int - show_if: [["type", "!=", "DaemonSet"]] - default: 1 - - - variable: podSpec - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: containers - label: Containers - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: Main Container - schema: - additional_attrs: true - type: dict - attrs: - - - variable: env - group: App Configuration - label: Image Environment - schema: - additional_attrs: true - type: dict - attrs: - - variable: LIDARR__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 Settings" - schema: - type: string - default: "Etc/UTC" - $ref: - - "definitions/timezone" - - - variable: podOptions - group: "General Settings" - label: "Global Pod Options (Advanced)" - schema: - additional_attrs: true - type: dict - attrs: - - variable: expertPodOpts - label: "Expert - Pod Options" - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hostNetwork - label: "Host Networking" - schema: - type: boolean - default: false - - variable: dnsConfig - label: "DNS Configuration" - schema: - type: dict - additional_attrs: true - attrs: - - variable: options - label: "Options" - schema: - type: list - default: [{"name": "ndots", "value": "1"}] - items: - - variable: optionsEntry - label: "Option Entry" - schema: - type: dict - additional_attrs: true - attrs: - - variable: name - label: "Name" - schema: - type: string - required: true - - variable: value - label: "Value" - schema: - type: string - - variable: nameservers - label: "Nameservers" - schema: - type: list - default: [] - items: - - variable: nsEntry - label: "Nameserver Entry" - schema: - type: string - required: true - - variable: searches - label: "Searches" - schema: - type: list - default: [] - items: - - variable: searchEntry - label: "Search Entry" - schema: - type: string - required: true - - - variable: imagePullSecretList - group: "General Settings" - label: "Image Pull Secrets" - schema: - type: list - default: [] - items: - - variable: pullsecretentry - label: "Pull Secret" - schema: - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: true - - variable: data - label: Data - schema: - type: dict - additional_attrs: true - attrs: - - variable: registry - label: "Registry" - schema: - type: string - required: true - default: "https://index.docker.io/v1/" - - variable: username - label: "Username" - schema: - type: string - required: true - default: "" - - variable: password - label: "Password" - schema: - type: string - required: true - private: true - default: "" - - variable: email - label: "Email" - schema: - type: string - required: true - default: "" - - - variable: service - group: Networking and Services - label: Configure Service(s) - schema: - additional_attrs: true - type: dict - attrs: - - - variable: 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: 8686 - required: true - - variable: serviceexpert - group: Networking and Services - label: Show Expert Config - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - - variable: scaleExternalInterface - description: Add External Interfaces - label: Add external Interfaces - group: Networking - schema: - type: list - items: - - variable: interfaceConfiguration - description: Interface Configuration - label: Interface Configuration - schema: - additional_attrs: true - type: dict - $ref: - - "normalize/interfaceConfiguration" - attrs: - - variable: hostInterface - description: Please Specify Host Interface - label: Host Interface - schema: - type: string - required: true - $ref: - - "definitions/interface" - - variable: ipam - description: Define how IP Address will be managed - label: IP Address Management - schema: - additional_attrs: true - type: dict - required: true - attrs: - - variable: type - description: Specify type for IPAM - label: IPAM Type - schema: - type: string - required: true - enum: - - value: dhcp - description: Use DHCP - - value: static - description: Use Static IP - - variable: staticIPConfigurations - label: Static IP Addresses - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticIP - label: Static IP - schema: - type: ipaddr - cidr: true - - variable: staticRoutes - label: Static Routes - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticRouteConfiguration - label: Static Route Configuration - schema: - additional_attrs: true - type: dict - attrs: - - variable: destination - label: Destination - schema: - type: ipaddr - cidr: true - required: true - - variable: gateway - label: Gateway - schema: - type: ipaddr - cidr: false - required: true - - - variable: serviceList - label: Add Manual Custom Services - group: Networking and Services - schema: - type: list - default: [] - items: - - variable: serviceListEntry - label: Custom Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the service - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: LoadBalancer - description: LoadBalancer (Expose Ports) - - value: ClusterIP - description: ClusterIP (Do Not Expose Ports) - - value: Simple - description: Deprecated CHANGE THIS - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: advancedsvcset - label: Show Advanced Service Settings - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: externalIPs - label: "External IP's" - description: "External IP's" - schema: - type: list - default: [] - items: - - variable: externalIP - label: External IP - schema: - type: string - - variable: ipFamilyPolicy - label: IP Family Policy - description: Specify the IP Policy - schema: - type: string - default: SingleStack - enum: - - value: SingleStack - description: SingleStack - - value: PreferDualStack - description: PreferDualStack - - value: RequireDualStack - description: RequireDualStack - - variable: ipFamilies - label: IP Families - description: (Advanced) The IP Families that should be used - schema: - type: list - default: [] - items: - - variable: ipFamily - label: IP Family - schema: - type: string - - variable: portsList - label: Additional Service Ports - schema: - type: list - default: [] - items: - - variable: portsListEntry - label: Custom ports - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Port - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Port Name - schema: - type: string - default: "" - - variable: protocol - label: Port Type - schema: - type: string - default: tcp - enum: - - value: http - description: HTTP - - value: https - description: HTTPS - - value: tcp - description: TCP - - value: udp - description: UDP - - variable: targetPort - label: Target Port - description: This port exposes the container port on the service - schema: - type: int - required: true - - variable: port - label: Container Port - schema: - type: int - required: true - - - variable: persistence - label: Integrated Persistent Storage - description: Integrated Persistent Storage - group: Storage and 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: 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: Storage and Persistence - schema: - type: list - default: [] - items: - - variable: persistenceListEntry - label: Custom Storage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the storage - schema: - type: boolean - default: true - hidden: true - - variable: type - label: Type of Storage - description: Sets the persistence type, Anything other than PVC could break rollback! - schema: - type: string - default: hostPath - enum: - - value: pvc - description: PVC - - value: hostPath - description: Host Path - - value: emptyDir - description: emptyDir - - value: nfs - description: NFS Share - - variable: server - label: NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: path - label: Path on NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: iscsi - label: iSCSI Options - schema: - show_if: [["type", "=", "iscsi"]] - type: dict - additional_attrs: true - attrs: - - variable: targetPortal - label: targetPortal - schema: - type: string - required: true - default: "" - - variable: iqn - label: iqn - schema: - type: string - required: true - default: "" - - variable: lun - label: lun - schema: - type: int - default: 0 - - variable: authSession - label: authSession - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: authDiscovery - label: authDiscovery - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: autoPermissions - label: Automatic Permissions Configuration - description: Automatically set permissions - schema: - show_if: [["type", "!=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: chown - label: Run CHOWN - description: | - It will run CHOWN on the path with the given fsGroup - schema: - type: boolean - default: false - - variable: chmod - label: Run CHMOD - description: | - It will run CHMOD on the path with the given value
- Format should be 3 digits, e.g. 770 - schema: - type: string - valid_chars: '[0-9]{3}' - default: "" - - variable: recursive - label: Recursive - description: | - It will run CHOWN and CHMOD recursively - schema: - type: boolean - default: false - - variable: readOnly - label: Read Only - schema: - type: boolean - default: false - - variable: hostPath - label: Host Path - description: Path inside the container the storage is mounted - schema: - show_if: [["type", "=", "hostPath"]] - type: hostpath - - variable: mountPath - label: Mount Path - description: Path inside the container the storage is mounted - schema: - type: string - default: "" - required: true - valid_chars: '^\/([a-zA-Z0-9._-]+(\s?[a-zA-Z0-9._-]+|\/?))+$' - - variable: medium - label: EmptyDir Medium - schema: - show_if: [["type", "=", "emptyDir"]] - type: string - default: "" - enum: - - value: "" - description: Default - - value: Memory - description: Memory - - variable: size - label: Size Quotum of Storage - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: 256Gi - - variable: storageClass - label: 'storageClass (Advanced)' - description: 'sets the storageClass to something other than iX default. Only for advanced usecases!' - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: "" - - variable: static - label: 'Static Fixed PVC Bindings (Experimental)' - description: Link a PVC to a specific storage location - schema: - show_if: [["type", "=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: mode - label: mode - description: | - disabled: use normal dynamic PVCs - smb: connect to an SMB share - nfs: connect to an NFS share - schema: - type: string - default: "disabled" - enum: - - value: "disabled" - description: disabled - - value: smb - description: smb - - value: nfs - description: nfs - - variable: server - label: Server - description: server to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "myserver" - - variable: share - label: Share - description: share to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "/myshare" - - variable: user - label: User - description: connecting user - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "myuser" - - variable: domain - label: Domain - description: user domain - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: password - label: Password - description: connecting password - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: volumeSnapshots - label: 'Volume Snapshots (Experimental)' - description: Add an entry to the list to force creation of a volumeSnapshot of this PVC - schema: - show_if: [["type", "=", "pvc"]] - type: list - default: [] - items: - - variable: volumeSnapshotEntry - label: Custom volumeSnapshot - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - description: 'WARNING: renaming this, means deletion of the snapshot with the old name!' - schema: - type: string - default: "mysnapshot" - required: true - - variable: volumeSnapshotClassName - label: 'volumeSnapshot Class Name (Advanced)' - description: For use with PVCs using a non-default storageClass - schema: - type: string - default: "" - - - variable: ingress - label: "" - group: Ingress - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: "Main Ingress" - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name (Optional) - description: Defaults to chart name - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description (Optional) - description: Defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: icon - label: Icon (Optional) - description: Defaults to chart icon - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - variable: widget - label: Widget Settings - schema: - type: dict - additional_attrs: true - show_if: [["enabled", "=", true]] - attrs: - - variable: enabled - label: Enable Widget - description: When disabled all widget annotations are skipped. - schema: - type: boolean - default: true - - variable: custom - label: Options - schema: - type: dict - additional_attrs: true - attrs: - - variable: key - label: API-key (key) - schema: - type: string - default: "" - - variable: customkv - label: Custom Options - schema: - type: list - default: [] - items: - - variable: option - label: Option - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - default: "" - required: true - - variable: value - label: Value - schema: - type: string - default: "" - required: true - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - - variable: ingressList - label: Add Manual Custom Ingresses - group: Ingress - schema: - type: list - default: [] - items: - - variable: ingressListEntry - label: Custom Ingress - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: ingressClassName - label: IngressClass Name - schema: - type: string - default: "" - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: overrideService - label: Linked Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Service Name - schema: - type: string - default: "" - - variable: port - label: Service Port - schema: - type: int - - variable: tls - label: TLS-Settings - schema: - type: list - default: [] - show_if: [["certificateIssuer", "=", ""]] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your Cert-Manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: Use Custom Secret (Advanced) - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: "Allow Cross Origin Requests" - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: namespace - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description - description: defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - - variable: securityContext - group: Security and Permissions - label: Security Context - schema: - additional_attrs: true - type: dict - attrs: - - variable: container - label: Container - schema: - additional_attrs: true - type: dict - attrs: - # Settings from questions.yaml get appended here on a per-app basis - - - variable: runAsUser - label: "runAsUser" - description: "The UserID of the user running the application" - schema: - type: int - default: 568 - - variable: runAsGroup - label: "runAsGroup" - description: "The groupID 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 and Devices - label: "Resource Limits" - schema: - additional_attrs: true - type: dict - attrs: - - variable: limits - label: Advanced Limit Resource Consumption - schema: - additional_attrs: true - type: dict - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 4000m - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: RAM - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 8Gi - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: 'gpu.intel.com/i915' - label: Add Intel i915 GPUs - schema: - type: int - default: 0 - - variable: 'nvidia.com/gpu' - label: Add NVIDIA GPUs (Experimental) - schema: - type: int - default: 0 - - variable: 'amd.com/gpu' - label: Add AMD GPUs - schema: - type: int - default: 0 - - variable: requests - label: "Minimum Resources Required (request)" - schema: - additional_attrs: true - type: dict - hidden: true - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 10m - hidden: true - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: "RAM" - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 50Mi - hidden: true - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: deviceList - label: Mount USB Devices - group: Resources and Devices - schema: - type: list - default: [] - items: - - variable: deviceListEntry - label: Device - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Storage - schema: - type: boolean - default: true - - variable: type - label: (Advanced) Type of Storage - description: Sets the persistence type - schema: - type: string - default: device - hidden: true - - variable: readOnly - label: readOnly - schema: - type: boolean - default: false - - variable: hostPath - label: Host Device Path - description: Path to the device on the host system - schema: - type: path - - variable: mountPath - label: Container Device Path - description: Path inside the container the device is mounted - schema: - type: string - default: "/dev/ttyACM0" - - - variable: metrics - group: Metrics - label: Prometheus Metrics - schema: - additional_attrs: true - type: dict - attrs: - - variable: main - label: Main Metrics - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - description: Enable Prometheus Metrics - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - - variable: prometheusRule - label: PrometheusRule - description: Enable and configure Prometheus Rules for the App. - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - description: Enable Prometheus Metrics - schema: - type: boolean - default: false - # TODO: Rule List section - -# - variable: horizontalPodAutoscaler -# group: Advanced -# label: (Advanced) Horizontal Pod Autoscaler -# schema: -# type: list -# default: [] -# items: -# - variable: hpaEntry -# label: HPA Entry -# schema: -# additional_attrs: true -# type: dict -# attrs: -# - variable: name -# label: Name -# schema: -# type: string -# required: true -# default: "" -# - variable: enabled -# label: Enabled -# schema: -# type: boolean -# default: false -# show_subquestions_if: true -# subquestions: -# - variable: target -# label: Target -# description: Deployment name, Defaults to Main Deployment -# schema: -# type: string -# default: "" -# - variable: minReplicas -# label: Minimum Replicas -# schema: -# type: int -# default: 1 -# - variable: maxReplicas -# label: Maximum Replicas -# schema: -# type: int -# default: 5 -# - variable: targetCPUUtilizationPercentage -# label: Target CPU Utilization Percentage -# schema: -# type: int -# default: 80 -# - variable: targetMemoryUtilizationPercentage -# label: Target Memory Utilization Percentage -# schema: -# type: int -# default: 80 - - variable: networkPolicy - group: Advanced - label: (Advanced) Network Policy - schema: - type: list - default: [] - items: - - variable: netPolicyEntry - label: Network Policy Entry - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - default: "" - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: policyType - label: Policy Type - schema: - type: string - default: "" - enum: - - value: "" - description: Default - - value: ingress - description: Ingress - - value: egress - description: Egress - - value: ingress-egress - description: Ingress and Egress - - variable: egress - label: Egress - schema: - type: list - default: [] - items: - - variable: egressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: to - label: To - schema: - type: list - default: [] - items: - - variable: toEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - variable: ingress - label: Ingress - schema: - type: list - default: [] - items: - - variable: ingressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: from - label: From - schema: - type: list - default: [] - items: - - variable: fromEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - - variable: addons - group: Addons - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: codeserver - label: Codeserver - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: service - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: NodePort - description: Deprecated CHANGE THIS - - value: ClusterIP - description: ClusterIP - - value: LoadBalancer - description: LoadBalancer - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: ports - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: codeserver - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - default: 36107 - - variable: ingress - label: "Ingress" - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - variable: scaleCert - label: 'Use TrueNAS SCALE Certificate (Deprecated)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: int - $ref: - - "definitions/certificate" - - variable: envList - label: Codeserver Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: netshoot - label: Netshoot - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: envList - label: Netshoot Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: vpn - label: VPN - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Type - schema: - type: string - default: disabled - enum: - - value: disabled - description: disabled - - value: gluetun - description: Gluetun - - value: tailscale - description: Tailscale - - value: openvpn - description: OpenVPN (Deprecated) - - value: wireguard - description: Wireguard (Deprecated) - - variable: openvpn - label: OpenVPN Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "openvpn"]] - attrs: - - variable: username - label: Authentication Username (Optional) - description: Authentication Username, Optional - schema: - type: string - default: "" - - variable: password - label: Authentication Password - description: Authentication Credentials - schema: - type: string - show_if: [["username", "!=", ""]] - default: "" - required: true - - variable: tailscale - label: Tailscale Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "tailscale"]] - attrs: - - variable: authkey - label: Authentication Key - description: Provide an auth key to automatically authenticate the node as your user account. - schema: - type: string - private: true - default: "" - - variable: auth_once - label: Auth Once - description: Only attempt to log in if not already logged in. - schema: - type: boolean - default: true - - variable: accept_dns - label: Accept DNS - description: Accept DNS configuration from the admin console. - schema: - type: boolean - default: false - - variable: userspace - label: Userspace - description: Userspace Networking mode allows running Tailscale where you do not have access to create a VPN tunnel device. - schema: - type: boolean - default: false - - variable: routes - label: Routes - description: Expose physical subnet routes to your entire Tailscale network. - schema: - type: string - default: "" - - variable: dest_ip - label: Destination IP - description: Tells the DNAT mechanism which Destination IP to set in the IP header, and where to send packets that are matched. - schema: - type: string - default: "" - - variable: sock5_server - label: Sock5 Server - description: The address on which to listen for SOCKS5 proxying into the tailscale net. - schema: - type: string - default: "" - - variable: outbound_http_proxy_listen - label: Outbound HTTP Proxy Listen - description: The address on which to listen for HTTP proxying into the tailscale net. - schema: - type: string - default: "" - - variable: extra_args - label: Extra Args - description: Extra Args - schema: - type: string - default: "" - - variable: daemon_extra_args - label: Tailscale Daemon Extra Args - description: Tailscale Daemon Extra Args - schema: - type: string - default: "" - - variable: killSwitch - label: Enable Killswitch - schema: - type: boolean - show_if: [["type", "!=", "disabled"]] - default: true - - variable: excludedNetworks_IPv4 - label: Killswitch Excluded IPv4 networks - description: List of Killswitch Excluded IPv4 Addresses - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv4 - label: IPv4 Network - schema: - type: string - required: true - - variable: excludedNetworks_IPv6 - label: Killswitch Excluded IPv6 networks - description: "List of Killswitch Excluded IPv6 Addresses" - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv6 - label: IPv6 Network - schema: - type: string - required: true - - variable: configFile - label: VPN Config File Location - schema: - type: string - show_if: [["type", "!=", "disabled"]] - default: "" - - - variable: envList - label: VPN Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - max_length: 10240 - - - variable: docs - group: Documentation - label: Please read the documentation at https://truecharts.org - description: Please read the documentation at -
https://truecharts.org - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDocs - label: I have checked the documentation - schema: - type: boolean - default: true - - variable: donateNag - group: Documentation - label: Please consider supporting TrueCharts, see https://truecharts.org/sponsor - description: Please consider supporting TrueCharts, see -
https://truecharts.org/sponsor - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDonate - label: I have considered donating - schema: - type: boolean - default: true - hidden: true - diff --git a/stable/lidarr/20.3.1/templates/NOTES.txt b/stable/lidarr/20.3.1/templates/NOTES.txt deleted file mode 100644 index efcb74cb77..0000000000 --- a/stable/lidarr/20.3.1/templates/NOTES.txt +++ /dev/null @@ -1 +0,0 @@ -{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/lidarr/20.3.1/templates/common.yaml b/stable/lidarr/20.3.1/templates/common.yaml deleted file mode 100644 index 3c93f57861..0000000000 --- a/stable/lidarr/20.3.1/templates/common.yaml +++ /dev/null @@ -1,11 +0,0 @@ -{{/* Make sure all variables are set properly */}} -{{- include "tc.v1.common.loader.init" . -}} - -{{/* Disable [exportarr] if requested */}} -{{- if not .Values.metrics.main.enabled -}} - {{- $_ := set .Values.workload.exportarr "enabled" false -}} - {{- $_ := set .Values.service.metrics "enabled" false -}} -{{- end -}} - -{{/* Render the templates */}} -{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/lidarr/20.3.1/values.yaml b/stable/lidarr/20.3.1/values.yaml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/stable/lidarr/21.6.16/.helmignore b/stable/lidarr/21.6.16/.helmignore deleted file mode 100644 index 77ca5567b2..0000000000 --- a/stable/lidarr/21.6.16/.helmignore +++ /dev/null @@ -1,30 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ -# OWNERS file for Kubernetes -OWNERS -# helm-docs templates -*.gotmpl -# docs folder -/docs -# icon -icon.png diff --git a/stable/lidarr/21.6.16/CHANGELOG.md b/stable/lidarr/21.6.16/CHANGELOG.md deleted file mode 100644 index 941abb8a21..0000000000 --- a/stable/lidarr/21.6.16/CHANGELOG.md +++ /dev/null @@ -1,3 +0,0 @@ -*for the complete changelog, please refer to the website* - -**Important:** \ No newline at end of file diff --git a/stable/lidarr/21.6.16/Chart.yaml b/stable/lidarr/21.6.16/Chart.yaml deleted file mode 100644 index 887c055ed5..0000000000 --- a/stable/lidarr/21.6.16/Chart.yaml +++ /dev/null @@ -1,38 +0,0 @@ -annotations: - max_scale_version: 24.04.0 - min_scale_version: 23.10.0 - 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: 2.2.5.4141 -dependencies: - - name: common - version: 20.4.1 - repository: oci://tccr.io/truecharts - condition: "" - alias: "" - tags: [] - import-values: [] -deprecated: false -description: Looks and smells like Sonarr but made for music -home: https://truecharts.org/charts/stable/lidarr -icon: https://truecharts.org/img/hotlink-ok/chart-icons/lidarr.webp -keywords: - - lidarr - - torrent - - usenet -kubeVersion: ">=1.24.0-0" -maintainers: - - name: TrueCharts - email: info@truecharts.org - url: https://truecharts.org -name: lidarr -sources: - - https://github.com/Lidarr/Lidarr - - https://github.com/truecharts/charts/tree/master/charts/stable/lidarr - - https://ghcr.io/onedr0p/lidarr-develop - - https://ghcr.io/onedr0p/exportarr -type: application -version: 21.6.16 diff --git a/stable/lidarr/21.6.16/README.md b/stable/lidarr/21.6.16/README.md deleted file mode 100644 index 09dc414f81..0000000000 --- a/stable/lidarr/21.6.16/README.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -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/lidarr) - -**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/guides/scale-intro). - -## Configuration Options - -To view the chart specific options, please view Values.yaml included in the chart. - -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/ - -## 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/lidarr - -## 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/lidarr/21.6.16/app-changelog.md b/stable/lidarr/21.6.16/app-changelog.md deleted file mode 100644 index 398d596417..0000000000 --- a/stable/lidarr/21.6.16/app-changelog.md +++ /dev/null @@ -1,71 +0,0 @@ - - -## [lidarr-21.6.16](https://github.com/truecharts/charts/compare/lidarr-21.4.0...lidarr-21.6.16) (2024-04-26) - -### Chore - - - -- bump charts to ensure new icons are released - -- update groups html ([#21121](https://github.com/truecharts/charts/issues/21121)) - -- bump charts to release new docs to fix broken links - -- bump everything to regenerate readme's and site index - -- bump everything to release new doc pages - -- update container image common to v20.3.3[@3876ba5](https://github.com/3876ba5) by renovate ([#20478](https://github.com/truecharts/charts/issues/20478)) - -- update container image ghcr.io/onedr0p/lidarr-develop to 2.2.3.4098[@5b24ac3](https://github.com/5b24ac3) by renovate ([#20065](https://github.com/truecharts/charts/issues/20065)) - -- update container image ghcr.io/onedr0p/lidarr-develop to 2.2.5.4141[@e706cb5](https://github.com/e706cb5) by renovate ([#20763](https://github.com/truecharts/charts/issues/20763)) - -- update container image ghcr.io/onedr0p/lidarr-develop to v2.2.5.4141[@8f6f461](https://github.com/8f6f461) by renovate ([#20701](https://github.com/truecharts/charts/issues/20701)) - -- update container image common to v20.3.6[@27edfed](https://github.com/27edfed) by renovate ([#20599](https://github.com/truecharts/charts/issues/20599)) - -- update container image common to v20.3.5[@aedd88a](https://github.com/aedd88a) by renovate ([#20535](https://github.com/truecharts/charts/issues/20535)) - -- update container image common to v20.3.4[@d7e1b23](https://github.com/d7e1b23) by renovate ([#20527](https://github.com/truecharts/charts/issues/20527)) - -- update container image common to v20.3.11[@dae6129](https://github.com/dae6129) by renovate ([#20875](https://github.com/truecharts/charts/issues/20875)) - -- update container image ghcr.io/onedr0p/lidarr-develop to 2.2.3.4098[@51ad0a1](https://github.com/51ad0a1) by renovate ([#20423](https://github.com/truecharts/charts/issues/20423)) - -- update container image common to v20.3.2[@0722ebb](https://github.com/0722ebb) by renovate ([#20334](https://github.com/truecharts/charts/issues/20334)) - -- update container image ghcr.io/onedr0p/exportarr to v2.0.1[@727e7bc](https://github.com/727e7bc) by renovate ([#20284](https://github.com/truecharts/charts/issues/20284)) - -- update container image common to v20.3.7[@8cf9fc9](https://github.com/8cf9fc9) by renovate ([#20819](https://github.com/truecharts/charts/issues/20819)) - -- update container image common to v20.2.10[@6f99c97](https://github.com/6f99c97) by renovate ([#19876](https://github.com/truecharts/charts/issues/19876)) - -- update container image common to v20.2.9[@10fd6c5](https://github.com/10fd6c5) by renovate ([#19817](https://github.com/truecharts/charts/issues/19817)) - -- update container image common to v20.2.4[@f245f5c](https://github.com/f245f5c) by renovate ([#19731](https://github.com/truecharts/charts/issues/19731)) - -- update container image common to v20.2.3[@06e462e](https://github.com/06e462e) by renovate ([#19673](https://github.com/truecharts/charts/issues/19673)) - -- update container image common to v20.2.2[@f7d0b92](https://github.com/f7d0b92) by renovate ([#19432](https://github.com/truecharts/charts/issues/19432)) - -- update container image ghcr.io/onedr0p/lidarr-develop to v2.2.3.4098[@ddb5035](https://github.com/ddb5035) by renovate ([#19416](https://github.com/truecharts/charts/issues/19416)) - -- update container image ghcr.io/onedr0p/lidarr-develop to v2.2.2.4090[@4978f1e](https://github.com/4978f1e) by renovate ([#19404](https://github.com/truecharts/charts/issues/19404)) - -- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) - -- update container image ghcr.io/onedr0p/lidarr-develop to 2.2.1.4073[@ae2b24d](https://github.com/ae2b24d) by renovate ([#19254](https://github.com/truecharts/charts/issues/19254)) - -### Chore - - - -- rework SCALE catagories/groups to match helm and remove deprecated charts ([#21111](https://github.com/truecharts/charts/issues/21111)) - -### Fix - - - -- replace serviceexpert with externalinterfaces/networking-group in the SCALE GUI ([#21154](https://github.com/truecharts/charts/issues/21154)) \ No newline at end of file diff --git a/stable/lidarr/21.6.16/app-readme.md b/stable/lidarr/21.6.16/app-readme.md deleted file mode 100644 index ab0ee61c1d..0000000000 --- a/stable/lidarr/21.6.16/app-readme.md +++ /dev/null @@ -1,8 +0,0 @@ -Looks and smells like Sonarr but made for music - -This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/lidarr](https://truecharts.org/charts/stable/lidarr) - ---- - -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/lidarr/21.6.16/charts/common-20.3.11.tgz b/stable/lidarr/21.6.16/charts/common-20.3.11.tgz deleted file mode 100644 index 010f5b5a245d342f6f0d2e0ef95338a45ead19b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99404 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%0AZSzDiWTe))Y`J0OOCXlO`z1O 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 P00960fC|;b09p(Hd4E&t diff --git a/stable/lidarr/21.6.16/icon-small.webp b/stable/lidarr/21.6.16/icon-small.webp deleted file mode 100644 index ffc718e55bead60292458ae561244b8c050b095c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 784 zcmV+r1MmD&Nk&Ep0{{S5MM6+kP&il$0000G0000V0018V06|PpNag?l00DqwZQC*D z`8}~!&KBa{Hae}sRy(Msj_u^1Dt674IDdv8-W^251gKyu?g8KN_4ToDz^#C-f@${N zIU%NV*K0D^weKOp_gX&7?}UUMzr~Rp3`q?pGfX=q**4>OLef2PDja!E1pwnYMEGm~ zJt5K_;Ed)B`M)&31wA3+o&~CfRjPHH%08hwU8Y)_p_*%>YR~$n`Od~MjSbY(Gz02A z#ghi0snM++9PKcntudD)PzeJix`4HEox${V>PQ>_0RH&+ zqry5~o9|eY>NT$Cydu~){dt3b3Fc@9#wPByc)goptdH&^-3$&Rj^%yvy%$~+)#E#( z;k&P=F1Vvd=6ASf;jfYMqOU=tpO#nsVg57U$ZB~hZ`6Kqd_98?VM*5X9+h%yZD(Kv z%=UI~44yydHBKU2;nc?+FHKH-1l?+_d(Tr}4^M$++Y&hP6m_z?N(b>KQ!snY{p8Z$lq7&^h|*rq)G28+cwni6rZ zhJkh%Z~gqt0&S3kWg4Sp3FPk`Z%R5&n- z493T3*MKla^~Lvjqe@?n%$S+->FU!==l#nO{VU`@K8y`c)9(KNwd8M($&U_;_Z(Vp O>Z=3?OGI*M0001H$#?t! diff --git a/stable/lidarr/21.6.16/icon.webp b/stable/lidarr/21.6.16/icon.webp deleted file mode 100644 index 94f456d573c753ab2ecbb702eeb4c01167833a92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4390 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 diff --git a/stable/lidarr/21.6.16/ix_values.yaml b/stable/lidarr/21.6.16/ix_values.yaml deleted file mode 100644 index a2acfc65c8..0000000000 --- a/stable/lidarr/21.6.16/ix_values.yaml +++ /dev/null @@ -1,109 +0,0 @@ -image: - repository: ghcr.io/onedr0p/lidarr-develop - pullPolicy: IfNotPresent - tag: 2.2.5.4141@sha256:e706cb518eed32a850bdddd67084056c47bd1ce2cc93970ed62ffbd118d70fb4 -exportarrImage: - repository: ghcr.io/onedr0p/exportarr - pullPolicy: IfNotPresent - tag: v2.0.1@sha256:727e7bc8f2f0934a2117978c59f4476b954018b849a010ea6cfb380bd6539644 -securityContext: - container: - readOnlyRootFilesystem: false -service: - main: - ports: - main: - port: 8686 - metrics: - enabled: true - type: ClusterIP - targetSelector: exportarr - ports: - metrics: - enabled: true - port: 8687 - targetSelector: exportarr -workload: - main: - podSpec: - containers: - main: - probes: - liveness: - enabled: true - type: http - path: /ping - readiness: - enabled: true - type: http - path: /ping - startup: - enabled: true - type: http - path: /ping - env: - LIDARR__PORT: "{{ .Values.service.main.ports.main.port }}" - LIDARR__AUTHENTICATION_METHOD: "" - exportarr: - enabled: true - type: Deployment - strategy: RollingUpdate - replicas: 1 - podSpec: - containers: - exportarr: - primary: true - enabled: true - imageSelector: exportarrImage - args: - - lidarr - 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 - CONFIG: "/config/config.xml" -persistence: - config: - enabled: true - targetSelector: - main: - main: - mountPath: /config - exportarr: - exportarr: - mountPath: /config - readOnly: true -metrics: - main: - enabled: true - type: "servicemonitor" - endpoints: - - port: metrics - path: /metrics - targetSelector: metrics - prometheusRule: - enabled: false -portal: - open: - enabled: true -updated: true diff --git a/stable/lidarr/21.6.16/questions.yaml b/stable/lidarr/21.6.16/questions.yaml deleted file mode 100755 index 9ab5bdd4a7..0000000000 --- a/stable/lidarr/21.6.16/questions.yaml +++ /dev/null @@ -1,3021 +0,0 @@ -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: 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: LIDARR__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: 8686 - 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: 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: 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/lidarr/21.6.16/templates/NOTES.txt b/stable/lidarr/21.6.16/templates/NOTES.txt deleted file mode 100644 index efcb74cb77..0000000000 --- a/stable/lidarr/21.6.16/templates/NOTES.txt +++ /dev/null @@ -1 +0,0 @@ -{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/lidarr/21.6.16/templates/common.yaml b/stable/lidarr/21.6.16/templates/common.yaml deleted file mode 100644 index 3c93f57861..0000000000 --- a/stable/lidarr/21.6.16/templates/common.yaml +++ /dev/null @@ -1,11 +0,0 @@ -{{/* Make sure all variables are set properly */}} -{{- include "tc.v1.common.loader.init" . -}} - -{{/* Disable [exportarr] if requested */}} -{{- if not .Values.metrics.main.enabled -}} - {{- $_ := set .Values.workload.exportarr "enabled" false -}} - {{- $_ := set .Values.service.metrics "enabled" false -}} -{{- end -}} - -{{/* Render the templates */}} -{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/lidarr/21.6.16/values.yaml b/stable/lidarr/21.6.16/values.yaml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/stable/lidarr/21.6.17/.helmignore b/stable/lidarr/21.6.17/.helmignore deleted file mode 100644 index 77ca5567b2..0000000000 --- a/stable/lidarr/21.6.17/.helmignore +++ /dev/null @@ -1,30 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ -# OWNERS file for Kubernetes -OWNERS -# helm-docs templates -*.gotmpl -# docs folder -/docs -# icon -icon.png diff --git a/stable/lidarr/21.6.17/CHANGELOG.md b/stable/lidarr/21.6.17/CHANGELOG.md deleted file mode 100644 index 941abb8a21..0000000000 --- a/stable/lidarr/21.6.17/CHANGELOG.md +++ /dev/null @@ -1,3 +0,0 @@ -*for the complete changelog, please refer to the website* - -**Important:** \ No newline at end of file diff --git a/stable/lidarr/21.6.17/Chart.yaml b/stable/lidarr/21.6.17/Chart.yaml deleted file mode 100644 index 29726d75ef..0000000000 --- a/stable/lidarr/21.6.17/Chart.yaml +++ /dev/null @@ -1,38 +0,0 @@ -annotations: - max_scale_version: 24.04.0 - min_scale_version: 23.10.0 - 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: 2.2.5.4141 -dependencies: - - name: common - version: 20.4.1 - repository: oci://tccr.io/truecharts - condition: "" - alias: "" - tags: [] - import-values: [] -deprecated: false -description: Looks and smells like Sonarr but made for music -home: https://truecharts.org/charts/stable/lidarr -icon: https://truecharts.org/img/hotlink-ok/chart-icons/lidarr.webp -keywords: - - lidarr - - torrent - - usenet -kubeVersion: ">=1.24.0-0" -maintainers: - - name: TrueCharts - email: info@truecharts.org - url: https://truecharts.org -name: lidarr -sources: - - https://github.com/Lidarr/Lidarr - - https://github.com/truecharts/charts/tree/master/charts/stable/lidarr - - https://ghcr.io/onedr0p/exportarr - - https://ghcr.io/onedr0p/lidarr-develop -type: application -version: 21.6.17 diff --git a/stable/lidarr/21.6.17/README.md b/stable/lidarr/21.6.17/README.md deleted file mode 100644 index 09dc414f81..0000000000 --- a/stable/lidarr/21.6.17/README.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -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/lidarr) - -**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/guides/scale-intro). - -## Configuration Options - -To view the chart specific options, please view Values.yaml included in the chart. - -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/ - -## 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/lidarr - -## 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/lidarr/21.6.17/app-changelog.md b/stable/lidarr/21.6.17/app-changelog.md deleted file mode 100644 index f4e0564495..0000000000 --- a/stable/lidarr/21.6.17/app-changelog.md +++ /dev/null @@ -1,73 +0,0 @@ - - -## [lidarr-21.6.17](https://github.com/truecharts/charts/compare/lidarr-21.4.0...lidarr-21.6.17) (2024-04-28) - -### Chore - - - -- bump charts to ensure new icons are released - -- bump everything to release new doc pages - -- update groups html ([#21121](https://github.com/truecharts/charts/issues/21121)) - -- bump charts to release new docs to fix broken links - -- bump everything to regenerate readme's and site index - -- update container image common to v20.3.4[@d7e1b23](https://github.com/d7e1b23) by renovate ([#20527](https://github.com/truecharts/charts/issues/20527)) - -- update container image ghcr.io/onedr0p/exportarr to v2.0.1[@727e7bc](https://github.com/727e7bc) by renovate ([#20284](https://github.com/truecharts/charts/issues/20284)) - -- update container image common to v20.3.7[@8cf9fc9](https://github.com/8cf9fc9) by renovate ([#20819](https://github.com/truecharts/charts/issues/20819)) - -- update container image ghcr.io/onedr0p/lidarr-develop to 2.2.5.4141[@e706cb5](https://github.com/e706cb5) by renovate ([#20763](https://github.com/truecharts/charts/issues/20763)) - -- update container image ghcr.io/onedr0p/lidarr-develop to v2.2.5.4141[@8f6f461](https://github.com/8f6f461) by renovate ([#20701](https://github.com/truecharts/charts/issues/20701)) - -- update container image common to v20.3.6[@27edfed](https://github.com/27edfed) by renovate ([#20599](https://github.com/truecharts/charts/issues/20599)) - -- update container image common to v20.3.5[@aedd88a](https://github.com/aedd88a) by renovate ([#20535](https://github.com/truecharts/charts/issues/20535)) - -- update container image common to v20.3.12[@3303278](https://github.com/3303278) by renovate ([#21384](https://github.com/truecharts/charts/issues/21384)) - -- update container image common to v20.3.3[@3876ba5](https://github.com/3876ba5) by renovate ([#20478](https://github.com/truecharts/charts/issues/20478)) - -- update container image ghcr.io/onedr0p/lidarr-develop to 2.2.3.4098[@51ad0a1](https://github.com/51ad0a1) by renovate ([#20423](https://github.com/truecharts/charts/issues/20423)) - -- update container image common to v20.3.2[@0722ebb](https://github.com/0722ebb) by renovate ([#20334](https://github.com/truecharts/charts/issues/20334)) - -- update container image common to v20.3.11[@dae6129](https://github.com/dae6129) by renovate ([#20875](https://github.com/truecharts/charts/issues/20875)) - -- update container image ghcr.io/onedr0p/lidarr-develop to 2.2.3.4098[@5b24ac3](https://github.com/5b24ac3) by renovate ([#20065](https://github.com/truecharts/charts/issues/20065)) - -- update container image common to v20.2.10[@6f99c97](https://github.com/6f99c97) by renovate ([#19876](https://github.com/truecharts/charts/issues/19876)) - -- update container image common to v20.2.9[@10fd6c5](https://github.com/10fd6c5) by renovate ([#19817](https://github.com/truecharts/charts/issues/19817)) - -- update container image common to v20.2.4[@f245f5c](https://github.com/f245f5c) by renovate ([#19731](https://github.com/truecharts/charts/issues/19731)) - -- update container image common to v20.2.3[@06e462e](https://github.com/06e462e) by renovate ([#19673](https://github.com/truecharts/charts/issues/19673)) - -- update container image common to v20.2.2[@f7d0b92](https://github.com/f7d0b92) by renovate ([#19432](https://github.com/truecharts/charts/issues/19432)) - -- update container image ghcr.io/onedr0p/lidarr-develop to v2.2.3.4098[@ddb5035](https://github.com/ddb5035) by renovate ([#19416](https://github.com/truecharts/charts/issues/19416)) - -- update container image ghcr.io/onedr0p/lidarr-develop to v2.2.2.4090[@4978f1e](https://github.com/4978f1e) by renovate ([#19404](https://github.com/truecharts/charts/issues/19404)) - -- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) - -- update container image ghcr.io/onedr0p/lidarr-develop to 2.2.1.4073[@ae2b24d](https://github.com/ae2b24d) by renovate ([#19254](https://github.com/truecharts/charts/issues/19254)) - -### Chore - - - -- rework SCALE catagories/groups to match helm and remove deprecated charts ([#21111](https://github.com/truecharts/charts/issues/21111)) - -### Fix - - - -- replace serviceexpert with externalinterfaces/networking-group in the SCALE GUI ([#21154](https://github.com/truecharts/charts/issues/21154)) \ No newline at end of file diff --git a/stable/lidarr/21.6.17/app-readme.md b/stable/lidarr/21.6.17/app-readme.md deleted file mode 100644 index ab0ee61c1d..0000000000 --- a/stable/lidarr/21.6.17/app-readme.md +++ /dev/null @@ -1,8 +0,0 @@ -Looks and smells like Sonarr but made for music - -This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/lidarr](https://truecharts.org/charts/stable/lidarr) - ---- - -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/lidarr/21.6.17/charts/common-20.3.12.tgz b/stable/lidarr/21.6.17/charts/common-20.3.12.tgz deleted file mode 100644 index 621bd9e5a5277eda78f0f106b46b6afdc6f56acd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99407 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
    iZ#x$K}*@0J4scA@_XsWr>MiG1UB+r_n|MJ)K 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 S{{H{~0RR7!&lutWS_}Y48_RhB diff --git a/stable/lidarr/21.6.17/icon-small.webp b/stable/lidarr/21.6.17/icon-small.webp deleted file mode 100644 index ffc718e55bead60292458ae561244b8c050b095c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 784 zcmV+r1MmD&Nk&Ep0{{S5MM6+kP&il$0000G0000V0018V06|PpNag?l00DqwZQC*D z`8}~!&KBa{Hae}sRy(Msj_u^1Dt674IDdv8-W^251gKyu?g8KN_4ToDz^#C-f@${N zIU%NV*K0D^weKOp_gX&7?}UUMzr~Rp3`q?pGfX=q**4>OLef2PDja!E1pwnYMEGm~ zJt5K_;Ed)B`M)&31wA3+o&~CfRjPHH%08hwU8Y)_p_*%>YR~$n`Od~MjSbY(Gz02A z#ghi0snM++9PKcntudD)PzeJix`4HEox${V>PQ>_0RH&+ zqry5~o9|eY>NT$Cydu~){dt3b3Fc@9#wPByc)goptdH&^-3$&Rj^%yvy%$~+)#E#( z;k&P=F1Vvd=6ASf;jfYMqOU=tpO#nsVg57U$ZB~hZ`6Kqd_98?VM*5X9+h%yZD(Kv z%=UI~44yydHBKU2;nc?+FHKH-1l?+_d(Tr}4^M$++Y&hP6m_z?N(b>KQ!snY{p8Z$lq7&^h|*rq)G28+cwni6rZ zhJkh%Z~gqt0&S3kWg4Sp3FPk`Z%R5&n- z493T3*MKla^~Lvjqe@?n%$S+->FU!==l#nO{VU`@K8y`c)9(KNwd8M($&U_;_Z(Vp O>Z=3?OGI*M0001H$#?t! diff --git a/stable/lidarr/21.6.17/icon.webp b/stable/lidarr/21.6.17/icon.webp deleted file mode 100644 index 94f456d573c753ab2ecbb702eeb4c01167833a92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4390 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 diff --git a/stable/lidarr/21.6.17/ix_values.yaml b/stable/lidarr/21.6.17/ix_values.yaml deleted file mode 100644 index a2acfc65c8..0000000000 --- a/stable/lidarr/21.6.17/ix_values.yaml +++ /dev/null @@ -1,109 +0,0 @@ -image: - repository: ghcr.io/onedr0p/lidarr-develop - pullPolicy: IfNotPresent - tag: 2.2.5.4141@sha256:e706cb518eed32a850bdddd67084056c47bd1ce2cc93970ed62ffbd118d70fb4 -exportarrImage: - repository: ghcr.io/onedr0p/exportarr - pullPolicy: IfNotPresent - tag: v2.0.1@sha256:727e7bc8f2f0934a2117978c59f4476b954018b849a010ea6cfb380bd6539644 -securityContext: - container: - readOnlyRootFilesystem: false -service: - main: - ports: - main: - port: 8686 - metrics: - enabled: true - type: ClusterIP - targetSelector: exportarr - ports: - metrics: - enabled: true - port: 8687 - targetSelector: exportarr -workload: - main: - podSpec: - containers: - main: - probes: - liveness: - enabled: true - type: http - path: /ping - readiness: - enabled: true - type: http - path: /ping - startup: - enabled: true - type: http - path: /ping - env: - LIDARR__PORT: "{{ .Values.service.main.ports.main.port }}" - LIDARR__AUTHENTICATION_METHOD: "" - exportarr: - enabled: true - type: Deployment - strategy: RollingUpdate - replicas: 1 - podSpec: - containers: - exportarr: - primary: true - enabled: true - imageSelector: exportarrImage - args: - - lidarr - 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 - CONFIG: "/config/config.xml" -persistence: - config: - enabled: true - targetSelector: - main: - main: - mountPath: /config - exportarr: - exportarr: - mountPath: /config - readOnly: true -metrics: - main: - enabled: true - type: "servicemonitor" - endpoints: - - port: metrics - path: /metrics - targetSelector: metrics - prometheusRule: - enabled: false -portal: - open: - enabled: true -updated: true diff --git a/stable/lidarr/21.6.17/questions.yaml b/stable/lidarr/21.6.17/questions.yaml deleted file mode 100755 index 9ab5bdd4a7..0000000000 --- a/stable/lidarr/21.6.17/questions.yaml +++ /dev/null @@ -1,3021 +0,0 @@ -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: 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: LIDARR__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: 8686 - 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: 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: 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/lidarr/21.6.17/templates/NOTES.txt b/stable/lidarr/21.6.17/templates/NOTES.txt deleted file mode 100644 index efcb74cb77..0000000000 --- a/stable/lidarr/21.6.17/templates/NOTES.txt +++ /dev/null @@ -1 +0,0 @@ -{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/lidarr/21.6.17/templates/common.yaml b/stable/lidarr/21.6.17/templates/common.yaml deleted file mode 100644 index 3c93f57861..0000000000 --- a/stable/lidarr/21.6.17/templates/common.yaml +++ /dev/null @@ -1,11 +0,0 @@ -{{/* Make sure all variables are set properly */}} -{{- include "tc.v1.common.loader.init" . -}} - -{{/* Disable [exportarr] if requested */}} -{{- if not .Values.metrics.main.enabled -}} - {{- $_ := set .Values.workload.exportarr "enabled" false -}} - {{- $_ := set .Values.service.metrics "enabled" false -}} -{{- end -}} - -{{/* Render the templates */}} -{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/lidarr/21.6.17/values.yaml b/stable/lidarr/21.6.17/values.yaml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/stable/lidarr/app_versions.json b/stable/lidarr/app_versions.json index c5f993ad10..05bbf50c2b 100644 --- a/stable/lidarr/app_versions.json +++ b/stable/lidarr/app_versions.json @@ -3,13 +3,13 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/lidarr/22.1.6", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/stable/lidarr/22.1.6", + "last_update": "2024-11-14 00:26:29", "required_features": [ - "definitions/timezone", - "normalize/interfaceConfiguration", "definitions/certificate", - "definitions/interface" + "normalize/interfaceConfiguration", + "definitions/interface", + "definitions/timezone" ], "human_version": "2.3.3.4204_22.1.6", "version": "22.1.6", @@ -25,7 +25,7 @@ "dependencies": [ { "name": "common", - "version": "23.0.10", + "version": "23.0.11", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -5370,13 +5370,13 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/lidarr/22.1.5", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/stable/lidarr/22.1.5", + "last_update": "2024-11-14 00:26:29", "required_features": [ - "definitions/timezone", - "normalize/interfaceConfiguration", "definitions/certificate", - "definitions/interface" + "normalize/interfaceConfiguration", + "definitions/interface", + "definitions/timezone" ], "human_version": "2.3.3.4204_22.1.5", "version": "22.1.5", @@ -5392,7 +5392,7 @@ "dependencies": [ { "name": "common", - "version": "23.0.9", + "version": "23.0.11", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -10732,30319 +10732,5 @@ "app_readme": "

    Looks and smells like Sonarr but made for music

    \n

    This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/lidarr

    \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/lidarr

    \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/lidarr/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:

    " - }, - "21.6.17": { - "healthy": true, - "supported": true, - "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/lidarr/21.6.17", - "last_update": "2024-05-29 12:35:14", - "required_features": [ - "definitions/timezone", - "normalize/interfaceConfiguration", - "definitions/certificate", - "definitions/interface" - ], - "human_version": "2.2.5.4141_21.6.17", - "version": "21.6.17", - "chart_metadata": { - "annotations": { - "max_scale_version": "24.04.0", - "min_scale_version": "23.10.0", - "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": "2.2.5.4141", - "dependencies": [ - { - "name": "common", - "version": "20.3.12", - "repository": "oci://tccr.io/truecharts", - "condition": "", - "alias": "", - "tags": [], - "import-values": [] - } - ], - "deprecated": false, - "description": "Looks and smells like Sonarr but made for music", - "home": "https://truecharts.org/charts/stable/lidarr", - "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/lidarr.webp", - "keywords": [ - "lidarr", - "torrent", - "usenet" - ], - "kubeVersion": ">=1.24.0-0", - "maintainers": [ - { - "name": "TrueCharts", - "email": "info@truecharts.org", - "url": "https://truecharts.org" - } - ], - "name": "lidarr", - "sources": [ - "https://github.com/Lidarr/Lidarr", - "https://github.com/truecharts/charts/tree/master/charts/stable/lidarr", - "https://ghcr.io/onedr0p/exportarr", - "https://ghcr.io/onedr0p/lidarr-develop" - ], - "type": "application", - "version": "21.6.17" - }, - "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": "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": "LIDARR__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": 8686, - "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": "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": "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": "

    Looks and smells like Sonarr but made for music

    \n

    This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/lidarr

    \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

    Configuration Options

    \n

    To view the chart specific options, please view Values.yaml included in the chart.

    \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

    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/lidarr

    \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:

    " - }, - "21.6.16": { - "healthy": true, - "supported": true, - "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/lidarr/21.6.16", - "last_update": "2024-05-29 12:35:14", - "required_features": [ - "definitions/timezone", - "normalize/interfaceConfiguration", - "definitions/certificate", - "definitions/interface" - ], - "human_version": "2.2.5.4141_21.6.16", - "version": "21.6.16", - "chart_metadata": { - "annotations": { - "max_scale_version": "24.04.0", - "min_scale_version": "23.10.0", - "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": "2.2.5.4141", - "dependencies": [ - { - "name": "common", - "version": "20.3.11", - "repository": "oci://tccr.io/truecharts", - "condition": "", - "alias": "", - "tags": [], - "import-values": [] - } - ], - "deprecated": false, - "description": "Looks and smells like Sonarr but made for music", - "home": "https://truecharts.org/charts/stable/lidarr", - "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/lidarr.webp", - "keywords": [ - "lidarr", - "torrent", - "usenet" - ], - "kubeVersion": ">=1.24.0-0", - "maintainers": [ - { - "name": "TrueCharts", - "email": "info@truecharts.org", - "url": "https://truecharts.org" - } - ], - "name": "lidarr", - "sources": [ - "https://github.com/Lidarr/Lidarr", - "https://github.com/truecharts/charts/tree/master/charts/stable/lidarr", - "https://ghcr.io/onedr0p/lidarr-develop", - "https://ghcr.io/onedr0p/exportarr" - ], - "type": "application", - "version": "21.6.16" - }, - "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": "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": "LIDARR__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": 8686, - "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": "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": "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": "

    Looks and smells like Sonarr but made for music

    \n

    This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/lidarr

    \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

    Configuration Options

    \n

    To view the chart specific options, please view Values.yaml included in the chart.

    \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

    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/lidarr

    \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, - "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/lidarr/20.3.1", - "last_update": "2024-05-29 12:35:14", - "required_features": [ - "definitions/timezone", - "normalize/interfaceConfiguration", - "definitions/certificate", - "definitions/interface" - ], - "human_version": "2.2.0.4053_20.3.1", - "version": "20.3.1", - "chart_metadata": { - "annotations": { - "max_scale_version": "24.04.0", - "min_scale_version": "23.10.0", - "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": "2.2.0.4053", - "dependencies": [ - { - "name": "common", - "version": "18.1.2", - "repository": "oci://tccr.io/truecharts", - "condition": "", - "alias": "", - "tags": [], - "import-values": [] - } - ], - "deprecated": false, - "description": "Looks and smells like Sonarr but made for music", - "home": "https://truecharts.org/charts/stable/lidarr", - "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/lidarr.png", - "keywords": [ - "lidarr", - "torrent", - "usenet" - ], - "kubeVersion": ">=1.24.0-0", - "maintainers": [ - { - "name": "TrueCharts", - "email": "info@truecharts.org", - "url": "https://truecharts.org" - } - ], - "name": "lidarr", - "sources": [ - "https://github.com/Lidarr/Lidarr", - "https://github.com/truecharts/charts/tree/master/charts/stable/lidarr", - "https://ghcr.io/onedr0p/exportarr", - "https://ghcr.io/onedr0p/lidarr-develop" - ], - "type": "application", - "version": "20.3.1" - }, - "app_metadata": null, - "schema": { - "groups": [ - { - "name": "Container Image", - "description": "Image to be used for container" - }, - { - "name": "General Settings", - "description": "General Deployment Settings" - }, - { - "name": "Workload Settings", - "description": "Workload Settings" - }, - { - "name": "App Configuration", - "description": "App Specific Config Options" - }, - { - "name": "Networking and Services", - "description": "Configure Network and Services for Container" - }, - { - "name": "Storage and Persistence", - "description": "Persist and Share Data that is Separate from the Container" - }, - { - "name": "Ingress", - "description": "Ingress Configuration" - }, - { - "name": "Security and Permissions", - "description": "Configure Security Context and Permissions" - }, - { - "name": "Resources and Devices", - "description": "Specify Resources/Devices to be Allocated to Workload" - }, - { - "name": "Middlewares", - "description": "Traefik Middlewares" - }, - { - "name": "Metrics", - "description": "Metrics" - }, - { - "name": "Addons", - "description": "Addon Configuration" - }, - { - "name": "Backup Configuration", - "description": "Configure Velero Backup Schedule" - }, - { - "name": "Advanced", - "description": "Advanced Configuration" - }, - { - "name": "Postgresql", - "description": "Postgresql" - }, - { - "name": "Documentation", - "description": "Documentation" - } - ], - "portals": { - "open": { - "protocols": [ - "$kubernetes-resource_configmap_tcportal-open_protocol" - ], - "host": [ - "$kubernetes-resource_configmap_tcportal-open_host" - ], - "ports": [ - "$kubernetes-resource_configmap_tcportal-open_port" - ] - } - }, - "questions": [ - { - "variable": "global", - "group": "General Settings", - "label": "Global Settings", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "stopAll", - "label": "Stop All", - "description": "Stops All Running pods and hibernates cnpg", - "schema": { - "type": "boolean", - "default": false - } - } - ] - } - }, - { - "variable": "workload", - "group": "Workload Settings", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Type (Advanced)", - "schema": { - "type": "string", - "default": "Deployment", - "enum": [ - { - "value": "Deployment", - "description": "Deployment" - }, - { - "value": "DaemonSet", - "description": "DaemonSet" - } - ] - } - }, - { - "variable": "replicas", - "label": "Replicas (Advanced)", - "description": "Set the number of Replicas", - "schema": { - "type": "int", - "show_if": [ - [ - "type", - "!=", - "DaemonSet" - ] - ], - "default": 1 - } - }, - { - "variable": "podSpec", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "containers", - "label": "Containers", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "Main Container", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "env", - "group": "App Configuration", - "label": "Image Environment", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "LIDARR__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 Settings", - "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 Settings", - "label": "Global Pod Options (Advanced)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "expertPodOpts", - "label": "Expert - Pod Options", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hostNetwork", - "label": "Host Networking", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "dnsConfig", - "label": "DNS Configuration", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "options", - "label": "Options", - "schema": { - "type": "list", - "default": [ - { - "name": "ndots", - "value": "1" - } - ], - "items": [ - { - "variable": "optionsEntry", - "label": "Option Entry", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true - } - }, - { - "variable": "value", - "label": "Value", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "nameservers", - "label": "Nameservers", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "nsEntry", - "label": "Nameserver Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - }, - { - "variable": "searches", - "label": "Searches", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "searchEntry", - "label": "Search Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "imagePullSecretList", - "group": "General Settings", - "label": "Image Pull Secrets", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "pullsecretentry", - "label": "Pull Secret", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "data", - "label": "Data", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "registry", - "label": "Registry", - "schema": { - "type": "string", - "required": true, - "default": "https://index.docker.io/v1/" - } - }, - { - "variable": "username", - "label": "Username", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "password", - "label": "Password", - "schema": { - "type": "string", - "required": true, - "private": true, - "default": "" - } - }, - { - "variable": "email", - "label": "Email", - "schema": { - "type": "string", - "required": true, - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "service", - "group": "Networking and Services", - "label": "Configure Service(s)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "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": 8686, - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "serviceexpert", - "group": "Networking and Services", - "label": "Show Expert Config", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "scaleExternalInterface", - "description": "Add External Interfaces", - "label": "Add external Interfaces", - "group": "Networking", - "schema": { - "type": "list", - "items": [ - { - "variable": "interfaceConfiguration", - "description": "Interface Configuration", - "label": "Interface Configuration", - "schema": { - "additional_attrs": true, - "type": "dict", - "$ref": [ - "normalize/interfaceConfiguration" - ], - "attrs": [ - { - "variable": "hostInterface", - "description": "Please Specify Host Interface", - "label": "Host Interface", - "schema": { - "type": "string", - "required": true, - "$ref": [ - "definitions/interface" - ], - "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": "Networking and Services", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "serviceListEntry", - "label": "Custom Service", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the service", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "LoadBalancer", - "description": "LoadBalancer (Expose Ports)" - }, - { - "value": "ClusterIP", - "description": "ClusterIP (Do Not Expose Ports)" - }, - { - "value": "Simple", - "description": "Deprecated CHANGE THIS" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "advancedsvcset", - "label": "Show Advanced Service Settings", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "externalIPs", - "label": "External IP's", - "description": "External IP's", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "externalIP", - "label": "External IP", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "ipFamilyPolicy", - "label": "IP Family Policy", - "description": "Specify the IP Policy", - "schema": { - "type": "string", - "default": "SingleStack", - "enum": [ - { - "value": "SingleStack", - "description": "SingleStack" - }, - { - "value": "PreferDualStack", - "description": "PreferDualStack" - }, - { - "value": "RequireDualStack", - "description": "RequireDualStack" - } - ] - } - }, - { - "variable": "ipFamilies", - "label": "IP Families", - "description": "(Advanced) The IP Families that should be used", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ipFamily", - "label": "IP Family", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "portsList", - "label": "Additional Service Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsListEntry", - "label": "Custom ports", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Port", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Port Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "protocol", - "label": "Port Type", - "schema": { - "type": "string", - "default": "tcp", - "enum": [ - { - "value": "http", - "description": "HTTP" - }, - { - "value": "https", - "description": "HTTPS" - }, - { - "value": "tcp", - "description": "TCP" - }, - { - "value": "udp", - "description": "UDP" - } - ] - } - }, - { - "variable": "targetPort", - "label": "Target Port", - "description": "This port exposes the container port on the service", - "schema": { - "type": "int", - "required": true - } - }, - { - "variable": "port", - "label": "Container Port", - "schema": { - "type": "int", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "persistence", - "label": "Integrated Persistent Storage", - "description": "Integrated Persistent Storage", - "group": "Storage and 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": "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": "Storage and Persistence", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "persistenceListEntry", - "label": "Custom Storage", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the storage", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "type", - "label": "Type of Storage", - "description": "Sets the persistence type, Anything other than PVC could break rollback!", - "schema": { - "type": "string", - "default": "hostPath", - "enum": [ - { - "value": "pvc", - "description": "PVC" - }, - { - "value": "hostPath", - "description": "Host Path" - }, - { - "value": "emptyDir", - "description": "emptyDir" - }, - { - "value": "nfs", - "description": "NFS Share" - } - ] - } - }, - { - "variable": "server", - "label": "NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "path", - "label": "Path on NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "iscsi", - "label": "iSCSI Options", - "schema": { - "show_if": [ - [ - "type", - "=", - "iscsi" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "targetPortal", - "label": "targetPortal", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "iqn", - "label": "iqn", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "lun", - "label": "lun", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "authSession", - "label": "authSession", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - }, - { - "variable": "authDiscovery", - "label": "authDiscovery", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - }, - { - "variable": "autoPermissions", - "label": "Automatic Permissions Configuration", - "description": "Automatically set permissions", - "schema": { - "show_if": [ - [ - "type", - "!=", - "pvc" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "chown", - "label": "Run CHOWN", - "description": "It will run CHOWN on the path with the given fsGroup\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": "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": "Security and Permissions", - "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 and Devices", - "label": "Resource Limits", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "limits", - "label": "Advanced Limit Resource Consumption", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "4000m", - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "8Gi", - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - }, - { - "variable": "gpu.intel.com/i915", - "label": "Add Intel i915 GPUs", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "nvidia.com/gpu", - "label": "Add NVIDIA GPUs (Experimental)", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "amd.com/gpu", - "label": "Add AMD GPUs", - "schema": { - "type": "int", - "default": 0 - } - } - ] - } - }, - { - "variable": "requests", - "label": "Minimum Resources Required (request)", - "schema": { - "additional_attrs": true, - "type": "dict", - "hidden": true, - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "10m", - "hidden": true, - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "50Mi", - "hidden": true, - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - } - ] - } - } - ] - } - }, - { - "variable": "deviceList", - "label": "Mount USB Devices", - "group": "Resources and Devices", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "deviceListEntry", - "label": "Device", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Storage", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "type", - "label": "(Advanced) Type of Storage", - "description": "Sets the persistence type", - "schema": { - "type": "string", - "default": "device", - "hidden": true - } - }, - { - "variable": "readOnly", - "label": "readOnly", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "hostPath", - "label": "Host Device Path", - "description": "Path to the device on the host system", - "schema": { - "type": "path" - } - }, - { - "variable": "mountPath", - "label": "Container Device Path", - "description": "Path inside the container the device is mounted", - "schema": { - "type": "string", - "default": "/dev/ttyACM0" - } - } - ] - } - } - ] - } - }, - { - "variable": "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": "Advanced", - "label": "(Advanced) Network Policy", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "netPolicyEntry", - "label": "Network Policy Entry", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "policyType", - "label": "Policy Type", - "schema": { - "type": "string", - "default": "", - "enum": [ - { - "value": "", - "description": "Default" - }, - { - "value": "ingress", - "description": "Ingress" - }, - { - "value": "egress", - "description": "Egress" - }, - { - "value": "ingress-egress", - "description": "Ingress and Egress" - } - ] - } - }, - { - "variable": "egress", - "label": "Egress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "egressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "to", - "label": "To", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "toEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ingressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "from", - "label": "From", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "fromEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "addons", - "group": "Addons", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "Codeserver", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "service", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "NodePort", - "description": "Deprecated CHANGE THIS" - }, - { - "value": "ClusterIP", - "description": "ClusterIP" - }, - { - "value": "LoadBalancer", - "description": "LoadBalancer" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "ports", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int", - "default": 36107 - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable Ingress", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hosts", - "label": "Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "hostEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "host", - "label": "HostName", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "paths", - "label": "Paths", - "schema": { - "type": "list", - "default": [ - { - "path": "/", - "pathType": "Prefix" - } - ], - "items": [ - { - "variable": "pathEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "path", - "label": "Path", - "schema": { - "type": "string", - "required": true, - "default": "/" - } - }, - { - "variable": "pathType", - "label": "Path Type", - "schema": { - "type": "string", - "required": true, - "default": "Prefix" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "integrations", - "label": "Integrations", - "description": "Connect ingress with other charts", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "traefik", - "label": "Traefik", - "description": "Connect ingress with Traefik", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "allowCors", - "label": "Allow Cross Origin Requests (advanced)", - "schema": { - "type": "boolean", - "default": false, - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - }, - { - "variable": "entrypoints", - "label": "Entrypoints", - "schema": { - "type": "list", - "default": [ - "websecure" - ], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "entrypoint", - "label": "Entrypoint", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "middlewares", - "label": "Middlewares", - "schema": { - "type": "list", - "default": [], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "middleware", - "label": "Middleware", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "name", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "namespace", - "label": "namespace (optional)", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "certManager", - "label": "certManager", - "description": "Connect ingress with certManager", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "certificateIssuer", - "label": "certificateIssuer", - "description": "defaults to chartname", - "schema": { - "type": "string", - "default": "", - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "advanced", - "label": "Show Advanced Settings", - "description": "Advanced settings are not covered by TrueCharts Support", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "ingressClassName", - "label": "(Advanced/Optional) IngressClass Name", - "schema": { - "type": "string", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": "" - } - }, - { - "variable": "tls", - "label": "TLS-Settings", - "schema": { - "type": "list", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": [], - "items": [ - { - "variable": "tlsEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "hosts", - "label": "Certificate Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "host", - "label": "Host", - "schema": { - "type": "string", - "default": "", - "required": true - } - } - ] - } - }, - { - "variable": "certificateIssuer", - "label": "Use Cert-Manager clusterIssuer", - "description": "add the name of your cert-manager clusterIssuer here for automatic tls certificates.", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "clusterCertificate", - "label": "Cluster Certificate (Advanced)", - "description": "Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.", - "schema": { - "type": "string", - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "default": "" - } - }, - { - "variable": "secretName", - "label": "Use Custom Certificate Secret (Advanced)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "scaleCert", - "label": "Use TrueNAS SCALE Certificate (Deprecated)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "int", - "$ref": [ - "definitions/certificate" - ], - "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": "

    Looks and smells like Sonarr but made for music

    \n

    This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/lidarr

    \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 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

    lidarr-19.1.19 (2024-02-12)

    \n

    Chore

    \n
      \n
    • update container image ghcr.io/onedr0p/lidarr-develop to v2.1.7.4030@01d40bb by renovate (#18169)
    • \n
    \n

    lidarr-19.1.18 (2024-02-05)

    \n

    Chore

    \n
      \n
    • update container image ghcr.io/onedr0p/lidarr-develop to 2.1.6.3993@36b75d7 by renovate (#17955)
    • \n
    \n

    lidarr-19.1.17 (2024-02-05)

    \n

    Chore

    \n
      \n
    • update container image ghcr.io/onedr0p/lidarr-develop to v2.1.6.3993@90ddf2d by renovate (#17914)
    • \n
    \n

    lidarr-19.1.16 (2024-02-03)

    \n

    Chore

    \n
      \n
    • update container image common to v17.2.30@19ad5ec by renovate (#17804)
    • \n
    \n

    lidarr-19.1.15 (2024-01-29)

    \n

    Chore

    \n
      \n
    • update container image ghcr.io/onedr0p/exportarr to v1.6.1@60cf3d4 by renovate (#17725)
    • \n
    \n

    lidarr-19.1.14 (2024-01-29)

    \n

    Chore

    \n
      \n
    • update container image ghcr.io/onedr0p/lidarr-develop to v2.1.4.3941@de7dac0 by renovate (#17674)
    • \n
    \n

    lidarr-19.1.13 (2024-01-26)

    \n

    Chore

    \n
      \n
    • update container image common to v17.2.29@d7c41a3 by renovate (#17545)
    • \n
    \n

    lidarr-19.1.12 (2024-01-21)

    \n

    Chore

    \n
      \n
    • update container image common to v17.2.28@918b4c5 by renovate (#17478)
    • \n
    \n

    lidarr-19.1.11 (2024-01-21)

    \n

    Chore

    \n
      \n
    • update container image common to v17.2.26@24c98f7 by renovate (#17409)
    • \n
    " - }, - "20.3.0": { - "healthy": true, - "supported": true, - "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/lidarr/20.3.0", - "last_update": "2024-05-29 12:35:14", - "required_features": [ - "definitions/timezone", - "normalize/interfaceConfiguration", - "definitions/certificate", - "definitions/interface" - ], - "human_version": "2.2.0.4045_20.3.0", - "version": "20.3.0", - "chart_metadata": { - "annotations": { - "max_scale_version": "24.04.0", - "min_scale_version": "23.10.0", - "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": "2.2.0.4045", - "dependencies": [ - { - "name": "common", - "version": "18.1.2", - "repository": "oci://tccr.io/truecharts", - "condition": "", - "alias": "", - "tags": [], - "import-values": [] - } - ], - "deprecated": false, - "description": "Looks and smells like Sonarr but made for music", - "home": "https://truecharts.org/charts/stable/lidarr", - "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/lidarr.png", - "keywords": [ - "lidarr", - "torrent", - "usenet" - ], - "kubeVersion": ">=1.24.0-0", - "maintainers": [ - { - "name": "TrueCharts", - "email": "info@truecharts.org", - "url": "https://truecharts.org" - } - ], - "name": "lidarr", - "sources": [ - "https://github.com/Lidarr/Lidarr", - "https://github.com/truecharts/charts/tree/master/charts/stable/lidarr", - "https://ghcr.io/onedr0p/lidarr-develop", - "https://ghcr.io/onedr0p/exportarr" - ], - "type": "application", - "version": "20.3.0" - }, - "app_metadata": null, - "schema": { - "groups": [ - { - "name": "Container Image", - "description": "Image to be used for container" - }, - { - "name": "General Settings", - "description": "General Deployment Settings" - }, - { - "name": "Workload Settings", - "description": "Workload Settings" - }, - { - "name": "App Configuration", - "description": "App Specific Config Options" - }, - { - "name": "Networking and Services", - "description": "Configure Network and Services for Container" - }, - { - "name": "Storage and Persistence", - "description": "Persist and Share Data that is Separate from the Container" - }, - { - "name": "Ingress", - "description": "Ingress Configuration" - }, - { - "name": "Security and Permissions", - "description": "Configure Security Context and Permissions" - }, - { - "name": "Resources and Devices", - "description": "Specify Resources/Devices to be Allocated to Workload" - }, - { - "name": "Middlewares", - "description": "Traefik Middlewares" - }, - { - "name": "Metrics", - "description": "Metrics" - }, - { - "name": "Addons", - "description": "Addon Configuration" - }, - { - "name": "Backup Configuration", - "description": "Configure Velero Backup Schedule" - }, - { - "name": "Advanced", - "description": "Advanced Configuration" - }, - { - "name": "Postgresql", - "description": "Postgresql" - }, - { - "name": "Documentation", - "description": "Documentation" - } - ], - "portals": { - "open": { - "protocols": [ - "$kubernetes-resource_configmap_tcportal-open_protocol" - ], - "host": [ - "$kubernetes-resource_configmap_tcportal-open_host" - ], - "ports": [ - "$kubernetes-resource_configmap_tcportal-open_port" - ] - } - }, - "questions": [ - { - "variable": "global", - "group": "General Settings", - "label": "Global Settings", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "stopAll", - "label": "Stop All", - "description": "Stops All Running pods and hibernates cnpg", - "schema": { - "type": "boolean", - "default": false - } - } - ] - } - }, - { - "variable": "workload", - "group": "Workload Settings", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Type (Advanced)", - "schema": { - "type": "string", - "default": "Deployment", - "enum": [ - { - "value": "Deployment", - "description": "Deployment" - }, - { - "value": "DaemonSet", - "description": "DaemonSet" - } - ] - } - }, - { - "variable": "replicas", - "label": "Replicas (Advanced)", - "description": "Set the number of Replicas", - "schema": { - "type": "int", - "show_if": [ - [ - "type", - "!=", - "DaemonSet" - ] - ], - "default": 1 - } - }, - { - "variable": "podSpec", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "containers", - "label": "Containers", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "Main Container", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "env", - "group": "App Configuration", - "label": "Image Environment", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "LIDARR__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 Settings", - "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 Settings", - "label": "Global Pod Options (Advanced)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "expertPodOpts", - "label": "Expert - Pod Options", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hostNetwork", - "label": "Host Networking", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "dnsConfig", - "label": "DNS Configuration", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "options", - "label": "Options", - "schema": { - "type": "list", - "default": [ - { - "name": "ndots", - "value": "1" - } - ], - "items": [ - { - "variable": "optionsEntry", - "label": "Option Entry", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true - } - }, - { - "variable": "value", - "label": "Value", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "nameservers", - "label": "Nameservers", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "nsEntry", - "label": "Nameserver Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - }, - { - "variable": "searches", - "label": "Searches", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "searchEntry", - "label": "Search Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "imagePullSecretList", - "group": "General Settings", - "label": "Image Pull Secrets", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "pullsecretentry", - "label": "Pull Secret", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "data", - "label": "Data", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "registry", - "label": "Registry", - "schema": { - "type": "string", - "required": true, - "default": "https://index.docker.io/v1/" - } - }, - { - "variable": "username", - "label": "Username", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "password", - "label": "Password", - "schema": { - "type": "string", - "required": true, - "private": true, - "default": "" - } - }, - { - "variable": "email", - "label": "Email", - "schema": { - "type": "string", - "required": true, - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "service", - "group": "Networking and Services", - "label": "Configure Service(s)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "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": 8686, - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "serviceexpert", - "group": "Networking and Services", - "label": "Show Expert Config", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "scaleExternalInterface", - "description": "Add External Interfaces", - "label": "Add external Interfaces", - "group": "Networking", - "schema": { - "type": "list", - "items": [ - { - "variable": "interfaceConfiguration", - "description": "Interface Configuration", - "label": "Interface Configuration", - "schema": { - "additional_attrs": true, - "type": "dict", - "$ref": [ - "normalize/interfaceConfiguration" - ], - "attrs": [ - { - "variable": "hostInterface", - "description": "Please Specify Host Interface", - "label": "Host Interface", - "schema": { - "type": "string", - "required": true, - "$ref": [ - "definitions/interface" - ], - "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": "Networking and Services", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "serviceListEntry", - "label": "Custom Service", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the service", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "LoadBalancer", - "description": "LoadBalancer (Expose Ports)" - }, - { - "value": "ClusterIP", - "description": "ClusterIP (Do Not Expose Ports)" - }, - { - "value": "Simple", - "description": "Deprecated CHANGE THIS" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "advancedsvcset", - "label": "Show Advanced Service Settings", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "externalIPs", - "label": "External IP's", - "description": "External IP's", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "externalIP", - "label": "External IP", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "ipFamilyPolicy", - "label": "IP Family Policy", - "description": "Specify the IP Policy", - "schema": { - "type": "string", - "default": "SingleStack", - "enum": [ - { - "value": "SingleStack", - "description": "SingleStack" - }, - { - "value": "PreferDualStack", - "description": "PreferDualStack" - }, - { - "value": "RequireDualStack", - "description": "RequireDualStack" - } - ] - } - }, - { - "variable": "ipFamilies", - "label": "IP Families", - "description": "(Advanced) The IP Families that should be used", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ipFamily", - "label": "IP Family", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "portsList", - "label": "Additional Service Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsListEntry", - "label": "Custom ports", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Port", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Port Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "protocol", - "label": "Port Type", - "schema": { - "type": "string", - "default": "tcp", - "enum": [ - { - "value": "http", - "description": "HTTP" - }, - { - "value": "https", - "description": "HTTPS" - }, - { - "value": "tcp", - "description": "TCP" - }, - { - "value": "udp", - "description": "UDP" - } - ] - } - }, - { - "variable": "targetPort", - "label": "Target Port", - "description": "This port exposes the container port on the service", - "schema": { - "type": "int", - "required": true - } - }, - { - "variable": "port", - "label": "Container Port", - "schema": { - "type": "int", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "persistence", - "label": "Integrated Persistent Storage", - "description": "Integrated Persistent Storage", - "group": "Storage and 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": "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": "Storage and Persistence", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "persistenceListEntry", - "label": "Custom Storage", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the storage", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "type", - "label": "Type of Storage", - "description": "Sets the persistence type, Anything other than PVC could break rollback!", - "schema": { - "type": "string", - "default": "hostPath", - "enum": [ - { - "value": "pvc", - "description": "PVC" - }, - { - "value": "hostPath", - "description": "Host Path" - }, - { - "value": "emptyDir", - "description": "emptyDir" - }, - { - "value": "nfs", - "description": "NFS Share" - } - ] - } - }, - { - "variable": "server", - "label": "NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "path", - "label": "Path on NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "iscsi", - "label": "iSCSI Options", - "schema": { - "show_if": [ - [ - "type", - "=", - "iscsi" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "targetPortal", - "label": "targetPortal", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "iqn", - "label": "iqn", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "lun", - "label": "lun", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "authSession", - "label": "authSession", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - }, - { - "variable": "authDiscovery", - "label": "authDiscovery", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - }, - { - "variable": "autoPermissions", - "label": "Automatic Permissions Configuration", - "description": "Automatically set permissions", - "schema": { - "show_if": [ - [ - "type", - "!=", - "pvc" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "chown", - "label": "Run CHOWN", - "description": "It will run CHOWN on the path with the given fsGroup\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": "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": "Security and Permissions", - "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 and Devices", - "label": "Resource Limits", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "limits", - "label": "Advanced Limit Resource Consumption", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "4000m", - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "8Gi", - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - }, - { - "variable": "gpu.intel.com/i915", - "label": "Add Intel i915 GPUs", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "nvidia.com/gpu", - "label": "Add NVIDIA GPUs (Experimental)", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "amd.com/gpu", - "label": "Add AMD GPUs", - "schema": { - "type": "int", - "default": 0 - } - } - ] - } - }, - { - "variable": "requests", - "label": "Minimum Resources Required (request)", - "schema": { - "additional_attrs": true, - "type": "dict", - "hidden": true, - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "10m", - "hidden": true, - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "50Mi", - "hidden": true, - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - } - ] - } - } - ] - } - }, - { - "variable": "deviceList", - "label": "Mount USB Devices", - "group": "Resources and Devices", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "deviceListEntry", - "label": "Device", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Storage", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "type", - "label": "(Advanced) Type of Storage", - "description": "Sets the persistence type", - "schema": { - "type": "string", - "default": "device", - "hidden": true - } - }, - { - "variable": "readOnly", - "label": "readOnly", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "hostPath", - "label": "Host Device Path", - "description": "Path to the device on the host system", - "schema": { - "type": "path" - } - }, - { - "variable": "mountPath", - "label": "Container Device Path", - "description": "Path inside the container the device is mounted", - "schema": { - "type": "string", - "default": "/dev/ttyACM0" - } - } - ] - } - } - ] - } - }, - { - "variable": "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": "Advanced", - "label": "(Advanced) Network Policy", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "netPolicyEntry", - "label": "Network Policy Entry", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "policyType", - "label": "Policy Type", - "schema": { - "type": "string", - "default": "", - "enum": [ - { - "value": "", - "description": "Default" - }, - { - "value": "ingress", - "description": "Ingress" - }, - { - "value": "egress", - "description": "Egress" - }, - { - "value": "ingress-egress", - "description": "Ingress and Egress" - } - ] - } - }, - { - "variable": "egress", - "label": "Egress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "egressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "to", - "label": "To", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "toEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ingressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "from", - "label": "From", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "fromEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "addons", - "group": "Addons", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "Codeserver", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "service", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "NodePort", - "description": "Deprecated CHANGE THIS" - }, - { - "value": "ClusterIP", - "description": "ClusterIP" - }, - { - "value": "LoadBalancer", - "description": "LoadBalancer" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "ports", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int", - "default": 36107 - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable Ingress", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hosts", - "label": "Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "hostEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "host", - "label": "HostName", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "paths", - "label": "Paths", - "schema": { - "type": "list", - "default": [ - { - "path": "/", - "pathType": "Prefix" - } - ], - "items": [ - { - "variable": "pathEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "path", - "label": "Path", - "schema": { - "type": "string", - "required": true, - "default": "/" - } - }, - { - "variable": "pathType", - "label": "Path Type", - "schema": { - "type": "string", - "required": true, - "default": "Prefix" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "integrations", - "label": "Integrations", - "description": "Connect ingress with other charts", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "traefik", - "label": "Traefik", - "description": "Connect ingress with Traefik", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "allowCors", - "label": "Allow Cross Origin Requests (advanced)", - "schema": { - "type": "boolean", - "default": false, - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - }, - { - "variable": "entrypoints", - "label": "Entrypoints", - "schema": { - "type": "list", - "default": [ - "websecure" - ], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "entrypoint", - "label": "Entrypoint", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "middlewares", - "label": "Middlewares", - "schema": { - "type": "list", - "default": [], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "middleware", - "label": "Middleware", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "name", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "namespace", - "label": "namespace (optional)", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "certManager", - "label": "certManager", - "description": "Connect ingress with certManager", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "certificateIssuer", - "label": "certificateIssuer", - "description": "defaults to chartname", - "schema": { - "type": "string", - "default": "", - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "advanced", - "label": "Show Advanced Settings", - "description": "Advanced settings are not covered by TrueCharts Support", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "ingressClassName", - "label": "(Advanced/Optional) IngressClass Name", - "schema": { - "type": "string", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": "" - } - }, - { - "variable": "tls", - "label": "TLS-Settings", - "schema": { - "type": "list", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": [], - "items": [ - { - "variable": "tlsEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "hosts", - "label": "Certificate Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "host", - "label": "Host", - "schema": { - "type": "string", - "default": "", - "required": true - } - } - ] - } - }, - { - "variable": "certificateIssuer", - "label": "Use Cert-Manager clusterIssuer", - "description": "add the name of your cert-manager clusterIssuer here for automatic tls certificates.", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "clusterCertificate", - "label": "Cluster Certificate (Advanced)", - "description": "Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.", - "schema": { - "type": "string", - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "default": "" - } - }, - { - "variable": "secretName", - "label": "Use Custom Certificate Secret (Advanced)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "scaleCert", - "label": "Use TrueNAS SCALE Certificate (Deprecated)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "int", - "$ref": [ - "definitions/certificate" - ], - "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": "

    Looks and smells like Sonarr but made for music

    \n

    This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/lidarr

    \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 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

    lidarr-19.1.19 (2024-02-12)

    \n

    Chore

    \n
      \n
    • update container image ghcr.io/onedr0p/lidarr-develop to v2.1.7.4030@01d40bb by renovate (#18169)
    • \n
    \n

    lidarr-19.1.18 (2024-02-05)

    \n

    Chore

    \n
      \n
    • update container image ghcr.io/onedr0p/lidarr-develop to 2.1.6.3993@36b75d7 by renovate (#17955)
    • \n
    \n

    lidarr-19.1.17 (2024-02-05)

    \n

    Chore

    \n
      \n
    • update container image ghcr.io/onedr0p/lidarr-develop to v2.1.6.3993@90ddf2d by renovate (#17914)
    • \n
    \n

    lidarr-19.1.16 (2024-02-03)

    \n

    Chore

    \n
      \n
    • update container image common to v17.2.30@19ad5ec by renovate (#17804)
    • \n
    \n

    lidarr-19.1.15 (2024-01-29)

    \n

    Chore

    \n
      \n
    • update container image ghcr.io/onedr0p/exportarr to v1.6.1@60cf3d4 by renovate (#17725)
    • \n
    \n

    lidarr-19.1.14 (2024-01-29)

    \n

    Chore

    \n
      \n
    • update container image ghcr.io/onedr0p/lidarr-develop to v2.1.4.3941@de7dac0 by renovate (#17674)
    • \n
    \n

    lidarr-19.1.13 (2024-01-26)

    \n

    Chore

    \n
      \n
    • update container image common to v17.2.29@d7c41a3 by renovate (#17545)
    • \n
    \n

    lidarr-19.1.12 (2024-01-21)

    \n

    Chore

    \n
      \n
    • update container image common to v17.2.28@918b4c5 by renovate (#17478)
    • \n
    \n

    lidarr-19.1.11 (2024-01-21)

    \n

    Chore

    \n
      \n
    • update container image common to v17.2.26@24c98f7 by renovate (#17409)
    • \n
    " - }, - "19.3.0": { - "healthy": true, - "supported": true, - "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/lidarr/19.3.0", - "last_update": "2024-05-29 12:35:14", - "required_features": [ - "definitions/timezone", - "definitions/gpuConfiguration", - "definitions/interface", - "normalize/interfaceConfiguration", - "definitions/certificate" - ], - "human_version": "2.1.7.4030_19.3.0", - "version": "19.3.0", - "chart_metadata": { - "annotations": { - "max_scale_version": "24.04.0", - "min_scale_version": "23.10.0", - "truecharts.org/category": "media", - "truecharts.org/max_helm_version": "3.14", - "truecharts.org/min_helm_version": "3.12", - "truecharts.org/train": "stable" - }, - "apiVersion": "v2", - "appVersion": "2.1.7.4030", - "dependencies": [ - { - "name": "common", - "version": "17.5.0", - "repository": "oci://tccr.io/truecharts", - "condition": "", - "alias": "", - "tags": [], - "import-values": [] - } - ], - "deprecated": false, - "description": "Looks and smells like Sonarr but made for music", - "home": "https://truecharts.org/charts/stable/lidarr", - "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/lidarr.png", - "keywords": [ - "lidarr", - "torrent", - "usenet" - ], - "kubeVersion": ">=1.24.0-0", - "maintainers": [ - { - "name": "TrueCharts", - "email": "info@truecharts.org", - "url": "https://truecharts.org" - } - ], - "name": "lidarr", - "sources": [ - "https://github.com/Lidarr/Lidarr", - "https://github.com/truecharts/charts/tree/master/charts/stable/lidarr", - "https://ghcr.io/onedr0p/lidarr-develop", - "https://ghcr.io/onedr0p/exportarr" - ], - "type": "application", - "version": "19.3.0" - }, - "app_metadata": null, - "schema": { - "groups": [ - { - "name": "Container Image", - "description": "Image to be used for container" - }, - { - "name": "General Settings", - "description": "General Deployment Settings" - }, - { - "name": "Workload Settings", - "description": "Workload Settings" - }, - { - "name": "App Configuration", - "description": "App Specific Config Options" - }, - { - "name": "Networking and Services", - "description": "Configure Network and Services for Container" - }, - { - "name": "Storage and Persistence", - "description": "Persist and Share Data that is Separate from the Container" - }, - { - "name": "Ingress", - "description": "Ingress Configuration" - }, - { - "name": "Security and Permissions", - "description": "Configure Security Context and Permissions" - }, - { - "name": "Resources and Devices", - "description": "Specify Resources/Devices to be Allocated to Workload" - }, - { - "name": "Middlewares", - "description": "Traefik Middlewares" - }, - { - "name": "Metrics", - "description": "Metrics" - }, - { - "name": "Addons", - "description": "Addon Configuration" - }, - { - "name": "Backup Configuration", - "description": "Configure Velero Backup Schedule" - }, - { - "name": "Advanced", - "description": "Advanced Configuration" - }, - { - "name": "Postgresql", - "description": "Postgresql" - }, - { - "name": "Documentation", - "description": "Documentation" - } - ], - "portals": { - "open": { - "protocols": [ - "$kubernetes-resource_configmap_tcportal-open_protocol" - ], - "host": [ - "$kubernetes-resource_configmap_tcportal-open_host" - ], - "ports": [ - "$kubernetes-resource_configmap_tcportal-open_port" - ] - } - }, - "questions": [ - { - "variable": "global", - "group": "General Settings", - "label": "Global Settings", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "stopAll", - "label": "Stop All", - "description": "Stops All Running pods and hibernates cnpg", - "schema": { - "type": "boolean", - "default": false - } - } - ] - } - }, - { - "variable": "workload", - "group": "Workload Settings", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Type (Advanced)", - "schema": { - "type": "string", - "default": "Deployment", - "enum": [ - { - "value": "Deployment", - "description": "Deployment" - }, - { - "value": "DaemonSet", - "description": "DaemonSet" - } - ] - } - }, - { - "variable": "replicas", - "label": "Replicas (Advanced)", - "description": "Set the number of Replicas", - "schema": { - "type": "int", - "show_if": [ - [ - "type", - "!=", - "DaemonSet" - ] - ], - "default": 1 - } - }, - { - "variable": "podSpec", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "containers", - "label": "Containers", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "Main Container", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "env", - "group": "App Configuration", - "label": "Image Environment", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "LIDARR__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 Settings", - "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 Settings", - "label": "Global Pod Options (Advanced)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "expertPodOpts", - "label": "Expert - Pod Options", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hostNetwork", - "label": "Host Networking", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "dnsConfig", - "label": "DNS Configuration", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "options", - "label": "Options", - "schema": { - "type": "list", - "default": [ - { - "name": "ndots", - "value": "1" - } - ], - "items": [ - { - "variable": "optionsEntry", - "label": "Option Entry", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true - } - }, - { - "variable": "value", - "label": "Value", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "nameservers", - "label": "Nameservers", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "nsEntry", - "label": "Nameserver Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - }, - { - "variable": "searches", - "label": "Searches", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "searchEntry", - "label": "Search Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "imagePullSecretList", - "group": "General Settings", - "label": "Image Pull Secrets", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "pullsecretentry", - "label": "Pull Secret", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "data", - "label": "Data", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "registry", - "label": "Registry", - "schema": { - "type": "string", - "required": true, - "default": "https://index.docker.io/v1/" - } - }, - { - "variable": "username", - "label": "Username", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "password", - "label": "Password", - "schema": { - "type": "string", - "required": true, - "private": true, - "default": "" - } - }, - { - "variable": "email", - "label": "Email", - "schema": { - "type": "string", - "required": true, - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "service", - "group": "Networking and Services", - "label": "Configure Service(s)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "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": 8686, - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "serviceexpert", - "group": "Networking and Services", - "label": "Show Expert Config", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "scaleExternalInterface", - "description": "Add External Interfaces", - "label": "Add external Interfaces", - "group": "Networking", - "schema": { - "type": "list", - "items": [ - { - "variable": "interfaceConfiguration", - "description": "Interface Configuration", - "label": "Interface Configuration", - "schema": { - "additional_attrs": true, - "type": "dict", - "$ref": [ - "normalize/interfaceConfiguration" - ], - "attrs": [ - { - "variable": "hostInterface", - "description": "Please Specify Host Interface", - "label": "Host Interface", - "schema": { - "type": "string", - "required": true, - "$ref": [ - "definitions/interface" - ], - "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": "Networking and Services", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "serviceListEntry", - "label": "Custom Service", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the service", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "LoadBalancer", - "description": "LoadBalancer (Expose Ports)" - }, - { - "value": "ClusterIP", - "description": "ClusterIP (Do Not Expose Ports)" - }, - { - "value": "Simple", - "description": "Deprecated CHANGE THIS" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "advancedsvcset", - "label": "Show Advanced Service Settings", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "externalIPs", - "label": "External IP's", - "description": "External IP's", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "externalIP", - "label": "External IP", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "ipFamilyPolicy", - "label": "IP Family Policy", - "description": "Specify the IP Policy", - "schema": { - "type": "string", - "default": "SingleStack", - "enum": [ - { - "value": "SingleStack", - "description": "SingleStack" - }, - { - "value": "PreferDualStack", - "description": "PreferDualStack" - }, - { - "value": "RequireDualStack", - "description": "RequireDualStack" - } - ] - } - }, - { - "variable": "ipFamilies", - "label": "IP Families", - "description": "(Advanced) The IP Families that should be used", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ipFamily", - "label": "IP Family", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "portsList", - "label": "Additional Service Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsListEntry", - "label": "Custom ports", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Port", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Port Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "protocol", - "label": "Port Type", - "schema": { - "type": "string", - "default": "tcp", - "enum": [ - { - "value": "http", - "description": "HTTP" - }, - { - "value": "https", - "description": "HTTPS" - }, - { - "value": "tcp", - "description": "TCP" - }, - { - "value": "udp", - "description": "UDP" - } - ] - } - }, - { - "variable": "targetPort", - "label": "Target Port", - "description": "This port exposes the container port on the service", - "schema": { - "type": "int", - "required": true - } - }, - { - "variable": "port", - "label": "Container Port", - "schema": { - "type": "int", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "persistence", - "label": "Integrated Persistent Storage", - "description": "Integrated Persistent Storage", - "group": "Storage and 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": "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": "Storage and Persistence", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "persistenceListEntry", - "label": "Custom Storage", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the storage", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "type", - "label": "Type of Storage", - "description": "Sets the persistence type, Anything other than PVC could break rollback!", - "schema": { - "type": "string", - "default": "hostPath", - "enum": [ - { - "value": "pvc", - "description": "PVC" - }, - { - "value": "hostPath", - "description": "Host Path" - }, - { - "value": "emptyDir", - "description": "emptyDir" - }, - { - "value": "nfs", - "description": "NFS Share" - } - ] - } - }, - { - "variable": "server", - "label": "NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "path", - "label": "Path on NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "iscsi", - "label": "iSCSI Options", - "schema": { - "show_if": [ - [ - "type", - "=", - "iscsi" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "targetPortal", - "label": "targetPortal", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "iqn", - "label": "iqn", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "lun", - "label": "lun", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "authSession", - "label": "authSession", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - }, - { - "variable": "authDiscovery", - "label": "authDiscovery", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - }, - { - "variable": "autoPermissions", - "label": "Automatic Permissions Configuration", - "description": "Automatically set permissions", - "schema": { - "show_if": [ - [ - "type", - "!=", - "pvc" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "chown", - "label": "Run CHOWN", - "description": "It will run CHOWN on the path with the given fsGroup\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": "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": "Security and Permissions", - "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 and Devices", - "label": "Resource Limits", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "limits", - "label": "Advanced Limit Resource Consumption", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "4000m", - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "8Gi", - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - }, - { - "variable": "intel.com/i915", - "label": "Add Intel i915 GPUs", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "nvidia.com/gpu", - "label": "Add NVIDIA GPUs (Experimental)", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "amd.com/gpu", - "label": "Add AMD GPUs", - "schema": { - "type": "int", - "default": 0 - } - } - ] - } - }, - { - "variable": "requests", - "label": "Minimum Resources Required (request)", - "schema": { - "additional_attrs": true, - "type": "dict", - "hidden": true, - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "10m", - "hidden": true, - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "50Mi", - "hidden": true, - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - } - ] - } - } - ] - } - }, - { - "variable": "deviceList", - "label": "Mount USB Devices", - "group": "Resources and Devices", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "deviceListEntry", - "label": "Device", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Storage", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "type", - "label": "(Advanced) Type of Storage", - "description": "Sets the persistence type", - "schema": { - "type": "string", - "default": "device", - "hidden": true - } - }, - { - "variable": "readOnly", - "label": "readOnly", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "hostPath", - "label": "Host Device Path", - "description": "Path to the device on the host system", - "schema": { - "type": "path" - } - }, - { - "variable": "mountPath", - "label": "Container Device Path", - "description": "Path inside the container the device is mounted", - "schema": { - "type": "string", - "default": "/dev/ttyACM0" - } - } - ] - } - } - ] - } - }, - { - "variable": "scaleGPU", - "label": "GPU Configuration", - "group": "Resources and Devices", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "scaleGPUEntry", - "label": "GPU", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "gpu", - "label": "Select GPU", - "schema": { - "additional_attrs": true, - "type": "dict", - "$ref": [ - "definitions/gpuConfiguration" - ], - "attrs": [] - } - }, - { - "variable": "workaround", - "label": "Workaround", - "schema": { - "type": "string", - "default": "workaround", - "hidden": 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": "Advanced", - "label": "(Advanced) Network Policy", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "netPolicyEntry", - "label": "Network Policy Entry", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "policyType", - "label": "Policy Type", - "schema": { - "type": "string", - "default": "", - "enum": [ - { - "value": "", - "description": "Default" - }, - { - "value": "ingress", - "description": "Ingress" - }, - { - "value": "egress", - "description": "Egress" - }, - { - "value": "ingress-egress", - "description": "Ingress and Egress" - } - ] - } - }, - { - "variable": "egress", - "label": "Egress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "egressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "to", - "label": "To", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "toEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ingressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "from", - "label": "From", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "fromEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "addons", - "group": "Addons", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "Codeserver", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "service", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "NodePort", - "description": "Deprecated CHANGE THIS" - }, - { - "value": "ClusterIP", - "description": "ClusterIP" - }, - { - "value": "LoadBalancer", - "description": "LoadBalancer" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "ports", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int", - "default": 36107 - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable Ingress", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hosts", - "label": "Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "hostEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "host", - "label": "HostName", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "paths", - "label": "Paths", - "schema": { - "type": "list", - "default": [ - { - "path": "/", - "pathType": "Prefix" - } - ], - "items": [ - { - "variable": "pathEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "path", - "label": "Path", - "schema": { - "type": "string", - "required": true, - "default": "/" - } - }, - { - "variable": "pathType", - "label": "Path Type", - "schema": { - "type": "string", - "required": true, - "default": "Prefix" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "integrations", - "label": "Integrations", - "description": "Connect ingress with other charts", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "traefik", - "label": "Traefik", - "description": "Connect ingress with Traefik", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "allowCors", - "label": "Allow Cross Origin Requests (advanced)", - "schema": { - "type": "boolean", - "default": false, - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - }, - { - "variable": "entrypoints", - "label": "Entrypoints", - "schema": { - "type": "list", - "default": [ - "websecure" - ], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "entrypoint", - "label": "Entrypoint", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "middlewares", - "label": "Middlewares", - "schema": { - "type": "list", - "default": [], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "middleware", - "label": "Middleware", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "name", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "namespace", - "label": "namespace (optional)", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "certManager", - "label": "certManager", - "description": "Connect ingress with certManager", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "certificateIssuer", - "label": "certificateIssuer", - "description": "defaults to chartname", - "schema": { - "type": "string", - "default": "", - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "advanced", - "label": "Show Advanced Settings", - "description": "Advanced settings are not covered by TrueCharts Support", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "ingressClassName", - "label": "(Advanced/Optional) IngressClass Name", - "schema": { - "type": "string", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": "" - } - }, - { - "variable": "tls", - "label": "TLS-Settings", - "schema": { - "type": "list", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": [], - "items": [ - { - "variable": "tlsEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "hosts", - "label": "Certificate Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "host", - "label": "Host", - "schema": { - "type": "string", - "default": "", - "required": true - } - } - ] - } - }, - { - "variable": "certificateIssuer", - "label": "Use Cert-Manager clusterIssuer", - "description": "add the name of your cert-manager clusterIssuer here for automatic tls certificates.", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "clusterCertificate", - "label": "Cluster Certificate (Advanced)", - "description": "Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.", - "schema": { - "type": "string", - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "default": "" - } - }, - { - "variable": "secretName", - "label": "Use Custom Certificate Secret (Advanced)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "scaleCert", - "label": "Use TrueNAS SCALE Certificate (Deprecated)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "int", - "$ref": [ - "definitions/certificate" - ], - "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": "

    Looks and smells like Sonarr but made for music

    \n

    This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/lidarr

    \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 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

    lidarr-19.1.19 (2024-02-12)

    \n

    Chore

    \n
      \n
    • update container image ghcr.io/onedr0p/lidarr-develop to v2.1.7.4030@01d40bb by renovate (#18169)
    • \n
    \n

    lidarr-19.1.18 (2024-02-05)

    \n

    Chore

    \n
      \n
    • update container image ghcr.io/onedr0p/lidarr-develop to 2.1.6.3993@36b75d7 by renovate (#17955)
    • \n
    \n

    lidarr-19.1.17 (2024-02-05)

    \n

    Chore

    \n
      \n
    • update container image ghcr.io/onedr0p/lidarr-develop to v2.1.6.3993@90ddf2d by renovate (#17914)
    • \n
    \n

    lidarr-19.1.16 (2024-02-03)

    \n

    Chore

    \n
      \n
    • update container image common to v17.2.30@19ad5ec by renovate (#17804)
    • \n
    \n

    lidarr-19.1.15 (2024-01-29)

    \n

    Chore

    \n
      \n
    • update container image ghcr.io/onedr0p/exportarr to v1.6.1@60cf3d4 by renovate (#17725)
    • \n
    \n

    lidarr-19.1.14 (2024-01-29)

    \n

    Chore

    \n
      \n
    • update container image ghcr.io/onedr0p/lidarr-develop to v2.1.4.3941@de7dac0 by renovate (#17674)
    • \n
    \n

    lidarr-19.1.13 (2024-01-26)

    \n

    Chore

    \n
      \n
    • update container image common to v17.2.29@d7c41a3 by renovate (#17545)
    • \n
    \n

    lidarr-19.1.12 (2024-01-21)

    \n

    Chore

    \n
      \n
    • update container image common to v17.2.28@918b4c5 by renovate (#17478)
    • \n
    \n

    lidarr-19.1.11 (2024-01-21)

    \n

    Chore

    \n
      \n
    • update container image common to v17.2.26@24c98f7 by renovate (#17409)
    • \n
    \n

    lidarr-19.1.10 (2024-01-21)

    \n

    Chore

    \n
      \n
    • update metadata in chart.yaml (#17457)
    • \n
    " - }, - "19.2.0": { - "healthy": true, - "supported": true, - "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/lidarr/19.2.0", - "last_update": "2024-05-29 12:35:14", - "required_features": [ - "definitions/timezone", - "definitions/gpuConfiguration", - "definitions/interface", - "normalize/interfaceConfiguration", - "definitions/certificate" - ], - "human_version": "2.1.7.4030_19.2.0", - "version": "19.2.0", - "chart_metadata": { - "annotations": { - "max_scale_version": "24.04.0", - "min_scale_version": "23.10.0", - "truecharts.org/category": "media", - "truecharts.org/max_helm_version": "3.14", - "truecharts.org/min_helm_version": "3.12", - "truecharts.org/train": "stable" - }, - "apiVersion": "v2", - "appVersion": "2.1.7.4030", - "dependencies": [ - { - "name": "common", - "version": "17.4.2", - "repository": "oci://tccr.io/truecharts", - "condition": "", - "alias": "", - "tags": [], - "import-values": [] - } - ], - "deprecated": false, - "description": "Looks and smells like Sonarr but made for music", - "home": "https://truecharts.org/charts/stable/lidarr", - "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/lidarr.png", - "keywords": [ - "lidarr", - "torrent", - "usenet" - ], - "kubeVersion": ">=1.24.0-0", - "maintainers": [ - { - "name": "TrueCharts", - "email": "info@truecharts.org", - "url": "https://truecharts.org" - } - ], - "name": "lidarr", - "sources": [ - "https://github.com/Lidarr/Lidarr", - "https://github.com/truecharts/charts/tree/master/charts/stable/lidarr", - "https://ghcr.io/onedr0p/exportarr", - "https://ghcr.io/onedr0p/lidarr-develop" - ], - "type": "application", - "version": "19.2.0" - }, - "app_metadata": null, - "schema": { - "groups": [ - { - "name": "Container Image", - "description": "Image to be used for container" - }, - { - "name": "General Settings", - "description": "General Deployment Settings" - }, - { - "name": "Workload Settings", - "description": "Workload Settings" - }, - { - "name": "App Configuration", - "description": "App Specific Config Options" - }, - { - "name": "Networking and Services", - "description": "Configure Network and Services for Container" - }, - { - "name": "Storage and Persistence", - "description": "Persist and Share Data that is Separate from the Container" - }, - { - "name": "Ingress", - "description": "Ingress Configuration" - }, - { - "name": "Security and Permissions", - "description": "Configure Security Context and Permissions" - }, - { - "name": "Resources and Devices", - "description": "Specify Resources/Devices to be Allocated to Workload" - }, - { - "name": "Middlewares", - "description": "Traefik Middlewares" - }, - { - "name": "Metrics", - "description": "Metrics" - }, - { - "name": "Addons", - "description": "Addon Configuration" - }, - { - "name": "Backup Configuration", - "description": "Configure Velero Backup Schedule" - }, - { - "name": "Advanced", - "description": "Advanced Configuration" - }, - { - "name": "Postgresql", - "description": "Postgresql" - }, - { - "name": "Documentation", - "description": "Documentation" - } - ], - "portals": { - "open": { - "protocols": [ - "$kubernetes-resource_configmap_tcportal-open_protocol" - ], - "host": [ - "$kubernetes-resource_configmap_tcportal-open_host" - ], - "ports": [ - "$kubernetes-resource_configmap_tcportal-open_port" - ] - } - }, - "questions": [ - { - "variable": "global", - "group": "General Settings", - "label": "Global Settings", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "stopAll", - "label": "Stop All", - "description": "Stops All Running pods and hibernates cnpg", - "schema": { - "type": "boolean", - "default": false - } - } - ] - } - }, - { - "variable": "workload", - "group": "Workload Settings", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Type (Advanced)", - "schema": { - "type": "string", - "default": "Deployment", - "enum": [ - { - "value": "Deployment", - "description": "Deployment" - }, - { - "value": "DaemonSet", - "description": "DaemonSet" - } - ] - } - }, - { - "variable": "replicas", - "label": "Replicas (Advanced)", - "description": "Set the number of Replicas", - "schema": { - "type": "int", - "show_if": [ - [ - "type", - "!=", - "DaemonSet" - ] - ], - "default": 1 - } - }, - { - "variable": "podSpec", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "containers", - "label": "Containers", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "Main Container", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "env", - "group": "App Configuration", - "label": "Image Environment", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "LIDARR__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 Settings", - "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 Settings", - "label": "Global Pod Options (Advanced)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "expertPodOpts", - "label": "Expert - Pod Options", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hostNetwork", - "label": "Host Networking", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "dnsConfig", - "label": "DNS Configuration", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "options", - "label": "Options", - "schema": { - "type": "list", - "default": [ - { - "name": "ndots", - "value": "1" - } - ], - "items": [ - { - "variable": "optionsEntry", - "label": "Option Entry", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true - } - }, - { - "variable": "value", - "label": "Value", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "nameservers", - "label": "Nameservers", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "nsEntry", - "label": "Nameserver Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - }, - { - "variable": "searches", - "label": "Searches", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "searchEntry", - "label": "Search Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "imagePullSecretList", - "group": "General Settings", - "label": "Image Pull Secrets", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "pullsecretentry", - "label": "Pull Secret", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "data", - "label": "Data", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "registry", - "label": "Registry", - "schema": { - "type": "string", - "required": true, - "default": "https://index.docker.io/v1/" - } - }, - { - "variable": "username", - "label": "Username", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "password", - "label": "Password", - "schema": { - "type": "string", - "required": true, - "private": true, - "default": "" - } - }, - { - "variable": "email", - "label": "Email", - "schema": { - "type": "string", - "required": true, - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "service", - "group": "Networking and Services", - "label": "Configure Service(s)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "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": 8686, - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "serviceexpert", - "group": "Networking and Services", - "label": "Show Expert Config", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "scaleExternalInterface", - "description": "Add External Interfaces", - "label": "Add external Interfaces", - "group": "Networking", - "schema": { - "type": "list", - "items": [ - { - "variable": "interfaceConfiguration", - "description": "Interface Configuration", - "label": "Interface Configuration", - "schema": { - "additional_attrs": true, - "type": "dict", - "$ref": [ - "normalize/interfaceConfiguration" - ], - "attrs": [ - { - "variable": "hostInterface", - "description": "Please Specify Host Interface", - "label": "Host Interface", - "schema": { - "type": "string", - "required": true, - "$ref": [ - "definitions/interface" - ], - "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": "Networking and Services", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "serviceListEntry", - "label": "Custom Service", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the service", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "LoadBalancer", - "description": "LoadBalancer (Expose Ports)" - }, - { - "value": "ClusterIP", - "description": "ClusterIP (Do Not Expose Ports)" - }, - { - "value": "Simple", - "description": "Deprecated CHANGE THIS" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "advancedsvcset", - "label": "Show Advanced Service Settings", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "externalIPs", - "label": "External IP's", - "description": "External IP's", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "externalIP", - "label": "External IP", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "ipFamilyPolicy", - "label": "IP Family Policy", - "description": "Specify the IP Policy", - "schema": { - "type": "string", - "default": "SingleStack", - "enum": [ - { - "value": "SingleStack", - "description": "SingleStack" - }, - { - "value": "PreferDualStack", - "description": "PreferDualStack" - }, - { - "value": "RequireDualStack", - "description": "RequireDualStack" - } - ] - } - }, - { - "variable": "ipFamilies", - "label": "IP Families", - "description": "(Advanced) The IP Families that should be used", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ipFamily", - "label": "IP Family", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "portsList", - "label": "Additional Service Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsListEntry", - "label": "Custom ports", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Port", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Port Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "protocol", - "label": "Port Type", - "schema": { - "type": "string", - "default": "tcp", - "enum": [ - { - "value": "http", - "description": "HTTP" - }, - { - "value": "https", - "description": "HTTPS" - }, - { - "value": "tcp", - "description": "TCP" - }, - { - "value": "udp", - "description": "UDP" - } - ] - } - }, - { - "variable": "targetPort", - "label": "Target Port", - "description": "This port exposes the container port on the service", - "schema": { - "type": "int", - "required": true - } - }, - { - "variable": "port", - "label": "Container Port", - "schema": { - "type": "int", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "persistence", - "label": "Integrated Persistent Storage", - "description": "Integrated Persistent Storage", - "group": "Storage and 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": "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": "Storage and Persistence", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "persistenceListEntry", - "label": "Custom Storage", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the storage", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "type", - "label": "Type of Storage", - "description": "Sets the persistence type, Anything other than PVC could break rollback!", - "schema": { - "type": "string", - "default": "hostPath", - "enum": [ - { - "value": "pvc", - "description": "PVC" - }, - { - "value": "hostPath", - "description": "Host Path" - }, - { - "value": "emptyDir", - "description": "emptyDir" - }, - { - "value": "nfs", - "description": "NFS Share" - } - ] - } - }, - { - "variable": "server", - "label": "NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "path", - "label": "Path on NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "iscsi", - "label": "iSCSI Options", - "schema": { - "show_if": [ - [ - "type", - "=", - "iscsi" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "targetPortal", - "label": "targetPortal", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "iqn", - "label": "iqn", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "lun", - "label": "lun", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "authSession", - "label": "authSession", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - }, - { - "variable": "authDiscovery", - "label": "authDiscovery", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - }, - { - "variable": "autoPermissions", - "label": "Automatic Permissions Configuration", - "description": "Automatically set permissions", - "schema": { - "show_if": [ - [ - "type", - "!=", - "pvc" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "chown", - "label": "Run CHOWN", - "description": "It will run CHOWN on the path with the given fsGroup\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": "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": "Security and Permissions", - "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 and Devices", - "label": "Resource Limits", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "limits", - "label": "Advanced Limit Resource Consumption", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "4000m", - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "8Gi", - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - }, - { - "variable": "intel.com/i915", - "label": "Add Intel i915 GPUs", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "nvidia.com/gpu", - "label": "Add NVIDIA GPUs (Experimental)", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "amd.com/gpu", - "label": "Add AMD GPUs", - "schema": { - "type": "int", - "default": 0 - } - } - ] - } - }, - { - "variable": "requests", - "label": "Minimum Resources Required (request)", - "schema": { - "additional_attrs": true, - "type": "dict", - "hidden": true, - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "10m", - "hidden": true, - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "50Mi", - "hidden": true, - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - } - ] - } - } - ] - } - }, - { - "variable": "deviceList", - "label": "Mount USB Devices", - "group": "Resources and Devices", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "deviceListEntry", - "label": "Device", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Storage", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "type", - "label": "(Advanced) Type of Storage", - "description": "Sets the persistence type", - "schema": { - "type": "string", - "default": "device", - "hidden": true - } - }, - { - "variable": "readOnly", - "label": "readOnly", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "hostPath", - "label": "Host Device Path", - "description": "Path to the device on the host system", - "schema": { - "type": "path" - } - }, - { - "variable": "mountPath", - "label": "Container Device Path", - "description": "Path inside the container the device is mounted", - "schema": { - "type": "string", - "default": "/dev/ttyACM0" - } - } - ] - } - } - ] - } - }, - { - "variable": "scaleGPU", - "label": "GPU Configuration", - "group": "Resources and Devices", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "scaleGPUEntry", - "label": "GPU", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "gpu", - "label": "Select GPU", - "schema": { - "additional_attrs": true, - "type": "dict", - "$ref": [ - "definitions/gpuConfiguration" - ], - "attrs": [] - } - }, - { - "variable": "workaround", - "label": "Workaround", - "schema": { - "type": "string", - "default": "workaround", - "hidden": 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": "Advanced", - "label": "(Advanced) Network Policy", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "netPolicyEntry", - "label": "Network Policy Entry", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "policyType", - "label": "Policy Type", - "schema": { - "type": "string", - "default": "", - "enum": [ - { - "value": "", - "description": "Default" - }, - { - "value": "ingress", - "description": "Ingress" - }, - { - "value": "egress", - "description": "Egress" - }, - { - "value": "ingress-egress", - "description": "Ingress and Egress" - } - ] - } - }, - { - "variable": "egress", - "label": "Egress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "egressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "to", - "label": "To", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "toEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ingressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "from", - "label": "From", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "fromEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "addons", - "group": "Addons", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "Codeserver", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "service", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "NodePort", - "description": "Deprecated CHANGE THIS" - }, - { - "value": "ClusterIP", - "description": "ClusterIP" - }, - { - "value": "LoadBalancer", - "description": "LoadBalancer" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "ports", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int", - "default": 36107 - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable Ingress", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hosts", - "label": "Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "hostEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "host", - "label": "HostName", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "paths", - "label": "Paths", - "schema": { - "type": "list", - "default": [ - { - "path": "/", - "pathType": "Prefix" - } - ], - "items": [ - { - "variable": "pathEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "path", - "label": "Path", - "schema": { - "type": "string", - "required": true, - "default": "/" - } - }, - { - "variable": "pathType", - "label": "Path Type", - "schema": { - "type": "string", - "required": true, - "default": "Prefix" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "integrations", - "label": "Integrations", - "description": "Connect ingress with other charts", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "traefik", - "label": "Traefik", - "description": "Connect ingress with Traefik", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "allowCors", - "label": "Allow Cross Origin Requests (advanced)", - "schema": { - "type": "boolean", - "default": false, - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - }, - { - "variable": "entrypoints", - "label": "Entrypoints", - "schema": { - "type": "list", - "default": [ - "websecure" - ], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "entrypoint", - "label": "Entrypoint", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "middlewares", - "label": "Middlewares", - "schema": { - "type": "list", - "default": [], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "middleware", - "label": "Middleware", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "name", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "namespace", - "label": "namespace (optional)", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "certManager", - "label": "certManager", - "description": "Connect ingress with certManager", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "certificateIssuer", - "label": "certificateIssuer", - "description": "defaults to chartname", - "schema": { - "type": "string", - "default": "", - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "advanced", - "label": "Show Advanced Settings", - "description": "Advanced settings are not covered by TrueCharts Support", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "ingressClassName", - "label": "(Advanced/Optional) IngressClass Name", - "schema": { - "type": "string", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": "" - } - }, - { - "variable": "tls", - "label": "TLS-Settings", - "schema": { - "type": "list", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": [], - "items": [ - { - "variable": "tlsEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "hosts", - "label": "Certificate Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "host", - "label": "Host", - "schema": { - "type": "string", - "default": "", - "required": true - } - } - ] - } - }, - { - "variable": "certificateIssuer", - "label": "Use Cert-Manager clusterIssuer", - "description": "add the name of your cert-manager clusterIssuer here for automatic tls certificates.", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "clusterCertificate", - "label": "Cluster Certificate (Advanced)", - "description": "Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.", - "schema": { - "type": "string", - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "default": "" - } - }, - { - "variable": "secretName", - "label": "Use Custom Certificate Secret (Advanced)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "scaleCert", - "label": "Use TrueNAS SCALE Certificate (Deprecated)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "int", - "$ref": [ - "definitions/certificate" - ], - "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": "

    Looks and smells like Sonarr but made for music

    \n

    This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/lidarr

    \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 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

    lidarr-19.1.19 (2024-02-12)

    \n

    Chore

    \n
      \n
    • update container image ghcr.io/onedr0p/lidarr-develop to v2.1.7.4030@01d40bb by renovate (#18169)
    • \n
    \n

    lidarr-19.1.18 (2024-02-05)

    \n

    Chore

    \n
      \n
    • update container image ghcr.io/onedr0p/lidarr-develop to 2.1.6.3993@36b75d7 by renovate (#17955)
    • \n
    \n

    lidarr-19.1.17 (2024-02-05)

    \n

    Chore

    \n
      \n
    • update container image ghcr.io/onedr0p/lidarr-develop to v2.1.6.3993@90ddf2d by renovate (#17914)
    • \n
    \n

    lidarr-19.1.16 (2024-02-03)

    \n

    Chore

    \n
      \n
    • update container image common to v17.2.30@19ad5ec by renovate (#17804)
    • \n
    \n

    lidarr-19.1.15 (2024-01-29)

    \n

    Chore

    \n
      \n
    • update container image ghcr.io/onedr0p/exportarr to v1.6.1@60cf3d4 by renovate (#17725)
    • \n
    \n

    lidarr-19.1.14 (2024-01-29)

    \n

    Chore

    \n
      \n
    • update container image ghcr.io/onedr0p/lidarr-develop to v2.1.4.3941@de7dac0 by renovate (#17674)
    • \n
    \n

    lidarr-19.1.13 (2024-01-26)

    \n

    Chore

    \n
      \n
    • update container image common to v17.2.29@d7c41a3 by renovate (#17545)
    • \n
    \n

    lidarr-19.1.12 (2024-01-21)

    \n

    Chore

    \n
      \n
    • update container image common to v17.2.28@918b4c5 by renovate (#17478)
    • \n
    \n

    lidarr-19.1.11 (2024-01-21)

    \n

    Chore

    \n
      \n
    • update container image common to v17.2.26@24c98f7 by renovate (#17409)
    • \n
    \n

    lidarr-19.1.10 (2024-01-21)

    \n

    Chore

    \n
      \n
    • update metadata in chart.yaml (#17457)
    • \n
    " } } \ No newline at end of file diff --git a/stable/plex/16.3.0/.helmignore b/stable/plex/16.3.0/.helmignore deleted file mode 100644 index 77ca5567b2..0000000000 --- a/stable/plex/16.3.0/.helmignore +++ /dev/null @@ -1,30 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ -# OWNERS file for Kubernetes -OWNERS -# helm-docs templates -*.gotmpl -# docs folder -/docs -# icon -icon.png diff --git a/stable/plex/16.3.0/CHANGELOG.md b/stable/plex/16.3.0/CHANGELOG.md deleted file mode 100644 index 2acfbd52f2..0000000000 --- a/stable/plex/16.3.0/CHANGELOG.md +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: Changelog ---- - - -*for the complete changelog, please refer to the website* - -**Important:** - - - - - - - -## [plex-16.1.13](https://github.com/truecharts/charts/compare/plex-16.1.12...plex-16.1.13) (2024-02-12) - -### Chore - - - -- update container image ghcr.io/onedr0p/plex to 1.32.8.7639-fb6452ebf[@97bf4a8](https://github.com/97bf4a8) by renovate ([#18228](https://github.com/truecharts/charts/issues/18228)) - - -## [plex-16.1.12](https://github.com/truecharts/charts/compare/plex-16.1.11...plex-16.1.12) (2024-02-12) - -### Chore - - - -- update container image ghcr.io/onedr0p/plex to 1.32.8.7639-fb6452ebf[@76dce9f](https://github.com/76dce9f) by renovate ([#18165](https://github.com/truecharts/charts/issues/18165)) - - -## [plex-16.1.11](https://github.com/truecharts/charts/compare/plex-16.1.10...plex-16.1.11) (2024-02-03) - -### Chore - - - -- update container image common to v17.2.30[@19ad5ec](https://github.com/19ad5ec) by renovate ([#17804](https://github.com/truecharts/charts/issues/17804)) - - -## [plex-16.1.10](https://github.com/truecharts/charts/compare/plex-16.1.9...plex-16.1.10) (2024-01-26) - -### Chore - - - -- update container image common to v17.2.29[@d7c41a3](https://github.com/d7c41a3) by renovate ([#17545](https://github.com/truecharts/charts/issues/17545)) - - -## [plex-16.1.9](https://github.com/truecharts/charts/compare/plex-16.1.8...plex-16.1.9) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.28[@918b4c5](https://github.com/918b4c5) by renovate ([#17478](https://github.com/truecharts/charts/issues/17478)) - - -## [plex-16.1.8](https://github.com/truecharts/charts/compare/plex-16.1.7...plex-16.1.8) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.26[@24c98f7](https://github.com/24c98f7) by renovate ([#17409](https://github.com/truecharts/charts/issues/17409)) - - -## [plex-16.1.7](https://github.com/truecharts/charts/compare/plex-16.1.6...plex-16.1.7) (2024-01-21) - -### Chore - - - -- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) - - - - -## [plex-16.1.6](https://github.com/truecharts/charts/compare/plex-16.1.5...plex-16.1.6) (2024-01-09) - -### Chore - - - -- update container image common to v17.2.22[@e7c9056](https://github.com/e7c9056) by renovate ([#16986](https://github.com/truecharts/charts/issues/16986)) - - -## [plex-16.1.5](https://github.com/truecharts/charts/compare/plex-16.1.4...plex-16.1.5) (2024-01-02) - -### Chore - - - -- force bump to ensure up-to-date catalogs - - -## [plex-16.1.4](https://github.com/truecharts/charts/compare/plex-16.1.3...plex-16.1.4) (2024-01-01) diff --git a/stable/plex/16.3.0/Chart.yaml b/stable/plex/16.3.0/Chart.yaml deleted file mode 100644 index bd6e6ea7c1..0000000000 --- a/stable/plex/16.3.0/Chart.yaml +++ /dev/null @@ -1,36 +0,0 @@ -annotations: - max_scale_version: 24.04.0 - min_scale_version: 23.10.0 - truecharts.org/category: media - truecharts.org/max_helm_version: "3.14" - truecharts.org/min_helm_version: "3.12" - truecharts.org/train: stable -apiVersion: v2 -appVersion: 1.40.0.7998 -dependencies: - - name: common - version: 17.5.1 - repository: oci://tccr.io/truecharts - condition: "" - alias: "" - tags: [] - import-values: [] -deprecated: false -description: Plex Media Server -home: https://truecharts.org/charts/stable/plex -icon: https://truecharts.org/img/hotlink-ok/chart-icons/plex.png -keywords: - - plex - - plex-media-server -kubeVersion: ">=1.24.0-0" -maintainers: - - name: TrueCharts - email: info@truecharts.org - url: https://truecharts.org -name: plex -sources: - - https://github.com/k8s-at-home/container-images/pkgs/container/plex - - https://github.com/truecharts/charts/tree/master/charts/stable/plex - - https://ghcr.io/onedr0p/plex -type: application -version: 16.3.0 diff --git a/stable/plex/16.3.0/README.md b/stable/plex/16.3.0/README.md deleted file mode 100644 index 6bbc009429..0000000000 --- a/stable/plex/16.3.0/README.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: README ---- - -## General Info - -TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. -However only installations using the TrueNAS SCALE Apps system are supported. - -For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/plex) - -**This chart is not maintained by the upstream project and any issues with the chart should be raised [here](https://github.com/truecharts/charts/issues/new/choose)** - -## Support - -- Please check our [quick-start guides for TrueNAS SCALE](https://truecharts.org/manual/SCALE/guides/scale-intro). -- See the [Website](https://truecharts.org) -- Check our [Discord](https://discord.gg/tVsPTHWTtr) -- Open a [issue](https://github.com/truecharts/charts/issues/new/choose) - ---- - -## Sponsor TrueCharts - -TrueCharts can only exist due to the incredible effort of our staff. -Please consider making a [donation](https://truecharts.org/sponsor) or contributing back to the project any way you can! - -_All Rights Reserved - The TrueCharts Project_ diff --git a/stable/plex/16.3.0/app-readme.md b/stable/plex/16.3.0/app-readme.md deleted file mode 100644 index ba3b0a4a66..0000000000 --- a/stable/plex/16.3.0/app-readme.md +++ /dev/null @@ -1,8 +0,0 @@ -Plex Media Server - -This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/plex](https://truecharts.org/charts/stable/plex) - ---- - -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/plex/16.3.0/charts/common-17.4.2.tgz b/stable/plex/16.3.0/charts/common-17.4.2.tgz deleted file mode 100644 index 31f3a104561f859f297067776ab86a1503525be4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100097 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 l8bLay74+E3;;+DksJU3 diff --git a/stable/plex/16.3.0/ix_values.yaml b/stable/plex/16.3.0/ix_values.yaml deleted file mode 100644 index 2589934366..0000000000 --- a/stable/plex/16.3.0/ix_values.yaml +++ /dev/null @@ -1,52 +0,0 @@ -image: - repository: ghcr.io/onedr0p/plex - pullPolicy: IfNotPresent - tag: 1.40.0.7998-c29d4c0c8@sha256:6aee52b3ad59747bd8d794820be9771ab11d8ee60168c77ea2871f69301bdc35 -service: - main: - ports: - main: - protocol: http - port: 32400 - targetPort: 32400 -persistence: - config: - enabled: true - mountPath: "/config" - transcode: - enabled: true - mountPath: "/transcode" - type: emptyDir - medium: Memory - targetSelectAll: true -plex: - # User Defined - serverIP: "127.0.0.1" - additionalAdvertiseURL: "" - disableGDM: true - requireHTTPS: false -workload: - main: - podSpec: - containers: - main: - probes: - liveness: - enabled: true - path: /identity - readiness: - enabled: true - path: /identity - startup: - enabled: true - path: /identity - env: - PLEX_PREFERENCE_GDM: 'GdmEnabled={{ ternary "0" "1" .Values.plex.disableGDM }}' - # 0=Required, 1=Preferred - PLEX_PREFERENCE_SEC_CON: 'secureConnections={{ ternary "0" "1" .Values.plex.requireHTTPS }}' - # User Defined - ALLOWED_NETWORKS: "172.16.0.0/12,10.0.0.0/8,192.168.0.0/16" - PLEX_CLAIM: "" -portal: - open: - enabled: true diff --git a/stable/plex/16.3.0/questions.yaml b/stable/plex/16.3.0/questions.yaml deleted file mode 100755 index e55e2d978a..0000000000 --- a/stable/plex/16.3.0/questions.yaml +++ /dev/null @@ -1,2926 +0,0 @@ -groups: - - name: Container Image - description: Image to be used for container - - name: General Settings - description: General Deployment Settings - - name: Workload Settings - description: Workload Settings - - name: App Configuration - description: App Specific Config Options - - name: Networking and Services - description: Configure Network and Services for Container - - name: Storage and Persistence - description: Persist and Share Data that is Separate from the Container - - name: Ingress - description: Ingress Configuration - - name: Security and Permissions - description: Configure Security Context and Permissions - - name: Resources and Devices - description: "Specify Resources/Devices to be Allocated to Workload" - - name: Middlewares - description: Traefik Middlewares - - name: Metrics - description: Metrics - - name: Addons - description: Addon Configuration - - name: Backup Configuration - description: Configure Velero Backup Schedule - - name: Advanced - description: Advanced Configuration - - name: Postgresql - description: Postgresql - - name: Documentation - description: Documentation - -portals: - open: - protocols: - - "$kubernetes-resource_configmap_tcportal-open_protocol" - host: - - "$kubernetes-resource_configmap_tcportal-open_host" - ports: - - "$kubernetes-resource_configmap_tcportal-open_port" - - path: /web -questions: - - variable: global - group: General Settings - label: "Global Settings" - schema: - additional_attrs: true - type: dict - attrs: - - variable: stopAll - label: Stop All - description: "Stops All Running pods and hibernates cnpg" - schema: - type: boolean - default: false - - - variable: workload - group: "Workload Settings" - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: main - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: type - label: Type (Advanced) - schema: - type: string - default: Deployment - enum: - - value: Deployment - description: Deployment - - value: DaemonSet - description: DaemonSet - - - variable: replicas - label: Replicas (Advanced) - description: Set the number of Replicas - schema: - type: int - show_if: [["type", "!=", "DaemonSet"]] - default: 1 - - - variable: podSpec - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: containers - label: Containers - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: Main Container - schema: - additional_attrs: true - type: dict - attrs: - - - variable: env - group: App Configuration - label: Image Environment - schema: - additional_attrs: true - type: dict - attrs: - - variable: ALLOWED_NETWORKS - label: Allowed Networks - description: Networks allowed to connect to plex. Add your local network IP to this list - schema: - type: string - default: 172.16.0.0/12,10.0.0.0/8,192.168.0.0/16 - - variable: PLEX_CLAIM - label: Plex Claim Token - description: Claim token to use to register the plex server (Max. 4 minutes old!). You can obtain a claim token to login your server to your plex account by visiting https://www.plex.tv/claim. - 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: plex - group: App Configuration - label: Plex Configuration - schema: - additional_attrs: true - type: dict - attrs: - - variable: serverIP - label: Server IP - description: Set to the IP-Address used to reach Plex. - schema: - type: string - required: true - $ref: - - definitions/nodeIP - - variable: additionalAdvertiseURL - label: Addition Advertise URLs - description: URLs to advertise to Plex, format http(s)://IPorDNS:3200. By default your serverIP and ingress URL is added" - schema: - type: string - valid_chars: '^$|^(http(s)?:\/\/([a-zA-Z0-9.-]*)(:\d{0,5})?,?)*$' - default: "" - - variable: disableGDM - label: Disable GDM - description: Recommended to keep this to true. Disables legacy local network discovery. Keeping it enabled might break discovery for some Plex Clients - schema: - type: boolean - default: true - - variable: requireHTTPS - label: Require HTTPS - description: | - NOTE: Only enable this setting AFTER you are done with the initial configuration - of your Plex Server and verify that remote access is working.
    - Please use this toggle to "Require HTTPS", instead of using the Plex UI, - so probes are configured correctly. - schema: - type: boolean - default: false - - variable: TZ - label: Timezone - group: "General Settings" - schema: - type: string - default: "Etc/UTC" - $ref: - - "definitions/timezone" - - - variable: podOptions - group: "General Settings" - label: "Global Pod Options (Advanced)" - schema: - additional_attrs: true - type: dict - attrs: - - variable: expertPodOpts - label: "Expert - Pod Options" - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hostNetwork - label: "Host Networking" - schema: - type: boolean - default: false - - variable: dnsConfig - label: "DNS Configuration" - schema: - type: dict - additional_attrs: true - attrs: - - variable: options - label: "Options" - schema: - type: list - default: [{"name": "ndots", "value": "1"}] - items: - - variable: optionsEntry - label: "Option Entry" - schema: - type: dict - additional_attrs: true - attrs: - - variable: name - label: "Name" - schema: - type: string - required: true - - variable: value - label: "Value" - schema: - type: string - - variable: nameservers - label: "Nameservers" - schema: - type: list - default: [] - items: - - variable: nsEntry - label: "Nameserver Entry" - schema: - type: string - required: true - - variable: searches - label: "Searches" - schema: - type: list - default: [] - items: - - variable: searchEntry - label: "Search Entry" - schema: - type: string - required: true - - - variable: imagePullSecretList - group: "General Settings" - label: "Image Pull Secrets" - schema: - type: list - default: [] - items: - - variable: pullsecretentry - label: "Pull Secret" - schema: - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: true - - variable: data - label: Data - schema: - type: dict - additional_attrs: true - attrs: - - variable: registry - label: "Registry" - schema: - type: string - required: true - default: "https://index.docker.io/v1/" - - variable: username - label: "Username" - schema: - type: string - required: true - default: "" - - variable: password - label: "Password" - schema: - type: string - required: true - private: true - default: "" - - variable: email - label: "Email" - schema: - type: string - required: true - default: "" - - - variable: service - group: Networking and Services - label: Configure Service(s) - schema: - additional_attrs: true - type: dict - attrs: - - - variable: 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: 32400 - required: true - - variable: serviceexpert - group: Networking and Services - label: Show Expert Config - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - - variable: scaleExternalInterface - description: Add External Interfaces - label: Add external Interfaces - group: Networking - schema: - type: list - items: - - variable: interfaceConfiguration - description: Interface Configuration - label: Interface Configuration - schema: - additional_attrs: true - type: dict - $ref: - - "normalize/interfaceConfiguration" - attrs: - - variable: hostInterface - description: Please Specify Host Interface - label: Host Interface - schema: - type: string - required: true - $ref: - - "definitions/interface" - - variable: ipam - description: Define how IP Address will be managed - label: IP Address Management - schema: - additional_attrs: true - type: dict - required: true - attrs: - - variable: type - description: Specify type for IPAM - label: IPAM Type - schema: - type: string - required: true - enum: - - value: dhcp - description: Use DHCP - - value: static - description: Use Static IP - - variable: staticIPConfigurations - label: Static IP Addresses - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticIP - label: Static IP - schema: - type: ipaddr - cidr: true - - variable: staticRoutes - label: Static Routes - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticRouteConfiguration - label: Static Route Configuration - schema: - additional_attrs: true - type: dict - attrs: - - variable: destination - label: Destination - schema: - type: ipaddr - cidr: true - required: true - - variable: gateway - label: Gateway - schema: - type: ipaddr - cidr: false - required: true - - - variable: serviceList - label: Add Manual Custom Services - group: Networking and Services - schema: - type: list - default: [] - items: - - variable: serviceListEntry - label: Custom Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the service - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: LoadBalancer - description: LoadBalancer (Expose Ports) - - value: ClusterIP - description: ClusterIP (Do Not Expose Ports) - - value: Simple - description: Deprecated CHANGE THIS - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: advancedsvcset - label: Show Advanced Service Settings - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: externalIPs - label: "External IP's" - description: "External IP's" - schema: - type: list - default: [] - items: - - variable: externalIP - label: External IP - schema: - type: string - - variable: ipFamilyPolicy - label: IP Family Policy - description: Specify the IP Policy - schema: - type: string - default: SingleStack - enum: - - value: SingleStack - description: SingleStack - - value: PreferDualStack - description: PreferDualStack - - value: RequireDualStack - description: RequireDualStack - - variable: ipFamilies - label: IP Families - description: (Advanced) The IP Families that should be used - schema: - type: list - default: [] - items: - - variable: ipFamily - label: IP Family - schema: - type: string - - variable: portsList - label: Additional Service Ports - schema: - type: list - default: [] - items: - - variable: portsListEntry - label: Custom ports - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Port - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Port Name - schema: - type: string - default: "" - - variable: protocol - label: Port Type - schema: - type: string - default: tcp - enum: - - value: http - description: HTTP - - value: https - description: HTTPS - - value: tcp - description: TCP - - value: udp - description: UDP - - variable: targetPort - label: Target Port - description: This port exposes the container port on the service - schema: - type: int - required: true - - variable: port - label: Container Port - schema: - type: int - required: true - - - variable: persistence - label: Integrated Persistent Storage - description: Integrated Persistent Storage - group: Storage and 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: 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: Storage and Persistence - schema: - type: list - default: [] - items: - - variable: persistenceListEntry - label: Custom Storage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the storage - schema: - type: boolean - default: true - hidden: true - - variable: type - label: Type of Storage - description: Sets the persistence type, Anything other than PVC could break rollback! - schema: - type: string - default: hostPath - enum: - - value: pvc - description: PVC - - value: hostPath - description: Host Path - - value: emptyDir - description: emptyDir - - value: nfs - description: NFS Share - - variable: server - label: NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: path - label: Path on NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: iscsi - label: iSCSI Options - schema: - show_if: [["type", "=", "iscsi"]] - type: dict - additional_attrs: true - attrs: - - variable: targetPortal - label: targetPortal - schema: - type: string - required: true - default: "" - - variable: iqn - label: iqn - schema: - type: string - required: true - default: "" - - variable: lun - label: lun - schema: - type: int - default: 0 - - variable: authSession - label: authSession - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: authDiscovery - label: authDiscovery - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: autoPermissions - label: Automatic Permissions Configuration - description: Automatically set permissions - schema: - show_if: [["type", "!=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: chown - label: Run CHOWN - description: | - It will run CHOWN on the path with the given fsGroup - schema: - type: boolean - default: false - - variable: chmod - label: Run CHMOD - description: | - It will run CHMOD on the path with the given value
    - Format should be 3 digits, e.g. 770 - schema: - type: string - valid_chars: '[0-9]{3}' - default: "" - - variable: recursive - label: Recursive - description: | - It will run CHOWN and CHMOD recursively - schema: - type: boolean - default: false - - variable: readOnly - label: Read Only - schema: - type: boolean - default: false - - variable: hostPath - label: Host Path - description: Path inside the container the storage is mounted - schema: - show_if: [["type", "=", "hostPath"]] - type: hostpath - - variable: mountPath - label: Mount Path - description: Path inside the container the storage is mounted - schema: - type: string - default: "" - required: true - valid_chars: '^\/([a-zA-Z0-9._-]+(\s?[a-zA-Z0-9._-]+|\/?))+$' - - variable: medium - label: EmptyDir Medium - schema: - show_if: [["type", "=", "emptyDir"]] - type: string - default: "" - enum: - - value: "" - description: Default - - value: Memory - description: Memory - - variable: size - label: Size Quotum of Storage - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: 256Gi - - variable: storageClass - label: 'storageClass (Advanced)' - description: 'sets the storageClass to something other than iX default. Only for advanced usecases!' - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: "" - - variable: static - label: 'Static Fixed PVC Bindings (Experimental)' - description: Link a PVC to a specific storage location - schema: - show_if: [["type", "=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: mode - label: mode - description: | - disabled: use normal dynamic PVCs - smb: connect to an SMB share - nfs: connect to an NFS share - schema: - type: string - default: "disabled" - enum: - - value: "disabled" - description: disabled - - value: smb - description: smb - - value: nfs - description: nfs - - variable: server - label: Server - description: server to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "myserver" - - variable: share - label: Share - description: share to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "/myshare" - - variable: user - label: User - description: connecting user - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "myuser" - - variable: domain - label: Domain - description: user domain - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: password - label: Password - description: connecting password - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: volumeSnapshots - label: 'Volume Snapshots (Experimental)' - description: Add an entry to the list to force creation of a volumeSnapshot of this PVC - schema: - show_if: [["type", "=", "pvc"]] - type: list - default: [] - items: - - variable: volumeSnapshotEntry - label: Custom volumeSnapshot - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - description: 'WARNING: renaming this, means deletion of the snapshot with the old name!' - schema: - type: string - default: "mysnapshot" - required: true - - variable: volumeSnapshotClassName - label: 'volumeSnapshot Class Name (Advanced)' - description: For use with PVCs using a non-default storageClass - schema: - type: string - default: "" - - - variable: ingress - label: "" - group: Ingress - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: Main Ingress - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name (Optional) - description: Defaults to chart name - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description (Optional) - description: Defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: icon - label: Icon (Optional) - description: Defaults to chart icon - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - variable: widget - label: Widget Settings - schema: - type: dict - additional_attrs: true - show_if: [["enabled", "=", true]] - attrs: - - variable: enabled - label: Enable Widget - description: When disabled all widget annotations are skipped. - schema: - type: boolean - default: true - - variable: custom - label: Options - schema: - type: dict - additional_attrs: true - attrs: - - variable: key - label: API-key (key) - schema: - type: string - default: "" - - variable: customkv - label: Custom Options - schema: - type: list - default: [] - items: - - variable: option - label: Option - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - default: "" - required: true - - variable: value - label: Value - schema: - type: string - default: "" - required: true - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - - variable: ingressList - label: Add Manual Custom Ingresses - group: Ingress - schema: - type: list - default: [] - items: - - variable: ingressListEntry - label: Custom Ingress - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: ingressClassName - label: IngressClass Name - schema: - type: string - default: "" - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: overrideService - label: Linked Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Service Name - schema: - type: string - default: "" - - variable: port - label: Service Port - schema: - type: int - - variable: tls - label: TLS-Settings - schema: - type: list - default: [] - show_if: [["certificateIssuer", "=", ""]] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your Cert-Manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: Use Custom Secret (Advanced) - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: "Allow Cross Origin Requests" - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: namespace - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description - description: defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - - variable: securityContext - group: Security and Permissions - label: Security Context - schema: - additional_attrs: true - type: dict - attrs: - - variable: container - label: Container - schema: - additional_attrs: true - type: dict - attrs: - # Settings from questions.yaml get appended here on a per-app basis - - - variable: runAsUser - label: "runAsUser" - description: "The UserID of the user running the application" - schema: - type: int - default: 568 - - variable: runAsGroup - label: "runAsGroup" - description: "The groupID 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 and Devices - label: "Resource Limits" - schema: - additional_attrs: true - type: dict - attrs: - - variable: limits - label: Advanced Limit Resource Consumption - schema: - additional_attrs: true - type: dict - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 4000m - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: RAM - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 8Gi - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: 'intel.com/i915' - label: Add Intel i915 GPUs - schema: - type: int - default: 0 - - variable: 'nvidia.com/gpu' - label: Add NVIDIA GPUs (Experimental) - schema: - type: int - default: 0 - - variable: 'amd.com/gpu' - label: Add AMD GPUs - schema: - type: int - default: 0 - - variable: requests - label: "Minimum Resources Required (request)" - schema: - additional_attrs: true - type: dict - hidden: true - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 10m - hidden: true - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: "RAM" - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 50Mi - hidden: true - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: deviceList - label: Mount USB Devices - group: Resources and Devices - schema: - type: list - default: [] - items: - - variable: deviceListEntry - label: Device - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Storage - schema: - type: boolean - default: true - - variable: type - label: (Advanced) Type of Storage - description: Sets the persistence type - schema: - type: string - default: device - hidden: true - - variable: readOnly - label: readOnly - schema: - type: boolean - default: false - - variable: hostPath - label: Host Device Path - description: Path to the device on the host system - schema: - type: path - - variable: mountPath - label: Container Device Path - description: Path inside the container the device is mounted - schema: - type: string - default: "/dev/ttyACM0" - - variable: scaleGPU - label: GPU Configuration - group: Resources and Devices - schema: - type: list - default: [] - items: - - variable: scaleGPUEntry - label: GPU - schema: - additional_attrs: true - type: dict - attrs: - # Specify GPU configuration - - variable: gpu - label: Select GPU - schema: - additional_attrs: true - type: dict - $ref: - - "definitions/gpuConfiguration" - attrs: [] - - variable: workaround - label: "Workaround" - schema: - type: string - default: workaround - hidden: true - -# - variable: horizontalPodAutoscaler -# group: Advanced -# label: (Advanced) Horizontal Pod Autoscaler -# schema: -# type: list -# default: [] -# items: -# - variable: hpaEntry -# label: HPA Entry -# schema: -# additional_attrs: true -# type: dict -# attrs: -# - variable: name -# label: Name -# schema: -# type: string -# required: true -# default: "" -# - variable: enabled -# label: Enabled -# schema: -# type: boolean -# default: false -# show_subquestions_if: true -# subquestions: -# - variable: target -# label: Target -# description: Deployment name, Defaults to Main Deployment -# schema: -# type: string -# default: "" -# - variable: minReplicas -# label: Minimum Replicas -# schema: -# type: int -# default: 1 -# - variable: maxReplicas -# label: Maximum Replicas -# schema: -# type: int -# default: 5 -# - variable: targetCPUUtilizationPercentage -# label: Target CPU Utilization Percentage -# schema: -# type: int -# default: 80 -# - variable: targetMemoryUtilizationPercentage -# label: Target Memory Utilization Percentage -# schema: -# type: int -# default: 80 - - variable: networkPolicy - group: Advanced - label: (Advanced) Network Policy - schema: - type: list - default: [] - items: - - variable: netPolicyEntry - label: Network Policy Entry - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - default: "" - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: policyType - label: Policy Type - schema: - type: string - default: "" - enum: - - value: "" - description: Default - - value: ingress - description: Ingress - - value: egress - description: Egress - - value: ingress-egress - description: Ingress and Egress - - variable: egress - label: Egress - schema: - type: list - default: [] - items: - - variable: egressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: to - label: To - schema: - type: list - default: [] - items: - - variable: toEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - variable: ingress - label: Ingress - schema: - type: list - default: [] - items: - - variable: ingressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: from - label: From - schema: - type: list - default: [] - items: - - variable: fromEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - - variable: addons - group: Addons - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: codeserver - label: Codeserver - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: service - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: NodePort - description: Deprecated CHANGE THIS - - value: ClusterIP - description: ClusterIP - - value: LoadBalancer - description: LoadBalancer - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: ports - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: codeserver - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - default: 36107 - - variable: ingress - label: "Ingress" - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - variable: scaleCert - label: 'Use TrueNAS SCALE Certificate (Deprecated)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: int - $ref: - - "definitions/certificate" - - variable: envList - label: Codeserver Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: netshoot - label: Netshoot - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: envList - label: Netshoot Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: vpn - label: VPN - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Type - schema: - type: string - default: disabled - enum: - - value: disabled - description: disabled - - value: gluetun - description: Gluetun - - value: tailscale - description: Tailscale - - value: openvpn - description: OpenVPN (Deprecated) - - value: wireguard - description: Wireguard (Deprecated) - - variable: openvpn - label: OpenVPN Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "openvpn"]] - attrs: - - variable: username - label: Authentication Username (Optional) - description: Authentication Username, Optional - schema: - type: string - default: "" - - variable: password - label: Authentication Password - description: Authentication Credentials - schema: - type: string - show_if: [["username", "!=", ""]] - default: "" - required: true - - variable: tailscale - label: Tailscale Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "tailscale"]] - attrs: - - variable: authkey - label: Authentication Key - description: Provide an auth key to automatically authenticate the node as your user account. - schema: - type: string - private: true - default: "" - - variable: auth_once - label: Auth Once - description: Only attempt to log in if not already logged in. - schema: - type: boolean - default: true - - variable: accept_dns - label: Accept DNS - description: Accept DNS configuration from the admin console. - schema: - type: boolean - default: false - - variable: userspace - label: Userspace - description: Userspace Networking mode allows running Tailscale where you do not have access to create a VPN tunnel device. - schema: - type: boolean - default: false - - variable: routes - label: Routes - description: Expose physical subnet routes to your entire Tailscale network. - schema: - type: string - default: "" - - variable: dest_ip - label: Destination IP - description: Tells the DNAT mechanism which Destination IP to set in the IP header, and where to send packets that are matched. - schema: - type: string - default: "" - - variable: sock5_server - label: Sock5 Server - description: The address on which to listen for SOCKS5 proxying into the tailscale net. - schema: - type: string - default: "" - - variable: outbound_http_proxy_listen - label: Outbound HTTP Proxy Listen - description: The address on which to listen for HTTP proxying into the tailscale net. - schema: - type: string - default: "" - - variable: extra_args - label: Extra Args - description: Extra Args - schema: - type: string - default: "" - - variable: daemon_extra_args - label: Tailscale Daemon Extra Args - description: Tailscale Daemon Extra Args - schema: - type: string - default: "" - - variable: killSwitch - label: Enable Killswitch - schema: - type: boolean - show_if: [["type", "!=", "disabled"]] - default: true - - variable: excludedNetworks_IPv4 - label: Killswitch Excluded IPv4 networks - description: List of Killswitch Excluded IPv4 Addresses - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv4 - label: IPv4 Network - schema: - type: string - required: true - - variable: excludedNetworks_IPv6 - label: Killswitch Excluded IPv6 networks - description: "List of Killswitch Excluded IPv6 Addresses" - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv6 - label: IPv6 Network - schema: - type: string - required: true - - variable: configFile - label: VPN Config File Location - schema: - type: string - show_if: [["type", "!=", "disabled"]] - default: "" - - - variable: envList - label: VPN Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - max_length: 10240 - - - variable: docs - group: Documentation - label: Please read the documentation at https://truecharts.org - description: Please read the documentation at -
    https://truecharts.org - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDocs - label: I have checked the documentation - schema: - type: boolean - default: true - - variable: donateNag - group: Documentation - label: Please consider supporting TrueCharts, see https://truecharts.org/sponsor - description: Please consider supporting TrueCharts, see -
    https://truecharts.org/sponsor - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDonate - label: I have considered donating - schema: - type: boolean - default: true - hidden: true - diff --git a/stable/plex/16.3.0/templates/NOTES.txt b/stable/plex/16.3.0/templates/NOTES.txt deleted file mode 100644 index efcb74cb77..0000000000 --- a/stable/plex/16.3.0/templates/NOTES.txt +++ /dev/null @@ -1 +0,0 @@ -{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/plex/16.3.0/templates/common.yaml b/stable/plex/16.3.0/templates/common.yaml deleted file mode 100644 index 7f4568886d..0000000000 --- a/stable/plex/16.3.0/templates/common.yaml +++ /dev/null @@ -1,53 +0,0 @@ -{{/* Make sure all variables are set properly */}} -{{- include "tc.v1.common.loader.init" . -}} - -{{- $adv := list -}} -{{- $serverURL := "" -}} -{{- $protocol := "http" -}} -{{- if .Values.plex.requireHTTPS -}} - {{- $protocol = "https" -}} -{{- end -}} - -{{- $_ := set .Values.workload.main.podSpec.containers.main.probes.liveness "scheme" $protocol -}} -{{- $_ := set .Values.workload.main.podSpec.containers.main.probes.readiness "scheme" $protocol -}} -{{- $_ := set .Values.workload.main.podSpec.containers.main.probes.startup "scheme" $protocol -}} -{{- $_ := set .Values.service.main.ports.main "protocol" $protocol -}} - -{{- if not (eq .Values.service.main.type "ClusterIP") -}} - {{- $serverURL = (printf "%v://%v:%v" $protocol .Values.plex.serverIP .Values.service.main.ports.main.port) -}} -{{- end -}} - -{{- $serverIngressURL := "" -}} -{{- $host := "" -}} -{{- if .Values.ingress.main.enabled -}} - {{- with (first .Values.ingress.main.hosts) -}} - {{- $host = .host -}} - {{- $serverIngressURL = (printf "https://%v" .host) -}} - {{- end -}} -{{- end -}} - -{{- $serverIngressURLPort := "" -}} -{{- if $host -}} - {{- if not (eq .Values.service.main.type "ClusterIP") -}} - {{- $port := .Values.service.main.ports.main.port -}} - {{- $serverIngressURLPort = printf "https://%v:%v" $host $port -}} - {{- end -}} -{{- end -}} - -{{- with $serverURL -}} - {{- $adv = append $adv . -}} -{{- end -}} -{{- with $serverIngressURL -}} - {{- $adv = append $adv . -}} -{{- end -}} -{{- with $serverIngressURLPort -}} - {{- $adv = append $adv . -}} -{{- end -}} -{{- with .Values.plex.additionalAdvertiseURL -}} - {{- $adv = append $adv . -}} -{{- end -}} - -{{- $_ := set .Values.workload.main.podSpec.containers.main.env "ADVERTISE_IP" (join "," $adv) -}} - -{{/* Render the templates */}} -{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/plex/16.3.0/values.yaml b/stable/plex/16.3.0/values.yaml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/stable/plex/16.4.0/.helmignore b/stable/plex/16.4.0/.helmignore deleted file mode 100644 index 77ca5567b2..0000000000 --- a/stable/plex/16.4.0/.helmignore +++ /dev/null @@ -1,30 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ -# OWNERS file for Kubernetes -OWNERS -# helm-docs templates -*.gotmpl -# docs folder -/docs -# icon -icon.png diff --git a/stable/plex/16.4.0/CHANGELOG.md b/stable/plex/16.4.0/CHANGELOG.md deleted file mode 100644 index d1f60d7ca9..0000000000 --- a/stable/plex/16.4.0/CHANGELOG.md +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: Changelog ---- - - -*for the complete changelog, please refer to the website* - -**Important:** - - - - - - - - -## [plex-16.1.13](https://github.com/truecharts/charts/compare/plex-16.1.12...plex-16.1.13) (2024-02-12) - -### Chore - - - -- update container image ghcr.io/onedr0p/plex to 1.32.8.7639-fb6452ebf[@97bf4a8](https://github.com/97bf4a8) by renovate ([#18228](https://github.com/truecharts/charts/issues/18228)) - - -## [plex-16.1.12](https://github.com/truecharts/charts/compare/plex-16.1.11...plex-16.1.12) (2024-02-12) - -### Chore - - - -- update container image ghcr.io/onedr0p/plex to 1.32.8.7639-fb6452ebf[@76dce9f](https://github.com/76dce9f) by renovate ([#18165](https://github.com/truecharts/charts/issues/18165)) - - -## [plex-16.1.11](https://github.com/truecharts/charts/compare/plex-16.1.10...plex-16.1.11) (2024-02-03) - -### Chore - - - -- update container image common to v17.2.30[@19ad5ec](https://github.com/19ad5ec) by renovate ([#17804](https://github.com/truecharts/charts/issues/17804)) - - -## [plex-16.1.10](https://github.com/truecharts/charts/compare/plex-16.1.9...plex-16.1.10) (2024-01-26) - -### Chore - - - -- update container image common to v17.2.29[@d7c41a3](https://github.com/d7c41a3) by renovate ([#17545](https://github.com/truecharts/charts/issues/17545)) - - -## [plex-16.1.9](https://github.com/truecharts/charts/compare/plex-16.1.8...plex-16.1.9) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.28[@918b4c5](https://github.com/918b4c5) by renovate ([#17478](https://github.com/truecharts/charts/issues/17478)) - - -## [plex-16.1.8](https://github.com/truecharts/charts/compare/plex-16.1.7...plex-16.1.8) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.26[@24c98f7](https://github.com/24c98f7) by renovate ([#17409](https://github.com/truecharts/charts/issues/17409)) - - -## [plex-16.1.7](https://github.com/truecharts/charts/compare/plex-16.1.6...plex-16.1.7) (2024-01-21) - -### Chore - - - -- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) - - - - -## [plex-16.1.6](https://github.com/truecharts/charts/compare/plex-16.1.5...plex-16.1.6) (2024-01-09) - -### Chore - - - -- update container image common to v17.2.22[@e7c9056](https://github.com/e7c9056) by renovate ([#16986](https://github.com/truecharts/charts/issues/16986)) - - -## [plex-16.1.5](https://github.com/truecharts/charts/compare/plex-16.1.4...plex-16.1.5) (2024-01-02) - -### Chore - - - -- force bump to ensure up-to-date catalogs - - -## [plex-16.1.4](https://github.com/truecharts/charts/compare/plex-16.1.3...plex-16.1.4) (2024-01-01) \ No newline at end of file diff --git a/stable/plex/16.4.0/Chart.yaml b/stable/plex/16.4.0/Chart.yaml deleted file mode 100644 index fcda115db7..0000000000 --- a/stable/plex/16.4.0/Chart.yaml +++ /dev/null @@ -1,36 +0,0 @@ -annotations: - max_scale_version: 24.04.0 - min_scale_version: 23.10.0 - truecharts.org/category: media - truecharts.org/max_helm_version: "3.14" - truecharts.org/min_helm_version: "3.12" - truecharts.org/train: stable -apiVersion: v2 -appVersion: 1.40.0.7998 -dependencies: - - name: common - version: 17.5.1 - repository: oci://tccr.io/truecharts - condition: "" - alias: "" - tags: [] - import-values: [] -deprecated: false -description: Plex Media Server -home: https://truecharts.org/charts/stable/plex -icon: https://truecharts.org/img/hotlink-ok/chart-icons/plex.png -keywords: - - plex - - plex-media-server -kubeVersion: ">=1.24.0-0" -maintainers: - - name: TrueCharts - email: info@truecharts.org - url: https://truecharts.org -name: plex -sources: - - https://github.com/k8s-at-home/container-images/pkgs/container/plex - - https://github.com/truecharts/charts/tree/master/charts/stable/plex - - https://ghcr.io/onedr0p/plex -type: application -version: 16.4.0 diff --git a/stable/plex/16.4.0/README.md b/stable/plex/16.4.0/README.md deleted file mode 100644 index 6bbc009429..0000000000 --- a/stable/plex/16.4.0/README.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: README ---- - -## General Info - -TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. -However only installations using the TrueNAS SCALE Apps system are supported. - -For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/plex) - -**This chart is not maintained by the upstream project and any issues with the chart should be raised [here](https://github.com/truecharts/charts/issues/new/choose)** - -## Support - -- Please check our [quick-start guides for TrueNAS SCALE](https://truecharts.org/manual/SCALE/guides/scale-intro). -- See the [Website](https://truecharts.org) -- Check our [Discord](https://discord.gg/tVsPTHWTtr) -- Open a [issue](https://github.com/truecharts/charts/issues/new/choose) - ---- - -## Sponsor TrueCharts - -TrueCharts can only exist due to the incredible effort of our staff. -Please consider making a [donation](https://truecharts.org/sponsor) or contributing back to the project any way you can! - -_All Rights Reserved - The TrueCharts Project_ diff --git a/stable/plex/16.4.0/app-readme.md b/stable/plex/16.4.0/app-readme.md deleted file mode 100644 index ba3b0a4a66..0000000000 --- a/stable/plex/16.4.0/app-readme.md +++ /dev/null @@ -1,8 +0,0 @@ -Plex Media Server - -This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/plex](https://truecharts.org/charts/stable/plex) - ---- - -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/plex/16.4.0/charts/common-17.5.0.tgz b/stable/plex/16.4.0/charts/common-17.5.0.tgz deleted file mode 100644 index 3a5534883aaac1a331bf10ad166cff7fe5d2dd75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100452 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 z 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 Wm9Bh-<^K-=0RR7ge;?HVjtl_2wPFzf diff --git a/stable/plex/16.4.0/ix_values.yaml b/stable/plex/16.4.0/ix_values.yaml deleted file mode 100644 index 2589934366..0000000000 --- a/stable/plex/16.4.0/ix_values.yaml +++ /dev/null @@ -1,52 +0,0 @@ -image: - repository: ghcr.io/onedr0p/plex - pullPolicy: IfNotPresent - tag: 1.40.0.7998-c29d4c0c8@sha256:6aee52b3ad59747bd8d794820be9771ab11d8ee60168c77ea2871f69301bdc35 -service: - main: - ports: - main: - protocol: http - port: 32400 - targetPort: 32400 -persistence: - config: - enabled: true - mountPath: "/config" - transcode: - enabled: true - mountPath: "/transcode" - type: emptyDir - medium: Memory - targetSelectAll: true -plex: - # User Defined - serverIP: "127.0.0.1" - additionalAdvertiseURL: "" - disableGDM: true - requireHTTPS: false -workload: - main: - podSpec: - containers: - main: - probes: - liveness: - enabled: true - path: /identity - readiness: - enabled: true - path: /identity - startup: - enabled: true - path: /identity - env: - PLEX_PREFERENCE_GDM: 'GdmEnabled={{ ternary "0" "1" .Values.plex.disableGDM }}' - # 0=Required, 1=Preferred - PLEX_PREFERENCE_SEC_CON: 'secureConnections={{ ternary "0" "1" .Values.plex.requireHTTPS }}' - # User Defined - ALLOWED_NETWORKS: "172.16.0.0/12,10.0.0.0/8,192.168.0.0/16" - PLEX_CLAIM: "" -portal: - open: - enabled: true diff --git a/stable/plex/16.4.0/questions.yaml b/stable/plex/16.4.0/questions.yaml deleted file mode 100755 index e55e2d978a..0000000000 --- a/stable/plex/16.4.0/questions.yaml +++ /dev/null @@ -1,2926 +0,0 @@ -groups: - - name: Container Image - description: Image to be used for container - - name: General Settings - description: General Deployment Settings - - name: Workload Settings - description: Workload Settings - - name: App Configuration - description: App Specific Config Options - - name: Networking and Services - description: Configure Network and Services for Container - - name: Storage and Persistence - description: Persist and Share Data that is Separate from the Container - - name: Ingress - description: Ingress Configuration - - name: Security and Permissions - description: Configure Security Context and Permissions - - name: Resources and Devices - description: "Specify Resources/Devices to be Allocated to Workload" - - name: Middlewares - description: Traefik Middlewares - - name: Metrics - description: Metrics - - name: Addons - description: Addon Configuration - - name: Backup Configuration - description: Configure Velero Backup Schedule - - name: Advanced - description: Advanced Configuration - - name: Postgresql - description: Postgresql - - name: Documentation - description: Documentation - -portals: - open: - protocols: - - "$kubernetes-resource_configmap_tcportal-open_protocol" - host: - - "$kubernetes-resource_configmap_tcportal-open_host" - ports: - - "$kubernetes-resource_configmap_tcportal-open_port" - - path: /web -questions: - - variable: global - group: General Settings - label: "Global Settings" - schema: - additional_attrs: true - type: dict - attrs: - - variable: stopAll - label: Stop All - description: "Stops All Running pods and hibernates cnpg" - schema: - type: boolean - default: false - - - variable: workload - group: "Workload Settings" - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: main - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: type - label: Type (Advanced) - schema: - type: string - default: Deployment - enum: - - value: Deployment - description: Deployment - - value: DaemonSet - description: DaemonSet - - - variable: replicas - label: Replicas (Advanced) - description: Set the number of Replicas - schema: - type: int - show_if: [["type", "!=", "DaemonSet"]] - default: 1 - - - variable: podSpec - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: containers - label: Containers - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: Main Container - schema: - additional_attrs: true - type: dict - attrs: - - - variable: env - group: App Configuration - label: Image Environment - schema: - additional_attrs: true - type: dict - attrs: - - variable: ALLOWED_NETWORKS - label: Allowed Networks - description: Networks allowed to connect to plex. Add your local network IP to this list - schema: - type: string - default: 172.16.0.0/12,10.0.0.0/8,192.168.0.0/16 - - variable: PLEX_CLAIM - label: Plex Claim Token - description: Claim token to use to register the plex server (Max. 4 minutes old!). You can obtain a claim token to login your server to your plex account by visiting https://www.plex.tv/claim. - 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: plex - group: App Configuration - label: Plex Configuration - schema: - additional_attrs: true - type: dict - attrs: - - variable: serverIP - label: Server IP - description: Set to the IP-Address used to reach Plex. - schema: - type: string - required: true - $ref: - - definitions/nodeIP - - variable: additionalAdvertiseURL - label: Addition Advertise URLs - description: URLs to advertise to Plex, format http(s)://IPorDNS:3200. By default your serverIP and ingress URL is added" - schema: - type: string - valid_chars: '^$|^(http(s)?:\/\/([a-zA-Z0-9.-]*)(:\d{0,5})?,?)*$' - default: "" - - variable: disableGDM - label: Disable GDM - description: Recommended to keep this to true. Disables legacy local network discovery. Keeping it enabled might break discovery for some Plex Clients - schema: - type: boolean - default: true - - variable: requireHTTPS - label: Require HTTPS - description: | - NOTE: Only enable this setting AFTER you are done with the initial configuration - of your Plex Server and verify that remote access is working.
    - Please use this toggle to "Require HTTPS", instead of using the Plex UI, - so probes are configured correctly. - schema: - type: boolean - default: false - - variable: TZ - label: Timezone - group: "General Settings" - schema: - type: string - default: "Etc/UTC" - $ref: - - "definitions/timezone" - - - variable: podOptions - group: "General Settings" - label: "Global Pod Options (Advanced)" - schema: - additional_attrs: true - type: dict - attrs: - - variable: expertPodOpts - label: "Expert - Pod Options" - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hostNetwork - label: "Host Networking" - schema: - type: boolean - default: false - - variable: dnsConfig - label: "DNS Configuration" - schema: - type: dict - additional_attrs: true - attrs: - - variable: options - label: "Options" - schema: - type: list - default: [{"name": "ndots", "value": "1"}] - items: - - variable: optionsEntry - label: "Option Entry" - schema: - type: dict - additional_attrs: true - attrs: - - variable: name - label: "Name" - schema: - type: string - required: true - - variable: value - label: "Value" - schema: - type: string - - variable: nameservers - label: "Nameservers" - schema: - type: list - default: [] - items: - - variable: nsEntry - label: "Nameserver Entry" - schema: - type: string - required: true - - variable: searches - label: "Searches" - schema: - type: list - default: [] - items: - - variable: searchEntry - label: "Search Entry" - schema: - type: string - required: true - - - variable: imagePullSecretList - group: "General Settings" - label: "Image Pull Secrets" - schema: - type: list - default: [] - items: - - variable: pullsecretentry - label: "Pull Secret" - schema: - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: true - - variable: data - label: Data - schema: - type: dict - additional_attrs: true - attrs: - - variable: registry - label: "Registry" - schema: - type: string - required: true - default: "https://index.docker.io/v1/" - - variable: username - label: "Username" - schema: - type: string - required: true - default: "" - - variable: password - label: "Password" - schema: - type: string - required: true - private: true - default: "" - - variable: email - label: "Email" - schema: - type: string - required: true - default: "" - - - variable: service - group: Networking and Services - label: Configure Service(s) - schema: - additional_attrs: true - type: dict - attrs: - - - variable: 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: 32400 - required: true - - variable: serviceexpert - group: Networking and Services - label: Show Expert Config - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - - variable: scaleExternalInterface - description: Add External Interfaces - label: Add external Interfaces - group: Networking - schema: - type: list - items: - - variable: interfaceConfiguration - description: Interface Configuration - label: Interface Configuration - schema: - additional_attrs: true - type: dict - $ref: - - "normalize/interfaceConfiguration" - attrs: - - variable: hostInterface - description: Please Specify Host Interface - label: Host Interface - schema: - type: string - required: true - $ref: - - "definitions/interface" - - variable: ipam - description: Define how IP Address will be managed - label: IP Address Management - schema: - additional_attrs: true - type: dict - required: true - attrs: - - variable: type - description: Specify type for IPAM - label: IPAM Type - schema: - type: string - required: true - enum: - - value: dhcp - description: Use DHCP - - value: static - description: Use Static IP - - variable: staticIPConfigurations - label: Static IP Addresses - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticIP - label: Static IP - schema: - type: ipaddr - cidr: true - - variable: staticRoutes - label: Static Routes - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticRouteConfiguration - label: Static Route Configuration - schema: - additional_attrs: true - type: dict - attrs: - - variable: destination - label: Destination - schema: - type: ipaddr - cidr: true - required: true - - variable: gateway - label: Gateway - schema: - type: ipaddr - cidr: false - required: true - - - variable: serviceList - label: Add Manual Custom Services - group: Networking and Services - schema: - type: list - default: [] - items: - - variable: serviceListEntry - label: Custom Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the service - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: LoadBalancer - description: LoadBalancer (Expose Ports) - - value: ClusterIP - description: ClusterIP (Do Not Expose Ports) - - value: Simple - description: Deprecated CHANGE THIS - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: advancedsvcset - label: Show Advanced Service Settings - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: externalIPs - label: "External IP's" - description: "External IP's" - schema: - type: list - default: [] - items: - - variable: externalIP - label: External IP - schema: - type: string - - variable: ipFamilyPolicy - label: IP Family Policy - description: Specify the IP Policy - schema: - type: string - default: SingleStack - enum: - - value: SingleStack - description: SingleStack - - value: PreferDualStack - description: PreferDualStack - - value: RequireDualStack - description: RequireDualStack - - variable: ipFamilies - label: IP Families - description: (Advanced) The IP Families that should be used - schema: - type: list - default: [] - items: - - variable: ipFamily - label: IP Family - schema: - type: string - - variable: portsList - label: Additional Service Ports - schema: - type: list - default: [] - items: - - variable: portsListEntry - label: Custom ports - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Port - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Port Name - schema: - type: string - default: "" - - variable: protocol - label: Port Type - schema: - type: string - default: tcp - enum: - - value: http - description: HTTP - - value: https - description: HTTPS - - value: tcp - description: TCP - - value: udp - description: UDP - - variable: targetPort - label: Target Port - description: This port exposes the container port on the service - schema: - type: int - required: true - - variable: port - label: Container Port - schema: - type: int - required: true - - - variable: persistence - label: Integrated Persistent Storage - description: Integrated Persistent Storage - group: Storage and 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: 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: Storage and Persistence - schema: - type: list - default: [] - items: - - variable: persistenceListEntry - label: Custom Storage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the storage - schema: - type: boolean - default: true - hidden: true - - variable: type - label: Type of Storage - description: Sets the persistence type, Anything other than PVC could break rollback! - schema: - type: string - default: hostPath - enum: - - value: pvc - description: PVC - - value: hostPath - description: Host Path - - value: emptyDir - description: emptyDir - - value: nfs - description: NFS Share - - variable: server - label: NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: path - label: Path on NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: iscsi - label: iSCSI Options - schema: - show_if: [["type", "=", "iscsi"]] - type: dict - additional_attrs: true - attrs: - - variable: targetPortal - label: targetPortal - schema: - type: string - required: true - default: "" - - variable: iqn - label: iqn - schema: - type: string - required: true - default: "" - - variable: lun - label: lun - schema: - type: int - default: 0 - - variable: authSession - label: authSession - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: authDiscovery - label: authDiscovery - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: autoPermissions - label: Automatic Permissions Configuration - description: Automatically set permissions - schema: - show_if: [["type", "!=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: chown - label: Run CHOWN - description: | - It will run CHOWN on the path with the given fsGroup - schema: - type: boolean - default: false - - variable: chmod - label: Run CHMOD - description: | - It will run CHMOD on the path with the given value
    - Format should be 3 digits, e.g. 770 - schema: - type: string - valid_chars: '[0-9]{3}' - default: "" - - variable: recursive - label: Recursive - description: | - It will run CHOWN and CHMOD recursively - schema: - type: boolean - default: false - - variable: readOnly - label: Read Only - schema: - type: boolean - default: false - - variable: hostPath - label: Host Path - description: Path inside the container the storage is mounted - schema: - show_if: [["type", "=", "hostPath"]] - type: hostpath - - variable: mountPath - label: Mount Path - description: Path inside the container the storage is mounted - schema: - type: string - default: "" - required: true - valid_chars: '^\/([a-zA-Z0-9._-]+(\s?[a-zA-Z0-9._-]+|\/?))+$' - - variable: medium - label: EmptyDir Medium - schema: - show_if: [["type", "=", "emptyDir"]] - type: string - default: "" - enum: - - value: "" - description: Default - - value: Memory - description: Memory - - variable: size - label: Size Quotum of Storage - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: 256Gi - - variable: storageClass - label: 'storageClass (Advanced)' - description: 'sets the storageClass to something other than iX default. Only for advanced usecases!' - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: "" - - variable: static - label: 'Static Fixed PVC Bindings (Experimental)' - description: Link a PVC to a specific storage location - schema: - show_if: [["type", "=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: mode - label: mode - description: | - disabled: use normal dynamic PVCs - smb: connect to an SMB share - nfs: connect to an NFS share - schema: - type: string - default: "disabled" - enum: - - value: "disabled" - description: disabled - - value: smb - description: smb - - value: nfs - description: nfs - - variable: server - label: Server - description: server to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "myserver" - - variable: share - label: Share - description: share to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "/myshare" - - variable: user - label: User - description: connecting user - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "myuser" - - variable: domain - label: Domain - description: user domain - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: password - label: Password - description: connecting password - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: volumeSnapshots - label: 'Volume Snapshots (Experimental)' - description: Add an entry to the list to force creation of a volumeSnapshot of this PVC - schema: - show_if: [["type", "=", "pvc"]] - type: list - default: [] - items: - - variable: volumeSnapshotEntry - label: Custom volumeSnapshot - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - description: 'WARNING: renaming this, means deletion of the snapshot with the old name!' - schema: - type: string - default: "mysnapshot" - required: true - - variable: volumeSnapshotClassName - label: 'volumeSnapshot Class Name (Advanced)' - description: For use with PVCs using a non-default storageClass - schema: - type: string - default: "" - - - variable: ingress - label: "" - group: Ingress - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: Main Ingress - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name (Optional) - description: Defaults to chart name - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description (Optional) - description: Defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: icon - label: Icon (Optional) - description: Defaults to chart icon - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - variable: widget - label: Widget Settings - schema: - type: dict - additional_attrs: true - show_if: [["enabled", "=", true]] - attrs: - - variable: enabled - label: Enable Widget - description: When disabled all widget annotations are skipped. - schema: - type: boolean - default: true - - variable: custom - label: Options - schema: - type: dict - additional_attrs: true - attrs: - - variable: key - label: API-key (key) - schema: - type: string - default: "" - - variable: customkv - label: Custom Options - schema: - type: list - default: [] - items: - - variable: option - label: Option - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - default: "" - required: true - - variable: value - label: Value - schema: - type: string - default: "" - required: true - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - - variable: ingressList - label: Add Manual Custom Ingresses - group: Ingress - schema: - type: list - default: [] - items: - - variable: ingressListEntry - label: Custom Ingress - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: ingressClassName - label: IngressClass Name - schema: - type: string - default: "" - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: overrideService - label: Linked Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Service Name - schema: - type: string - default: "" - - variable: port - label: Service Port - schema: - type: int - - variable: tls - label: TLS-Settings - schema: - type: list - default: [] - show_if: [["certificateIssuer", "=", ""]] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your Cert-Manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: Use Custom Secret (Advanced) - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: "Allow Cross Origin Requests" - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: namespace - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description - description: defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - - variable: securityContext - group: Security and Permissions - label: Security Context - schema: - additional_attrs: true - type: dict - attrs: - - variable: container - label: Container - schema: - additional_attrs: true - type: dict - attrs: - # Settings from questions.yaml get appended here on a per-app basis - - - variable: runAsUser - label: "runAsUser" - description: "The UserID of the user running the application" - schema: - type: int - default: 568 - - variable: runAsGroup - label: "runAsGroup" - description: "The groupID 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 and Devices - label: "Resource Limits" - schema: - additional_attrs: true - type: dict - attrs: - - variable: limits - label: Advanced Limit Resource Consumption - schema: - additional_attrs: true - type: dict - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 4000m - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: RAM - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 8Gi - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: 'intel.com/i915' - label: Add Intel i915 GPUs - schema: - type: int - default: 0 - - variable: 'nvidia.com/gpu' - label: Add NVIDIA GPUs (Experimental) - schema: - type: int - default: 0 - - variable: 'amd.com/gpu' - label: Add AMD GPUs - schema: - type: int - default: 0 - - variable: requests - label: "Minimum Resources Required (request)" - schema: - additional_attrs: true - type: dict - hidden: true - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 10m - hidden: true - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: "RAM" - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 50Mi - hidden: true - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: deviceList - label: Mount USB Devices - group: Resources and Devices - schema: - type: list - default: [] - items: - - variable: deviceListEntry - label: Device - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Storage - schema: - type: boolean - default: true - - variable: type - label: (Advanced) Type of Storage - description: Sets the persistence type - schema: - type: string - default: device - hidden: true - - variable: readOnly - label: readOnly - schema: - type: boolean - default: false - - variable: hostPath - label: Host Device Path - description: Path to the device on the host system - schema: - type: path - - variable: mountPath - label: Container Device Path - description: Path inside the container the device is mounted - schema: - type: string - default: "/dev/ttyACM0" - - variable: scaleGPU - label: GPU Configuration - group: Resources and Devices - schema: - type: list - default: [] - items: - - variable: scaleGPUEntry - label: GPU - schema: - additional_attrs: true - type: dict - attrs: - # Specify GPU configuration - - variable: gpu - label: Select GPU - schema: - additional_attrs: true - type: dict - $ref: - - "definitions/gpuConfiguration" - attrs: [] - - variable: workaround - label: "Workaround" - schema: - type: string - default: workaround - hidden: true - -# - variable: horizontalPodAutoscaler -# group: Advanced -# label: (Advanced) Horizontal Pod Autoscaler -# schema: -# type: list -# default: [] -# items: -# - variable: hpaEntry -# label: HPA Entry -# schema: -# additional_attrs: true -# type: dict -# attrs: -# - variable: name -# label: Name -# schema: -# type: string -# required: true -# default: "" -# - variable: enabled -# label: Enabled -# schema: -# type: boolean -# default: false -# show_subquestions_if: true -# subquestions: -# - variable: target -# label: Target -# description: Deployment name, Defaults to Main Deployment -# schema: -# type: string -# default: "" -# - variable: minReplicas -# label: Minimum Replicas -# schema: -# type: int -# default: 1 -# - variable: maxReplicas -# label: Maximum Replicas -# schema: -# type: int -# default: 5 -# - variable: targetCPUUtilizationPercentage -# label: Target CPU Utilization Percentage -# schema: -# type: int -# default: 80 -# - variable: targetMemoryUtilizationPercentage -# label: Target Memory Utilization Percentage -# schema: -# type: int -# default: 80 - - variable: networkPolicy - group: Advanced - label: (Advanced) Network Policy - schema: - type: list - default: [] - items: - - variable: netPolicyEntry - label: Network Policy Entry - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - default: "" - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: policyType - label: Policy Type - schema: - type: string - default: "" - enum: - - value: "" - description: Default - - value: ingress - description: Ingress - - value: egress - description: Egress - - value: ingress-egress - description: Ingress and Egress - - variable: egress - label: Egress - schema: - type: list - default: [] - items: - - variable: egressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: to - label: To - schema: - type: list - default: [] - items: - - variable: toEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - variable: ingress - label: Ingress - schema: - type: list - default: [] - items: - - variable: ingressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: from - label: From - schema: - type: list - default: [] - items: - - variable: fromEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - - variable: addons - group: Addons - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: codeserver - label: Codeserver - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: service - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: NodePort - description: Deprecated CHANGE THIS - - value: ClusterIP - description: ClusterIP - - value: LoadBalancer - description: LoadBalancer - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: ports - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: codeserver - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - default: 36107 - - variable: ingress - label: "Ingress" - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - variable: scaleCert - label: 'Use TrueNAS SCALE Certificate (Deprecated)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: int - $ref: - - "definitions/certificate" - - variable: envList - label: Codeserver Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: netshoot - label: Netshoot - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: envList - label: Netshoot Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: vpn - label: VPN - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Type - schema: - type: string - default: disabled - enum: - - value: disabled - description: disabled - - value: gluetun - description: Gluetun - - value: tailscale - description: Tailscale - - value: openvpn - description: OpenVPN (Deprecated) - - value: wireguard - description: Wireguard (Deprecated) - - variable: openvpn - label: OpenVPN Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "openvpn"]] - attrs: - - variable: username - label: Authentication Username (Optional) - description: Authentication Username, Optional - schema: - type: string - default: "" - - variable: password - label: Authentication Password - description: Authentication Credentials - schema: - type: string - show_if: [["username", "!=", ""]] - default: "" - required: true - - variable: tailscale - label: Tailscale Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "tailscale"]] - attrs: - - variable: authkey - label: Authentication Key - description: Provide an auth key to automatically authenticate the node as your user account. - schema: - type: string - private: true - default: "" - - variable: auth_once - label: Auth Once - description: Only attempt to log in if not already logged in. - schema: - type: boolean - default: true - - variable: accept_dns - label: Accept DNS - description: Accept DNS configuration from the admin console. - schema: - type: boolean - default: false - - variable: userspace - label: Userspace - description: Userspace Networking mode allows running Tailscale where you do not have access to create a VPN tunnel device. - schema: - type: boolean - default: false - - variable: routes - label: Routes - description: Expose physical subnet routes to your entire Tailscale network. - schema: - type: string - default: "" - - variable: dest_ip - label: Destination IP - description: Tells the DNAT mechanism which Destination IP to set in the IP header, and where to send packets that are matched. - schema: - type: string - default: "" - - variable: sock5_server - label: Sock5 Server - description: The address on which to listen for SOCKS5 proxying into the tailscale net. - schema: - type: string - default: "" - - variable: outbound_http_proxy_listen - label: Outbound HTTP Proxy Listen - description: The address on which to listen for HTTP proxying into the tailscale net. - schema: - type: string - default: "" - - variable: extra_args - label: Extra Args - description: Extra Args - schema: - type: string - default: "" - - variable: daemon_extra_args - label: Tailscale Daemon Extra Args - description: Tailscale Daemon Extra Args - schema: - type: string - default: "" - - variable: killSwitch - label: Enable Killswitch - schema: - type: boolean - show_if: [["type", "!=", "disabled"]] - default: true - - variable: excludedNetworks_IPv4 - label: Killswitch Excluded IPv4 networks - description: List of Killswitch Excluded IPv4 Addresses - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv4 - label: IPv4 Network - schema: - type: string - required: true - - variable: excludedNetworks_IPv6 - label: Killswitch Excluded IPv6 networks - description: "List of Killswitch Excluded IPv6 Addresses" - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv6 - label: IPv6 Network - schema: - type: string - required: true - - variable: configFile - label: VPN Config File Location - schema: - type: string - show_if: [["type", "!=", "disabled"]] - default: "" - - - variable: envList - label: VPN Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - max_length: 10240 - - - variable: docs - group: Documentation - label: Please read the documentation at https://truecharts.org - description: Please read the documentation at -
    https://truecharts.org - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDocs - label: I have checked the documentation - schema: - type: boolean - default: true - - variable: donateNag - group: Documentation - label: Please consider supporting TrueCharts, see https://truecharts.org/sponsor - description: Please consider supporting TrueCharts, see -
    https://truecharts.org/sponsor - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDonate - label: I have considered donating - schema: - type: boolean - default: true - hidden: true - diff --git a/stable/plex/16.4.0/templates/NOTES.txt b/stable/plex/16.4.0/templates/NOTES.txt deleted file mode 100644 index efcb74cb77..0000000000 --- a/stable/plex/16.4.0/templates/NOTES.txt +++ /dev/null @@ -1 +0,0 @@ -{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/plex/16.4.0/templates/common.yaml b/stable/plex/16.4.0/templates/common.yaml deleted file mode 100644 index 7f4568886d..0000000000 --- a/stable/plex/16.4.0/templates/common.yaml +++ /dev/null @@ -1,53 +0,0 @@ -{{/* Make sure all variables are set properly */}} -{{- include "tc.v1.common.loader.init" . -}} - -{{- $adv := list -}} -{{- $serverURL := "" -}} -{{- $protocol := "http" -}} -{{- if .Values.plex.requireHTTPS -}} - {{- $protocol = "https" -}} -{{- end -}} - -{{- $_ := set .Values.workload.main.podSpec.containers.main.probes.liveness "scheme" $protocol -}} -{{- $_ := set .Values.workload.main.podSpec.containers.main.probes.readiness "scheme" $protocol -}} -{{- $_ := set .Values.workload.main.podSpec.containers.main.probes.startup "scheme" $protocol -}} -{{- $_ := set .Values.service.main.ports.main "protocol" $protocol -}} - -{{- if not (eq .Values.service.main.type "ClusterIP") -}} - {{- $serverURL = (printf "%v://%v:%v" $protocol .Values.plex.serverIP .Values.service.main.ports.main.port) -}} -{{- end -}} - -{{- $serverIngressURL := "" -}} -{{- $host := "" -}} -{{- if .Values.ingress.main.enabled -}} - {{- with (first .Values.ingress.main.hosts) -}} - {{- $host = .host -}} - {{- $serverIngressURL = (printf "https://%v" .host) -}} - {{- end -}} -{{- end -}} - -{{- $serverIngressURLPort := "" -}} -{{- if $host -}} - {{- if not (eq .Values.service.main.type "ClusterIP") -}} - {{- $port := .Values.service.main.ports.main.port -}} - {{- $serverIngressURLPort = printf "https://%v:%v" $host $port -}} - {{- end -}} -{{- end -}} - -{{- with $serverURL -}} - {{- $adv = append $adv . -}} -{{- end -}} -{{- with $serverIngressURL -}} - {{- $adv = append $adv . -}} -{{- end -}} -{{- with $serverIngressURLPort -}} - {{- $adv = append $adv . -}} -{{- end -}} -{{- with .Values.plex.additionalAdvertiseURL -}} - {{- $adv = append $adv . -}} -{{- end -}} - -{{- $_ := set .Values.workload.main.podSpec.containers.main.env "ADVERTISE_IP" (join "," $adv) -}} - -{{/* Render the templates */}} -{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/plex/16.4.0/values.yaml b/stable/plex/16.4.0/values.yaml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/stable/plex/17.8.17/.helmignore b/stable/plex/17.8.17/.helmignore deleted file mode 100644 index 77ca5567b2..0000000000 --- a/stable/plex/17.8.17/.helmignore +++ /dev/null @@ -1,30 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ -# OWNERS file for Kubernetes -OWNERS -# helm-docs templates -*.gotmpl -# docs folder -/docs -# icon -icon.png diff --git a/stable/plex/17.8.17/CHANGELOG.md b/stable/plex/17.8.17/CHANGELOG.md deleted file mode 100644 index 941abb8a21..0000000000 --- a/stable/plex/17.8.17/CHANGELOG.md +++ /dev/null @@ -1,3 +0,0 @@ -*for the complete changelog, please refer to the website* - -**Important:** \ No newline at end of file diff --git a/stable/plex/17.8.17/Chart.yaml b/stable/plex/17.8.17/Chart.yaml deleted file mode 100644 index 39c78c175a..0000000000 --- a/stable/plex/17.8.17/Chart.yaml +++ /dev/null @@ -1,36 +0,0 @@ -annotations: - max_scale_version: 24.04.0 - min_scale_version: 23.10.0 - 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.40.2.8395 -dependencies: - - name: common - version: 20.4.1 - repository: oci://tccr.io/truecharts - condition: "" - alias: "" - tags: [] - import-values: [] -deprecated: false -description: Plex Media Server -home: https://truecharts.org/charts/stable/plex -icon: https://truecharts.org/img/hotlink-ok/chart-icons/plex.webp -keywords: - - plex - - plex-media-server -kubeVersion: ">=1.24.0-0" -maintainers: - - name: TrueCharts - email: info@truecharts.org - url: https://truecharts.org -name: plex -sources: - - https://github.com/k8s-at-home/container-images/pkgs/container/plex - - https://github.com/truecharts/charts/tree/master/charts/stable/plex - - https://ghcr.io/onedr0p/plex -type: application -version: 17.8.17 diff --git a/stable/plex/17.8.17/README.md b/stable/plex/17.8.17/README.md deleted file mode 100644 index 25a0cbe7c5..0000000000 --- a/stable/plex/17.8.17/README.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -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/plex) - -**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/guides/scale-intro). - -## Configuration Options - -To view the chart specific options, please view Values.yaml included in the chart. - -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/ - -## 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/plex - -## 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/plex/17.8.17/app-changelog.md b/stable/plex/17.8.17/app-changelog.md deleted file mode 100644 index 7771d85345..0000000000 --- a/stable/plex/17.8.17/app-changelog.md +++ /dev/null @@ -1,65 +0,0 @@ - - -## [plex-17.8.17](https://github.com/truecharts/charts/compare/plex-17.6.0...plex-17.8.17) (2024-04-23) - -### Chore - - - -- bump charts to ensure new icons are released - -- update groups html ([#21121](https://github.com/truecharts/charts/issues/21121)) - -- bump charts to release new docs to fix broken links - -- bump everything to regenerate readme's and site index - -- bump everything to release new doc pages - -- update container image common to v20.3.4[@d7e1b23](https://github.com/d7e1b23) by renovate ([#20527](https://github.com/truecharts/charts/issues/20527)) - -- update container image common to v20.3.2[@0722ebb](https://github.com/0722ebb) by renovate ([#20334](https://github.com/truecharts/charts/issues/20334)) - -- update container image ghcr.io/onedr0p/plex to 1.40.1.8227-c0dd5a73e[@a60bc63](https://github.com/a60bc63) by renovate ([#20764](https://github.com/truecharts/charts/issues/20764)) - -- update container image common to v20.3.6[@27edfed](https://github.com/27edfed) by renovate ([#20599](https://github.com/truecharts/charts/issues/20599)) - -- update container image common to v20.3.5[@aedd88a](https://github.com/aedd88a) by renovate ([#20535](https://github.com/truecharts/charts/issues/20535)) - -- update container image ghcr.io/onedr0p/plex to v1.40.2.8395-c67dce28e[@a2a3149](https://github.com/a2a3149) by renovate ([#20976](https://github.com/truecharts/charts/issues/20976)) - -- update container image common to v20.3.3[@3876ba5](https://github.com/3876ba5) by renovate ([#20478](https://github.com/truecharts/charts/issues/20478)) - -- update container image ghcr.io/onedr0p/plex to 1.40.1.8227-c0dd5a73e[@c8d7453](https://github.com/c8d7453) by renovate ([#20424](https://github.com/truecharts/charts/issues/20424)) - -- update container image ghcr.io/onedr0p/plex to 1.40.1.8227-c0dd5a73e[@1841a02](https://github.com/1841a02) by renovate ([#20385](https://github.com/truecharts/charts/issues/20385)) - -- update container image common to v20.3.7[@8cf9fc9](https://github.com/8cf9fc9) by renovate ([#20819](https://github.com/truecharts/charts/issues/20819)) - -- update container image common to v20.2.10[@6f99c97](https://github.com/6f99c97) by renovate ([#19876](https://github.com/truecharts/charts/issues/19876)) - -- update container image common to v20.2.9[@10fd6c5](https://github.com/10fd6c5) by renovate ([#19817](https://github.com/truecharts/charts/issues/19817)) - -- update container image common to v20.2.4[@f245f5c](https://github.com/f245f5c) by renovate ([#19731](https://github.com/truecharts/charts/issues/19731)) - -- update container image common to v20.2.3[@06e462e](https://github.com/06e462e) by renovate ([#19673](https://github.com/truecharts/charts/issues/19673)) - -- update container image common to v20.2.2[@f7d0b92](https://github.com/f7d0b92) by renovate ([#19432](https://github.com/truecharts/charts/issues/19432)) - -- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) - -- update container image ghcr.io/onedr0p/plex to v1.40.1.8227-c0dd5a73e[@4ca8db0](https://github.com/4ca8db0) by renovate ([#19308](https://github.com/truecharts/charts/issues/19308)) - -### Chore - - - -- rework SCALE catagories/groups to match helm and remove deprecated charts ([#21111](https://github.com/truecharts/charts/issues/21111)) - -### Fix - - - -- hotpatch common to ensure plex update works - -- replace serviceexpert with externalinterfaces/networking-group in the SCALE GUI ([#21154](https://github.com/truecharts/charts/issues/21154)) \ No newline at end of file diff --git a/stable/plex/17.8.17/app-readme.md b/stable/plex/17.8.17/app-readme.md deleted file mode 100644 index ba3b0a4a66..0000000000 --- a/stable/plex/17.8.17/app-readme.md +++ /dev/null @@ -1,8 +0,0 @@ -Plex Media Server - -This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/plex](https://truecharts.org/charts/stable/plex) - ---- - -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/plex/17.8.17/charts/common-20.3.11.tgz b/stable/plex/17.8.17/charts/common-20.3.11.tgz deleted file mode 100644 index 010f5b5a245d342f6f0d2e0ef95338a45ead19b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99404 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%0AZSzDiWTe))Y`J0OOCXlO`z1O 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 P00960fC|;b09p(Hd4E&t diff --git a/stable/plex/17.8.17/icon-small.webp b/stable/plex/17.8.17/icon-small.webp deleted file mode 100644 index 04e34122a3f34f5093ff7b27afe536a6109c2e68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 234 zcmWIYbaQ*ez`zjh>J$(bU=hIuWD5YXJQz9p1b8R_d5i&<-6j?P(bSp0v^4bJpHLT{ zh8)EiJl(U-)N}c?Z7l=pRG0(O$-*#~QA>eAfq{v^M0EkP@!zrstO{(OUJ6dEUw*aL zG_1lnQU1i*AO?nizwcx!xBb+6T9+u(GRx#^^M0m$uKsu1om}}EcP&|TaIbf=eBY7O zlRw^-XXJb+_%GRK)~F(;x^-jer!80Ztq_{~ZraDz-pEYVy_05T*4|ZSZsYrQs6gbz fO6x;{wXFF+%j4H2+5dgEOZBs9LGE|s2@DJXAS_;# diff --git a/stable/plex/17.8.17/icon.webp b/stable/plex/17.8.17/icon.webp deleted file mode 100644 index 8167a7e1dae3c76ffd5df03617ac21c61fa662be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 762 zcmVH&Uq19=X%aBizJ_L6rG{2V22oZ6 zD&OH&P&got0ssII6abw8DwY7206v8@lt-l_A|W*2cmSXfiDPcyzyLY$n$M^06CR$g zJbTn@#RH}%m=8S9K|8`5%Iok}f`AWpEZqf;N*OIbznsn@@+TN;Hv&jWWxM~wc+hX# zPNQ2nVI|P;Zi-$iMF;xHH6q$hqt-{L6~>c%fSSg`{0FJA^0;#UVFD|xCcGS!iJrY; z8MR^7mnt{M!zxD$K~2>GTA(HdWU{}&0RF2QDOP^MfCQ!_ng0GapcM5VDn0{xQPQVc zLQz?9Y8D<7=R+fqmU#(Ei4}vS3Dsd4W@QdD+N=x9gKwV0iARVNydCkEX7ww__OnoG zXRE-6L>Kcp8-@+x0s6MO?7U(CF`t;Qr?=I)!fF%?d-#~aCTaFSh|NG4F<@O!Fowb1u6JoOHn?=UXt21pn4AM!f2#x=rqYc- zJr*VN82or1Sn^+wLz3C{O3PB8WCfHYej}Q9)}UwQf6-yDdqOc)90_ECmR{Qg=}L7X z)#X77uvw%iu=4HEK}^NxMavsYJjp!+V1-PWWHz{A-Fq^HtQbTHX|1v@BiQcrfccsB zGe#MQB6b$=y@s_Vg7$PlVT<|ypH3QHX??nU3Yq}exKCCjO_<^h%LwjbaYpQg=RJE= zlnS+O@W*86e#~hAyZ3QQ)^(i;1>U_s>y$`!K$EPHpe~iR(yXAsj*Yw>t*#pGo8iB2 zuIoSh|7LEI{t8wEEzrb&+4A89Gdvy`z97|Migu7@C9yJ{7+p?XU=Lt~lFe>@eo+1c sYEl2k`jJJD_Wf98CJn)KEBvR51*PNKLe4xj-~a{_|Njp_000000CCe`_W%F@ diff --git a/stable/plex/17.8.17/ix_values.yaml b/stable/plex/17.8.17/ix_values.yaml deleted file mode 100644 index a99cd52647..0000000000 --- a/stable/plex/17.8.17/ix_values.yaml +++ /dev/null @@ -1,52 +0,0 @@ -image: - repository: ghcr.io/onedr0p/plex - pullPolicy: IfNotPresent - tag: 1.40.2.8395-c67dce28e@sha256:a2a3149c1326e7777bfe9def135c687d884652f78d34e92264b0dab765908215 -service: - main: - ports: - main: - protocol: http - port: 32400 - targetPort: 32400 -persistence: - config: - enabled: true - mountPath: "/config" - transcode: - enabled: true - mountPath: "/transcode" - type: emptyDir - medium: Memory - targetSelectAll: true -plex: - # User Defined - serverIP: "127.0.0.1" - additionalAdvertiseURL: "" - disableGDM: true - requireHTTPS: false -workload: - main: - podSpec: - containers: - main: - probes: - liveness: - enabled: true - path: /identity - readiness: - enabled: true - path: /identity - startup: - enabled: true - path: /identity - env: - PLEX_PREFERENCE_GDM: 'GdmEnabled={{ ternary "0" "1" .Values.plex.disableGDM }}' - # 0=Required, 1=Preferred - PLEX_PREFERENCE_SEC_CON: 'secureConnections={{ ternary "0" "1" .Values.plex.requireHTTPS }}' - # User Defined - ALLOWED_NETWORKS: "172.16.0.0/12,10.0.0.0/8,192.168.0.0/16" - PLEX_CLAIM: "" -portal: - open: - enabled: true diff --git a/stable/plex/17.8.17/questions.yaml b/stable/plex/17.8.17/questions.yaml deleted file mode 100755 index 36a2fe0eb3..0000000000 --- a/stable/plex/17.8.17/questions.yaml +++ /dev/null @@ -1,3020 +0,0 @@ -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" - - path: /web -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: 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: ALLOWED_NETWORKS - label: Allowed Networks - description: Networks allowed to connect to plex. Add your local network IP to this list - schema: - type: string - default: 172.16.0.0/12,10.0.0.0/8,192.168.0.0/16 - - variable: PLEX_CLAIM - label: Plex Claim Token - description: Claim token to use to register the plex server (Max. 4 minutes old!). You can obtain a claim token to login your server to your plex account by visiting https://www.plex.tv/claim. - 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: plex - group: App Configuration - label: Plex Configuration - schema: - additional_attrs: true - type: dict - attrs: - - variable: serverIP - label: Server IP - description: Set to the IP-Address used to reach Plex. - schema: - type: string - required: true - $ref: - - definitions/nodeIP - - variable: additionalAdvertiseURL - label: Addition Advertise URLs - description: URLs to advertise to Plex, format http(s)://IPorDNS:3200. By default your serverIP and ingress URL is added" - schema: - type: string - valid_chars: '^$|^(http(s)?:\/\/([a-zA-Z0-9.-]*)(:\d{0,5})?,?)*$' - default: "" - - variable: disableGDM - label: Disable GDM - description: Recommended to keep this to true. Disables legacy local network discovery. Keeping it enabled might break discovery for some Plex Clients - schema: - type: boolean - default: true - - variable: requireHTTPS - label: Require HTTPS - description: | - NOTE: Only enable this setting AFTER you are done with the initial configuration - of your Plex Server and verify that remote access is working.
    - Please use this toggle to "Require HTTPS", instead of using the Plex UI, - so probes are configured correctly. - 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: 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: 32400 - 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: 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: 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: 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/plex/17.8.17/templates/NOTES.txt b/stable/plex/17.8.17/templates/NOTES.txt deleted file mode 100644 index efcb74cb77..0000000000 --- a/stable/plex/17.8.17/templates/NOTES.txt +++ /dev/null @@ -1 +0,0 @@ -{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/plex/17.8.17/templates/common.yaml b/stable/plex/17.8.17/templates/common.yaml deleted file mode 100644 index 7f4568886d..0000000000 --- a/stable/plex/17.8.17/templates/common.yaml +++ /dev/null @@ -1,53 +0,0 @@ -{{/* Make sure all variables are set properly */}} -{{- include "tc.v1.common.loader.init" . -}} - -{{- $adv := list -}} -{{- $serverURL := "" -}} -{{- $protocol := "http" -}} -{{- if .Values.plex.requireHTTPS -}} - {{- $protocol = "https" -}} -{{- end -}} - -{{- $_ := set .Values.workload.main.podSpec.containers.main.probes.liveness "scheme" $protocol -}} -{{- $_ := set .Values.workload.main.podSpec.containers.main.probes.readiness "scheme" $protocol -}} -{{- $_ := set .Values.workload.main.podSpec.containers.main.probes.startup "scheme" $protocol -}} -{{- $_ := set .Values.service.main.ports.main "protocol" $protocol -}} - -{{- if not (eq .Values.service.main.type "ClusterIP") -}} - {{- $serverURL = (printf "%v://%v:%v" $protocol .Values.plex.serverIP .Values.service.main.ports.main.port) -}} -{{- end -}} - -{{- $serverIngressURL := "" -}} -{{- $host := "" -}} -{{- if .Values.ingress.main.enabled -}} - {{- with (first .Values.ingress.main.hosts) -}} - {{- $host = .host -}} - {{- $serverIngressURL = (printf "https://%v" .host) -}} - {{- end -}} -{{- end -}} - -{{- $serverIngressURLPort := "" -}} -{{- if $host -}} - {{- if not (eq .Values.service.main.type "ClusterIP") -}} - {{- $port := .Values.service.main.ports.main.port -}} - {{- $serverIngressURLPort = printf "https://%v:%v" $host $port -}} - {{- end -}} -{{- end -}} - -{{- with $serverURL -}} - {{- $adv = append $adv . -}} -{{- end -}} -{{- with $serverIngressURL -}} - {{- $adv = append $adv . -}} -{{- end -}} -{{- with $serverIngressURLPort -}} - {{- $adv = append $adv . -}} -{{- end -}} -{{- with .Values.plex.additionalAdvertiseURL -}} - {{- $adv = append $adv . -}} -{{- end -}} - -{{- $_ := set .Values.workload.main.podSpec.containers.main.env "ADVERTISE_IP" (join "," $adv) -}} - -{{/* Render the templates */}} -{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/plex/17.8.17/values.yaml b/stable/plex/17.8.17/values.yaml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/stable/plex/17.8.18/.helmignore b/stable/plex/17.8.18/.helmignore deleted file mode 100644 index 77ca5567b2..0000000000 --- a/stable/plex/17.8.18/.helmignore +++ /dev/null @@ -1,30 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ -# OWNERS file for Kubernetes -OWNERS -# helm-docs templates -*.gotmpl -# docs folder -/docs -# icon -icon.png diff --git a/stable/plex/17.8.18/CHANGELOG.md b/stable/plex/17.8.18/CHANGELOG.md deleted file mode 100644 index 941abb8a21..0000000000 --- a/stable/plex/17.8.18/CHANGELOG.md +++ /dev/null @@ -1,3 +0,0 @@ -*for the complete changelog, please refer to the website* - -**Important:** \ No newline at end of file diff --git a/stable/plex/17.8.18/Chart.yaml b/stable/plex/17.8.18/Chart.yaml deleted file mode 100644 index fc5a2c085f..0000000000 --- a/stable/plex/17.8.18/Chart.yaml +++ /dev/null @@ -1,36 +0,0 @@ -annotations: - max_scale_version: 24.04.0 - min_scale_version: 23.10.0 - 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.40.2.8395 -dependencies: - - name: common - version: 20.4.1 - repository: oci://tccr.io/truecharts - condition: "" - alias: "" - tags: [] - import-values: [] -deprecated: false -description: Plex Media Server -home: https://truecharts.org/charts/stable/plex -icon: https://truecharts.org/img/hotlink-ok/chart-icons/plex.webp -keywords: - - plex - - plex-media-server -kubeVersion: ">=1.24.0-0" -maintainers: - - name: TrueCharts - email: info@truecharts.org - url: https://truecharts.org -name: plex -sources: - - https://github.com/k8s-at-home/container-images/pkgs/container/plex - - https://github.com/truecharts/charts/tree/master/charts/stable/plex - - https://ghcr.io/onedr0p/plex -type: application -version: 17.8.18 diff --git a/stable/plex/17.8.18/README.md b/stable/plex/17.8.18/README.md deleted file mode 100644 index 25a0cbe7c5..0000000000 --- a/stable/plex/17.8.18/README.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -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/plex) - -**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/guides/scale-intro). - -## Configuration Options - -To view the chart specific options, please view Values.yaml included in the chart. - -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/ - -## 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/plex - -## 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/plex/17.8.18/app-changelog.md b/stable/plex/17.8.18/app-changelog.md deleted file mode 100644 index 6748ef7929..0000000000 --- a/stable/plex/17.8.18/app-changelog.md +++ /dev/null @@ -1,67 +0,0 @@ - - -## [plex-17.8.18](https://github.com/truecharts/charts/compare/plex-17.6.0...plex-17.8.18) (2024-04-26) - -### Chore - - - -- bump charts to ensure new icons are released - -- bump everything to release new doc pages - -- update groups html ([#21121](https://github.com/truecharts/charts/issues/21121)) - -- bump charts to release new docs to fix broken links - -- bump everything to regenerate readme's and site index - -- update container image common to v20.3.5[@aedd88a](https://github.com/aedd88a) by renovate ([#20535](https://github.com/truecharts/charts/issues/20535)) - -- update container image ghcr.io/onedr0p/plex to 1.40.1.8227-c0dd5a73e[@1841a02](https://github.com/1841a02) by renovate ([#20385](https://github.com/truecharts/charts/issues/20385)) - -- update container image common to v20.3.7[@8cf9fc9](https://github.com/8cf9fc9) by renovate ([#20819](https://github.com/truecharts/charts/issues/20819)) - -- update container image ghcr.io/onedr0p/plex to 1.40.1.8227-c0dd5a73e[@a60bc63](https://github.com/a60bc63) by renovate ([#20764](https://github.com/truecharts/charts/issues/20764)) - -- update container image common to v20.3.6[@27edfed](https://github.com/27edfed) by renovate ([#20599](https://github.com/truecharts/charts/issues/20599)) - -- update container image common to v20.3.12[@3303278](https://github.com/3303278) by renovate ([#21384](https://github.com/truecharts/charts/issues/21384)) - -- update container image common to v20.3.4[@d7e1b23](https://github.com/d7e1b23) by renovate ([#20527](https://github.com/truecharts/charts/issues/20527)) - -- update container image common to v20.3.3[@3876ba5](https://github.com/3876ba5) by renovate ([#20478](https://github.com/truecharts/charts/issues/20478)) - -- update container image ghcr.io/onedr0p/plex to 1.40.1.8227-c0dd5a73e[@c8d7453](https://github.com/c8d7453) by renovate ([#20424](https://github.com/truecharts/charts/issues/20424)) - -- update container image ghcr.io/onedr0p/plex to v1.40.2.8395-c67dce28e[@a2a3149](https://github.com/a2a3149) by renovate ([#20976](https://github.com/truecharts/charts/issues/20976)) - -- update container image common to v20.3.2[@0722ebb](https://github.com/0722ebb) by renovate ([#20334](https://github.com/truecharts/charts/issues/20334)) - -- update container image common to v20.2.10[@6f99c97](https://github.com/6f99c97) by renovate ([#19876](https://github.com/truecharts/charts/issues/19876)) - -- update container image common to v20.2.9[@10fd6c5](https://github.com/10fd6c5) by renovate ([#19817](https://github.com/truecharts/charts/issues/19817)) - -- update container image common to v20.2.4[@f245f5c](https://github.com/f245f5c) by renovate ([#19731](https://github.com/truecharts/charts/issues/19731)) - -- update container image common to v20.2.3[@06e462e](https://github.com/06e462e) by renovate ([#19673](https://github.com/truecharts/charts/issues/19673)) - -- update container image common to v20.2.2[@f7d0b92](https://github.com/f7d0b92) by renovate ([#19432](https://github.com/truecharts/charts/issues/19432)) - -- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) - -- update container image ghcr.io/onedr0p/plex to v1.40.1.8227-c0dd5a73e[@4ca8db0](https://github.com/4ca8db0) by renovate ([#19308](https://github.com/truecharts/charts/issues/19308)) - -### Chore - - - -- rework SCALE catagories/groups to match helm and remove deprecated charts ([#21111](https://github.com/truecharts/charts/issues/21111)) - -### Fix - - - -- hotpatch common to ensure plex update works - -- replace serviceexpert with externalinterfaces/networking-group in the SCALE GUI ([#21154](https://github.com/truecharts/charts/issues/21154)) \ No newline at end of file diff --git a/stable/plex/17.8.18/app-readme.md b/stable/plex/17.8.18/app-readme.md deleted file mode 100644 index ba3b0a4a66..0000000000 --- a/stable/plex/17.8.18/app-readme.md +++ /dev/null @@ -1,8 +0,0 @@ -Plex Media Server - -This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/plex](https://truecharts.org/charts/stable/plex) - ---- - -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/plex/17.8.18/charts/common-20.3.12.tgz b/stable/plex/17.8.18/charts/common-20.3.12.tgz deleted file mode 100644 index 621bd9e5a5277eda78f0f106b46b6afdc6f56acd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99407 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
      iZ#x$K}*@0J4scA@_XsWr>MiG1UB+r_n|MJ)K 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 S{{H{~0RR7!&lutWS_}Y48_RhB diff --git a/stable/plex/17.8.18/icon-small.webp b/stable/plex/17.8.18/icon-small.webp deleted file mode 100644 index 04e34122a3f34f5093ff7b27afe536a6109c2e68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 234 zcmWIYbaQ*ez`zjh>J$(bU=hIuWD5YXJQz9p1b8R_d5i&<-6j?P(bSp0v^4bJpHLT{ zh8)EiJl(U-)N}c?Z7l=pRG0(O$-*#~QA>eAfq{v^M0EkP@!zrstO{(OUJ6dEUw*aL zG_1lnQU1i*AO?nizwcx!xBb+6T9+u(GRx#^^M0m$uKsu1om}}EcP&|TaIbf=eBY7O zlRw^-XXJb+_%GRK)~F(;x^-jer!80Ztq_{~ZraDz-pEYVy_05T*4|ZSZsYrQs6gbz fO6x;{wXFF+%j4H2+5dgEOZBs9LGE|s2@DJXAS_;# diff --git a/stable/plex/17.8.18/icon.webp b/stable/plex/17.8.18/icon.webp deleted file mode 100644 index 8167a7e1dae3c76ffd5df03617ac21c61fa662be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 762 zcmVH&Uq19=X%aBizJ_L6rG{2V22oZ6 zD&OH&P&got0ssII6abw8DwY7206v8@lt-l_A|W*2cmSXfiDPcyzyLY$n$M^06CR$g zJbTn@#RH}%m=8S9K|8`5%Iok}f`AWpEZqf;N*OIbznsn@@+TN;Hv&jWWxM~wc+hX# zPNQ2nVI|P;Zi-$iMF;xHH6q$hqt-{L6~>c%fSSg`{0FJA^0;#UVFD|xCcGS!iJrY; z8MR^7mnt{M!zxD$K~2>GTA(HdWU{}&0RF2QDOP^MfCQ!_ng0GapcM5VDn0{xQPQVc zLQz?9Y8D<7=R+fqmU#(Ei4}vS3Dsd4W@QdD+N=x9gKwV0iARVNydCkEX7ww__OnoG zXRE-6L>Kcp8-@+x0s6MO?7U(CF`t;Qr?=I)!fF%?d-#~aCTaFSh|NG4F<@O!Fowb1u6JoOHn?=UXt21pn4AM!f2#x=rqYc- zJr*VN82or1Sn^+wLz3C{O3PB8WCfHYej}Q9)}UwQf6-yDdqOc)90_ECmR{Qg=}L7X z)#X77uvw%iu=4HEK}^NxMavsYJjp!+V1-PWWHz{A-Fq^HtQbTHX|1v@BiQcrfccsB zGe#MQB6b$=y@s_Vg7$PlVT<|ypH3QHX??nU3Yq}exKCCjO_<^h%LwjbaYpQg=RJE= zlnS+O@W*86e#~hAyZ3QQ)^(i;1>U_s>y$`!K$EPHpe~iR(yXAsj*Yw>t*#pGo8iB2 zuIoSh|7LEI{t8wEEzrb&+4A89Gdvy`z97|Migu7@C9yJ{7+p?XU=Lt~lFe>@eo+1c sYEl2k`jJJD_Wf98CJn)KEBvR51*PNKLe4xj-~a{_|Njp_000000CCe`_W%F@ diff --git a/stable/plex/17.8.18/ix_values.yaml b/stable/plex/17.8.18/ix_values.yaml deleted file mode 100644 index a99cd52647..0000000000 --- a/stable/plex/17.8.18/ix_values.yaml +++ /dev/null @@ -1,52 +0,0 @@ -image: - repository: ghcr.io/onedr0p/plex - pullPolicy: IfNotPresent - tag: 1.40.2.8395-c67dce28e@sha256:a2a3149c1326e7777bfe9def135c687d884652f78d34e92264b0dab765908215 -service: - main: - ports: - main: - protocol: http - port: 32400 - targetPort: 32400 -persistence: - config: - enabled: true - mountPath: "/config" - transcode: - enabled: true - mountPath: "/transcode" - type: emptyDir - medium: Memory - targetSelectAll: true -plex: - # User Defined - serverIP: "127.0.0.1" - additionalAdvertiseURL: "" - disableGDM: true - requireHTTPS: false -workload: - main: - podSpec: - containers: - main: - probes: - liveness: - enabled: true - path: /identity - readiness: - enabled: true - path: /identity - startup: - enabled: true - path: /identity - env: - PLEX_PREFERENCE_GDM: 'GdmEnabled={{ ternary "0" "1" .Values.plex.disableGDM }}' - # 0=Required, 1=Preferred - PLEX_PREFERENCE_SEC_CON: 'secureConnections={{ ternary "0" "1" .Values.plex.requireHTTPS }}' - # User Defined - ALLOWED_NETWORKS: "172.16.0.0/12,10.0.0.0/8,192.168.0.0/16" - PLEX_CLAIM: "" -portal: - open: - enabled: true diff --git a/stable/plex/17.8.18/questions.yaml b/stable/plex/17.8.18/questions.yaml deleted file mode 100755 index 36a2fe0eb3..0000000000 --- a/stable/plex/17.8.18/questions.yaml +++ /dev/null @@ -1,3020 +0,0 @@ -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" - - path: /web -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: 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: ALLOWED_NETWORKS - label: Allowed Networks - description: Networks allowed to connect to plex. Add your local network IP to this list - schema: - type: string - default: 172.16.0.0/12,10.0.0.0/8,192.168.0.0/16 - - variable: PLEX_CLAIM - label: Plex Claim Token - description: Claim token to use to register the plex server (Max. 4 minutes old!). You can obtain a claim token to login your server to your plex account by visiting https://www.plex.tv/claim. - 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: plex - group: App Configuration - label: Plex Configuration - schema: - additional_attrs: true - type: dict - attrs: - - variable: serverIP - label: Server IP - description: Set to the IP-Address used to reach Plex. - schema: - type: string - required: true - $ref: - - definitions/nodeIP - - variable: additionalAdvertiseURL - label: Addition Advertise URLs - description: URLs to advertise to Plex, format http(s)://IPorDNS:3200. By default your serverIP and ingress URL is added" - schema: - type: string - valid_chars: '^$|^(http(s)?:\/\/([a-zA-Z0-9.-]*)(:\d{0,5})?,?)*$' - default: "" - - variable: disableGDM - label: Disable GDM - description: Recommended to keep this to true. Disables legacy local network discovery. Keeping it enabled might break discovery for some Plex Clients - schema: - type: boolean - default: true - - variable: requireHTTPS - label: Require HTTPS - description: | - NOTE: Only enable this setting AFTER you are done with the initial configuration - of your Plex Server and verify that remote access is working.
      - Please use this toggle to "Require HTTPS", instead of using the Plex UI, - so probes are configured correctly. - 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: 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: 32400 - 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: 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: 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: 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/plex/17.8.18/templates/NOTES.txt b/stable/plex/17.8.18/templates/NOTES.txt deleted file mode 100644 index efcb74cb77..0000000000 --- a/stable/plex/17.8.18/templates/NOTES.txt +++ /dev/null @@ -1 +0,0 @@ -{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/plex/17.8.18/templates/common.yaml b/stable/plex/17.8.18/templates/common.yaml deleted file mode 100644 index 7f4568886d..0000000000 --- a/stable/plex/17.8.18/templates/common.yaml +++ /dev/null @@ -1,53 +0,0 @@ -{{/* Make sure all variables are set properly */}} -{{- include "tc.v1.common.loader.init" . -}} - -{{- $adv := list -}} -{{- $serverURL := "" -}} -{{- $protocol := "http" -}} -{{- if .Values.plex.requireHTTPS -}} - {{- $protocol = "https" -}} -{{- end -}} - -{{- $_ := set .Values.workload.main.podSpec.containers.main.probes.liveness "scheme" $protocol -}} -{{- $_ := set .Values.workload.main.podSpec.containers.main.probes.readiness "scheme" $protocol -}} -{{- $_ := set .Values.workload.main.podSpec.containers.main.probes.startup "scheme" $protocol -}} -{{- $_ := set .Values.service.main.ports.main "protocol" $protocol -}} - -{{- if not (eq .Values.service.main.type "ClusterIP") -}} - {{- $serverURL = (printf "%v://%v:%v" $protocol .Values.plex.serverIP .Values.service.main.ports.main.port) -}} -{{- end -}} - -{{- $serverIngressURL := "" -}} -{{- $host := "" -}} -{{- if .Values.ingress.main.enabled -}} - {{- with (first .Values.ingress.main.hosts) -}} - {{- $host = .host -}} - {{- $serverIngressURL = (printf "https://%v" .host) -}} - {{- end -}} -{{- end -}} - -{{- $serverIngressURLPort := "" -}} -{{- if $host -}} - {{- if not (eq .Values.service.main.type "ClusterIP") -}} - {{- $port := .Values.service.main.ports.main.port -}} - {{- $serverIngressURLPort = printf "https://%v:%v" $host $port -}} - {{- end -}} -{{- end -}} - -{{- with $serverURL -}} - {{- $adv = append $adv . -}} -{{- end -}} -{{- with $serverIngressURL -}} - {{- $adv = append $adv . -}} -{{- end -}} -{{- with $serverIngressURLPort -}} - {{- $adv = append $adv . -}} -{{- end -}} -{{- with .Values.plex.additionalAdvertiseURL -}} - {{- $adv = append $adv . -}} -{{- end -}} - -{{- $_ := set .Values.workload.main.podSpec.containers.main.env "ADVERTISE_IP" (join "," $adv) -}} - -{{/* Render the templates */}} -{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/plex/17.8.18/values.yaml b/stable/plex/17.8.18/values.yaml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/stable/plex/18.0.11/.helmignore b/stable/plex/18.0.11/.helmignore deleted file mode 100644 index feb7464da6..0000000000 --- a/stable/plex/18.0.11/.helmignore +++ /dev/null @@ -1,32 +0,0 @@ -# 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/plex/18.0.11/CHANGELOG.md b/stable/plex/18.0.11/CHANGELOG.md deleted file mode 100644 index 941abb8a21..0000000000 --- a/stable/plex/18.0.11/CHANGELOG.md +++ /dev/null @@ -1,3 +0,0 @@ -*for the complete changelog, please refer to the website* - -**Important:** \ No newline at end of file diff --git a/stable/plex/18.0.11/Chart.yaml b/stable/plex/18.0.11/Chart.yaml deleted file mode 100644 index 42eceab459..0000000000 --- a/stable/plex/18.0.11/Chart.yaml +++ /dev/null @@ -1,34 +0,0 @@ -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.40.2.8395 -dependencies: - - name: common - version: 23.0.11 - repository: oci://tccr.io/truecharts - condition: "" - alias: "" - tags: [] - import-values: [] -deprecated: false -description: Plex Media Server -home: https://truecharts.org/charts/stable/plex -icon: https://truecharts.org/img/hotlink-ok/chart-icons/plex.webp -keywords: - - plex - - plex-media-server -kubeVersion: '>=1.24.0-0' -maintainers: - - name: TrueCharts - email: info@truecharts.org - url: https://truecharts.org -name: plex -sources: - - https://ghcr.io/onedr0p/plex - - https://github.com/k8s-at-home/container-images/pkgs/container/plex - - https://github.com/truecharts/charts/tree/master/charts/stable/plex -type: application -version: 18.0.11 diff --git a/stable/plex/18.0.11/README.md b/stable/plex/18.0.11/README.md deleted file mode 100644 index dce8697b97..0000000000 --- a/stable/plex/18.0.11/README.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -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/plex) - -**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/plex - -## 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/plex/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/plex/18.0.11/app-readme.md b/stable/plex/18.0.11/app-readme.md deleted file mode 100644 index ba3b0a4a66..0000000000 --- a/stable/plex/18.0.11/app-readme.md +++ /dev/null @@ -1,8 +0,0 @@ -Plex Media Server - -This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/plex](https://truecharts.org/charts/stable/plex) - ---- - -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/plex/18.0.11/charts/common-23.0.9.tgz b/stable/plex/18.0.11/charts/common-23.0.9.tgz deleted file mode 100644 index 12f30c4288409c1eca57b9cf3d9ebcabf6be3aee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96899 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 z 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 diff --git a/stable/plex/18.0.11/icon.webp b/stable/plex/18.0.11/icon.webp deleted file mode 100644 index 8167a7e1dae3c76ffd5df03617ac21c61fa662be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 762 zcmVH&Uq19=X%aBizJ_L6rG{2V22oZ6 zD&OH&P&got0ssII6abw8DwY7206v8@lt-l_A|W*2cmSXfiDPcyzyLY$n$M^06CR$g zJbTn@#RH}%m=8S9K|8`5%Iok}f`AWpEZqf;N*OIbznsn@@+TN;Hv&jWWxM~wc+hX# zPNQ2nVI|P;Zi-$iMF;xHH6q$hqt-{L6~>c%fSSg`{0FJA^0;#UVFD|xCcGS!iJrY; z8MR^7mnt{M!zxD$K~2>GTA(HdWU{}&0RF2QDOP^MfCQ!_ng0GapcM5VDn0{xQPQVc zLQz?9Y8D<7=R+fqmU#(Ei4}vS3Dsd4W@QdD+N=x9gKwV0iARVNydCkEX7ww__OnoG zXRE-6L>Kcp8-@+x0s6MO?7U(CF`t;Qr?=I)!fF%?d-#~aCTaFSh|NG4F<@O!Fowb1u6JoOHn?=UXt21pn4AM!f2#x=rqYc- zJr*VN82or1Sn^+wLz3C{O3PB8WCfHYej}Q9)}UwQf6-yDdqOc)90_ECmR{Qg=}L7X z)#X77uvw%iu=4HEK}^NxMavsYJjp!+V1-PWWHz{A-Fq^HtQbTHX|1v@BiQcrfccsB zGe#MQB6b$=y@s_Vg7$PlVT<|ypH3QHX??nU3Yq}exKCCjO_<^h%LwjbaYpQg=RJE= zlnS+O@W*86e#~hAyZ3QQ)^(i;1>U_s>y$`!K$EPHpe~iR(yXAsj*Yw>t*#pGo8iB2 zuIoSh|7LEI{t8wEEzrb&+4A89Gdvy`z97|Migu7@C9yJ{7+p?XU=Lt~lFe>@eo+1c sYEl2k`jJJD_Wf98CJn)KEBvR51*PNKLe4xj-~a{_|Njp_000000CCe`_W%F@ diff --git a/stable/plex/18.0.11/ix_values.yaml b/stable/plex/18.0.11/ix_values.yaml deleted file mode 100644 index c488029a3e..0000000000 --- a/stable/plex/18.0.11/ix_values.yaml +++ /dev/null @@ -1,52 +0,0 @@ -image: - repository: ghcr.io/onedr0p/plex - pullPolicy: IfNotPresent - tag: 1.40.2.8395-c67dce28e@sha256:3861cc940ecdf97b773fa24d826407cea86559d0f26366d7acd10cef1704f46c -service: - main: - ports: - main: - protocol: http - port: 32400 - targetPort: 32400 -persistence: - config: - enabled: true - mountPath: "/config" - transcode: - enabled: true - mountPath: "/transcode" - type: emptyDir - medium: Memory - targetSelectAll: true -plex: - # User Defined - serverIP: "127.0.0.1" - additionalAdvertiseURL: "" - disableGDM: true - requireHTTPS: false -workload: - main: - podSpec: - containers: - main: - probes: - liveness: - enabled: true - path: /identity - readiness: - enabled: true - path: /identity - startup: - enabled: true - path: /identity - env: - PLEX_PREFERENCE_GDM: 'GdmEnabled={{ ternary "0" "1" .Values.plex.disableGDM }}' - # 0=Required, 1=Preferred - PLEX_PREFERENCE_SEC_CON: 'secureConnections={{ ternary "0" "1" .Values.plex.requireHTTPS }}' - # User Defined - ALLOWED_NETWORKS: "172.16.0.0/12,10.0.0.0/8,192.168.0.0/16" - PLEX_CLAIM: "" -portal: - open: - enabled: true diff --git a/stable/plex/18.0.11/questions.yaml b/stable/plex/18.0.11/questions.yaml deleted file mode 100755 index 3c28e5fe38..0000000000 --- a/stable/plex/18.0.11/questions.yaml +++ /dev/null @@ -1,3213 +0,0 @@ -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" - - path: /web -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: ALLOWED_NETWORKS - label: Allowed Networks - description: Networks allowed to connect to plex. Add your local network IP to this list - schema: - type: string - default: 172.16.0.0/12,10.0.0.0/8,192.168.0.0/16 - - variable: PLEX_CLAIM - label: Plex Claim Token - description: Claim token to use to register the plex server (Max. 4 minutes old!). You can obtain a claim token to login your server to your plex account by visiting https://www.plex.tv/claim. - 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: plex - group: App Configuration - label: Plex Configuration - schema: - additional_attrs: true - type: dict - attrs: - - variable: serverIP - label: Server IP - description: Set to the IP-Address used to reach Plex. - schema: - type: string - required: true - $ref: - - definitions/nodeIP - - variable: additionalAdvertiseURL - label: Addition Advertise URLs - description: URLs to advertise to Plex, format http(s)://IPorDNS:3200. By default your serverIP and ingress URL is added" - schema: - type: string - valid_chars: '^$|^(http(s)?:\/\/([a-zA-Z0-9.-]*)(:\d{0,5})?,?)*$' - default: "" - - variable: disableGDM - label: Disable GDM - description: Recommended to keep this to true. Disables legacy local network discovery. Keeping it enabled might break discovery for some Plex Clients - schema: - type: boolean - default: true - - variable: requireHTTPS - label: Require HTTPS - description: | - NOTE: Only enable this setting AFTER you are done with the initial configuration - of your Plex Server and verify that remote access is working.
      - Please use this toggle to "Require HTTPS", instead of using the Plex UI, - so probes are configured correctly. - 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: 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: 32400 - 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: 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/plex/18.0.11/templates/NOTES.txt b/stable/plex/18.0.11/templates/NOTES.txt deleted file mode 100644 index efcb74cb77..0000000000 --- a/stable/plex/18.0.11/templates/NOTES.txt +++ /dev/null @@ -1 +0,0 @@ -{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/plex/18.0.11/templates/common.yaml b/stable/plex/18.0.11/templates/common.yaml deleted file mode 100644 index ee47150e01..0000000000 --- a/stable/plex/18.0.11/templates/common.yaml +++ /dev/null @@ -1,65 +0,0 @@ -{{/* Make sure all variables are set properly */}} -{{- include "tc.v1.common.loader.init" . -}} - -{{- $adv := list -}} -{{- $serverURL := "" -}} -{{- $protocol := "http" -}} -{{- if .Values.plex.requireHTTPS -}} - {{- $protocol = "https" -}} -{{- end -}} - -{{- $_ := set .Values.workload.main.podSpec.containers.main.probes.liveness "scheme" $protocol -}} -{{- $_ := set .Values.workload.main.podSpec.containers.main.probes.readiness "scheme" $protocol -}} -{{- $_ := set .Values.workload.main.podSpec.containers.main.probes.startup "scheme" $protocol -}} -{{- $_ := set .Values.service.main.ports.main "protocol" $protocol -}} - -{{- if not (eq .Values.service.main.type "ClusterIP") -}} - {{- $serverURL = (printf "%v://%v:%v" $protocol .Values.plex.serverIP .Values.service.main.ports.main.port) -}} -{{- end -}} - -{{- $serverIngressURL := "" -}} -{{- $host := "" -}} -{{- if .Values.ingress.main.enabled -}} - {{- with (first .Values.ingress.main.hosts) -}} - {{- $host = .host -}} - {{- $serverIngressURL = (printf "https://%v" .host) -}} - {{- end -}} -{{- end -}} - -{{- $serverIngressURLHTTPS := "" -}} -{{- $host := "" -}} -{{- if .Values.ingress.main.enabled -}} - {{- with (first .Values.ingress.main.hosts) -}} - {{- $host = .host -}} - {{- $serverIngressURL = (printf "https://%v:443" .host) -}} - {{- end -}} -{{- end -}} - -{{- $serverIngressURLPort := "" -}} -{{- if $host -}} - {{- if not (eq .Values.service.main.type "ClusterIP") -}} - {{- $port := .Values.service.main.ports.main.port -}} - {{- $serverIngressURLPort = printf "https://%v:%v" $host $port -}} - {{- end -}} -{{- end -}} - -{{- with $serverURL -}} - {{- $adv = append $adv . -}} -{{- end -}} -{{- with $serverIngressURL -}} - {{- $adv = append $adv . -}} -{{- end -}} -{{- with $serverIngressURLHTTPS -}} - {{- $adv = append $adv . -}} -{{- end -}} -{{- with $serverIngressURLPort -}} - {{- $adv = append $adv . -}} -{{- end -}} -{{- with .Values.plex.additionalAdvertiseURL -}} - {{- $adv = append $adv . -}} -{{- end -}} - -{{- $_ := set .Values.workload.main.podSpec.containers.main.env "ADVERTISE_IP" (join "," $adv) -}} - -{{/* Render the templates */}} -{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/plex/18.0.11/values.yaml b/stable/plex/18.0.11/values.yaml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/stable/plex/app_versions.json b/stable/plex/app_versions.json index 495fd2d634..f564bea3ab 100644 --- a/stable/plex/app_versions.json +++ b/stable/plex/app_versions.json @@ -3,12 +3,12 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/plex/19.0.3", - "last_update": "2024-07-14 12:35:14", + "location": "/app/catalog/stable/plex/19.0.3", + "last_update": "2024-09-20 02:39:05", "required_features": [ "definitions/timezone", - "definitions/interface", "normalize/interfaceConfiguration", + "definitions/interface", "definitions/certificate", "definitions/nodeIP" ], @@ -26,7 +26,7 @@ "dependencies": [ { "name": "common", - "version": "23.0.10", + "version": "23.0.11", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -5360,12 +5360,12 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/plex/18.0.12", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/stable/plex/18.0.12", + "last_update": "2024-09-20 02:39:05", "required_features": [ "definitions/timezone", - "definitions/interface", "normalize/interfaceConfiguration", + "definitions/interface", "definitions/certificate", "definitions/nodeIP" ], @@ -5383,7 +5383,7 @@ "dependencies": [ { "name": "common", - "version": "23.0.10", + "version": "23.0.11", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -10712,25560 +10712,5 @@ "app_readme": "

      Plex Media Server

      \n

      This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/plex

      \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/plex

      \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/plex/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:

      " - }, - "18.0.11": { - "healthy": true, - "supported": true, - "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/plex/18.0.11", - "last_update": "2024-05-29 12:35:14", - "required_features": [ - "definitions/timezone", - "definitions/interface", - "normalize/interfaceConfiguration", - "definitions/certificate", - "definitions/nodeIP" - ], - "human_version": "1.40.2.8395_18.0.11", - "version": "18.0.11", - "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.40.2.8395", - "dependencies": [ - { - "name": "common", - "version": "23.0.9", - "repository": "oci://tccr.io/truecharts", - "condition": "", - "alias": "", - "tags": [], - "import-values": [] - } - ], - "deprecated": false, - "description": "Plex Media Server", - "home": "https://truecharts.org/charts/stable/plex", - "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/plex.webp", - "keywords": [ - "plex", - "plex-media-server" - ], - "kubeVersion": ">=1.24.0-0", - "maintainers": [ - { - "name": "TrueCharts", - "email": "info@truecharts.org", - "url": "https://truecharts.org" - } - ], - "name": "plex", - "sources": [ - "https://ghcr.io/onedr0p/plex", - "https://github.com/k8s-at-home/container-images/pkgs/container/plex", - "https://github.com/truecharts/charts/tree/master/charts/stable/plex" - ], - "type": "application", - "version": "18.0.11" - }, - "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" - ], - "path": "/web" - } - }, - "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": "ALLOWED_NETWORKS", - "label": "Allowed Networks", - "description": "Networks allowed to connect to plex. Add your local network IP to this list", - "schema": { - "type": "string", - "default": "172.16.0.0/12,10.0.0.0/8,192.168.0.0/16" - } - }, - { - "variable": "PLEX_CLAIM", - "label": "Plex Claim Token", - "description": "Claim token to use to register the plex server (Max. 4 minutes old!). You can obtain a claim token to login your server to your plex account by visiting https://www.plex.tv/claim.", - "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": "plex", - "group": "App Configuration", - "label": "Plex Configuration", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "serverIP", - "label": "Server IP", - "description": "Set to the IP-Address used to reach Plex.", - "schema": { - "type": "string", - "required": true, - "$ref": [ - "definitions/nodeIP" - ], - "default": "192.168.0.10" - } - }, - { - "variable": "additionalAdvertiseURL", - "label": "Addition Advertise URLs", - "description": "URLs to advertise to Plex, format http(s)://IPorDNS:3200. By default your serverIP and ingress URL is added\"", - "schema": { - "type": "string", - "valid_chars": "^$|^(http(s)?:\\/\\/([a-zA-Z0-9.-]*)(:\\d{0,5})?,?)*$", - "default": "" - } - }, - { - "variable": "disableGDM", - "label": "Disable GDM", - "description": "Recommended to keep this to true. Disables legacy local network discovery. Keeping it enabled might break discovery for some Plex Clients", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "requireHTTPS", - "label": "Require HTTPS", - "description": "NOTE: Only enable this setting AFTER you are done with the initial configuration\nof your Plex Server and verify that remote access is working.
      \nPlease use this toggle to \"Require HTTPS\", instead of using the Plex UI,\nso probes are configured correctly.\n", - "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": "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": 32400, - "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": "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": "

      Plex Media Server

      \n

      This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/plex

      \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/plex

      \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/plex/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.8.18": { - "healthy": true, - "supported": true, - "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/plex/17.8.18", - "last_update": "2024-05-29 12:35:14", - "required_features": [ - "definitions/timezone", - "definitions/interface", - "normalize/interfaceConfiguration", - "definitions/certificate", - "definitions/nodeIP" - ], - "human_version": "1.40.2.8395_17.8.18", - "version": "17.8.18", - "chart_metadata": { - "annotations": { - "max_scale_version": "24.04.0", - "min_scale_version": "23.10.0", - "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.40.2.8395", - "dependencies": [ - { - "name": "common", - "version": "20.3.12", - "repository": "oci://tccr.io/truecharts", - "condition": "", - "alias": "", - "tags": [], - "import-values": [] - } - ], - "deprecated": false, - "description": "Plex Media Server", - "home": "https://truecharts.org/charts/stable/plex", - "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/plex.webp", - "keywords": [ - "plex", - "plex-media-server" - ], - "kubeVersion": ">=1.24.0-0", - "maintainers": [ - { - "name": "TrueCharts", - "email": "info@truecharts.org", - "url": "https://truecharts.org" - } - ], - "name": "plex", - "sources": [ - "https://github.com/k8s-at-home/container-images/pkgs/container/plex", - "https://github.com/truecharts/charts/tree/master/charts/stable/plex", - "https://ghcr.io/onedr0p/plex" - ], - "type": "application", - "version": "17.8.18" - }, - "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" - ], - "path": "/web" - } - }, - "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": "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": "ALLOWED_NETWORKS", - "label": "Allowed Networks", - "description": "Networks allowed to connect to plex. Add your local network IP to this list", - "schema": { - "type": "string", - "default": "172.16.0.0/12,10.0.0.0/8,192.168.0.0/16" - } - }, - { - "variable": "PLEX_CLAIM", - "label": "Plex Claim Token", - "description": "Claim token to use to register the plex server (Max. 4 minutes old!). You can obtain a claim token to login your server to your plex account by visiting https://www.plex.tv/claim.", - "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": "plex", - "group": "App Configuration", - "label": "Plex Configuration", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "serverIP", - "label": "Server IP", - "description": "Set to the IP-Address used to reach Plex.", - "schema": { - "type": "string", - "required": true, - "$ref": [ - "definitions/nodeIP" - ], - "default": "192.168.0.10" - } - }, - { - "variable": "additionalAdvertiseURL", - "label": "Addition Advertise URLs", - "description": "URLs to advertise to Plex, format http(s)://IPorDNS:3200. By default your serverIP and ingress URL is added\"", - "schema": { - "type": "string", - "valid_chars": "^$|^(http(s)?:\\/\\/([a-zA-Z0-9.-]*)(:\\d{0,5})?,?)*$", - "default": "" - } - }, - { - "variable": "disableGDM", - "label": "Disable GDM", - "description": "Recommended to keep this to true. Disables legacy local network discovery. Keeping it enabled might break discovery for some Plex Clients", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "requireHTTPS", - "label": "Require HTTPS", - "description": "NOTE: Only enable this setting AFTER you are done with the initial configuration\nof your Plex Server and verify that remote access is working.
      \nPlease use this toggle to \"Require HTTPS\", instead of using the Plex UI,\nso probes are configured correctly.\n", - "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": "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": 32400, - "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": "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": "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": "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": "

      Plex Media Server

      \n

      This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/plex

      \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

      Configuration Options

      \n

      To view the chart specific options, please view Values.yaml included in the chart.

      \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

      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/plex

      \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.8.17": { - "healthy": true, - "supported": true, - "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/plex/17.8.17", - "last_update": "2024-05-29 12:35:14", - "required_features": [ - "definitions/timezone", - "definitions/interface", - "normalize/interfaceConfiguration", - "definitions/certificate", - "definitions/nodeIP" - ], - "human_version": "1.40.2.8395_17.8.17", - "version": "17.8.17", - "chart_metadata": { - "annotations": { - "max_scale_version": "24.04.0", - "min_scale_version": "23.10.0", - "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.40.2.8395", - "dependencies": [ - { - "name": "common", - "version": "20.3.11", - "repository": "oci://tccr.io/truecharts", - "condition": "", - "alias": "", - "tags": [], - "import-values": [] - } - ], - "deprecated": false, - "description": "Plex Media Server", - "home": "https://truecharts.org/charts/stable/plex", - "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/plex.webp", - "keywords": [ - "plex", - "plex-media-server" - ], - "kubeVersion": ">=1.24.0-0", - "maintainers": [ - { - "name": "TrueCharts", - "email": "info@truecharts.org", - "url": "https://truecharts.org" - } - ], - "name": "plex", - "sources": [ - "https://github.com/k8s-at-home/container-images/pkgs/container/plex", - "https://github.com/truecharts/charts/tree/master/charts/stable/plex", - "https://ghcr.io/onedr0p/plex" - ], - "type": "application", - "version": "17.8.17" - }, - "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" - ], - "path": "/web" - } - }, - "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": "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": "ALLOWED_NETWORKS", - "label": "Allowed Networks", - "description": "Networks allowed to connect to plex. Add your local network IP to this list", - "schema": { - "type": "string", - "default": "172.16.0.0/12,10.0.0.0/8,192.168.0.0/16" - } - }, - { - "variable": "PLEX_CLAIM", - "label": "Plex Claim Token", - "description": "Claim token to use to register the plex server (Max. 4 minutes old!). You can obtain a claim token to login your server to your plex account by visiting https://www.plex.tv/claim.", - "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": "plex", - "group": "App Configuration", - "label": "Plex Configuration", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "serverIP", - "label": "Server IP", - "description": "Set to the IP-Address used to reach Plex.", - "schema": { - "type": "string", - "required": true, - "$ref": [ - "definitions/nodeIP" - ], - "default": "192.168.0.10" - } - }, - { - "variable": "additionalAdvertiseURL", - "label": "Addition Advertise URLs", - "description": "URLs to advertise to Plex, format http(s)://IPorDNS:3200. By default your serverIP and ingress URL is added\"", - "schema": { - "type": "string", - "valid_chars": "^$|^(http(s)?:\\/\\/([a-zA-Z0-9.-]*)(:\\d{0,5})?,?)*$", - "default": "" - } - }, - { - "variable": "disableGDM", - "label": "Disable GDM", - "description": "Recommended to keep this to true. Disables legacy local network discovery. Keeping it enabled might break discovery for some Plex Clients", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "requireHTTPS", - "label": "Require HTTPS", - "description": "NOTE: Only enable this setting AFTER you are done with the initial configuration\nof your Plex Server and verify that remote access is working.
      \nPlease use this toggle to \"Require HTTPS\", instead of using the Plex UI,\nso probes are configured correctly.\n", - "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": "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": 32400, - "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": "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": "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": "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": "

      Plex Media Server

      \n

      This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/plex

      \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

      Configuration Options

      \n

      To view the chart specific options, please view Values.yaml included in the chart.

      \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

      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/plex

      \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:

      " - }, - "16.4.0": { - "healthy": true, - "supported": true, - "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/plex/16.4.0", - "last_update": "2024-05-29 12:35:14", - "required_features": [ - "definitions/timezone", - "definitions/gpuConfiguration", - "definitions/interface", - "normalize/interfaceConfiguration", - "definitions/certificate", - "definitions/nodeIP" - ], - "human_version": "1.40.0.7998_16.4.0", - "version": "16.4.0", - "chart_metadata": { - "annotations": { - "max_scale_version": "24.04.0", - "min_scale_version": "23.10.0", - "truecharts.org/category": "media", - "truecharts.org/max_helm_version": "3.14", - "truecharts.org/min_helm_version": "3.12", - "truecharts.org/train": "stable" - }, - "apiVersion": "v2", - "appVersion": "1.40.0.7998", - "dependencies": [ - { - "name": "common", - "version": "17.5.0", - "repository": "oci://tccr.io/truecharts", - "condition": "", - "alias": "", - "tags": [], - "import-values": [] - } - ], - "deprecated": false, - "description": "Plex Media Server", - "home": "https://truecharts.org/charts/stable/plex", - "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/plex.png", - "keywords": [ - "plex", - "plex-media-server" - ], - "kubeVersion": ">=1.24.0-0", - "maintainers": [ - { - "name": "TrueCharts", - "email": "info@truecharts.org", - "url": "https://truecharts.org" - } - ], - "name": "plex", - "sources": [ - "https://github.com/k8s-at-home/container-images/pkgs/container/plex", - "https://github.com/truecharts/charts/tree/master/charts/stable/plex", - "https://ghcr.io/onedr0p/plex" - ], - "type": "application", - "version": "16.4.0" - }, - "app_metadata": null, - "schema": { - "groups": [ - { - "name": "Container Image", - "description": "Image to be used for container" - }, - { - "name": "General Settings", - "description": "General Deployment Settings" - }, - { - "name": "Workload Settings", - "description": "Workload Settings" - }, - { - "name": "App Configuration", - "description": "App Specific Config Options" - }, - { - "name": "Networking and Services", - "description": "Configure Network and Services for Container" - }, - { - "name": "Storage and Persistence", - "description": "Persist and Share Data that is Separate from the Container" - }, - { - "name": "Ingress", - "description": "Ingress Configuration" - }, - { - "name": "Security and Permissions", - "description": "Configure Security Context and Permissions" - }, - { - "name": "Resources and Devices", - "description": "Specify Resources/Devices to be Allocated to Workload" - }, - { - "name": "Middlewares", - "description": "Traefik Middlewares" - }, - { - "name": "Metrics", - "description": "Metrics" - }, - { - "name": "Addons", - "description": "Addon Configuration" - }, - { - "name": "Backup Configuration", - "description": "Configure Velero Backup Schedule" - }, - { - "name": "Advanced", - "description": "Advanced Configuration" - }, - { - "name": "Postgresql", - "description": "Postgresql" - }, - { - "name": "Documentation", - "description": "Documentation" - } - ], - "portals": { - "open": { - "protocols": [ - "$kubernetes-resource_configmap_tcportal-open_protocol" - ], - "host": [ - "$kubernetes-resource_configmap_tcportal-open_host" - ], - "ports": [ - "$kubernetes-resource_configmap_tcportal-open_port" - ], - "path": "/web" - } - }, - "questions": [ - { - "variable": "global", - "group": "General Settings", - "label": "Global Settings", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "stopAll", - "label": "Stop All", - "description": "Stops All Running pods and hibernates cnpg", - "schema": { - "type": "boolean", - "default": false - } - } - ] - } - }, - { - "variable": "workload", - "group": "Workload Settings", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Type (Advanced)", - "schema": { - "type": "string", - "default": "Deployment", - "enum": [ - { - "value": "Deployment", - "description": "Deployment" - }, - { - "value": "DaemonSet", - "description": "DaemonSet" - } - ] - } - }, - { - "variable": "replicas", - "label": "Replicas (Advanced)", - "description": "Set the number of Replicas", - "schema": { - "type": "int", - "show_if": [ - [ - "type", - "!=", - "DaemonSet" - ] - ], - "default": 1 - } - }, - { - "variable": "podSpec", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "containers", - "label": "Containers", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "Main Container", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "env", - "group": "App Configuration", - "label": "Image Environment", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ALLOWED_NETWORKS", - "label": "Allowed Networks", - "description": "Networks allowed to connect to plex. Add your local network IP to this list", - "schema": { - "type": "string", - "default": "172.16.0.0/12,10.0.0.0/8,192.168.0.0/16" - } - }, - { - "variable": "PLEX_CLAIM", - "label": "Plex Claim Token", - "description": "Claim token to use to register the plex server (Max. 4 minutes old!). You can obtain a claim token to login your server to your plex account by visiting https://www.plex.tv/claim.", - "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": "plex", - "group": "App Configuration", - "label": "Plex Configuration", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "serverIP", - "label": "Server IP", - "description": "Set to the IP-Address used to reach Plex.", - "schema": { - "type": "string", - "required": true, - "$ref": [ - "definitions/nodeIP" - ], - "default": "192.168.0.10" - } - }, - { - "variable": "additionalAdvertiseURL", - "label": "Addition Advertise URLs", - "description": "URLs to advertise to Plex, format http(s)://IPorDNS:3200. By default your serverIP and ingress URL is added\"", - "schema": { - "type": "string", - "valid_chars": "^$|^(http(s)?:\\/\\/([a-zA-Z0-9.-]*)(:\\d{0,5})?,?)*$", - "default": "" - } - }, - { - "variable": "disableGDM", - "label": "Disable GDM", - "description": "Recommended to keep this to true. Disables legacy local network discovery. Keeping it enabled might break discovery for some Plex Clients", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "requireHTTPS", - "label": "Require HTTPS", - "description": "NOTE: Only enable this setting AFTER you are done with the initial configuration\nof your Plex Server and verify that remote access is working.
      \nPlease use this toggle to \"Require HTTPS\", instead of using the Plex UI,\nso probes are configured correctly.\n", - "schema": { - "type": "boolean", - "default": false - } - } - ] - } - }, - { - "variable": "TZ", - "label": "Timezone", - "group": "General Settings", - "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 Settings", - "label": "Global Pod Options (Advanced)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "expertPodOpts", - "label": "Expert - Pod Options", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hostNetwork", - "label": "Host Networking", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "dnsConfig", - "label": "DNS Configuration", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "options", - "label": "Options", - "schema": { - "type": "list", - "default": [ - { - "name": "ndots", - "value": "1" - } - ], - "items": [ - { - "variable": "optionsEntry", - "label": "Option Entry", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true - } - }, - { - "variable": "value", - "label": "Value", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "nameservers", - "label": "Nameservers", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "nsEntry", - "label": "Nameserver Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - }, - { - "variable": "searches", - "label": "Searches", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "searchEntry", - "label": "Search Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "imagePullSecretList", - "group": "General Settings", - "label": "Image Pull Secrets", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "pullsecretentry", - "label": "Pull Secret", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "data", - "label": "Data", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "registry", - "label": "Registry", - "schema": { - "type": "string", - "required": true, - "default": "https://index.docker.io/v1/" - } - }, - { - "variable": "username", - "label": "Username", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "password", - "label": "Password", - "schema": { - "type": "string", - "required": true, - "private": true, - "default": "" - } - }, - { - "variable": "email", - "label": "Email", - "schema": { - "type": "string", - "required": true, - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "service", - "group": "Networking and Services", - "label": "Configure Service(s)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "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": 32400, - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "serviceexpert", - "group": "Networking and Services", - "label": "Show Expert Config", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "scaleExternalInterface", - "description": "Add External Interfaces", - "label": "Add external Interfaces", - "group": "Networking", - "schema": { - "type": "list", - "items": [ - { - "variable": "interfaceConfiguration", - "description": "Interface Configuration", - "label": "Interface Configuration", - "schema": { - "additional_attrs": true, - "type": "dict", - "$ref": [ - "normalize/interfaceConfiguration" - ], - "attrs": [ - { - "variable": "hostInterface", - "description": "Please Specify Host Interface", - "label": "Host Interface", - "schema": { - "type": "string", - "required": true, - "$ref": [ - "definitions/interface" - ], - "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": "Networking and Services", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "serviceListEntry", - "label": "Custom Service", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the service", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "LoadBalancer", - "description": "LoadBalancer (Expose Ports)" - }, - { - "value": "ClusterIP", - "description": "ClusterIP (Do Not Expose Ports)" - }, - { - "value": "Simple", - "description": "Deprecated CHANGE THIS" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "advancedsvcset", - "label": "Show Advanced Service Settings", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "externalIPs", - "label": "External IP's", - "description": "External IP's", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "externalIP", - "label": "External IP", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "ipFamilyPolicy", - "label": "IP Family Policy", - "description": "Specify the IP Policy", - "schema": { - "type": "string", - "default": "SingleStack", - "enum": [ - { - "value": "SingleStack", - "description": "SingleStack" - }, - { - "value": "PreferDualStack", - "description": "PreferDualStack" - }, - { - "value": "RequireDualStack", - "description": "RequireDualStack" - } - ] - } - }, - { - "variable": "ipFamilies", - "label": "IP Families", - "description": "(Advanced) The IP Families that should be used", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ipFamily", - "label": "IP Family", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "portsList", - "label": "Additional Service Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsListEntry", - "label": "Custom ports", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Port", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Port Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "protocol", - "label": "Port Type", - "schema": { - "type": "string", - "default": "tcp", - "enum": [ - { - "value": "http", - "description": "HTTP" - }, - { - "value": "https", - "description": "HTTPS" - }, - { - "value": "tcp", - "description": "TCP" - }, - { - "value": "udp", - "description": "UDP" - } - ] - } - }, - { - "variable": "targetPort", - "label": "Target Port", - "description": "This port exposes the container port on the service", - "schema": { - "type": "int", - "required": true - } - }, - { - "variable": "port", - "label": "Container Port", - "schema": { - "type": "int", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "persistence", - "label": "Integrated Persistent Storage", - "description": "Integrated Persistent Storage", - "group": "Storage and 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": "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": "Storage and Persistence", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "persistenceListEntry", - "label": "Custom Storage", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the storage", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "type", - "label": "Type of Storage", - "description": "Sets the persistence type, Anything other than PVC could break rollback!", - "schema": { - "type": "string", - "default": "hostPath", - "enum": [ - { - "value": "pvc", - "description": "PVC" - }, - { - "value": "hostPath", - "description": "Host Path" - }, - { - "value": "emptyDir", - "description": "emptyDir" - }, - { - "value": "nfs", - "description": "NFS Share" - } - ] - } - }, - { - "variable": "server", - "label": "NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "path", - "label": "Path on NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "iscsi", - "label": "iSCSI Options", - "schema": { - "show_if": [ - [ - "type", - "=", - "iscsi" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "targetPortal", - "label": "targetPortal", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "iqn", - "label": "iqn", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "lun", - "label": "lun", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "authSession", - "label": "authSession", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - }, - { - "variable": "authDiscovery", - "label": "authDiscovery", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - }, - { - "variable": "autoPermissions", - "label": "Automatic Permissions Configuration", - "description": "Automatically set permissions", - "schema": { - "show_if": [ - [ - "type", - "!=", - "pvc" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "chown", - "label": "Run CHOWN", - "description": "It will run CHOWN on the path with the given fsGroup\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": "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": "Security and Permissions", - "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 and Devices", - "label": "Resource Limits", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "limits", - "label": "Advanced Limit Resource Consumption", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "4000m", - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "8Gi", - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - }, - { - "variable": "intel.com/i915", - "label": "Add Intel i915 GPUs", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "nvidia.com/gpu", - "label": "Add NVIDIA GPUs (Experimental)", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "amd.com/gpu", - "label": "Add AMD GPUs", - "schema": { - "type": "int", - "default": 0 - } - } - ] - } - }, - { - "variable": "requests", - "label": "Minimum Resources Required (request)", - "schema": { - "additional_attrs": true, - "type": "dict", - "hidden": true, - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "10m", - "hidden": true, - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "50Mi", - "hidden": true, - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - } - ] - } - } - ] - } - }, - { - "variable": "deviceList", - "label": "Mount USB Devices", - "group": "Resources and Devices", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "deviceListEntry", - "label": "Device", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Storage", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "type", - "label": "(Advanced) Type of Storage", - "description": "Sets the persistence type", - "schema": { - "type": "string", - "default": "device", - "hidden": true - } - }, - { - "variable": "readOnly", - "label": "readOnly", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "hostPath", - "label": "Host Device Path", - "description": "Path to the device on the host system", - "schema": { - "type": "path" - } - }, - { - "variable": "mountPath", - "label": "Container Device Path", - "description": "Path inside the container the device is mounted", - "schema": { - "type": "string", - "default": "/dev/ttyACM0" - } - } - ] - } - } - ] - } - }, - { - "variable": "scaleGPU", - "label": "GPU Configuration", - "group": "Resources and Devices", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "scaleGPUEntry", - "label": "GPU", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "gpu", - "label": "Select GPU", - "schema": { - "additional_attrs": true, - "type": "dict", - "$ref": [ - "definitions/gpuConfiguration" - ], - "attrs": [] - } - }, - { - "variable": "workaround", - "label": "Workaround", - "schema": { - "type": "string", - "default": "workaround", - "hidden": true - } - } - ] - } - } - ] - } - }, - { - "variable": "networkPolicy", - "group": "Advanced", - "label": "(Advanced) Network Policy", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "netPolicyEntry", - "label": "Network Policy Entry", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "policyType", - "label": "Policy Type", - "schema": { - "type": "string", - "default": "", - "enum": [ - { - "value": "", - "description": "Default" - }, - { - "value": "ingress", - "description": "Ingress" - }, - { - "value": "egress", - "description": "Egress" - }, - { - "value": "ingress-egress", - "description": "Ingress and Egress" - } - ] - } - }, - { - "variable": "egress", - "label": "Egress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "egressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "to", - "label": "To", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "toEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ingressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "from", - "label": "From", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "fromEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "addons", - "group": "Addons", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "Codeserver", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "service", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "NodePort", - "description": "Deprecated CHANGE THIS" - }, - { - "value": "ClusterIP", - "description": "ClusterIP" - }, - { - "value": "LoadBalancer", - "description": "LoadBalancer" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "ports", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int", - "default": 36107 - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable Ingress", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hosts", - "label": "Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "hostEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "host", - "label": "HostName", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "paths", - "label": "Paths", - "schema": { - "type": "list", - "default": [ - { - "path": "/", - "pathType": "Prefix" - } - ], - "items": [ - { - "variable": "pathEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "path", - "label": "Path", - "schema": { - "type": "string", - "required": true, - "default": "/" - } - }, - { - "variable": "pathType", - "label": "Path Type", - "schema": { - "type": "string", - "required": true, - "default": "Prefix" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "integrations", - "label": "Integrations", - "description": "Connect ingress with other charts", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "traefik", - "label": "Traefik", - "description": "Connect ingress with Traefik", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "allowCors", - "label": "Allow Cross Origin Requests (advanced)", - "schema": { - "type": "boolean", - "default": false, - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - }, - { - "variable": "entrypoints", - "label": "Entrypoints", - "schema": { - "type": "list", - "default": [ - "websecure" - ], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "entrypoint", - "label": "Entrypoint", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "middlewares", - "label": "Middlewares", - "schema": { - "type": "list", - "default": [], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "middleware", - "label": "Middleware", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "name", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "namespace", - "label": "namespace (optional)", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "certManager", - "label": "certManager", - "description": "Connect ingress with certManager", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "certificateIssuer", - "label": "certificateIssuer", - "description": "defaults to chartname", - "schema": { - "type": "string", - "default": "", - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "advanced", - "label": "Show Advanced Settings", - "description": "Advanced settings are not covered by TrueCharts Support", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "ingressClassName", - "label": "(Advanced/Optional) IngressClass Name", - "schema": { - "type": "string", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": "" - } - }, - { - "variable": "tls", - "label": "TLS-Settings", - "schema": { - "type": "list", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": [], - "items": [ - { - "variable": "tlsEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "hosts", - "label": "Certificate Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "host", - "label": "Host", - "schema": { - "type": "string", - "default": "", - "required": true - } - } - ] - } - }, - { - "variable": "certificateIssuer", - "label": "Use Cert-Manager clusterIssuer", - "description": "add the name of your cert-manager clusterIssuer here for automatic tls certificates.", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "clusterCertificate", - "label": "Cluster Certificate (Advanced)", - "description": "Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.", - "schema": { - "type": "string", - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "default": "" - } - }, - { - "variable": "secretName", - "label": "Use Custom Certificate Secret (Advanced)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "scaleCert", - "label": "Use TrueNAS SCALE Certificate (Deprecated)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "int", - "$ref": [ - "definitions/certificate" - ], - "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": "

      Plex Media Server

      \n

      This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/plex

      \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 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

      plex-16.1.13 (2024-02-12)

      \n

      Chore

      \n
        \n
      • update container image ghcr.io/onedr0p/plex to 1.32.8.7639-fb6452ebf@97bf4a8 by renovate (#18228)
      • \n
      \n

      plex-16.1.12 (2024-02-12)

      \n

      Chore

      \n
        \n
      • update container image ghcr.io/onedr0p/plex to 1.32.8.7639-fb6452ebf@76dce9f by renovate (#18165)
      • \n
      \n

      plex-16.1.11 (2024-02-03)

      \n

      Chore

      \n
        \n
      • update container image common to v17.2.30@19ad5ec by renovate (#17804)
      • \n
      \n

      plex-16.1.10 (2024-01-26)

      \n

      Chore

      \n
        \n
      • update container image common to v17.2.29@d7c41a3 by renovate (#17545)
      • \n
      \n

      plex-16.1.9 (2024-01-21)

      \n

      Chore

      \n
        \n
      • update container image common to v17.2.28@918b4c5 by renovate (#17478)
      • \n
      \n

      plex-16.1.8 (2024-01-21)

      \n

      Chore

      \n
        \n
      • update container image common to v17.2.26@24c98f7 by renovate (#17409)
      • \n
      \n

      plex-16.1.7 (2024-01-21)

      \n

      Chore

      \n
        \n
      • update metadata in chart.yaml (#17457)
      • \n
      \n

      plex-16.1.6 (2024-01-09)

      \n

      Chore

      \n
        \n
      • update container image common to v17.2.22@e7c9056 by renovate (#16986)
      • \n
      \n

      plex-16.1.5 (2024-01-02)

      \n

      Chore

      \n
        \n
      • force bump to ensure up-to-date catalogs
      • \n
      \n

      plex-16.1.4 (2024-01-01)

      " - }, - "16.3.0": { - "healthy": true, - "supported": true, - "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/plex/16.3.0", - "last_update": "2024-05-29 12:35:14", - "required_features": [ - "definitions/timezone", - "definitions/gpuConfiguration", - "definitions/interface", - "normalize/interfaceConfiguration", - "definitions/certificate", - "definitions/nodeIP" - ], - "human_version": "1.40.0.7998_16.3.0", - "version": "16.3.0", - "chart_metadata": { - "annotations": { - "max_scale_version": "24.04.0", - "min_scale_version": "23.10.0", - "truecharts.org/category": "media", - "truecharts.org/max_helm_version": "3.14", - "truecharts.org/min_helm_version": "3.12", - "truecharts.org/train": "stable" - }, - "apiVersion": "v2", - "appVersion": "1.40.0.7998", - "dependencies": [ - { - "name": "common", - "version": "17.4.2", - "repository": "oci://tccr.io/truecharts", - "condition": "", - "alias": "", - "tags": [], - "import-values": [] - } - ], - "deprecated": false, - "description": "Plex Media Server", - "home": "https://truecharts.org/charts/stable/plex", - "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/plex.png", - "keywords": [ - "plex", - "plex-media-server" - ], - "kubeVersion": ">=1.24.0-0", - "maintainers": [ - { - "name": "TrueCharts", - "email": "info@truecharts.org", - "url": "https://truecharts.org" - } - ], - "name": "plex", - "sources": [ - "https://github.com/k8s-at-home/container-images/pkgs/container/plex", - "https://github.com/truecharts/charts/tree/master/charts/stable/plex", - "https://ghcr.io/onedr0p/plex" - ], - "type": "application", - "version": "16.3.0" - }, - "app_metadata": null, - "schema": { - "groups": [ - { - "name": "Container Image", - "description": "Image to be used for container" - }, - { - "name": "General Settings", - "description": "General Deployment Settings" - }, - { - "name": "Workload Settings", - "description": "Workload Settings" - }, - { - "name": "App Configuration", - "description": "App Specific Config Options" - }, - { - "name": "Networking and Services", - "description": "Configure Network and Services for Container" - }, - { - "name": "Storage and Persistence", - "description": "Persist and Share Data that is Separate from the Container" - }, - { - "name": "Ingress", - "description": "Ingress Configuration" - }, - { - "name": "Security and Permissions", - "description": "Configure Security Context and Permissions" - }, - { - "name": "Resources and Devices", - "description": "Specify Resources/Devices to be Allocated to Workload" - }, - { - "name": "Middlewares", - "description": "Traefik Middlewares" - }, - { - "name": "Metrics", - "description": "Metrics" - }, - { - "name": "Addons", - "description": "Addon Configuration" - }, - { - "name": "Backup Configuration", - "description": "Configure Velero Backup Schedule" - }, - { - "name": "Advanced", - "description": "Advanced Configuration" - }, - { - "name": "Postgresql", - "description": "Postgresql" - }, - { - "name": "Documentation", - "description": "Documentation" - } - ], - "portals": { - "open": { - "protocols": [ - "$kubernetes-resource_configmap_tcportal-open_protocol" - ], - "host": [ - "$kubernetes-resource_configmap_tcportal-open_host" - ], - "ports": [ - "$kubernetes-resource_configmap_tcportal-open_port" - ], - "path": "/web" - } - }, - "questions": [ - { - "variable": "global", - "group": "General Settings", - "label": "Global Settings", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "stopAll", - "label": "Stop All", - "description": "Stops All Running pods and hibernates cnpg", - "schema": { - "type": "boolean", - "default": false - } - } - ] - } - }, - { - "variable": "workload", - "group": "Workload Settings", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Type (Advanced)", - "schema": { - "type": "string", - "default": "Deployment", - "enum": [ - { - "value": "Deployment", - "description": "Deployment" - }, - { - "value": "DaemonSet", - "description": "DaemonSet" - } - ] - } - }, - { - "variable": "replicas", - "label": "Replicas (Advanced)", - "description": "Set the number of Replicas", - "schema": { - "type": "int", - "show_if": [ - [ - "type", - "!=", - "DaemonSet" - ] - ], - "default": 1 - } - }, - { - "variable": "podSpec", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "containers", - "label": "Containers", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "Main Container", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "env", - "group": "App Configuration", - "label": "Image Environment", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ALLOWED_NETWORKS", - "label": "Allowed Networks", - "description": "Networks allowed to connect to plex. Add your local network IP to this list", - "schema": { - "type": "string", - "default": "172.16.0.0/12,10.0.0.0/8,192.168.0.0/16" - } - }, - { - "variable": "PLEX_CLAIM", - "label": "Plex Claim Token", - "description": "Claim token to use to register the plex server (Max. 4 minutes old!). You can obtain a claim token to login your server to your plex account by visiting https://www.plex.tv/claim.", - "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": "plex", - "group": "App Configuration", - "label": "Plex Configuration", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "serverIP", - "label": "Server IP", - "description": "Set to the IP-Address used to reach Plex.", - "schema": { - "type": "string", - "required": true, - "$ref": [ - "definitions/nodeIP" - ], - "default": "192.168.0.10" - } - }, - { - "variable": "additionalAdvertiseURL", - "label": "Addition Advertise URLs", - "description": "URLs to advertise to Plex, format http(s)://IPorDNS:3200. By default your serverIP and ingress URL is added\"", - "schema": { - "type": "string", - "valid_chars": "^$|^(http(s)?:\\/\\/([a-zA-Z0-9.-]*)(:\\d{0,5})?,?)*$", - "default": "" - } - }, - { - "variable": "disableGDM", - "label": "Disable GDM", - "description": "Recommended to keep this to true. Disables legacy local network discovery. Keeping it enabled might break discovery for some Plex Clients", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "requireHTTPS", - "label": "Require HTTPS", - "description": "NOTE: Only enable this setting AFTER you are done with the initial configuration\nof your Plex Server and verify that remote access is working.
      \nPlease use this toggle to \"Require HTTPS\", instead of using the Plex UI,\nso probes are configured correctly.\n", - "schema": { - "type": "boolean", - "default": false - } - } - ] - } - }, - { - "variable": "TZ", - "label": "Timezone", - "group": "General Settings", - "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 Settings", - "label": "Global Pod Options (Advanced)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "expertPodOpts", - "label": "Expert - Pod Options", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hostNetwork", - "label": "Host Networking", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "dnsConfig", - "label": "DNS Configuration", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "options", - "label": "Options", - "schema": { - "type": "list", - "default": [ - { - "name": "ndots", - "value": "1" - } - ], - "items": [ - { - "variable": "optionsEntry", - "label": "Option Entry", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true - } - }, - { - "variable": "value", - "label": "Value", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "nameservers", - "label": "Nameservers", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "nsEntry", - "label": "Nameserver Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - }, - { - "variable": "searches", - "label": "Searches", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "searchEntry", - "label": "Search Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "imagePullSecretList", - "group": "General Settings", - "label": "Image Pull Secrets", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "pullsecretentry", - "label": "Pull Secret", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "data", - "label": "Data", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "registry", - "label": "Registry", - "schema": { - "type": "string", - "required": true, - "default": "https://index.docker.io/v1/" - } - }, - { - "variable": "username", - "label": "Username", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "password", - "label": "Password", - "schema": { - "type": "string", - "required": true, - "private": true, - "default": "" - } - }, - { - "variable": "email", - "label": "Email", - "schema": { - "type": "string", - "required": true, - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "service", - "group": "Networking and Services", - "label": "Configure Service(s)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "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": 32400, - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "serviceexpert", - "group": "Networking and Services", - "label": "Show Expert Config", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "scaleExternalInterface", - "description": "Add External Interfaces", - "label": "Add external Interfaces", - "group": "Networking", - "schema": { - "type": "list", - "items": [ - { - "variable": "interfaceConfiguration", - "description": "Interface Configuration", - "label": "Interface Configuration", - "schema": { - "additional_attrs": true, - "type": "dict", - "$ref": [ - "normalize/interfaceConfiguration" - ], - "attrs": [ - { - "variable": "hostInterface", - "description": "Please Specify Host Interface", - "label": "Host Interface", - "schema": { - "type": "string", - "required": true, - "$ref": [ - "definitions/interface" - ], - "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": "Networking and Services", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "serviceListEntry", - "label": "Custom Service", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the service", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "LoadBalancer", - "description": "LoadBalancer (Expose Ports)" - }, - { - "value": "ClusterIP", - "description": "ClusterIP (Do Not Expose Ports)" - }, - { - "value": "Simple", - "description": "Deprecated CHANGE THIS" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "advancedsvcset", - "label": "Show Advanced Service Settings", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "externalIPs", - "label": "External IP's", - "description": "External IP's", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "externalIP", - "label": "External IP", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "ipFamilyPolicy", - "label": "IP Family Policy", - "description": "Specify the IP Policy", - "schema": { - "type": "string", - "default": "SingleStack", - "enum": [ - { - "value": "SingleStack", - "description": "SingleStack" - }, - { - "value": "PreferDualStack", - "description": "PreferDualStack" - }, - { - "value": "RequireDualStack", - "description": "RequireDualStack" - } - ] - } - }, - { - "variable": "ipFamilies", - "label": "IP Families", - "description": "(Advanced) The IP Families that should be used", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ipFamily", - "label": "IP Family", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "portsList", - "label": "Additional Service Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsListEntry", - "label": "Custom ports", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Port", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Port Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "protocol", - "label": "Port Type", - "schema": { - "type": "string", - "default": "tcp", - "enum": [ - { - "value": "http", - "description": "HTTP" - }, - { - "value": "https", - "description": "HTTPS" - }, - { - "value": "tcp", - "description": "TCP" - }, - { - "value": "udp", - "description": "UDP" - } - ] - } - }, - { - "variable": "targetPort", - "label": "Target Port", - "description": "This port exposes the container port on the service", - "schema": { - "type": "int", - "required": true - } - }, - { - "variable": "port", - "label": "Container Port", - "schema": { - "type": "int", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "persistence", - "label": "Integrated Persistent Storage", - "description": "Integrated Persistent Storage", - "group": "Storage and 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": "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": "Storage and Persistence", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "persistenceListEntry", - "label": "Custom Storage", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the storage", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "type", - "label": "Type of Storage", - "description": "Sets the persistence type, Anything other than PVC could break rollback!", - "schema": { - "type": "string", - "default": "hostPath", - "enum": [ - { - "value": "pvc", - "description": "PVC" - }, - { - "value": "hostPath", - "description": "Host Path" - }, - { - "value": "emptyDir", - "description": "emptyDir" - }, - { - "value": "nfs", - "description": "NFS Share" - } - ] - } - }, - { - "variable": "server", - "label": "NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "path", - "label": "Path on NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "iscsi", - "label": "iSCSI Options", - "schema": { - "show_if": [ - [ - "type", - "=", - "iscsi" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "targetPortal", - "label": "targetPortal", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "iqn", - "label": "iqn", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "lun", - "label": "lun", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "authSession", - "label": "authSession", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - }, - { - "variable": "authDiscovery", - "label": "authDiscovery", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - }, - { - "variable": "autoPermissions", - "label": "Automatic Permissions Configuration", - "description": "Automatically set permissions", - "schema": { - "show_if": [ - [ - "type", - "!=", - "pvc" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "chown", - "label": "Run CHOWN", - "description": "It will run CHOWN on the path with the given fsGroup\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": "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": "Security and Permissions", - "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 and Devices", - "label": "Resource Limits", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "limits", - "label": "Advanced Limit Resource Consumption", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "4000m", - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "8Gi", - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - }, - { - "variable": "intel.com/i915", - "label": "Add Intel i915 GPUs", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "nvidia.com/gpu", - "label": "Add NVIDIA GPUs (Experimental)", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "amd.com/gpu", - "label": "Add AMD GPUs", - "schema": { - "type": "int", - "default": 0 - } - } - ] - } - }, - { - "variable": "requests", - "label": "Minimum Resources Required (request)", - "schema": { - "additional_attrs": true, - "type": "dict", - "hidden": true, - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "10m", - "hidden": true, - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "50Mi", - "hidden": true, - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - } - ] - } - } - ] - } - }, - { - "variable": "deviceList", - "label": "Mount USB Devices", - "group": "Resources and Devices", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "deviceListEntry", - "label": "Device", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Storage", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "type", - "label": "(Advanced) Type of Storage", - "description": "Sets the persistence type", - "schema": { - "type": "string", - "default": "device", - "hidden": true - } - }, - { - "variable": "readOnly", - "label": "readOnly", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "hostPath", - "label": "Host Device Path", - "description": "Path to the device on the host system", - "schema": { - "type": "path" - } - }, - { - "variable": "mountPath", - "label": "Container Device Path", - "description": "Path inside the container the device is mounted", - "schema": { - "type": "string", - "default": "/dev/ttyACM0" - } - } - ] - } - } - ] - } - }, - { - "variable": "scaleGPU", - "label": "GPU Configuration", - "group": "Resources and Devices", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "scaleGPUEntry", - "label": "GPU", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "gpu", - "label": "Select GPU", - "schema": { - "additional_attrs": true, - "type": "dict", - "$ref": [ - "definitions/gpuConfiguration" - ], - "attrs": [] - } - }, - { - "variable": "workaround", - "label": "Workaround", - "schema": { - "type": "string", - "default": "workaround", - "hidden": true - } - } - ] - } - } - ] - } - }, - { - "variable": "networkPolicy", - "group": "Advanced", - "label": "(Advanced) Network Policy", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "netPolicyEntry", - "label": "Network Policy Entry", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "policyType", - "label": "Policy Type", - "schema": { - "type": "string", - "default": "", - "enum": [ - { - "value": "", - "description": "Default" - }, - { - "value": "ingress", - "description": "Ingress" - }, - { - "value": "egress", - "description": "Egress" - }, - { - "value": "ingress-egress", - "description": "Ingress and Egress" - } - ] - } - }, - { - "variable": "egress", - "label": "Egress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "egressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "to", - "label": "To", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "toEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ingressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "from", - "label": "From", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "fromEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "addons", - "group": "Addons", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "Codeserver", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "service", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "NodePort", - "description": "Deprecated CHANGE THIS" - }, - { - "value": "ClusterIP", - "description": "ClusterIP" - }, - { - "value": "LoadBalancer", - "description": "LoadBalancer" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "ports", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int", - "default": 36107 - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable Ingress", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hosts", - "label": "Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "hostEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "host", - "label": "HostName", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "paths", - "label": "Paths", - "schema": { - "type": "list", - "default": [ - { - "path": "/", - "pathType": "Prefix" - } - ], - "items": [ - { - "variable": "pathEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "path", - "label": "Path", - "schema": { - "type": "string", - "required": true, - "default": "/" - } - }, - { - "variable": "pathType", - "label": "Path Type", - "schema": { - "type": "string", - "required": true, - "default": "Prefix" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "integrations", - "label": "Integrations", - "description": "Connect ingress with other charts", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "traefik", - "label": "Traefik", - "description": "Connect ingress with Traefik", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "allowCors", - "label": "Allow Cross Origin Requests (advanced)", - "schema": { - "type": "boolean", - "default": false, - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - }, - { - "variable": "entrypoints", - "label": "Entrypoints", - "schema": { - "type": "list", - "default": [ - "websecure" - ], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "entrypoint", - "label": "Entrypoint", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "middlewares", - "label": "Middlewares", - "schema": { - "type": "list", - "default": [], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "middleware", - "label": "Middleware", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "name", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "namespace", - "label": "namespace (optional)", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "certManager", - "label": "certManager", - "description": "Connect ingress with certManager", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "certificateIssuer", - "label": "certificateIssuer", - "description": "defaults to chartname", - "schema": { - "type": "string", - "default": "", - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "advanced", - "label": "Show Advanced Settings", - "description": "Advanced settings are not covered by TrueCharts Support", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "ingressClassName", - "label": "(Advanced/Optional) IngressClass Name", - "schema": { - "type": "string", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": "" - } - }, - { - "variable": "tls", - "label": "TLS-Settings", - "schema": { - "type": "list", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": [], - "items": [ - { - "variable": "tlsEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "hosts", - "label": "Certificate Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "host", - "label": "Host", - "schema": { - "type": "string", - "default": "", - "required": true - } - } - ] - } - }, - { - "variable": "certificateIssuer", - "label": "Use Cert-Manager clusterIssuer", - "description": "add the name of your cert-manager clusterIssuer here for automatic tls certificates.", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "clusterCertificate", - "label": "Cluster Certificate (Advanced)", - "description": "Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.", - "schema": { - "type": "string", - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "default": "" - } - }, - { - "variable": "secretName", - "label": "Use Custom Certificate Secret (Advanced)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "scaleCert", - "label": "Use TrueNAS SCALE Certificate (Deprecated)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "int", - "$ref": [ - "definitions/certificate" - ], - "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": "

      Plex Media Server

      \n

      This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/plex

      \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 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

      plex-16.1.13 (2024-02-12)

      \n

      Chore

      \n
        \n
      • update container image ghcr.io/onedr0p/plex to 1.32.8.7639-fb6452ebf@97bf4a8 by renovate (#18228)
      • \n
      \n

      plex-16.1.12 (2024-02-12)

      \n

      Chore

      \n
        \n
      • update container image ghcr.io/onedr0p/plex to 1.32.8.7639-fb6452ebf@76dce9f by renovate (#18165)
      • \n
      \n

      plex-16.1.11 (2024-02-03)

      \n

      Chore

      \n
        \n
      • update container image common to v17.2.30@19ad5ec by renovate (#17804)
      • \n
      \n

      plex-16.1.10 (2024-01-26)

      \n

      Chore

      \n
        \n
      • update container image common to v17.2.29@d7c41a3 by renovate (#17545)
      • \n
      \n

      plex-16.1.9 (2024-01-21)

      \n

      Chore

      \n
        \n
      • update container image common to v17.2.28@918b4c5 by renovate (#17478)
      • \n
      \n

      plex-16.1.8 (2024-01-21)

      \n

      Chore

      \n
        \n
      • update container image common to v17.2.26@24c98f7 by renovate (#17409)
      • \n
      \n

      plex-16.1.7 (2024-01-21)

      \n

      Chore

      \n
        \n
      • update metadata in chart.yaml (#17457)
      • \n
      \n

      plex-16.1.6 (2024-01-09)

      \n

      Chore

      \n
        \n
      • update container image common to v17.2.22@e7c9056 by renovate (#16986)
      • \n
      \n

      plex-16.1.5 (2024-01-02)

      \n

      Chore

      \n
        \n
      • force bump to ensure up-to-date catalogs
      • \n
      \n

      plex-16.1.4 (2024-01-01)

      " } } \ No newline at end of file diff --git a/stable/prowlarr/14.4.0/.helmignore b/stable/prowlarr/14.4.0/.helmignore deleted file mode 100644 index 77ca5567b2..0000000000 --- a/stable/prowlarr/14.4.0/.helmignore +++ /dev/null @@ -1,30 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ -# OWNERS file for Kubernetes -OWNERS -# helm-docs templates -*.gotmpl -# docs folder -/docs -# icon -icon.png diff --git a/stable/prowlarr/14.4.0/CHANGELOG.md b/stable/prowlarr/14.4.0/CHANGELOG.md deleted file mode 100644 index 44e4254f5b..0000000000 --- a/stable/prowlarr/14.4.0/CHANGELOG.md +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: Changelog ---- - - -*for the complete changelog, please refer to the website* - -**Important:** - - - -## [prowlarr-14.3.5](https://github.com/truecharts/charts/compare/prowlarr-14.3.4...prowlarr-14.3.5) (2024-02-12) - -### Chore - - - -- update container image ghcr.io/onedr0p/prowlarr-develop to v1.13.3.4273[@ca264d9](https://github.com/ca264d9) by renovate ([#18137](https://github.com/truecharts/charts/issues/18137)) - - -## [prowlarr-14.3.4](https://github.com/truecharts/charts/compare/prowlarr-14.3.3...prowlarr-14.3.4) (2024-02-05) - -### Chore - - - -- update container image ghcr.io/onedr0p/prowlarr-develop to 1.13.2.4251[@23d16bf](https://github.com/23d16bf) by renovate ([#17956](https://github.com/truecharts/charts/issues/17956)) - - -## [prowlarr-14.3.3](https://github.com/truecharts/charts/compare/prowlarr-14.3.2...prowlarr-14.3.3) (2024-02-05) - -### Chore - - - -- update container image ghcr.io/onedr0p/prowlarr-develop to v1.13.2.4251[@1ada8d9](https://github.com/1ada8d9) by renovate ([#17915](https://github.com/truecharts/charts/issues/17915)) - - -## [prowlarr-14.3.2](https://github.com/truecharts/charts/compare/prowlarr-14.3.1...prowlarr-14.3.2) (2024-02-03) - -### Chore - - - -- update container image common to v17.2.30[@19ad5ec](https://github.com/19ad5ec) by renovate ([#17804](https://github.com/truecharts/charts/issues/17804)) - - -## [prowlarr-14.3.1](https://github.com/truecharts/charts/compare/prowlarr-14.3.0...prowlarr-14.3.1) (2024-01-29) - -### Chore - - - -- update container image ghcr.io/onedr0p/exportarr to v1.6.1[@60cf3d4](https://github.com/60cf3d4) by renovate ([#17725](https://github.com/truecharts/charts/issues/17725)) - - -## [prowlarr-14.3.0](https://github.com/truecharts/charts/compare/prowlarr-14.2.7...prowlarr-14.3.0) (2024-01-29) - -### Chore - - - -- update container image ghcr.io/onedr0p/prowlarr-develop to v1.13.0.4217[@bbc16bd](https://github.com/bbc16bd) by renovate ([#17694](https://github.com/truecharts/charts/issues/17694)) - - -## [prowlarr-14.2.7](https://github.com/truecharts/charts/compare/prowlarr-14.2.6...prowlarr-14.2.7) (2024-01-26) - -### Chore - - - -- update container image common to v17.2.29[@d7c41a3](https://github.com/d7c41a3) by renovate ([#17545](https://github.com/truecharts/charts/issues/17545)) - - -## [prowlarr-14.2.6](https://github.com/truecharts/charts/compare/prowlarr-14.2.5...prowlarr-14.2.6) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.28[@918b4c5](https://github.com/918b4c5) by renovate ([#17478](https://github.com/truecharts/charts/issues/17478)) - - -## [prowlarr-14.2.5](https://github.com/truecharts/charts/compare/prowlarr-14.2.4...prowlarr-14.2.5) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.26[@24c98f7](https://github.com/24c98f7) by renovate ([#17409](https://github.com/truecharts/charts/issues/17409)) - - -## [prowlarr-14.2.4](https://github.com/truecharts/charts/compare/prowlarr-14.2.3...prowlarr-14.2.4) (2024-01-21) - -### Chore - - - -- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) diff --git a/stable/prowlarr/14.4.0/Chart.yaml b/stable/prowlarr/14.4.0/Chart.yaml deleted file mode 100644 index b7c313d683..0000000000 --- a/stable/prowlarr/14.4.0/Chart.yaml +++ /dev/null @@ -1,39 +0,0 @@ -annotations: - max_scale_version: 24.04.0 - min_scale_version: 23.10.0 - truecharts.org/category: media - truecharts.org/max_helm_version: "3.14" - truecharts.org/min_helm_version: "3.12" - truecharts.org/train: stable -apiVersion: v2 -appVersion: 1.13.3.4273 -dependencies: - - name: common - version: 17.5.1 - 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.png -keywords: - - prowlarr - - torrent - - usenet -kubeVersion: ">=1.24.0-0" -maintainers: - - name: TrueCharts - email: info@truecharts.org - url: https://truecharts.org -name: prowlarr -sources: - - https://github.com/Prowlarr/Prowlarr - - https://github.com/k8s-at-home/container-images - - https://github.com/truecharts/charts/tree/master/charts/stable/prowlarr - - https://ghcr.io/onedr0p/prowlarr-develop - - https://ghcr.io/onedr0p/exportarr -type: application -version: 14.4.0 diff --git a/stable/prowlarr/14.4.0/README.md b/stable/prowlarr/14.4.0/README.md deleted file mode 100644 index fbadb86cd5..0000000000 --- a/stable/prowlarr/14.4.0/README.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: README ---- - -## General Info - -TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. -However only installations using the TrueNAS SCALE Apps system are supported. - -For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/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)** - -## Support - -- Please check our [quick-start guides for TrueNAS SCALE](https://truecharts.org/manual/SCALE/guides/scale-intro). -- See the [Website](https://truecharts.org) -- Check our [Discord](https://discord.gg/tVsPTHWTtr) -- Open a [issue](https://github.com/truecharts/charts/issues/new/choose) - ---- - -## Sponsor TrueCharts - -TrueCharts can only exist due to the incredible effort of our staff. -Please consider making a [donation](https://truecharts.org/sponsor) or contributing back to the project any way you can! - -_All Rights Reserved - The TrueCharts Project_ diff --git a/stable/prowlarr/14.4.0/app-readme.md b/stable/prowlarr/14.4.0/app-readme.md deleted file mode 100644 index 4e201b3174..0000000000 --- a/stable/prowlarr/14.4.0/app-readme.md +++ /dev/null @@ -1,8 +0,0 @@ -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/14.4.0/charts/common-17.4.2.tgz b/stable/prowlarr/14.4.0/charts/common-17.4.2.tgz deleted file mode 100644 index 31f3a104561f859f297067776ab86a1503525be4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100097 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 l8bLay74+E3;;+DksJU3 diff --git a/stable/prowlarr/14.4.0/ix_values.yaml b/stable/prowlarr/14.4.0/ix_values.yaml deleted file mode 100644 index c64fc12bbd..0000000000 --- a/stable/prowlarr/14.4.0/ix_values.yaml +++ /dev/null @@ -1,107 +0,0 @@ -image: - repository: ghcr.io/onedr0p/prowlarr-develop - tag: 1.13.3.4273@sha256:ca264d9629d35fef799c403fa1fe0625de6dabf6aec08d43ca981867ca8810c2 - pullPolicy: IfNotPresent -exportarrImage: - repository: ghcr.io/onedr0p/exportarr - pullPolicy: IfNotPresent - tag: v1.6.1@sha256:60cf3d44aa0b7dea2a65160b2e2e373c1ae38cd6b12a45fe81b8afa45ac31c22 -securityContext: - container: - readOnlyRootFilesystem: false -service: - main: - ports: - main: - port: 9696 - metrics: - enabled: true - type: ClusterIP - targetSelector: exportarr - ports: - metrics: - enabled: true - port: 9697 - targetSelector: exportarr -workload: - main: - podSpec: - containers: - main: - probes: - liveness: - path: /ping - readiness: - path: /ping - startup: - type: tcp - env: - PROWLARR__PORT: "{{ .Values.service.main.ports.main.port }}" - PROWLARR__AUTHENTICATION_METHOD: "" - exportarr: - enabled: true - type: Deployment - strategy: RollingUpdate - replicas: 1 - podSpec: - containers: - exportarr: - primary: true - enabled: true - 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: - exportarr: - mountPath: /config - readOnly: true -metrics: - main: - enabled: true - type: "servicemonitor" - endpoints: - - port: metrics - path: /metrics - targetSelector: metrics - prometheusRule: - enabled: false -portal: - open: - enabled: true -updated: true diff --git a/stable/prowlarr/14.4.0/questions.yaml b/stable/prowlarr/14.4.0/questions.yaml deleted file mode 100755 index 31c89a77aa..0000000000 --- a/stable/prowlarr/14.4.0/questions.yaml +++ /dev/null @@ -1,2927 +0,0 @@ -groups: - - name: Container Image - description: Image to be used for container - - name: General Settings - description: General Deployment Settings - - name: Workload Settings - description: Workload Settings - - name: App Configuration - description: App Specific Config Options - - name: Networking and Services - description: Configure Network and Services for Container - - name: Storage and Persistence - description: Persist and Share Data that is Separate from the Container - - name: Ingress - description: Ingress Configuration - - name: Security and Permissions - description: Configure Security Context and Permissions - - name: Resources and Devices - description: "Specify Resources/Devices to be Allocated to Workload" - - name: Middlewares - description: Traefik Middlewares - - name: Metrics - description: Metrics - - name: Addons - description: Addon Configuration - - name: Backup Configuration - description: Configure Velero Backup Schedule - - name: Advanced - description: Advanced Configuration - - name: Postgresql - description: Postgresql - - name: Documentation - description: Documentation - -portals: - open: - protocols: - - "$kubernetes-resource_configmap_tcportal-open_protocol" - host: - - "$kubernetes-resource_configmap_tcportal-open_host" - ports: - - "$kubernetes-resource_configmap_tcportal-open_port" - -questions: - - variable: global - group: General Settings - label: "Global Settings" - schema: - additional_attrs: true - type: dict - attrs: - - variable: stopAll - label: Stop All - description: "Stops All Running pods and hibernates cnpg" - schema: - type: boolean - default: false - - - variable: workload - group: "Workload Settings" - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: main - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: type - label: Type (Advanced) - schema: - type: string - default: Deployment - enum: - - value: Deployment - description: Deployment - - value: DaemonSet - description: DaemonSet - - - variable: replicas - label: Replicas (Advanced) - description: Set the number of Replicas - schema: - type: int - show_if: [["type", "!=", "DaemonSet"]] - default: 1 - - - variable: podSpec - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: containers - label: Containers - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: Main Container - schema: - additional_attrs: true - type: dict - attrs: - - - variable: 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 Settings" - schema: - type: string - default: "Etc/UTC" - $ref: - - "definitions/timezone" - - - variable: podOptions - group: "General Settings" - label: "Global Pod Options (Advanced)" - schema: - additional_attrs: true - type: dict - attrs: - - variable: expertPodOpts - label: "Expert - Pod Options" - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hostNetwork - label: "Host Networking" - schema: - type: boolean - default: false - - variable: dnsConfig - label: "DNS Configuration" - schema: - type: dict - additional_attrs: true - attrs: - - variable: options - label: "Options" - schema: - type: list - default: [{"name": "ndots", "value": "1"}] - items: - - variable: optionsEntry - label: "Option Entry" - schema: - type: dict - additional_attrs: true - attrs: - - variable: name - label: "Name" - schema: - type: string - required: true - - variable: value - label: "Value" - schema: - type: string - - variable: nameservers - label: "Nameservers" - schema: - type: list - default: [] - items: - - variable: nsEntry - label: "Nameserver Entry" - schema: - type: string - required: true - - variable: searches - label: "Searches" - schema: - type: list - default: [] - items: - - variable: searchEntry - label: "Search Entry" - schema: - type: string - required: true - - - variable: imagePullSecretList - group: "General Settings" - label: "Image Pull Secrets" - schema: - type: list - default: [] - items: - - variable: pullsecretentry - label: "Pull Secret" - schema: - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: true - - variable: data - label: Data - schema: - type: dict - additional_attrs: true - attrs: - - variable: registry - label: "Registry" - schema: - type: string - required: true - default: "https://index.docker.io/v1/" - - variable: username - label: "Username" - schema: - type: string - required: true - default: "" - - variable: password - label: "Password" - schema: - type: string - required: true - private: true - default: "" - - variable: email - label: "Email" - schema: - type: string - required: true - default: "" - - - variable: service - group: Networking and Services - label: Configure Service(s) - schema: - additional_attrs: true - type: dict - attrs: - - - variable: 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: serviceexpert - group: Networking and Services - label: Show Expert Config - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - - variable: scaleExternalInterface - description: Add External Interfaces - label: Add external Interfaces - group: Networking - schema: - type: list - items: - - variable: interfaceConfiguration - description: Interface Configuration - label: Interface Configuration - schema: - additional_attrs: true - type: dict - $ref: - - "normalize/interfaceConfiguration" - attrs: - - variable: hostInterface - description: Please Specify Host Interface - label: Host Interface - schema: - type: string - required: true - $ref: - - "definitions/interface" - - variable: ipam - description: Define how IP Address will be managed - label: IP Address Management - schema: - additional_attrs: true - type: dict - required: true - attrs: - - variable: type - description: Specify type for IPAM - label: IPAM Type - schema: - type: string - required: true - enum: - - value: dhcp - description: Use DHCP - - value: static - description: Use Static IP - - variable: staticIPConfigurations - label: Static IP Addresses - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticIP - label: Static IP - schema: - type: ipaddr - cidr: true - - variable: staticRoutes - label: Static Routes - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticRouteConfiguration - label: Static Route Configuration - schema: - additional_attrs: true - type: dict - attrs: - - variable: destination - label: Destination - schema: - type: ipaddr - cidr: true - required: true - - variable: gateway - label: Gateway - schema: - type: ipaddr - cidr: false - required: true - - - variable: serviceList - label: Add Manual Custom Services - group: Networking and Services - schema: - type: list - default: [] - items: - - variable: serviceListEntry - label: Custom Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the service - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: LoadBalancer - description: LoadBalancer (Expose Ports) - - value: ClusterIP - description: ClusterIP (Do Not Expose Ports) - - value: Simple - description: Deprecated CHANGE THIS - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: advancedsvcset - label: Show Advanced Service Settings - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: externalIPs - label: "External IP's" - description: "External IP's" - schema: - type: list - default: [] - items: - - variable: externalIP - label: External IP - schema: - type: string - - variable: ipFamilyPolicy - label: IP Family Policy - description: Specify the IP Policy - schema: - type: string - default: SingleStack - enum: - - value: SingleStack - description: SingleStack - - value: PreferDualStack - description: PreferDualStack - - value: RequireDualStack - description: RequireDualStack - - variable: ipFamilies - label: IP Families - description: (Advanced) The IP Families that should be used - schema: - type: list - default: [] - items: - - variable: ipFamily - label: IP Family - schema: - type: string - - variable: portsList - label: Additional Service Ports - schema: - type: list - default: [] - items: - - variable: portsListEntry - label: Custom ports - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Port - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Port Name - schema: - type: string - default: "" - - variable: protocol - label: Port Type - schema: - type: string - default: tcp - enum: - - value: http - description: HTTP - - value: https - description: HTTPS - - value: tcp - description: TCP - - value: udp - description: UDP - - variable: targetPort - label: Target Port - description: This port exposes the container port on the service - schema: - type: int - required: true - - variable: port - label: Container Port - schema: - type: int - required: true - - - variable: persistence - label: Integrated Persistent Storage - description: Integrated Persistent Storage - group: Storage and 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: 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: Storage and Persistence - schema: - type: list - default: [] - items: - - variable: persistenceListEntry - label: Custom Storage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the storage - schema: - type: boolean - default: true - hidden: true - - variable: type - label: Type of Storage - description: Sets the persistence type, Anything other than PVC could break rollback! - schema: - type: string - default: hostPath - enum: - - value: pvc - description: PVC - - value: hostPath - description: Host Path - - value: emptyDir - description: emptyDir - - value: nfs - description: NFS Share - - variable: server - label: NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: path - label: Path on NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: iscsi - label: iSCSI Options - schema: - show_if: [["type", "=", "iscsi"]] - type: dict - additional_attrs: true - attrs: - - variable: targetPortal - label: targetPortal - schema: - type: string - required: true - default: "" - - variable: iqn - label: iqn - schema: - type: string - required: true - default: "" - - variable: lun - label: lun - schema: - type: int - default: 0 - - variable: authSession - label: authSession - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: authDiscovery - label: authDiscovery - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: autoPermissions - label: Automatic Permissions Configuration - description: Automatically set permissions - schema: - show_if: [["type", "!=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: chown - label: Run CHOWN - description: | - It will run CHOWN on the path with the given fsGroup - schema: - type: boolean - default: false - - variable: chmod - label: Run CHMOD - description: | - It will run CHMOD on the path with the given value
      - Format should be 3 digits, e.g. 770 - schema: - type: string - valid_chars: '[0-9]{3}' - default: "" - - variable: recursive - label: Recursive - description: | - It will run CHOWN and CHMOD recursively - schema: - type: boolean - default: false - - variable: readOnly - label: Read Only - schema: - type: boolean - default: false - - variable: hostPath - label: Host Path - description: Path inside the container the storage is mounted - schema: - show_if: [["type", "=", "hostPath"]] - type: hostpath - - variable: mountPath - label: Mount Path - description: Path inside the container the storage is mounted - schema: - type: string - default: "" - required: true - valid_chars: '^\/([a-zA-Z0-9._-]+(\s?[a-zA-Z0-9._-]+|\/?))+$' - - variable: medium - label: EmptyDir Medium - schema: - show_if: [["type", "=", "emptyDir"]] - type: string - default: "" - enum: - - value: "" - description: Default - - value: Memory - description: Memory - - variable: size - label: Size Quotum of Storage - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: 256Gi - - variable: storageClass - label: 'storageClass (Advanced)' - description: 'sets the storageClass to something other than iX default. Only for advanced usecases!' - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: "" - - variable: static - label: 'Static Fixed PVC Bindings (Experimental)' - description: Link a PVC to a specific storage location - schema: - show_if: [["type", "=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: mode - label: mode - description: | - disabled: use normal dynamic PVCs - smb: connect to an SMB share - nfs: connect to an NFS share - schema: - type: string - default: "disabled" - enum: - - value: "disabled" - description: disabled - - value: smb - description: smb - - value: nfs - description: nfs - - variable: server - label: Server - description: server to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "myserver" - - variable: share - label: Share - description: share to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "/myshare" - - variable: user - label: User - description: connecting user - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "myuser" - - variable: domain - label: Domain - description: user domain - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: password - label: Password - description: connecting password - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: volumeSnapshots - label: 'Volume Snapshots (Experimental)' - description: Add an entry to the list to force creation of a volumeSnapshot of this PVC - schema: - show_if: [["type", "=", "pvc"]] - type: list - default: [] - items: - - variable: volumeSnapshotEntry - label: Custom volumeSnapshot - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - description: 'WARNING: renaming this, means deletion of the snapshot with the old name!' - schema: - type: string - default: "mysnapshot" - required: true - - variable: volumeSnapshotClassName - label: 'volumeSnapshot Class Name (Advanced)' - description: For use with PVCs using a non-default storageClass - schema: - type: string - default: "" - - - variable: ingress - label: "" - group: Ingress - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: "Main Ingress" - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name (Optional) - description: Defaults to chart name - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description (Optional) - description: Defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: icon - label: Icon (Optional) - description: Defaults to chart icon - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - variable: widget - label: Widget Settings - schema: - type: dict - additional_attrs: true - show_if: [["enabled", "=", true]] - attrs: - - variable: enabled - label: Enable Widget - description: When disabled all widget annotations are skipped. - schema: - type: boolean - default: true - - variable: custom - label: Options - schema: - type: dict - additional_attrs: true - attrs: - - variable: key - label: API-key (key) - schema: - type: string - default: "" - - variable: customkv - label: Custom Options - schema: - type: list - default: [] - items: - - variable: option - label: Option - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - default: "" - required: true - - variable: value - label: Value - schema: - type: string - default: "" - required: true - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - - variable: ingressList - label: Add Manual Custom Ingresses - group: Ingress - schema: - type: list - default: [] - items: - - variable: ingressListEntry - label: Custom Ingress - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: ingressClassName - label: IngressClass Name - schema: - type: string - default: "" - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: overrideService - label: Linked Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Service Name - schema: - type: string - default: "" - - variable: port - label: Service Port - schema: - type: int - - variable: tls - label: TLS-Settings - schema: - type: list - default: [] - show_if: [["certificateIssuer", "=", ""]] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your Cert-Manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: Use Custom Secret (Advanced) - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: "Allow Cross Origin Requests" - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: namespace - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description - description: defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - - variable: securityContext - group: Security and Permissions - label: Security Context - schema: - additional_attrs: true - type: dict - attrs: - - variable: container - label: Container - schema: - additional_attrs: true - type: dict - attrs: - # Settings from questions.yaml get appended here on a per-app basis - - - variable: runAsUser - label: "runAsUser" - description: "The UserID of the user running the application" - schema: - type: int - default: 568 - - variable: runAsGroup - label: "runAsGroup" - description: "The groupID 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 and Devices - label: "Resource Limits" - schema: - additional_attrs: true - type: dict - attrs: - - variable: limits - label: Advanced Limit Resource Consumption - schema: - additional_attrs: true - type: dict - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 4000m - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: RAM - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 8Gi - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: 'intel.com/i915' - label: Add Intel i915 GPUs - schema: - type: int - default: 0 - - variable: 'nvidia.com/gpu' - label: Add NVIDIA GPUs (Experimental) - schema: - type: int - default: 0 - - variable: 'amd.com/gpu' - label: Add AMD GPUs - schema: - type: int - default: 0 - - variable: requests - label: "Minimum Resources Required (request)" - schema: - additional_attrs: true - type: dict - hidden: true - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 10m - hidden: true - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: "RAM" - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 50Mi - hidden: true - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: deviceList - label: Mount USB Devices - group: Resources and Devices - schema: - type: list - default: [] - items: - - variable: deviceListEntry - label: Device - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Storage - schema: - type: boolean - default: true - - variable: type - label: (Advanced) Type of Storage - description: Sets the persistence type - schema: - type: string - default: device - hidden: true - - variable: readOnly - label: readOnly - schema: - type: boolean - default: false - - variable: hostPath - label: Host Device Path - description: Path to the device on the host system - schema: - type: path - - variable: mountPath - label: Container Device Path - description: Path inside the container the device is mounted - schema: - type: string - default: "/dev/ttyACM0" - - variable: scaleGPU - label: GPU Configuration - group: Resources and Devices - schema: - type: list - default: [] - items: - - variable: scaleGPUEntry - label: GPU - schema: - additional_attrs: true - type: dict - attrs: - # Specify GPU configuration - - variable: gpu - label: Select GPU - schema: - additional_attrs: true - type: dict - $ref: - - "definitions/gpuConfiguration" - attrs: [] - - variable: workaround - label: "Workaround" - schema: - type: string - default: workaround - hidden: true - - - variable: metrics - group: Metrics - label: Prometheus Metrics - schema: - additional_attrs: true - type: dict - attrs: - - variable: main - label: Main Metrics - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - description: Enable Prometheus Metrics - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - - variable: prometheusRule - label: PrometheusRule - description: Enable and configure Prometheus Rules for the App. - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - description: Enable Prometheus Metrics - schema: - type: boolean - default: false - # TODO: Rule List section - -# - variable: horizontalPodAutoscaler -# group: Advanced -# label: (Advanced) Horizontal Pod Autoscaler -# schema: -# type: list -# default: [] -# items: -# - variable: hpaEntry -# label: HPA Entry -# schema: -# additional_attrs: true -# type: dict -# attrs: -# - variable: name -# label: Name -# schema: -# type: string -# required: true -# default: "" -# - variable: enabled -# label: Enabled -# schema: -# type: boolean -# default: false -# show_subquestions_if: true -# subquestions: -# - variable: target -# label: Target -# description: Deployment name, Defaults to Main Deployment -# schema: -# type: string -# default: "" -# - variable: minReplicas -# label: Minimum Replicas -# schema: -# type: int -# default: 1 -# - variable: maxReplicas -# label: Maximum Replicas -# schema: -# type: int -# default: 5 -# - variable: targetCPUUtilizationPercentage -# label: Target CPU Utilization Percentage -# schema: -# type: int -# default: 80 -# - variable: targetMemoryUtilizationPercentage -# label: Target Memory Utilization Percentage -# schema: -# type: int -# default: 80 - - variable: networkPolicy - group: Advanced - label: (Advanced) Network Policy - schema: - type: list - default: [] - items: - - variable: netPolicyEntry - label: Network Policy Entry - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - default: "" - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: policyType - label: Policy Type - schema: - type: string - default: "" - enum: - - value: "" - description: Default - - value: ingress - description: Ingress - - value: egress - description: Egress - - value: ingress-egress - description: Ingress and Egress - - variable: egress - label: Egress - schema: - type: list - default: [] - items: - - variable: egressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: to - label: To - schema: - type: list - default: [] - items: - - variable: toEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - variable: ingress - label: Ingress - schema: - type: list - default: [] - items: - - variable: ingressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: from - label: From - schema: - type: list - default: [] - items: - - variable: fromEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - - variable: addons - group: Addons - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: codeserver - label: Codeserver - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: service - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: NodePort - description: Deprecated CHANGE THIS - - value: ClusterIP - description: ClusterIP - - value: LoadBalancer - description: LoadBalancer - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: ports - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: codeserver - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - default: 36107 - - variable: ingress - label: "Ingress" - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - variable: scaleCert - label: 'Use TrueNAS SCALE Certificate (Deprecated)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: int - $ref: - - "definitions/certificate" - - variable: envList - label: Codeserver Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: netshoot - label: Netshoot - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: envList - label: Netshoot Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: vpn - label: VPN - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Type - schema: - type: string - default: disabled - enum: - - value: disabled - description: disabled - - value: gluetun - description: Gluetun - - value: tailscale - description: Tailscale - - value: openvpn - description: OpenVPN (Deprecated) - - value: wireguard - description: Wireguard (Deprecated) - - variable: openvpn - label: OpenVPN Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "openvpn"]] - attrs: - - variable: username - label: Authentication Username (Optional) - description: Authentication Username, Optional - schema: - type: string - default: "" - - variable: password - label: Authentication Password - description: Authentication Credentials - schema: - type: string - show_if: [["username", "!=", ""]] - default: "" - required: true - - variable: tailscale - label: Tailscale Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "tailscale"]] - attrs: - - variable: authkey - label: Authentication Key - description: Provide an auth key to automatically authenticate the node as your user account. - schema: - type: string - private: true - default: "" - - variable: auth_once - label: Auth Once - description: Only attempt to log in if not already logged in. - schema: - type: boolean - default: true - - variable: accept_dns - label: Accept DNS - description: Accept DNS configuration from the admin console. - schema: - type: boolean - default: false - - variable: userspace - label: Userspace - description: Userspace Networking mode allows running Tailscale where you do not have access to create a VPN tunnel device. - schema: - type: boolean - default: false - - variable: routes - label: Routes - description: Expose physical subnet routes to your entire Tailscale network. - schema: - type: string - default: "" - - variable: dest_ip - label: Destination IP - description: Tells the DNAT mechanism which Destination IP to set in the IP header, and where to send packets that are matched. - schema: - type: string - default: "" - - variable: sock5_server - label: Sock5 Server - description: The address on which to listen for SOCKS5 proxying into the tailscale net. - schema: - type: string - default: "" - - variable: outbound_http_proxy_listen - label: Outbound HTTP Proxy Listen - description: The address on which to listen for HTTP proxying into the tailscale net. - schema: - type: string - default: "" - - variable: extra_args - label: Extra Args - description: Extra Args - schema: - type: string - default: "" - - variable: daemon_extra_args - label: Tailscale Daemon Extra Args - description: Tailscale Daemon Extra Args - schema: - type: string - default: "" - - variable: killSwitch - label: Enable Killswitch - schema: - type: boolean - show_if: [["type", "!=", "disabled"]] - default: true - - variable: excludedNetworks_IPv4 - label: Killswitch Excluded IPv4 networks - description: List of Killswitch Excluded IPv4 Addresses - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv4 - label: IPv4 Network - schema: - type: string - required: true - - variable: excludedNetworks_IPv6 - label: Killswitch Excluded IPv6 networks - description: "List of Killswitch Excluded IPv6 Addresses" - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv6 - label: IPv6 Network - schema: - type: string - required: true - - variable: configFile - label: VPN Config File Location - schema: - type: string - show_if: [["type", "!=", "disabled"]] - default: "" - - - variable: envList - label: VPN Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - max_length: 10240 - - - variable: docs - group: Documentation - label: Please read the documentation at https://truecharts.org - description: Please read the documentation at -
      https://truecharts.org - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDocs - label: I have checked the documentation - schema: - type: boolean - default: true - - variable: donateNag - group: Documentation - label: Please consider supporting TrueCharts, see https://truecharts.org/sponsor - description: Please consider supporting TrueCharts, see -
      https://truecharts.org/sponsor - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDonate - label: I have considered donating - schema: - type: boolean - default: true - hidden: true - diff --git a/stable/prowlarr/14.4.0/templates/NOTES.txt b/stable/prowlarr/14.4.0/templates/NOTES.txt deleted file mode 100644 index efcb74cb77..0000000000 --- a/stable/prowlarr/14.4.0/templates/NOTES.txt +++ /dev/null @@ -1 +0,0 @@ -{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/prowlarr/14.4.0/templates/common.yaml b/stable/prowlarr/14.4.0/templates/common.yaml deleted file mode 100644 index 3c93f57861..0000000000 --- a/stable/prowlarr/14.4.0/templates/common.yaml +++ /dev/null @@ -1,11 +0,0 @@ -{{/* Make sure all variables are set properly */}} -{{- include "tc.v1.common.loader.init" . -}} - -{{/* Disable [exportarr] if requested */}} -{{- if not .Values.metrics.main.enabled -}} - {{- $_ := set .Values.workload.exportarr "enabled" false -}} - {{- $_ := set .Values.service.metrics "enabled" false -}} -{{- end -}} - -{{/* Render the templates */}} -{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/prowlarr/14.4.0/values.yaml b/stable/prowlarr/14.4.0/values.yaml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/stable/prowlarr/14.5.0/.helmignore b/stable/prowlarr/14.5.0/.helmignore deleted file mode 100644 index 77ca5567b2..0000000000 --- a/stable/prowlarr/14.5.0/.helmignore +++ /dev/null @@ -1,30 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ -# OWNERS file for Kubernetes -OWNERS -# helm-docs templates -*.gotmpl -# docs folder -/docs -# icon -icon.png diff --git a/stable/prowlarr/14.5.0/CHANGELOG.md b/stable/prowlarr/14.5.0/CHANGELOG.md deleted file mode 100644 index d541f29034..0000000000 --- a/stable/prowlarr/14.5.0/CHANGELOG.md +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: Changelog ---- - - -*for the complete changelog, please refer to the website* - -**Important:** - - - - -## [prowlarr-14.3.5](https://github.com/truecharts/charts/compare/prowlarr-14.3.4...prowlarr-14.3.5) (2024-02-12) - -### Chore - - - -- update container image ghcr.io/onedr0p/prowlarr-develop to v1.13.3.4273[@ca264d9](https://github.com/ca264d9) by renovate ([#18137](https://github.com/truecharts/charts/issues/18137)) - - -## [prowlarr-14.3.4](https://github.com/truecharts/charts/compare/prowlarr-14.3.3...prowlarr-14.3.4) (2024-02-05) - -### Chore - - - -- update container image ghcr.io/onedr0p/prowlarr-develop to 1.13.2.4251[@23d16bf](https://github.com/23d16bf) by renovate ([#17956](https://github.com/truecharts/charts/issues/17956)) - - -## [prowlarr-14.3.3](https://github.com/truecharts/charts/compare/prowlarr-14.3.2...prowlarr-14.3.3) (2024-02-05) - -### Chore - - - -- update container image ghcr.io/onedr0p/prowlarr-develop to v1.13.2.4251[@1ada8d9](https://github.com/1ada8d9) by renovate ([#17915](https://github.com/truecharts/charts/issues/17915)) - - -## [prowlarr-14.3.2](https://github.com/truecharts/charts/compare/prowlarr-14.3.1...prowlarr-14.3.2) (2024-02-03) - -### Chore - - - -- update container image common to v17.2.30[@19ad5ec](https://github.com/19ad5ec) by renovate ([#17804](https://github.com/truecharts/charts/issues/17804)) - - -## [prowlarr-14.3.1](https://github.com/truecharts/charts/compare/prowlarr-14.3.0...prowlarr-14.3.1) (2024-01-29) - -### Chore - - - -- update container image ghcr.io/onedr0p/exportarr to v1.6.1[@60cf3d4](https://github.com/60cf3d4) by renovate ([#17725](https://github.com/truecharts/charts/issues/17725)) - - -## [prowlarr-14.3.0](https://github.com/truecharts/charts/compare/prowlarr-14.2.7...prowlarr-14.3.0) (2024-01-29) - -### Chore - - - -- update container image ghcr.io/onedr0p/prowlarr-develop to v1.13.0.4217[@bbc16bd](https://github.com/bbc16bd) by renovate ([#17694](https://github.com/truecharts/charts/issues/17694)) - - -## [prowlarr-14.2.7](https://github.com/truecharts/charts/compare/prowlarr-14.2.6...prowlarr-14.2.7) (2024-01-26) - -### Chore - - - -- update container image common to v17.2.29[@d7c41a3](https://github.com/d7c41a3) by renovate ([#17545](https://github.com/truecharts/charts/issues/17545)) - - -## [prowlarr-14.2.6](https://github.com/truecharts/charts/compare/prowlarr-14.2.5...prowlarr-14.2.6) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.28[@918b4c5](https://github.com/918b4c5) by renovate ([#17478](https://github.com/truecharts/charts/issues/17478)) - - -## [prowlarr-14.2.5](https://github.com/truecharts/charts/compare/prowlarr-14.2.4...prowlarr-14.2.5) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.26[@24c98f7](https://github.com/24c98f7) by renovate ([#17409](https://github.com/truecharts/charts/issues/17409)) - - -## [prowlarr-14.2.4](https://github.com/truecharts/charts/compare/prowlarr-14.2.3...prowlarr-14.2.4) (2024-01-21) - -### Chore - - - -- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) \ No newline at end of file diff --git a/stable/prowlarr/14.5.0/Chart.yaml b/stable/prowlarr/14.5.0/Chart.yaml deleted file mode 100644 index cc407edd58..0000000000 --- a/stable/prowlarr/14.5.0/Chart.yaml +++ /dev/null @@ -1,39 +0,0 @@ -annotations: - max_scale_version: 24.04.0 - min_scale_version: 23.10.0 - truecharts.org/category: media - truecharts.org/max_helm_version: "3.14" - truecharts.org/min_helm_version: "3.12" - truecharts.org/train: stable -apiVersion: v2 -appVersion: 1.13.3.4273 -dependencies: - - name: common - version: 17.5.1 - 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.png -keywords: - - prowlarr - - torrent - - usenet -kubeVersion: ">=1.24.0-0" -maintainers: - - name: TrueCharts - email: info@truecharts.org - url: https://truecharts.org -name: prowlarr -sources: - - https://github.com/Prowlarr/Prowlarr - - https://github.com/k8s-at-home/container-images - - https://github.com/truecharts/charts/tree/master/charts/stable/prowlarr - - https://ghcr.io/onedr0p/exportarr - - https://ghcr.io/onedr0p/prowlarr-develop -type: application -version: 14.5.0 diff --git a/stable/prowlarr/14.5.0/README.md b/stable/prowlarr/14.5.0/README.md deleted file mode 100644 index fbadb86cd5..0000000000 --- a/stable/prowlarr/14.5.0/README.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: README ---- - -## General Info - -TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. -However only installations using the TrueNAS SCALE Apps system are supported. - -For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/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)** - -## Support - -- Please check our [quick-start guides for TrueNAS SCALE](https://truecharts.org/manual/SCALE/guides/scale-intro). -- See the [Website](https://truecharts.org) -- Check our [Discord](https://discord.gg/tVsPTHWTtr) -- Open a [issue](https://github.com/truecharts/charts/issues/new/choose) - ---- - -## Sponsor TrueCharts - -TrueCharts can only exist due to the incredible effort of our staff. -Please consider making a [donation](https://truecharts.org/sponsor) or contributing back to the project any way you can! - -_All Rights Reserved - The TrueCharts Project_ diff --git a/stable/prowlarr/14.5.0/app-readme.md b/stable/prowlarr/14.5.0/app-readme.md deleted file mode 100644 index 4e201b3174..0000000000 --- a/stable/prowlarr/14.5.0/app-readme.md +++ /dev/null @@ -1,8 +0,0 @@ -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/14.5.0/charts/common-17.5.0.tgz b/stable/prowlarr/14.5.0/charts/common-17.5.0.tgz deleted file mode 100644 index 3a5534883aaac1a331bf10ad166cff7fe5d2dd75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100452 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 z 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 Wm9Bh-<^K-=0RR7ge;?HVjtl_2wPFzf diff --git a/stable/prowlarr/14.5.0/ix_values.yaml b/stable/prowlarr/14.5.0/ix_values.yaml deleted file mode 100644 index c64fc12bbd..0000000000 --- a/stable/prowlarr/14.5.0/ix_values.yaml +++ /dev/null @@ -1,107 +0,0 @@ -image: - repository: ghcr.io/onedr0p/prowlarr-develop - tag: 1.13.3.4273@sha256:ca264d9629d35fef799c403fa1fe0625de6dabf6aec08d43ca981867ca8810c2 - pullPolicy: IfNotPresent -exportarrImage: - repository: ghcr.io/onedr0p/exportarr - pullPolicy: IfNotPresent - tag: v1.6.1@sha256:60cf3d44aa0b7dea2a65160b2e2e373c1ae38cd6b12a45fe81b8afa45ac31c22 -securityContext: - container: - readOnlyRootFilesystem: false -service: - main: - ports: - main: - port: 9696 - metrics: - enabled: true - type: ClusterIP - targetSelector: exportarr - ports: - metrics: - enabled: true - port: 9697 - targetSelector: exportarr -workload: - main: - podSpec: - containers: - main: - probes: - liveness: - path: /ping - readiness: - path: /ping - startup: - type: tcp - env: - PROWLARR__PORT: "{{ .Values.service.main.ports.main.port }}" - PROWLARR__AUTHENTICATION_METHOD: "" - exportarr: - enabled: true - type: Deployment - strategy: RollingUpdate - replicas: 1 - podSpec: - containers: - exportarr: - primary: true - enabled: true - 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: - exportarr: - mountPath: /config - readOnly: true -metrics: - main: - enabled: true - type: "servicemonitor" - endpoints: - - port: metrics - path: /metrics - targetSelector: metrics - prometheusRule: - enabled: false -portal: - open: - enabled: true -updated: true diff --git a/stable/prowlarr/14.5.0/questions.yaml b/stable/prowlarr/14.5.0/questions.yaml deleted file mode 100755 index 31c89a77aa..0000000000 --- a/stable/prowlarr/14.5.0/questions.yaml +++ /dev/null @@ -1,2927 +0,0 @@ -groups: - - name: Container Image - description: Image to be used for container - - name: General Settings - description: General Deployment Settings - - name: Workload Settings - description: Workload Settings - - name: App Configuration - description: App Specific Config Options - - name: Networking and Services - description: Configure Network and Services for Container - - name: Storage and Persistence - description: Persist and Share Data that is Separate from the Container - - name: Ingress - description: Ingress Configuration - - name: Security and Permissions - description: Configure Security Context and Permissions - - name: Resources and Devices - description: "Specify Resources/Devices to be Allocated to Workload" - - name: Middlewares - description: Traefik Middlewares - - name: Metrics - description: Metrics - - name: Addons - description: Addon Configuration - - name: Backup Configuration - description: Configure Velero Backup Schedule - - name: Advanced - description: Advanced Configuration - - name: Postgresql - description: Postgresql - - name: Documentation - description: Documentation - -portals: - open: - protocols: - - "$kubernetes-resource_configmap_tcportal-open_protocol" - host: - - "$kubernetes-resource_configmap_tcportal-open_host" - ports: - - "$kubernetes-resource_configmap_tcportal-open_port" - -questions: - - variable: global - group: General Settings - label: "Global Settings" - schema: - additional_attrs: true - type: dict - attrs: - - variable: stopAll - label: Stop All - description: "Stops All Running pods and hibernates cnpg" - schema: - type: boolean - default: false - - - variable: workload - group: "Workload Settings" - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: main - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: type - label: Type (Advanced) - schema: - type: string - default: Deployment - enum: - - value: Deployment - description: Deployment - - value: DaemonSet - description: DaemonSet - - - variable: replicas - label: Replicas (Advanced) - description: Set the number of Replicas - schema: - type: int - show_if: [["type", "!=", "DaemonSet"]] - default: 1 - - - variable: podSpec - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: containers - label: Containers - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: Main Container - schema: - additional_attrs: true - type: dict - attrs: - - - variable: 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 Settings" - schema: - type: string - default: "Etc/UTC" - $ref: - - "definitions/timezone" - - - variable: podOptions - group: "General Settings" - label: "Global Pod Options (Advanced)" - schema: - additional_attrs: true - type: dict - attrs: - - variable: expertPodOpts - label: "Expert - Pod Options" - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hostNetwork - label: "Host Networking" - schema: - type: boolean - default: false - - variable: dnsConfig - label: "DNS Configuration" - schema: - type: dict - additional_attrs: true - attrs: - - variable: options - label: "Options" - schema: - type: list - default: [{"name": "ndots", "value": "1"}] - items: - - variable: optionsEntry - label: "Option Entry" - schema: - type: dict - additional_attrs: true - attrs: - - variable: name - label: "Name" - schema: - type: string - required: true - - variable: value - label: "Value" - schema: - type: string - - variable: nameservers - label: "Nameservers" - schema: - type: list - default: [] - items: - - variable: nsEntry - label: "Nameserver Entry" - schema: - type: string - required: true - - variable: searches - label: "Searches" - schema: - type: list - default: [] - items: - - variable: searchEntry - label: "Search Entry" - schema: - type: string - required: true - - - variable: imagePullSecretList - group: "General Settings" - label: "Image Pull Secrets" - schema: - type: list - default: [] - items: - - variable: pullsecretentry - label: "Pull Secret" - schema: - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: true - - variable: data - label: Data - schema: - type: dict - additional_attrs: true - attrs: - - variable: registry - label: "Registry" - schema: - type: string - required: true - default: "https://index.docker.io/v1/" - - variable: username - label: "Username" - schema: - type: string - required: true - default: "" - - variable: password - label: "Password" - schema: - type: string - required: true - private: true - default: "" - - variable: email - label: "Email" - schema: - type: string - required: true - default: "" - - - variable: service - group: Networking and Services - label: Configure Service(s) - schema: - additional_attrs: true - type: dict - attrs: - - - variable: 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: serviceexpert - group: Networking and Services - label: Show Expert Config - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - - variable: scaleExternalInterface - description: Add External Interfaces - label: Add external Interfaces - group: Networking - schema: - type: list - items: - - variable: interfaceConfiguration - description: Interface Configuration - label: Interface Configuration - schema: - additional_attrs: true - type: dict - $ref: - - "normalize/interfaceConfiguration" - attrs: - - variable: hostInterface - description: Please Specify Host Interface - label: Host Interface - schema: - type: string - required: true - $ref: - - "definitions/interface" - - variable: ipam - description: Define how IP Address will be managed - label: IP Address Management - schema: - additional_attrs: true - type: dict - required: true - attrs: - - variable: type - description: Specify type for IPAM - label: IPAM Type - schema: - type: string - required: true - enum: - - value: dhcp - description: Use DHCP - - value: static - description: Use Static IP - - variable: staticIPConfigurations - label: Static IP Addresses - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticIP - label: Static IP - schema: - type: ipaddr - cidr: true - - variable: staticRoutes - label: Static Routes - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticRouteConfiguration - label: Static Route Configuration - schema: - additional_attrs: true - type: dict - attrs: - - variable: destination - label: Destination - schema: - type: ipaddr - cidr: true - required: true - - variable: gateway - label: Gateway - schema: - type: ipaddr - cidr: false - required: true - - - variable: serviceList - label: Add Manual Custom Services - group: Networking and Services - schema: - type: list - default: [] - items: - - variable: serviceListEntry - label: Custom Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the service - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: LoadBalancer - description: LoadBalancer (Expose Ports) - - value: ClusterIP - description: ClusterIP (Do Not Expose Ports) - - value: Simple - description: Deprecated CHANGE THIS - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: advancedsvcset - label: Show Advanced Service Settings - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: externalIPs - label: "External IP's" - description: "External IP's" - schema: - type: list - default: [] - items: - - variable: externalIP - label: External IP - schema: - type: string - - variable: ipFamilyPolicy - label: IP Family Policy - description: Specify the IP Policy - schema: - type: string - default: SingleStack - enum: - - value: SingleStack - description: SingleStack - - value: PreferDualStack - description: PreferDualStack - - value: RequireDualStack - description: RequireDualStack - - variable: ipFamilies - label: IP Families - description: (Advanced) The IP Families that should be used - schema: - type: list - default: [] - items: - - variable: ipFamily - label: IP Family - schema: - type: string - - variable: portsList - label: Additional Service Ports - schema: - type: list - default: [] - items: - - variable: portsListEntry - label: Custom ports - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Port - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Port Name - schema: - type: string - default: "" - - variable: protocol - label: Port Type - schema: - type: string - default: tcp - enum: - - value: http - description: HTTP - - value: https - description: HTTPS - - value: tcp - description: TCP - - value: udp - description: UDP - - variable: targetPort - label: Target Port - description: This port exposes the container port on the service - schema: - type: int - required: true - - variable: port - label: Container Port - schema: - type: int - required: true - - - variable: persistence - label: Integrated Persistent Storage - description: Integrated Persistent Storage - group: Storage and 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: 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: Storage and Persistence - schema: - type: list - default: [] - items: - - variable: persistenceListEntry - label: Custom Storage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the storage - schema: - type: boolean - default: true - hidden: true - - variable: type - label: Type of Storage - description: Sets the persistence type, Anything other than PVC could break rollback! - schema: - type: string - default: hostPath - enum: - - value: pvc - description: PVC - - value: hostPath - description: Host Path - - value: emptyDir - description: emptyDir - - value: nfs - description: NFS Share - - variable: server - label: NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: path - label: Path on NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: iscsi - label: iSCSI Options - schema: - show_if: [["type", "=", "iscsi"]] - type: dict - additional_attrs: true - attrs: - - variable: targetPortal - label: targetPortal - schema: - type: string - required: true - default: "" - - variable: iqn - label: iqn - schema: - type: string - required: true - default: "" - - variable: lun - label: lun - schema: - type: int - default: 0 - - variable: authSession - label: authSession - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: authDiscovery - label: authDiscovery - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: autoPermissions - label: Automatic Permissions Configuration - description: Automatically set permissions - schema: - show_if: [["type", "!=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: chown - label: Run CHOWN - description: | - It will run CHOWN on the path with the given fsGroup - schema: - type: boolean - default: false - - variable: chmod - label: Run CHMOD - description: | - It will run CHMOD on the path with the given value
      - Format should be 3 digits, e.g. 770 - schema: - type: string - valid_chars: '[0-9]{3}' - default: "" - - variable: recursive - label: Recursive - description: | - It will run CHOWN and CHMOD recursively - schema: - type: boolean - default: false - - variable: readOnly - label: Read Only - schema: - type: boolean - default: false - - variable: hostPath - label: Host Path - description: Path inside the container the storage is mounted - schema: - show_if: [["type", "=", "hostPath"]] - type: hostpath - - variable: mountPath - label: Mount Path - description: Path inside the container the storage is mounted - schema: - type: string - default: "" - required: true - valid_chars: '^\/([a-zA-Z0-9._-]+(\s?[a-zA-Z0-9._-]+|\/?))+$' - - variable: medium - label: EmptyDir Medium - schema: - show_if: [["type", "=", "emptyDir"]] - type: string - default: "" - enum: - - value: "" - description: Default - - value: Memory - description: Memory - - variable: size - label: Size Quotum of Storage - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: 256Gi - - variable: storageClass - label: 'storageClass (Advanced)' - description: 'sets the storageClass to something other than iX default. Only for advanced usecases!' - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: "" - - variable: static - label: 'Static Fixed PVC Bindings (Experimental)' - description: Link a PVC to a specific storage location - schema: - show_if: [["type", "=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: mode - label: mode - description: | - disabled: use normal dynamic PVCs - smb: connect to an SMB share - nfs: connect to an NFS share - schema: - type: string - default: "disabled" - enum: - - value: "disabled" - description: disabled - - value: smb - description: smb - - value: nfs - description: nfs - - variable: server - label: Server - description: server to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "myserver" - - variable: share - label: Share - description: share to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "/myshare" - - variable: user - label: User - description: connecting user - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "myuser" - - variable: domain - label: Domain - description: user domain - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: password - label: Password - description: connecting password - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: volumeSnapshots - label: 'Volume Snapshots (Experimental)' - description: Add an entry to the list to force creation of a volumeSnapshot of this PVC - schema: - show_if: [["type", "=", "pvc"]] - type: list - default: [] - items: - - variable: volumeSnapshotEntry - label: Custom volumeSnapshot - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - description: 'WARNING: renaming this, means deletion of the snapshot with the old name!' - schema: - type: string - default: "mysnapshot" - required: true - - variable: volumeSnapshotClassName - label: 'volumeSnapshot Class Name (Advanced)' - description: For use with PVCs using a non-default storageClass - schema: - type: string - default: "" - - - variable: ingress - label: "" - group: Ingress - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: "Main Ingress" - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name (Optional) - description: Defaults to chart name - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description (Optional) - description: Defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: icon - label: Icon (Optional) - description: Defaults to chart icon - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - variable: widget - label: Widget Settings - schema: - type: dict - additional_attrs: true - show_if: [["enabled", "=", true]] - attrs: - - variable: enabled - label: Enable Widget - description: When disabled all widget annotations are skipped. - schema: - type: boolean - default: true - - variable: custom - label: Options - schema: - type: dict - additional_attrs: true - attrs: - - variable: key - label: API-key (key) - schema: - type: string - default: "" - - variable: customkv - label: Custom Options - schema: - type: list - default: [] - items: - - variable: option - label: Option - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - default: "" - required: true - - variable: value - label: Value - schema: - type: string - default: "" - required: true - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - - variable: ingressList - label: Add Manual Custom Ingresses - group: Ingress - schema: - type: list - default: [] - items: - - variable: ingressListEntry - label: Custom Ingress - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: ingressClassName - label: IngressClass Name - schema: - type: string - default: "" - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: overrideService - label: Linked Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Service Name - schema: - type: string - default: "" - - variable: port - label: Service Port - schema: - type: int - - variable: tls - label: TLS-Settings - schema: - type: list - default: [] - show_if: [["certificateIssuer", "=", ""]] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your Cert-Manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: Use Custom Secret (Advanced) - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: "Allow Cross Origin Requests" - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: namespace - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description - description: defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - - variable: securityContext - group: Security and Permissions - label: Security Context - schema: - additional_attrs: true - type: dict - attrs: - - variable: container - label: Container - schema: - additional_attrs: true - type: dict - attrs: - # Settings from questions.yaml get appended here on a per-app basis - - - variable: runAsUser - label: "runAsUser" - description: "The UserID of the user running the application" - schema: - type: int - default: 568 - - variable: runAsGroup - label: "runAsGroup" - description: "The groupID 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 and Devices - label: "Resource Limits" - schema: - additional_attrs: true - type: dict - attrs: - - variable: limits - label: Advanced Limit Resource Consumption - schema: - additional_attrs: true - type: dict - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 4000m - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: RAM - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 8Gi - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: 'intel.com/i915' - label: Add Intel i915 GPUs - schema: - type: int - default: 0 - - variable: 'nvidia.com/gpu' - label: Add NVIDIA GPUs (Experimental) - schema: - type: int - default: 0 - - variable: 'amd.com/gpu' - label: Add AMD GPUs - schema: - type: int - default: 0 - - variable: requests - label: "Minimum Resources Required (request)" - schema: - additional_attrs: true - type: dict - hidden: true - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 10m - hidden: true - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: "RAM" - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 50Mi - hidden: true - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: deviceList - label: Mount USB Devices - group: Resources and Devices - schema: - type: list - default: [] - items: - - variable: deviceListEntry - label: Device - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Storage - schema: - type: boolean - default: true - - variable: type - label: (Advanced) Type of Storage - description: Sets the persistence type - schema: - type: string - default: device - hidden: true - - variable: readOnly - label: readOnly - schema: - type: boolean - default: false - - variable: hostPath - label: Host Device Path - description: Path to the device on the host system - schema: - type: path - - variable: mountPath - label: Container Device Path - description: Path inside the container the device is mounted - schema: - type: string - default: "/dev/ttyACM0" - - variable: scaleGPU - label: GPU Configuration - group: Resources and Devices - schema: - type: list - default: [] - items: - - variable: scaleGPUEntry - label: GPU - schema: - additional_attrs: true - type: dict - attrs: - # Specify GPU configuration - - variable: gpu - label: Select GPU - schema: - additional_attrs: true - type: dict - $ref: - - "definitions/gpuConfiguration" - attrs: [] - - variable: workaround - label: "Workaround" - schema: - type: string - default: workaround - hidden: true - - - variable: metrics - group: Metrics - label: Prometheus Metrics - schema: - additional_attrs: true - type: dict - attrs: - - variable: main - label: Main Metrics - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - description: Enable Prometheus Metrics - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - - variable: prometheusRule - label: PrometheusRule - description: Enable and configure Prometheus Rules for the App. - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - description: Enable Prometheus Metrics - schema: - type: boolean - default: false - # TODO: Rule List section - -# - variable: horizontalPodAutoscaler -# group: Advanced -# label: (Advanced) Horizontal Pod Autoscaler -# schema: -# type: list -# default: [] -# items: -# - variable: hpaEntry -# label: HPA Entry -# schema: -# additional_attrs: true -# type: dict -# attrs: -# - variable: name -# label: Name -# schema: -# type: string -# required: true -# default: "" -# - variable: enabled -# label: Enabled -# schema: -# type: boolean -# default: false -# show_subquestions_if: true -# subquestions: -# - variable: target -# label: Target -# description: Deployment name, Defaults to Main Deployment -# schema: -# type: string -# default: "" -# - variable: minReplicas -# label: Minimum Replicas -# schema: -# type: int -# default: 1 -# - variable: maxReplicas -# label: Maximum Replicas -# schema: -# type: int -# default: 5 -# - variable: targetCPUUtilizationPercentage -# label: Target CPU Utilization Percentage -# schema: -# type: int -# default: 80 -# - variable: targetMemoryUtilizationPercentage -# label: Target Memory Utilization Percentage -# schema: -# type: int -# default: 80 - - variable: networkPolicy - group: Advanced - label: (Advanced) Network Policy - schema: - type: list - default: [] - items: - - variable: netPolicyEntry - label: Network Policy Entry - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - default: "" - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: policyType - label: Policy Type - schema: - type: string - default: "" - enum: - - value: "" - description: Default - - value: ingress - description: Ingress - - value: egress - description: Egress - - value: ingress-egress - description: Ingress and Egress - - variable: egress - label: Egress - schema: - type: list - default: [] - items: - - variable: egressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: to - label: To - schema: - type: list - default: [] - items: - - variable: toEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - variable: ingress - label: Ingress - schema: - type: list - default: [] - items: - - variable: ingressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: from - label: From - schema: - type: list - default: [] - items: - - variable: fromEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - - variable: addons - group: Addons - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: codeserver - label: Codeserver - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: service - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: NodePort - description: Deprecated CHANGE THIS - - value: ClusterIP - description: ClusterIP - - value: LoadBalancer - description: LoadBalancer - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: ports - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: codeserver - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - default: 36107 - - variable: ingress - label: "Ingress" - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - variable: scaleCert - label: 'Use TrueNAS SCALE Certificate (Deprecated)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: int - $ref: - - "definitions/certificate" - - variable: envList - label: Codeserver Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: netshoot - label: Netshoot - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: envList - label: Netshoot Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: vpn - label: VPN - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Type - schema: - type: string - default: disabled - enum: - - value: disabled - description: disabled - - value: gluetun - description: Gluetun - - value: tailscale - description: Tailscale - - value: openvpn - description: OpenVPN (Deprecated) - - value: wireguard - description: Wireguard (Deprecated) - - variable: openvpn - label: OpenVPN Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "openvpn"]] - attrs: - - variable: username - label: Authentication Username (Optional) - description: Authentication Username, Optional - schema: - type: string - default: "" - - variable: password - label: Authentication Password - description: Authentication Credentials - schema: - type: string - show_if: [["username", "!=", ""]] - default: "" - required: true - - variable: tailscale - label: Tailscale Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "tailscale"]] - attrs: - - variable: authkey - label: Authentication Key - description: Provide an auth key to automatically authenticate the node as your user account. - schema: - type: string - private: true - default: "" - - variable: auth_once - label: Auth Once - description: Only attempt to log in if not already logged in. - schema: - type: boolean - default: true - - variable: accept_dns - label: Accept DNS - description: Accept DNS configuration from the admin console. - schema: - type: boolean - default: false - - variable: userspace - label: Userspace - description: Userspace Networking mode allows running Tailscale where you do not have access to create a VPN tunnel device. - schema: - type: boolean - default: false - - variable: routes - label: Routes - description: Expose physical subnet routes to your entire Tailscale network. - schema: - type: string - default: "" - - variable: dest_ip - label: Destination IP - description: Tells the DNAT mechanism which Destination IP to set in the IP header, and where to send packets that are matched. - schema: - type: string - default: "" - - variable: sock5_server - label: Sock5 Server - description: The address on which to listen for SOCKS5 proxying into the tailscale net. - schema: - type: string - default: "" - - variable: outbound_http_proxy_listen - label: Outbound HTTP Proxy Listen - description: The address on which to listen for HTTP proxying into the tailscale net. - schema: - type: string - default: "" - - variable: extra_args - label: Extra Args - description: Extra Args - schema: - type: string - default: "" - - variable: daemon_extra_args - label: Tailscale Daemon Extra Args - description: Tailscale Daemon Extra Args - schema: - type: string - default: "" - - variable: killSwitch - label: Enable Killswitch - schema: - type: boolean - show_if: [["type", "!=", "disabled"]] - default: true - - variable: excludedNetworks_IPv4 - label: Killswitch Excluded IPv4 networks - description: List of Killswitch Excluded IPv4 Addresses - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv4 - label: IPv4 Network - schema: - type: string - required: true - - variable: excludedNetworks_IPv6 - label: Killswitch Excluded IPv6 networks - description: "List of Killswitch Excluded IPv6 Addresses" - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv6 - label: IPv6 Network - schema: - type: string - required: true - - variable: configFile - label: VPN Config File Location - schema: - type: string - show_if: [["type", "!=", "disabled"]] - default: "" - - - variable: envList - label: VPN Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - max_length: 10240 - - - variable: docs - group: Documentation - label: Please read the documentation at https://truecharts.org - description: Please read the documentation at -
      https://truecharts.org - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDocs - label: I have checked the documentation - schema: - type: boolean - default: true - - variable: donateNag - group: Documentation - label: Please consider supporting TrueCharts, see https://truecharts.org/sponsor - description: Please consider supporting TrueCharts, see -
      https://truecharts.org/sponsor - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDonate - label: I have considered donating - schema: - type: boolean - default: true - hidden: true - diff --git a/stable/prowlarr/14.5.0/templates/NOTES.txt b/stable/prowlarr/14.5.0/templates/NOTES.txt deleted file mode 100644 index efcb74cb77..0000000000 --- a/stable/prowlarr/14.5.0/templates/NOTES.txt +++ /dev/null @@ -1 +0,0 @@ -{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/prowlarr/14.5.0/templates/common.yaml b/stable/prowlarr/14.5.0/templates/common.yaml deleted file mode 100644 index 3c93f57861..0000000000 --- a/stable/prowlarr/14.5.0/templates/common.yaml +++ /dev/null @@ -1,11 +0,0 @@ -{{/* Make sure all variables are set properly */}} -{{- include "tc.v1.common.loader.init" . -}} - -{{/* Disable [exportarr] if requested */}} -{{- if not .Values.metrics.main.enabled -}} - {{- $_ := set .Values.workload.exportarr "enabled" false -}} - {{- $_ := set .Values.service.metrics "enabled" false -}} -{{- end -}} - -{{/* Render the templates */}} -{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/prowlarr/14.5.0/values.yaml b/stable/prowlarr/14.5.0/values.yaml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/stable/prowlarr/15.4.0/.helmignore b/stable/prowlarr/15.4.0/.helmignore deleted file mode 100644 index 77ca5567b2..0000000000 --- a/stable/prowlarr/15.4.0/.helmignore +++ /dev/null @@ -1,30 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ -# OWNERS file for Kubernetes -OWNERS -# helm-docs templates -*.gotmpl -# docs folder -/docs -# icon -icon.png diff --git a/stable/prowlarr/15.4.0/CHANGELOG.md b/stable/prowlarr/15.4.0/CHANGELOG.md deleted file mode 100644 index 78beb53587..0000000000 --- a/stable/prowlarr/15.4.0/CHANGELOG.md +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: Changelog ---- - - -*for the complete changelog, please refer to the website* - -**Important:** - - - - - - - - - - - - - -## [prowlarr-14.3.5](https://github.com/truecharts/charts/compare/prowlarr-14.3.4...prowlarr-14.3.5) (2024-02-12) - -### Chore - - - -- update container image ghcr.io/onedr0p/prowlarr-develop to v1.13.3.4273[@ca264d9](https://github.com/ca264d9) by renovate ([#18137](https://github.com/truecharts/charts/issues/18137)) - - -## [prowlarr-14.3.4](https://github.com/truecharts/charts/compare/prowlarr-14.3.3...prowlarr-14.3.4) (2024-02-05) - -### Chore - - - -- update container image ghcr.io/onedr0p/prowlarr-develop to 1.13.2.4251[@23d16bf](https://github.com/23d16bf) by renovate ([#17956](https://github.com/truecharts/charts/issues/17956)) - - -## [prowlarr-14.3.3](https://github.com/truecharts/charts/compare/prowlarr-14.3.2...prowlarr-14.3.3) (2024-02-05) - -### Chore - - - -- update container image ghcr.io/onedr0p/prowlarr-develop to v1.13.2.4251[@1ada8d9](https://github.com/1ada8d9) by renovate ([#17915](https://github.com/truecharts/charts/issues/17915)) - - -## [prowlarr-14.3.2](https://github.com/truecharts/charts/compare/prowlarr-14.3.1...prowlarr-14.3.2) (2024-02-03) - -### Chore - - - -- update container image common to v17.2.30[@19ad5ec](https://github.com/19ad5ec) by renovate ([#17804](https://github.com/truecharts/charts/issues/17804)) - - -## [prowlarr-14.3.1](https://github.com/truecharts/charts/compare/prowlarr-14.3.0...prowlarr-14.3.1) (2024-01-29) - -### Chore - - - -- update container image ghcr.io/onedr0p/exportarr to v1.6.1[@60cf3d4](https://github.com/60cf3d4) by renovate ([#17725](https://github.com/truecharts/charts/issues/17725)) - - -## [prowlarr-14.3.0](https://github.com/truecharts/charts/compare/prowlarr-14.2.7...prowlarr-14.3.0) (2024-01-29) - -### Chore - - - -- update container image ghcr.io/onedr0p/prowlarr-develop to v1.13.0.4217[@bbc16bd](https://github.com/bbc16bd) by renovate ([#17694](https://github.com/truecharts/charts/issues/17694)) - - -## [prowlarr-14.2.7](https://github.com/truecharts/charts/compare/prowlarr-14.2.6...prowlarr-14.2.7) (2024-01-26) - -### Chore - - - -- update container image common to v17.2.29[@d7c41a3](https://github.com/d7c41a3) by renovate ([#17545](https://github.com/truecharts/charts/issues/17545)) - - -## [prowlarr-14.2.6](https://github.com/truecharts/charts/compare/prowlarr-14.2.5...prowlarr-14.2.6) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.28[@918b4c5](https://github.com/918b4c5) by renovate ([#17478](https://github.com/truecharts/charts/issues/17478)) - - -## [prowlarr-14.2.5](https://github.com/truecharts/charts/compare/prowlarr-14.2.4...prowlarr-14.2.5) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.26[@24c98f7](https://github.com/24c98f7) by renovate ([#17409](https://github.com/truecharts/charts/issues/17409)) \ No newline at end of file diff --git a/stable/prowlarr/15.4.0/Chart.yaml b/stable/prowlarr/15.4.0/Chart.yaml deleted file mode 100644 index d931c3f3d7..0000000000 --- a/stable/prowlarr/15.4.0/Chart.yaml +++ /dev/null @@ -1,39 +0,0 @@ -annotations: - max_scale_version: 24.04.0 - min_scale_version: 23.10.0 - 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.14.0.4286 -dependencies: - - name: common - version: 18.2.1 - 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.png -keywords: - - prowlarr - - torrent - - usenet -kubeVersion: ">=1.24.0-0" -maintainers: - - name: TrueCharts - email: info@truecharts.org - url: https://truecharts.org -name: prowlarr -sources: - - https://github.com/Prowlarr/Prowlarr - - https://github.com/k8s-at-home/container-images - - https://github.com/truecharts/charts/tree/master/charts/stable/prowlarr - - https://ghcr.io/onedr0p/prowlarr-develop - - https://ghcr.io/onedr0p/exportarr -type: application -version: 15.4.0 diff --git a/stable/prowlarr/15.4.0/README.md b/stable/prowlarr/15.4.0/README.md deleted file mode 100644 index fbadb86cd5..0000000000 --- a/stable/prowlarr/15.4.0/README.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: README ---- - -## General Info - -TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. -However only installations using the TrueNAS SCALE Apps system are supported. - -For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/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)** - -## Support - -- Please check our [quick-start guides for TrueNAS SCALE](https://truecharts.org/manual/SCALE/guides/scale-intro). -- See the [Website](https://truecharts.org) -- Check our [Discord](https://discord.gg/tVsPTHWTtr) -- Open a [issue](https://github.com/truecharts/charts/issues/new/choose) - ---- - -## Sponsor TrueCharts - -TrueCharts can only exist due to the incredible effort of our staff. -Please consider making a [donation](https://truecharts.org/sponsor) or contributing back to the project any way you can! - -_All Rights Reserved - The TrueCharts Project_ diff --git a/stable/prowlarr/15.4.0/app-readme.md b/stable/prowlarr/15.4.0/app-readme.md deleted file mode 100644 index 4e201b3174..0000000000 --- a/stable/prowlarr/15.4.0/app-readme.md +++ /dev/null @@ -1,8 +0,0 @@ -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/15.4.0/charts/common-18.1.2.tgz b/stable/prowlarr/15.4.0/charts/common-18.1.2.tgz deleted file mode 100644 index afb1de8120d9e1088c1711607a6c323d4dae355b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99288 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 Du(4)S diff --git a/stable/prowlarr/15.4.0/dashboard.json b/stable/prowlarr/15.4.0/dashboard.json deleted file mode 100644 index 905280f4b6..0000000000 --- a/stable/prowlarr/15.4.0/dashboard.json +++ /dev/null @@ -1,1612 +0,0 @@ -{ - "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/15.4.0/ix_values.yaml b/stable/prowlarr/15.4.0/ix_values.yaml deleted file mode 100644 index f897f7dbf9..0000000000 --- a/stable/prowlarr/15.4.0/ix_values.yaml +++ /dev/null @@ -1,115 +0,0 @@ -image: - repository: ghcr.io/onedr0p/prowlarr-develop - tag: 1.14.0.4286@sha256:91dc4b0e5abf134fa73085f639500fe58a19ee61d6ed710a1dec50eb6463612d - pullPolicy: IfNotPresent -exportarrImage: - repository: ghcr.io/onedr0p/exportarr - pullPolicy: IfNotPresent - tag: v1.6.1@sha256:60cf3d44aa0b7dea2a65160b2e2e373c1ae38cd6b12a45fe81b8afa45ac31c22 -securityContext: - container: - readOnlyRootFilesystem: false -service: - main: - ports: - main: - port: 9696 - metrics: - enabled: true - type: ClusterIP - targetSelector: exportarr - ports: - metrics: - enabled: true - port: 9697 - targetSelector: exportarr -workload: - main: - podSpec: - containers: - main: - probes: - liveness: - path: /ping - readiness: - path: /ping - startup: - type: tcp - env: - PROWLARR__PORT: "{{ .Values.service.main.ports.main.port }}" - PROWLARR__AUTHENTICATION_METHOD: "" - exportarr: - enabled: true - type: Deployment - strategy: RollingUpdate - replicas: 1 - podSpec: - containers: - exportarr: - primary: true - enabled: true - 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: - 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 -updated: true diff --git a/stable/prowlarr/15.4.0/questions.yaml b/stable/prowlarr/15.4.0/questions.yaml deleted file mode 100755 index a5e4b2f658..0000000000 --- a/stable/prowlarr/15.4.0/questions.yaml +++ /dev/null @@ -1,2899 +0,0 @@ -groups: - - name: Container Image - description: Image to be used for container - - name: General Settings - description: General Deployment Settings - - name: Workload Settings - description: Workload Settings - - name: App Configuration - description: App Specific Config Options - - name: Networking and Services - description: Configure Network and Services for Container - - name: Storage and Persistence - description: Persist and Share Data that is Separate from the Container - - name: Ingress - description: Ingress Configuration - - name: Security and Permissions - description: Configure Security Context and Permissions - - name: Resources and Devices - description: "Specify Resources/Devices to be Allocated to Workload" - - name: Middlewares - description: Traefik Middlewares - - name: Metrics - description: Metrics - - name: Addons - description: Addon Configuration - - name: Backup Configuration - description: Configure Velero Backup Schedule - - name: Advanced - description: Advanced Configuration - - name: Postgresql - description: Postgresql - - name: Documentation - description: Documentation - -portals: - open: - protocols: - - "$kubernetes-resource_configmap_tcportal-open_protocol" - host: - - "$kubernetes-resource_configmap_tcportal-open_host" - ports: - - "$kubernetes-resource_configmap_tcportal-open_port" - -questions: - - variable: global - group: General Settings - label: "Global Settings" - schema: - additional_attrs: true - type: dict - attrs: - - variable: stopAll - label: Stop All - description: "Stops All Running pods and hibernates cnpg" - schema: - type: boolean - default: false - - - variable: workload - group: "Workload Settings" - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: main - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: type - label: Type (Advanced) - schema: - type: string - default: Deployment - enum: - - value: Deployment - description: Deployment - - value: DaemonSet - description: DaemonSet - - - variable: replicas - label: Replicas (Advanced) - description: Set the number of Replicas - schema: - type: int - show_if: [["type", "!=", "DaemonSet"]] - default: 1 - - - variable: podSpec - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: containers - label: Containers - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: Main Container - schema: - additional_attrs: true - type: dict - attrs: - - - variable: 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 Settings" - schema: - type: string - default: "Etc/UTC" - $ref: - - "definitions/timezone" - - - variable: podOptions - group: "General Settings" - label: "Global Pod Options (Advanced)" - schema: - additional_attrs: true - type: dict - attrs: - - variable: expertPodOpts - label: "Expert - Pod Options" - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hostNetwork - label: "Host Networking" - schema: - type: boolean - default: false - - variable: dnsConfig - label: "DNS Configuration" - schema: - type: dict - additional_attrs: true - attrs: - - variable: options - label: "Options" - schema: - type: list - default: [{"name": "ndots", "value": "1"}] - items: - - variable: optionsEntry - label: "Option Entry" - schema: - type: dict - additional_attrs: true - attrs: - - variable: name - label: "Name" - schema: - type: string - required: true - - variable: value - label: "Value" - schema: - type: string - - variable: nameservers - label: "Nameservers" - schema: - type: list - default: [] - items: - - variable: nsEntry - label: "Nameserver Entry" - schema: - type: string - required: true - - variable: searches - label: "Searches" - schema: - type: list - default: [] - items: - - variable: searchEntry - label: "Search Entry" - schema: - type: string - required: true - - - variable: imagePullSecretList - group: "General Settings" - label: "Image Pull Secrets" - schema: - type: list - default: [] - items: - - variable: pullsecretentry - label: "Pull Secret" - schema: - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: true - - variable: data - label: Data - schema: - type: dict - additional_attrs: true - attrs: - - variable: registry - label: "Registry" - schema: - type: string - required: true - default: "https://index.docker.io/v1/" - - variable: username - label: "Username" - schema: - type: string - required: true - default: "" - - variable: password - label: "Password" - schema: - type: string - required: true - private: true - default: "" - - variable: email - label: "Email" - schema: - type: string - required: true - default: "" - - - variable: service - group: Networking and Services - label: Configure Service(s) - schema: - additional_attrs: true - type: dict - attrs: - - - variable: 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: serviceexpert - group: Networking and Services - label: Show Expert Config - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - - variable: scaleExternalInterface - description: Add External Interfaces - label: Add external Interfaces - group: Networking - schema: - type: list - items: - - variable: interfaceConfiguration - description: Interface Configuration - label: Interface Configuration - schema: - additional_attrs: true - type: dict - $ref: - - "normalize/interfaceConfiguration" - attrs: - - variable: hostInterface - description: Please Specify Host Interface - label: Host Interface - schema: - type: string - required: true - $ref: - - "definitions/interface" - - variable: ipam - description: Define how IP Address will be managed - label: IP Address Management - schema: - additional_attrs: true - type: dict - required: true - attrs: - - variable: type - description: Specify type for IPAM - label: IPAM Type - schema: - type: string - required: true - enum: - - value: dhcp - description: Use DHCP - - value: static - description: Use Static IP - - variable: staticIPConfigurations - label: Static IP Addresses - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticIP - label: Static IP - schema: - type: ipaddr - cidr: true - - variable: staticRoutes - label: Static Routes - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticRouteConfiguration - label: Static Route Configuration - schema: - additional_attrs: true - type: dict - attrs: - - variable: destination - label: Destination - schema: - type: ipaddr - cidr: true - required: true - - variable: gateway - label: Gateway - schema: - type: ipaddr - cidr: false - required: true - - - variable: serviceList - label: Add Manual Custom Services - group: Networking and Services - schema: - type: list - default: [] - items: - - variable: serviceListEntry - label: Custom Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the service - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: LoadBalancer - description: LoadBalancer (Expose Ports) - - value: ClusterIP - description: ClusterIP (Do Not Expose Ports) - - value: Simple - description: Deprecated CHANGE THIS - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: advancedsvcset - label: Show Advanced Service Settings - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: externalIPs - label: "External IP's" - description: "External IP's" - schema: - type: list - default: [] - items: - - variable: externalIP - label: External IP - schema: - type: string - - variable: ipFamilyPolicy - label: IP Family Policy - description: Specify the IP Policy - schema: - type: string - default: SingleStack - enum: - - value: SingleStack - description: SingleStack - - value: PreferDualStack - description: PreferDualStack - - value: RequireDualStack - description: RequireDualStack - - variable: ipFamilies - label: IP Families - description: (Advanced) The IP Families that should be used - schema: - type: list - default: [] - items: - - variable: ipFamily - label: IP Family - schema: - type: string - - variable: portsList - label: Additional Service Ports - schema: - type: list - default: [] - items: - - variable: portsListEntry - label: Custom ports - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Port - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Port Name - schema: - type: string - default: "" - - variable: protocol - label: Port Type - schema: - type: string - default: tcp - enum: - - value: http - description: HTTP - - value: https - description: HTTPS - - value: tcp - description: TCP - - value: udp - description: UDP - - variable: targetPort - label: Target Port - description: This port exposes the container port on the service - schema: - type: int - required: true - - variable: port - label: Container Port - schema: - type: int - required: true - - - variable: persistence - label: Integrated Persistent Storage - description: Integrated Persistent Storage - group: Storage and 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: 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: Storage and Persistence - schema: - type: list - default: [] - items: - - variable: persistenceListEntry - label: Custom Storage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the storage - schema: - type: boolean - default: true - hidden: true - - variable: type - label: Type of Storage - description: Sets the persistence type, Anything other than PVC could break rollback! - schema: - type: string - default: hostPath - enum: - - value: pvc - description: PVC - - value: hostPath - description: Host Path - - value: emptyDir - description: emptyDir - - value: nfs - description: NFS Share - - variable: server - label: NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: path - label: Path on NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: iscsi - label: iSCSI Options - schema: - show_if: [["type", "=", "iscsi"]] - type: dict - additional_attrs: true - attrs: - - variable: targetPortal - label: targetPortal - schema: - type: string - required: true - default: "" - - variable: iqn - label: iqn - schema: - type: string - required: true - default: "" - - variable: lun - label: lun - schema: - type: int - default: 0 - - variable: authSession - label: authSession - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: authDiscovery - label: authDiscovery - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: autoPermissions - label: Automatic Permissions Configuration - description: Automatically set permissions - schema: - show_if: [["type", "!=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: chown - label: Run CHOWN - description: | - It will run CHOWN on the path with the given fsGroup - schema: - type: boolean - default: false - - variable: chmod - label: Run CHMOD - description: | - It will run CHMOD on the path with the given value
      - Format should be 3 digits, e.g. 770 - schema: - type: string - valid_chars: '[0-9]{3}' - default: "" - - variable: recursive - label: Recursive - description: | - It will run CHOWN and CHMOD recursively - schema: - type: boolean - default: false - - variable: readOnly - label: Read Only - schema: - type: boolean - default: false - - variable: hostPath - label: Host Path - description: Path inside the container the storage is mounted - schema: - show_if: [["type", "=", "hostPath"]] - type: hostpath - - variable: mountPath - label: Mount Path - description: Path inside the container the storage is mounted - schema: - type: string - default: "" - required: true - valid_chars: '^\/([a-zA-Z0-9._-]+(\s?[a-zA-Z0-9._-]+|\/?))+$' - - variable: medium - label: EmptyDir Medium - schema: - show_if: [["type", "=", "emptyDir"]] - type: string - default: "" - enum: - - value: "" - description: Default - - value: Memory - description: Memory - - variable: size - label: Size Quotum of Storage - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: 256Gi - - variable: storageClass - label: 'storageClass (Advanced)' - description: 'sets the storageClass to something other than iX default. Only for advanced usecases!' - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: "" - - variable: static - label: 'Static Fixed PVC Bindings (Experimental)' - description: Link a PVC to a specific storage location - schema: - show_if: [["type", "=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: mode - label: mode - description: | - disabled: use normal dynamic PVCs - smb: connect to an SMB share - nfs: connect to an NFS share - schema: - type: string - default: "disabled" - enum: - - value: "disabled" - description: disabled - - value: smb - description: smb - - value: nfs - description: nfs - - variable: server - label: Server - description: server to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "myserver" - - variable: share - label: Share - description: share to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "/myshare" - - variable: user - label: User - description: connecting user - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "myuser" - - variable: domain - label: Domain - description: user domain - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: password - label: Password - description: connecting password - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: volumeSnapshots - label: 'Volume Snapshots (Experimental)' - description: Add an entry to the list to force creation of a volumeSnapshot of this PVC - schema: - show_if: [["type", "=", "pvc"]] - type: list - default: [] - items: - - variable: volumeSnapshotEntry - label: Custom volumeSnapshot - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - description: 'WARNING: renaming this, means deletion of the snapshot with the old name!' - schema: - type: string - default: "mysnapshot" - required: true - - variable: volumeSnapshotClassName - label: 'volumeSnapshot Class Name (Advanced)' - description: For use with PVCs using a non-default storageClass - schema: - type: string - default: "" - - - variable: ingress - label: "" - group: Ingress - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: "Main Ingress" - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name (Optional) - description: Defaults to chart name - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description (Optional) - description: Defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: icon - label: Icon (Optional) - description: Defaults to chart icon - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - variable: widget - label: Widget Settings - schema: - type: dict - additional_attrs: true - show_if: [["enabled", "=", true]] - attrs: - - variable: enabled - label: Enable Widget - description: When disabled all widget annotations are skipped. - schema: - type: boolean - default: true - - variable: custom - label: Options - schema: - type: dict - additional_attrs: true - attrs: - - variable: key - label: API-key (key) - schema: - type: string - default: "" - - variable: customkv - label: Custom Options - schema: - type: list - default: [] - items: - - variable: option - label: Option - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - default: "" - required: true - - variable: value - label: Value - schema: - type: string - default: "" - required: true - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - - variable: ingressList - label: Add Manual Custom Ingresses - group: Ingress - schema: - type: list - default: [] - items: - - variable: ingressListEntry - label: Custom Ingress - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: ingressClassName - label: IngressClass Name - schema: - type: string - default: "" - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: overrideService - label: Linked Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Service Name - schema: - type: string - default: "" - - variable: port - label: Service Port - schema: - type: int - - variable: tls - label: TLS-Settings - schema: - type: list - default: [] - show_if: [["certificateIssuer", "=", ""]] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your Cert-Manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: Use Custom Secret (Advanced) - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: "Allow Cross Origin Requests" - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: namespace - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description - description: defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - - variable: securityContext - group: Security and Permissions - label: Security Context - schema: - additional_attrs: true - type: dict - attrs: - - variable: container - label: Container - schema: - additional_attrs: true - type: dict - attrs: - # Settings from questions.yaml get appended here on a per-app basis - - - variable: runAsUser - label: "runAsUser" - description: "The UserID of the user running the application" - schema: - type: int - default: 568 - - variable: runAsGroup - label: "runAsGroup" - description: "The groupID 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 and Devices - label: "Resource Limits" - schema: - additional_attrs: true - type: dict - attrs: - - variable: limits - label: Advanced Limit Resource Consumption - schema: - additional_attrs: true - type: dict - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 4000m - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: RAM - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 8Gi - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: 'gpu.intel.com/i915' - label: Add Intel i915 GPUs - schema: - type: int - default: 0 - - variable: 'nvidia.com/gpu' - label: Add NVIDIA GPUs (Experimental) - schema: - type: int - default: 0 - - variable: 'amd.com/gpu' - label: Add AMD GPUs - schema: - type: int - default: 0 - - variable: requests - label: "Minimum Resources Required (request)" - schema: - additional_attrs: true - type: dict - hidden: true - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 10m - hidden: true - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: "RAM" - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 50Mi - hidden: true - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: deviceList - label: Mount USB Devices - group: Resources and Devices - schema: - type: list - default: [] - items: - - variable: deviceListEntry - label: Device - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Storage - schema: - type: boolean - default: true - - variable: type - label: (Advanced) Type of Storage - description: Sets the persistence type - schema: - type: string - default: device - hidden: true - - variable: readOnly - label: readOnly - schema: - type: boolean - default: false - - variable: hostPath - label: Host Device Path - description: Path to the device on the host system - schema: - type: path - - variable: mountPath - label: Container Device Path - description: Path inside the container the device is mounted - schema: - type: string - default: "/dev/ttyACM0" - - - variable: metrics - group: Metrics - label: Prometheus Metrics - schema: - additional_attrs: true - type: dict - attrs: - - variable: main - label: Main Metrics - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - description: Enable Prometheus Metrics - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - - variable: prometheusRule - label: PrometheusRule - description: Enable and configure Prometheus Rules for the App. - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - description: Enable Prometheus Metrics - schema: - type: boolean - default: false - # TODO: Rule List section - -# - variable: horizontalPodAutoscaler -# group: Advanced -# label: (Advanced) Horizontal Pod Autoscaler -# schema: -# type: list -# default: [] -# items: -# - variable: hpaEntry -# label: HPA Entry -# schema: -# additional_attrs: true -# type: dict -# attrs: -# - variable: name -# label: Name -# schema: -# type: string -# required: true -# default: "" -# - variable: enabled -# label: Enabled -# schema: -# type: boolean -# default: false -# show_subquestions_if: true -# subquestions: -# - variable: target -# label: Target -# description: Deployment name, Defaults to Main Deployment -# schema: -# type: string -# default: "" -# - variable: minReplicas -# label: Minimum Replicas -# schema: -# type: int -# default: 1 -# - variable: maxReplicas -# label: Maximum Replicas -# schema: -# type: int -# default: 5 -# - variable: targetCPUUtilizationPercentage -# label: Target CPU Utilization Percentage -# schema: -# type: int -# default: 80 -# - variable: targetMemoryUtilizationPercentage -# label: Target Memory Utilization Percentage -# schema: -# type: int -# default: 80 - - variable: networkPolicy - group: Advanced - label: (Advanced) Network Policy - schema: - type: list - default: [] - items: - - variable: netPolicyEntry - label: Network Policy Entry - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - default: "" - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: policyType - label: Policy Type - schema: - type: string - default: "" - enum: - - value: "" - description: Default - - value: ingress - description: Ingress - - value: egress - description: Egress - - value: ingress-egress - description: Ingress and Egress - - variable: egress - label: Egress - schema: - type: list - default: [] - items: - - variable: egressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: to - label: To - schema: - type: list - default: [] - items: - - variable: toEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - variable: ingress - label: Ingress - schema: - type: list - default: [] - items: - - variable: ingressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: from - label: From - schema: - type: list - default: [] - items: - - variable: fromEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - - variable: addons - group: Addons - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: codeserver - label: Codeserver - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: service - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: NodePort - description: Deprecated CHANGE THIS - - value: ClusterIP - description: ClusterIP - - value: LoadBalancer - description: LoadBalancer - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: ports - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: codeserver - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - default: 36107 - - variable: ingress - label: "Ingress" - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - variable: scaleCert - label: 'Use TrueNAS SCALE Certificate (Deprecated)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: int - $ref: - - "definitions/certificate" - - variable: envList - label: Codeserver Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: netshoot - label: Netshoot - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: envList - label: Netshoot Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: vpn - label: VPN - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Type - schema: - type: string - default: disabled - enum: - - value: disabled - description: disabled - - value: gluetun - description: Gluetun - - value: tailscale - description: Tailscale - - value: openvpn - description: OpenVPN (Deprecated) - - value: wireguard - description: Wireguard (Deprecated) - - variable: openvpn - label: OpenVPN Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "openvpn"]] - attrs: - - variable: username - label: Authentication Username (Optional) - description: Authentication Username, Optional - schema: - type: string - default: "" - - variable: password - label: Authentication Password - description: Authentication Credentials - schema: - type: string - show_if: [["username", "!=", ""]] - default: "" - required: true - - variable: tailscale - label: Tailscale Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "tailscale"]] - attrs: - - variable: authkey - label: Authentication Key - description: Provide an auth key to automatically authenticate the node as your user account. - schema: - type: string - private: true - default: "" - - variable: auth_once - label: Auth Once - description: Only attempt to log in if not already logged in. - schema: - type: boolean - default: true - - variable: accept_dns - label: Accept DNS - description: Accept DNS configuration from the admin console. - schema: - type: boolean - default: false - - variable: userspace - label: Userspace - description: Userspace Networking mode allows running Tailscale where you do not have access to create a VPN tunnel device. - schema: - type: boolean - default: false - - variable: routes - label: Routes - description: Expose physical subnet routes to your entire Tailscale network. - schema: - type: string - default: "" - - variable: dest_ip - label: Destination IP - description: Tells the DNAT mechanism which Destination IP to set in the IP header, and where to send packets that are matched. - schema: - type: string - default: "" - - variable: sock5_server - label: Sock5 Server - description: The address on which to listen for SOCKS5 proxying into the tailscale net. - schema: - type: string - default: "" - - variable: outbound_http_proxy_listen - label: Outbound HTTP Proxy Listen - description: The address on which to listen for HTTP proxying into the tailscale net. - schema: - type: string - default: "" - - variable: extra_args - label: Extra Args - description: Extra Args - schema: - type: string - default: "" - - variable: daemon_extra_args - label: Tailscale Daemon Extra Args - description: Tailscale Daemon Extra Args - schema: - type: string - default: "" - - variable: killSwitch - label: Enable Killswitch - schema: - type: boolean - show_if: [["type", "!=", "disabled"]] - default: true - - variable: excludedNetworks_IPv4 - label: Killswitch Excluded IPv4 networks - description: List of Killswitch Excluded IPv4 Addresses - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv4 - label: IPv4 Network - schema: - type: string - required: true - - variable: excludedNetworks_IPv6 - label: Killswitch Excluded IPv6 networks - description: "List of Killswitch Excluded IPv6 Addresses" - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv6 - label: IPv6 Network - schema: - type: string - required: true - - variable: configFile - label: VPN Config File Location - schema: - type: string - show_if: [["type", "!=", "disabled"]] - default: "" - - - variable: envList - label: VPN Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - max_length: 10240 - - - variable: docs - group: Documentation - label: Please read the documentation at https://truecharts.org - description: Please read the documentation at -
      https://truecharts.org - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDocs - label: I have checked the documentation - schema: - type: boolean - default: true - - variable: donateNag - group: Documentation - label: Please consider supporting TrueCharts, see https://truecharts.org/sponsor - description: Please consider supporting TrueCharts, see -
      https://truecharts.org/sponsor - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDonate - label: I have considered donating - schema: - type: boolean - default: true - hidden: true - diff --git a/stable/prowlarr/15.4.0/templates/NOTES.txt b/stable/prowlarr/15.4.0/templates/NOTES.txt deleted file mode 100644 index efcb74cb77..0000000000 --- a/stable/prowlarr/15.4.0/templates/NOTES.txt +++ /dev/null @@ -1 +0,0 @@ -{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/prowlarr/15.4.0/templates/common.yaml b/stable/prowlarr/15.4.0/templates/common.yaml deleted file mode 100644 index 3c93f57861..0000000000 --- a/stable/prowlarr/15.4.0/templates/common.yaml +++ /dev/null @@ -1,11 +0,0 @@ -{{/* Make sure all variables are set properly */}} -{{- include "tc.v1.common.loader.init" . -}} - -{{/* Disable [exportarr] if requested */}} -{{- if not .Values.metrics.main.enabled -}} - {{- $_ := set .Values.workload.exportarr "enabled" false -}} - {{- $_ := set .Values.service.metrics "enabled" false -}} -{{- end -}} - -{{/* Render the templates */}} -{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/prowlarr/15.4.0/values.yaml b/stable/prowlarr/15.4.0/values.yaml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/stable/prowlarr/15.4.1/.helmignore b/stable/prowlarr/15.4.1/.helmignore deleted file mode 100644 index 77ca5567b2..0000000000 --- a/stable/prowlarr/15.4.1/.helmignore +++ /dev/null @@ -1,30 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ -# OWNERS file for Kubernetes -OWNERS -# helm-docs templates -*.gotmpl -# docs folder -/docs -# icon -icon.png diff --git a/stable/prowlarr/15.4.1/CHANGELOG.md b/stable/prowlarr/15.4.1/CHANGELOG.md deleted file mode 100644 index 0664273cbd..0000000000 --- a/stable/prowlarr/15.4.1/CHANGELOG.md +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: Changelog ---- - - -*for the complete changelog, please refer to the website* - -**Important:** - - - - - - - - - - - - - - -## [prowlarr-14.3.5](https://github.com/truecharts/charts/compare/prowlarr-14.3.4...prowlarr-14.3.5) (2024-02-12) - -### Chore - - - -- update container image ghcr.io/onedr0p/prowlarr-develop to v1.13.3.4273[@ca264d9](https://github.com/ca264d9) by renovate ([#18137](https://github.com/truecharts/charts/issues/18137)) - - -## [prowlarr-14.3.4](https://github.com/truecharts/charts/compare/prowlarr-14.3.3...prowlarr-14.3.4) (2024-02-05) - -### Chore - - - -- update container image ghcr.io/onedr0p/prowlarr-develop to 1.13.2.4251[@23d16bf](https://github.com/23d16bf) by renovate ([#17956](https://github.com/truecharts/charts/issues/17956)) - - -## [prowlarr-14.3.3](https://github.com/truecharts/charts/compare/prowlarr-14.3.2...prowlarr-14.3.3) (2024-02-05) - -### Chore - - - -- update container image ghcr.io/onedr0p/prowlarr-develop to v1.13.2.4251[@1ada8d9](https://github.com/1ada8d9) by renovate ([#17915](https://github.com/truecharts/charts/issues/17915)) - - -## [prowlarr-14.3.2](https://github.com/truecharts/charts/compare/prowlarr-14.3.1...prowlarr-14.3.2) (2024-02-03) - -### Chore - - - -- update container image common to v17.2.30[@19ad5ec](https://github.com/19ad5ec) by renovate ([#17804](https://github.com/truecharts/charts/issues/17804)) - - -## [prowlarr-14.3.1](https://github.com/truecharts/charts/compare/prowlarr-14.3.0...prowlarr-14.3.1) (2024-01-29) - -### Chore - - - -- update container image ghcr.io/onedr0p/exportarr to v1.6.1[@60cf3d4](https://github.com/60cf3d4) by renovate ([#17725](https://github.com/truecharts/charts/issues/17725)) - - -## [prowlarr-14.3.0](https://github.com/truecharts/charts/compare/prowlarr-14.2.7...prowlarr-14.3.0) (2024-01-29) - -### Chore - - - -- update container image ghcr.io/onedr0p/prowlarr-develop to v1.13.0.4217[@bbc16bd](https://github.com/bbc16bd) by renovate ([#17694](https://github.com/truecharts/charts/issues/17694)) - - -## [prowlarr-14.2.7](https://github.com/truecharts/charts/compare/prowlarr-14.2.6...prowlarr-14.2.7) (2024-01-26) - -### Chore - - - -- update container image common to v17.2.29[@d7c41a3](https://github.com/d7c41a3) by renovate ([#17545](https://github.com/truecharts/charts/issues/17545)) - - -## [prowlarr-14.2.6](https://github.com/truecharts/charts/compare/prowlarr-14.2.5...prowlarr-14.2.6) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.28[@918b4c5](https://github.com/918b4c5) by renovate ([#17478](https://github.com/truecharts/charts/issues/17478)) - - -## [prowlarr-14.2.5](https://github.com/truecharts/charts/compare/prowlarr-14.2.4...prowlarr-14.2.5) (2024-01-21) - -### Chore - - diff --git a/stable/prowlarr/15.4.1/Chart.yaml b/stable/prowlarr/15.4.1/Chart.yaml deleted file mode 100644 index ec0728fe59..0000000000 --- a/stable/prowlarr/15.4.1/Chart.yaml +++ /dev/null @@ -1,39 +0,0 @@ -annotations: - max_scale_version: 24.04.0 - min_scale_version: 23.10.0 - 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.14.0.4286 -dependencies: - - name: common - version: 18.2.1 - 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.png -keywords: - - prowlarr - - torrent - - usenet -kubeVersion: '>=1.24.0-0' -maintainers: - - name: TrueCharts - email: info@truecharts.org - url: https://truecharts.org -name: prowlarr -sources: - - https://github.com/Prowlarr/Prowlarr - - https://github.com/k8s-at-home/container-images - - https://github.com/truecharts/charts/tree/master/charts/stable/prowlarr - - https://ghcr.io/onedr0p/prowlarr-develop - - https://ghcr.io/onedr0p/exportarr -type: application -version: 15.4.1 diff --git a/stable/prowlarr/15.4.1/README.md b/stable/prowlarr/15.4.1/README.md deleted file mode 100644 index fbadb86cd5..0000000000 --- a/stable/prowlarr/15.4.1/README.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: README ---- - -## General Info - -TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. -However only installations using the TrueNAS SCALE Apps system are supported. - -For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/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)** - -## Support - -- Please check our [quick-start guides for TrueNAS SCALE](https://truecharts.org/manual/SCALE/guides/scale-intro). -- See the [Website](https://truecharts.org) -- Check our [Discord](https://discord.gg/tVsPTHWTtr) -- Open a [issue](https://github.com/truecharts/charts/issues/new/choose) - ---- - -## Sponsor TrueCharts - -TrueCharts can only exist due to the incredible effort of our staff. -Please consider making a [donation](https://truecharts.org/sponsor) or contributing back to the project any way you can! - -_All Rights Reserved - The TrueCharts Project_ diff --git a/stable/prowlarr/15.4.1/app-readme.md b/stable/prowlarr/15.4.1/app-readme.md deleted file mode 100644 index 4e201b3174..0000000000 --- a/stable/prowlarr/15.4.1/app-readme.md +++ /dev/null @@ -1,8 +0,0 @@ -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/15.4.1/charts/common-18.1.2.tgz b/stable/prowlarr/15.4.1/charts/common-18.1.2.tgz deleted file mode 100644 index afb1de8120d9e1088c1711607a6c323d4dae355b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99288 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 Du(4)S diff --git a/stable/prowlarr/15.4.1/dashboard.json b/stable/prowlarr/15.4.1/dashboard.json deleted file mode 100644 index 905280f4b6..0000000000 --- a/stable/prowlarr/15.4.1/dashboard.json +++ /dev/null @@ -1,1612 +0,0 @@ -{ - "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/15.4.1/ix_values.yaml b/stable/prowlarr/15.4.1/ix_values.yaml deleted file mode 100644 index 99a8616a05..0000000000 --- a/stable/prowlarr/15.4.1/ix_values.yaml +++ /dev/null @@ -1,115 +0,0 @@ -image: - repository: ghcr.io/onedr0p/prowlarr-develop - tag: 1.14.0.4286@sha256:c77d84ebf7a64844c858f249cb3fbb59b0d2d2de21709126c339be14386a804f - pullPolicy: IfNotPresent -exportarrImage: - repository: ghcr.io/onedr0p/exportarr - pullPolicy: IfNotPresent - tag: v1.6.1@sha256:60cf3d44aa0b7dea2a65160b2e2e373c1ae38cd6b12a45fe81b8afa45ac31c22 -securityContext: - container: - readOnlyRootFilesystem: false -service: - main: - ports: - main: - port: 9696 - metrics: - enabled: true - type: ClusterIP - targetSelector: exportarr - ports: - metrics: - enabled: true - port: 9697 - targetSelector: exportarr -workload: - main: - podSpec: - containers: - main: - probes: - liveness: - path: /ping - readiness: - path: /ping - startup: - type: tcp - env: - PROWLARR__PORT: "{{ .Values.service.main.ports.main.port }}" - PROWLARR__AUTHENTICATION_METHOD: "" - exportarr: - enabled: true - type: Deployment - strategy: RollingUpdate - replicas: 1 - podSpec: - containers: - exportarr: - primary: true - enabled: true - 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: - 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 -updated: true diff --git a/stable/prowlarr/15.4.1/questions.yaml b/stable/prowlarr/15.4.1/questions.yaml deleted file mode 100755 index a5e4b2f658..0000000000 --- a/stable/prowlarr/15.4.1/questions.yaml +++ /dev/null @@ -1,2899 +0,0 @@ -groups: - - name: Container Image - description: Image to be used for container - - name: General Settings - description: General Deployment Settings - - name: Workload Settings - description: Workload Settings - - name: App Configuration - description: App Specific Config Options - - name: Networking and Services - description: Configure Network and Services for Container - - name: Storage and Persistence - description: Persist and Share Data that is Separate from the Container - - name: Ingress - description: Ingress Configuration - - name: Security and Permissions - description: Configure Security Context and Permissions - - name: Resources and Devices - description: "Specify Resources/Devices to be Allocated to Workload" - - name: Middlewares - description: Traefik Middlewares - - name: Metrics - description: Metrics - - name: Addons - description: Addon Configuration - - name: Backup Configuration - description: Configure Velero Backup Schedule - - name: Advanced - description: Advanced Configuration - - name: Postgresql - description: Postgresql - - name: Documentation - description: Documentation - -portals: - open: - protocols: - - "$kubernetes-resource_configmap_tcportal-open_protocol" - host: - - "$kubernetes-resource_configmap_tcportal-open_host" - ports: - - "$kubernetes-resource_configmap_tcportal-open_port" - -questions: - - variable: global - group: General Settings - label: "Global Settings" - schema: - additional_attrs: true - type: dict - attrs: - - variable: stopAll - label: Stop All - description: "Stops All Running pods and hibernates cnpg" - schema: - type: boolean - default: false - - - variable: workload - group: "Workload Settings" - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: main - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: type - label: Type (Advanced) - schema: - type: string - default: Deployment - enum: - - value: Deployment - description: Deployment - - value: DaemonSet - description: DaemonSet - - - variable: replicas - label: Replicas (Advanced) - description: Set the number of Replicas - schema: - type: int - show_if: [["type", "!=", "DaemonSet"]] - default: 1 - - - variable: podSpec - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: containers - label: Containers - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: Main Container - schema: - additional_attrs: true - type: dict - attrs: - - - variable: 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 Settings" - schema: - type: string - default: "Etc/UTC" - $ref: - - "definitions/timezone" - - - variable: podOptions - group: "General Settings" - label: "Global Pod Options (Advanced)" - schema: - additional_attrs: true - type: dict - attrs: - - variable: expertPodOpts - label: "Expert - Pod Options" - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hostNetwork - label: "Host Networking" - schema: - type: boolean - default: false - - variable: dnsConfig - label: "DNS Configuration" - schema: - type: dict - additional_attrs: true - attrs: - - variable: options - label: "Options" - schema: - type: list - default: [{"name": "ndots", "value": "1"}] - items: - - variable: optionsEntry - label: "Option Entry" - schema: - type: dict - additional_attrs: true - attrs: - - variable: name - label: "Name" - schema: - type: string - required: true - - variable: value - label: "Value" - schema: - type: string - - variable: nameservers - label: "Nameservers" - schema: - type: list - default: [] - items: - - variable: nsEntry - label: "Nameserver Entry" - schema: - type: string - required: true - - variable: searches - label: "Searches" - schema: - type: list - default: [] - items: - - variable: searchEntry - label: "Search Entry" - schema: - type: string - required: true - - - variable: imagePullSecretList - group: "General Settings" - label: "Image Pull Secrets" - schema: - type: list - default: [] - items: - - variable: pullsecretentry - label: "Pull Secret" - schema: - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: true - - variable: data - label: Data - schema: - type: dict - additional_attrs: true - attrs: - - variable: registry - label: "Registry" - schema: - type: string - required: true - default: "https://index.docker.io/v1/" - - variable: username - label: "Username" - schema: - type: string - required: true - default: "" - - variable: password - label: "Password" - schema: - type: string - required: true - private: true - default: "" - - variable: email - label: "Email" - schema: - type: string - required: true - default: "" - - - variable: service - group: Networking and Services - label: Configure Service(s) - schema: - additional_attrs: true - type: dict - attrs: - - - variable: 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: serviceexpert - group: Networking and Services - label: Show Expert Config - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - - variable: scaleExternalInterface - description: Add External Interfaces - label: Add external Interfaces - group: Networking - schema: - type: list - items: - - variable: interfaceConfiguration - description: Interface Configuration - label: Interface Configuration - schema: - additional_attrs: true - type: dict - $ref: - - "normalize/interfaceConfiguration" - attrs: - - variable: hostInterface - description: Please Specify Host Interface - label: Host Interface - schema: - type: string - required: true - $ref: - - "definitions/interface" - - variable: ipam - description: Define how IP Address will be managed - label: IP Address Management - schema: - additional_attrs: true - type: dict - required: true - attrs: - - variable: type - description: Specify type for IPAM - label: IPAM Type - schema: - type: string - required: true - enum: - - value: dhcp - description: Use DHCP - - value: static - description: Use Static IP - - variable: staticIPConfigurations - label: Static IP Addresses - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticIP - label: Static IP - schema: - type: ipaddr - cidr: true - - variable: staticRoutes - label: Static Routes - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticRouteConfiguration - label: Static Route Configuration - schema: - additional_attrs: true - type: dict - attrs: - - variable: destination - label: Destination - schema: - type: ipaddr - cidr: true - required: true - - variable: gateway - label: Gateway - schema: - type: ipaddr - cidr: false - required: true - - - variable: serviceList - label: Add Manual Custom Services - group: Networking and Services - schema: - type: list - default: [] - items: - - variable: serviceListEntry - label: Custom Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the service - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: LoadBalancer - description: LoadBalancer (Expose Ports) - - value: ClusterIP - description: ClusterIP (Do Not Expose Ports) - - value: Simple - description: Deprecated CHANGE THIS - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: advancedsvcset - label: Show Advanced Service Settings - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: externalIPs - label: "External IP's" - description: "External IP's" - schema: - type: list - default: [] - items: - - variable: externalIP - label: External IP - schema: - type: string - - variable: ipFamilyPolicy - label: IP Family Policy - description: Specify the IP Policy - schema: - type: string - default: SingleStack - enum: - - value: SingleStack - description: SingleStack - - value: PreferDualStack - description: PreferDualStack - - value: RequireDualStack - description: RequireDualStack - - variable: ipFamilies - label: IP Families - description: (Advanced) The IP Families that should be used - schema: - type: list - default: [] - items: - - variable: ipFamily - label: IP Family - schema: - type: string - - variable: portsList - label: Additional Service Ports - schema: - type: list - default: [] - items: - - variable: portsListEntry - label: Custom ports - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Port - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Port Name - schema: - type: string - default: "" - - variable: protocol - label: Port Type - schema: - type: string - default: tcp - enum: - - value: http - description: HTTP - - value: https - description: HTTPS - - value: tcp - description: TCP - - value: udp - description: UDP - - variable: targetPort - label: Target Port - description: This port exposes the container port on the service - schema: - type: int - required: true - - variable: port - label: Container Port - schema: - type: int - required: true - - - variable: persistence - label: Integrated Persistent Storage - description: Integrated Persistent Storage - group: Storage and 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: 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: Storage and Persistence - schema: - type: list - default: [] - items: - - variable: persistenceListEntry - label: Custom Storage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the storage - schema: - type: boolean - default: true - hidden: true - - variable: type - label: Type of Storage - description: Sets the persistence type, Anything other than PVC could break rollback! - schema: - type: string - default: hostPath - enum: - - value: pvc - description: PVC - - value: hostPath - description: Host Path - - value: emptyDir - description: emptyDir - - value: nfs - description: NFS Share - - variable: server - label: NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: path - label: Path on NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: iscsi - label: iSCSI Options - schema: - show_if: [["type", "=", "iscsi"]] - type: dict - additional_attrs: true - attrs: - - variable: targetPortal - label: targetPortal - schema: - type: string - required: true - default: "" - - variable: iqn - label: iqn - schema: - type: string - required: true - default: "" - - variable: lun - label: lun - schema: - type: int - default: 0 - - variable: authSession - label: authSession - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: authDiscovery - label: authDiscovery - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: autoPermissions - label: Automatic Permissions Configuration - description: Automatically set permissions - schema: - show_if: [["type", "!=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: chown - label: Run CHOWN - description: | - It will run CHOWN on the path with the given fsGroup - schema: - type: boolean - default: false - - variable: chmod - label: Run CHMOD - description: | - It will run CHMOD on the path with the given value
      - Format should be 3 digits, e.g. 770 - schema: - type: string - valid_chars: '[0-9]{3}' - default: "" - - variable: recursive - label: Recursive - description: | - It will run CHOWN and CHMOD recursively - schema: - type: boolean - default: false - - variable: readOnly - label: Read Only - schema: - type: boolean - default: false - - variable: hostPath - label: Host Path - description: Path inside the container the storage is mounted - schema: - show_if: [["type", "=", "hostPath"]] - type: hostpath - - variable: mountPath - label: Mount Path - description: Path inside the container the storage is mounted - schema: - type: string - default: "" - required: true - valid_chars: '^\/([a-zA-Z0-9._-]+(\s?[a-zA-Z0-9._-]+|\/?))+$' - - variable: medium - label: EmptyDir Medium - schema: - show_if: [["type", "=", "emptyDir"]] - type: string - default: "" - enum: - - value: "" - description: Default - - value: Memory - description: Memory - - variable: size - label: Size Quotum of Storage - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: 256Gi - - variable: storageClass - label: 'storageClass (Advanced)' - description: 'sets the storageClass to something other than iX default. Only for advanced usecases!' - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: "" - - variable: static - label: 'Static Fixed PVC Bindings (Experimental)' - description: Link a PVC to a specific storage location - schema: - show_if: [["type", "=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: mode - label: mode - description: | - disabled: use normal dynamic PVCs - smb: connect to an SMB share - nfs: connect to an NFS share - schema: - type: string - default: "disabled" - enum: - - value: "disabled" - description: disabled - - value: smb - description: smb - - value: nfs - description: nfs - - variable: server - label: Server - description: server to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "myserver" - - variable: share - label: Share - description: share to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "/myshare" - - variable: user - label: User - description: connecting user - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "myuser" - - variable: domain - label: Domain - description: user domain - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: password - label: Password - description: connecting password - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: volumeSnapshots - label: 'Volume Snapshots (Experimental)' - description: Add an entry to the list to force creation of a volumeSnapshot of this PVC - schema: - show_if: [["type", "=", "pvc"]] - type: list - default: [] - items: - - variable: volumeSnapshotEntry - label: Custom volumeSnapshot - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - description: 'WARNING: renaming this, means deletion of the snapshot with the old name!' - schema: - type: string - default: "mysnapshot" - required: true - - variable: volumeSnapshotClassName - label: 'volumeSnapshot Class Name (Advanced)' - description: For use with PVCs using a non-default storageClass - schema: - type: string - default: "" - - - variable: ingress - label: "" - group: Ingress - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: "Main Ingress" - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name (Optional) - description: Defaults to chart name - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description (Optional) - description: Defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: icon - label: Icon (Optional) - description: Defaults to chart icon - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - variable: widget - label: Widget Settings - schema: - type: dict - additional_attrs: true - show_if: [["enabled", "=", true]] - attrs: - - variable: enabled - label: Enable Widget - description: When disabled all widget annotations are skipped. - schema: - type: boolean - default: true - - variable: custom - label: Options - schema: - type: dict - additional_attrs: true - attrs: - - variable: key - label: API-key (key) - schema: - type: string - default: "" - - variable: customkv - label: Custom Options - schema: - type: list - default: [] - items: - - variable: option - label: Option - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - default: "" - required: true - - variable: value - label: Value - schema: - type: string - default: "" - required: true - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - - variable: ingressList - label: Add Manual Custom Ingresses - group: Ingress - schema: - type: list - default: [] - items: - - variable: ingressListEntry - label: Custom Ingress - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: ingressClassName - label: IngressClass Name - schema: - type: string - default: "" - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: overrideService - label: Linked Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Service Name - schema: - type: string - default: "" - - variable: port - label: Service Port - schema: - type: int - - variable: tls - label: TLS-Settings - schema: - type: list - default: [] - show_if: [["certificateIssuer", "=", ""]] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your Cert-Manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: Use Custom Secret (Advanced) - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: "Allow Cross Origin Requests" - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: namespace - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description - description: defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - - variable: securityContext - group: Security and Permissions - label: Security Context - schema: - additional_attrs: true - type: dict - attrs: - - variable: container - label: Container - schema: - additional_attrs: true - type: dict - attrs: - # Settings from questions.yaml get appended here on a per-app basis - - - variable: runAsUser - label: "runAsUser" - description: "The UserID of the user running the application" - schema: - type: int - default: 568 - - variable: runAsGroup - label: "runAsGroup" - description: "The groupID 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 and Devices - label: "Resource Limits" - schema: - additional_attrs: true - type: dict - attrs: - - variable: limits - label: Advanced Limit Resource Consumption - schema: - additional_attrs: true - type: dict - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 4000m - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: RAM - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 8Gi - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: 'gpu.intel.com/i915' - label: Add Intel i915 GPUs - schema: - type: int - default: 0 - - variable: 'nvidia.com/gpu' - label: Add NVIDIA GPUs (Experimental) - schema: - type: int - default: 0 - - variable: 'amd.com/gpu' - label: Add AMD GPUs - schema: - type: int - default: 0 - - variable: requests - label: "Minimum Resources Required (request)" - schema: - additional_attrs: true - type: dict - hidden: true - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 10m - hidden: true - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: "RAM" - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 50Mi - hidden: true - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: deviceList - label: Mount USB Devices - group: Resources and Devices - schema: - type: list - default: [] - items: - - variable: deviceListEntry - label: Device - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Storage - schema: - type: boolean - default: true - - variable: type - label: (Advanced) Type of Storage - description: Sets the persistence type - schema: - type: string - default: device - hidden: true - - variable: readOnly - label: readOnly - schema: - type: boolean - default: false - - variable: hostPath - label: Host Device Path - description: Path to the device on the host system - schema: - type: path - - variable: mountPath - label: Container Device Path - description: Path inside the container the device is mounted - schema: - type: string - default: "/dev/ttyACM0" - - - variable: metrics - group: Metrics - label: Prometheus Metrics - schema: - additional_attrs: true - type: dict - attrs: - - variable: main - label: Main Metrics - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - description: Enable Prometheus Metrics - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - - variable: prometheusRule - label: PrometheusRule - description: Enable and configure Prometheus Rules for the App. - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - description: Enable Prometheus Metrics - schema: - type: boolean - default: false - # TODO: Rule List section - -# - variable: horizontalPodAutoscaler -# group: Advanced -# label: (Advanced) Horizontal Pod Autoscaler -# schema: -# type: list -# default: [] -# items: -# - variable: hpaEntry -# label: HPA Entry -# schema: -# additional_attrs: true -# type: dict -# attrs: -# - variable: name -# label: Name -# schema: -# type: string -# required: true -# default: "" -# - variable: enabled -# label: Enabled -# schema: -# type: boolean -# default: false -# show_subquestions_if: true -# subquestions: -# - variable: target -# label: Target -# description: Deployment name, Defaults to Main Deployment -# schema: -# type: string -# default: "" -# - variable: minReplicas -# label: Minimum Replicas -# schema: -# type: int -# default: 1 -# - variable: maxReplicas -# label: Maximum Replicas -# schema: -# type: int -# default: 5 -# - variable: targetCPUUtilizationPercentage -# label: Target CPU Utilization Percentage -# schema: -# type: int -# default: 80 -# - variable: targetMemoryUtilizationPercentage -# label: Target Memory Utilization Percentage -# schema: -# type: int -# default: 80 - - variable: networkPolicy - group: Advanced - label: (Advanced) Network Policy - schema: - type: list - default: [] - items: - - variable: netPolicyEntry - label: Network Policy Entry - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - default: "" - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: policyType - label: Policy Type - schema: - type: string - default: "" - enum: - - value: "" - description: Default - - value: ingress - description: Ingress - - value: egress - description: Egress - - value: ingress-egress - description: Ingress and Egress - - variable: egress - label: Egress - schema: - type: list - default: [] - items: - - variable: egressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: to - label: To - schema: - type: list - default: [] - items: - - variable: toEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - variable: ingress - label: Ingress - schema: - type: list - default: [] - items: - - variable: ingressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: from - label: From - schema: - type: list - default: [] - items: - - variable: fromEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - - variable: addons - group: Addons - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: codeserver - label: Codeserver - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: service - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: NodePort - description: Deprecated CHANGE THIS - - value: ClusterIP - description: ClusterIP - - value: LoadBalancer - description: LoadBalancer - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: ports - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: codeserver - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - default: 36107 - - variable: ingress - label: "Ingress" - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - variable: scaleCert - label: 'Use TrueNAS SCALE Certificate (Deprecated)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: int - $ref: - - "definitions/certificate" - - variable: envList - label: Codeserver Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: netshoot - label: Netshoot - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: envList - label: Netshoot Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: vpn - label: VPN - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Type - schema: - type: string - default: disabled - enum: - - value: disabled - description: disabled - - value: gluetun - description: Gluetun - - value: tailscale - description: Tailscale - - value: openvpn - description: OpenVPN (Deprecated) - - value: wireguard - description: Wireguard (Deprecated) - - variable: openvpn - label: OpenVPN Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "openvpn"]] - attrs: - - variable: username - label: Authentication Username (Optional) - description: Authentication Username, Optional - schema: - type: string - default: "" - - variable: password - label: Authentication Password - description: Authentication Credentials - schema: - type: string - show_if: [["username", "!=", ""]] - default: "" - required: true - - variable: tailscale - label: Tailscale Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "tailscale"]] - attrs: - - variable: authkey - label: Authentication Key - description: Provide an auth key to automatically authenticate the node as your user account. - schema: - type: string - private: true - default: "" - - variable: auth_once - label: Auth Once - description: Only attempt to log in if not already logged in. - schema: - type: boolean - default: true - - variable: accept_dns - label: Accept DNS - description: Accept DNS configuration from the admin console. - schema: - type: boolean - default: false - - variable: userspace - label: Userspace - description: Userspace Networking mode allows running Tailscale where you do not have access to create a VPN tunnel device. - schema: - type: boolean - default: false - - variable: routes - label: Routes - description: Expose physical subnet routes to your entire Tailscale network. - schema: - type: string - default: "" - - variable: dest_ip - label: Destination IP - description: Tells the DNAT mechanism which Destination IP to set in the IP header, and where to send packets that are matched. - schema: - type: string - default: "" - - variable: sock5_server - label: Sock5 Server - description: The address on which to listen for SOCKS5 proxying into the tailscale net. - schema: - type: string - default: "" - - variable: outbound_http_proxy_listen - label: Outbound HTTP Proxy Listen - description: The address on which to listen for HTTP proxying into the tailscale net. - schema: - type: string - default: "" - - variable: extra_args - label: Extra Args - description: Extra Args - schema: - type: string - default: "" - - variable: daemon_extra_args - label: Tailscale Daemon Extra Args - description: Tailscale Daemon Extra Args - schema: - type: string - default: "" - - variable: killSwitch - label: Enable Killswitch - schema: - type: boolean - show_if: [["type", "!=", "disabled"]] - default: true - - variable: excludedNetworks_IPv4 - label: Killswitch Excluded IPv4 networks - description: List of Killswitch Excluded IPv4 Addresses - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv4 - label: IPv4 Network - schema: - type: string - required: true - - variable: excludedNetworks_IPv6 - label: Killswitch Excluded IPv6 networks - description: "List of Killswitch Excluded IPv6 Addresses" - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv6 - label: IPv6 Network - schema: - type: string - required: true - - variable: configFile - label: VPN Config File Location - schema: - type: string - show_if: [["type", "!=", "disabled"]] - default: "" - - - variable: envList - label: VPN Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - max_length: 10240 - - - variable: docs - group: Documentation - label: Please read the documentation at https://truecharts.org - description: Please read the documentation at -
      https://truecharts.org - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDocs - label: I have checked the documentation - schema: - type: boolean - default: true - - variable: donateNag - group: Documentation - label: Please consider supporting TrueCharts, see https://truecharts.org/sponsor - description: Please consider supporting TrueCharts, see -
      https://truecharts.org/sponsor - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDonate - label: I have considered donating - schema: - type: boolean - default: true - hidden: true - diff --git a/stable/prowlarr/15.4.1/templates/NOTES.txt b/stable/prowlarr/15.4.1/templates/NOTES.txt deleted file mode 100644 index efcb74cb77..0000000000 --- a/stable/prowlarr/15.4.1/templates/NOTES.txt +++ /dev/null @@ -1 +0,0 @@ -{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/prowlarr/15.4.1/templates/common.yaml b/stable/prowlarr/15.4.1/templates/common.yaml deleted file mode 100644 index 3c93f57861..0000000000 --- a/stable/prowlarr/15.4.1/templates/common.yaml +++ /dev/null @@ -1,11 +0,0 @@ -{{/* Make sure all variables are set properly */}} -{{- include "tc.v1.common.loader.init" . -}} - -{{/* Disable [exportarr] if requested */}} -{{- if not .Values.metrics.main.enabled -}} - {{- $_ := set .Values.workload.exportarr "enabled" false -}} - {{- $_ := set .Values.service.metrics "enabled" false -}} -{{- end -}} - -{{/* Render the templates */}} -{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/prowlarr/15.4.1/values.yaml b/stable/prowlarr/15.4.1/values.yaml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/stable/prowlarr/16.8.10/.helmignore b/stable/prowlarr/16.8.10/.helmignore deleted file mode 100644 index 77ca5567b2..0000000000 --- a/stable/prowlarr/16.8.10/.helmignore +++ /dev/null @@ -1,30 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ -# OWNERS file for Kubernetes -OWNERS -# helm-docs templates -*.gotmpl -# docs folder -/docs -# icon -icon.png diff --git a/stable/prowlarr/16.8.10/CHANGELOG.md b/stable/prowlarr/16.8.10/CHANGELOG.md deleted file mode 100644 index 941abb8a21..0000000000 --- a/stable/prowlarr/16.8.10/CHANGELOG.md +++ /dev/null @@ -1,3 +0,0 @@ -*for the complete changelog, please refer to the website* - -**Important:** \ No newline at end of file diff --git a/stable/prowlarr/16.8.10/Chart.yaml b/stable/prowlarr/16.8.10/Chart.yaml deleted file mode 100644 index beb7502a8b..0000000000 --- a/stable/prowlarr/16.8.10/Chart.yaml +++ /dev/null @@ -1,39 +0,0 @@ -annotations: - max_scale_version: 24.04.0 - min_scale_version: 23.10.0 - 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.16.2.4435 -dependencies: - - name: common - version: 20.4.1 - 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://github.com/Prowlarr/Prowlarr - - https://github.com/k8s-at-home/container-images - - https://github.com/truecharts/charts/tree/master/charts/stable/prowlarr - - https://ghcr.io/onedr0p/exportarr - - https://ghcr.io/onedr0p/prowlarr-develop -type: application -version: 16.8.10 diff --git a/stable/prowlarr/16.8.10/README.md b/stable/prowlarr/16.8.10/README.md deleted file mode 100644 index e64167af9b..0000000000 --- a/stable/prowlarr/16.8.10/README.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -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/guides/scale-intro). - -## Configuration Options - -To view the chart specific options, please view Values.yaml included in the chart. - -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/ - -## 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 - -## 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/16.8.10/app-changelog.md b/stable/prowlarr/16.8.10/app-changelog.md deleted file mode 100644 index 5c91922881..0000000000 --- a/stable/prowlarr/16.8.10/app-changelog.md +++ /dev/null @@ -1,77 +0,0 @@ - - -## [prowlarr-16.8.10](https://github.com/truecharts/charts/compare/prowlarr-16.4.0...prowlarr-16.8.10) (2024-04-26) - -### Chore - - - -- bump charts to ensure new icons are released - -- update groups html ([#21121](https://github.com/truecharts/charts/issues/21121)) - -- bump charts to release new docs to fix broken links - -- bump everything to regenerate readme's and site index - -- bump everything to release new doc pages - -- update container image ghcr.io/onedr0p/prowlarr-develop to 1.15.0.4361[@bd8092d](https://github.com/bd8092d) by renovate ([#20425](https://github.com/truecharts/charts/issues/20425)) - -- update container image ghcr.io/onedr0p/exportarr to v2.0.1[@727e7bc](https://github.com/727e7bc) by renovate ([#20284](https://github.com/truecharts/charts/issues/20284)) - -- update container image common to v20.3.7[@8cf9fc9](https://github.com/8cf9fc9) by renovate ([#20819](https://github.com/truecharts/charts/issues/20819)) - -- update container image ghcr.io/onedr0p/prowlarr-develop to 1.16.1.4420[@b92e309](https://github.com/b92e309) by renovate ([#20765](https://github.com/truecharts/charts/issues/20765)) - -- update container image ghcr.io/onedr0p/prowlarr-develop to v1.16.1.4420[@a60ce8c](https://github.com/a60ce8c) by renovate ([#20747](https://github.com/truecharts/charts/issues/20747)) - -- update container image common to v20.3.6[@27edfed](https://github.com/27edfed) by renovate ([#20599](https://github.com/truecharts/charts/issues/20599)) - -- update container image common to v20.3.5[@aedd88a](https://github.com/aedd88a) by renovate ([#20535](https://github.com/truecharts/charts/issues/20535)) - -- update container image common to v20.3.4[@d7e1b23](https://github.com/d7e1b23) by renovate ([#20527](https://github.com/truecharts/charts/issues/20527)) - -- update container image common to v20.3.3[@3876ba5](https://github.com/3876ba5) by renovate ([#20478](https://github.com/truecharts/charts/issues/20478)) - -- update container image ghcr.io/onedr0p/prowlarr-develop to v1.16.2.4435[@e82f806](https://github.com/e82f806) by renovate ([#21057](https://github.com/truecharts/charts/issues/21057)) - -- update container image common to v20.3.2[@0722ebb](https://github.com/0722ebb) by renovate ([#20334](https://github.com/truecharts/charts/issues/20334)) - -- update container image common to v20.3.11[@dae6129](https://github.com/dae6129) by renovate ([#20875](https://github.com/truecharts/charts/issues/20875)) - -- update container image ghcr.io/onedr0p/prowlarr-develop to 1.15.0.4361[@833d7ca](https://github.com/833d7ca) by renovate ([#20066](https://github.com/truecharts/charts/issues/20066)) - -- update container image common to v20.2.10[@6f99c97](https://github.com/6f99c97) by renovate ([#19876](https://github.com/truecharts/charts/issues/19876)) - -- update container image ghcr.io/onedr0p/prowlarr-develop to v1.15.0.4361[@0b6b55c](https://github.com/0b6b55c) by renovate ([#19902](https://github.com/truecharts/charts/issues/19902)) - -- update container image common to v20.2.9[@10fd6c5](https://github.com/10fd6c5) by renovate ([#19817](https://github.com/truecharts/charts/issues/19817)) - -- update container image ghcr.io/onedr0p/prowlarr-develop to 1.14.3.4333[@60f146b](https://github.com/60f146b) by renovate ([#19780](https://github.com/truecharts/charts/issues/19780)) - -- update container image common to v20.2.4[@f245f5c](https://github.com/f245f5c) by renovate ([#19731](https://github.com/truecharts/charts/issues/19731)) - -- update container image common to v20.2.3[@06e462e](https://github.com/06e462e) by renovate ([#19673](https://github.com/truecharts/charts/issues/19673)) - -- update container image common to v20.2.2[@f7d0b92](https://github.com/f7d0b92) by renovate ([#19432](https://github.com/truecharts/charts/issues/19432)) - -- update container image ghcr.io/onedr0p/prowlarr-develop to v1.14.3.4333[@af90aa4](https://github.com/af90aa4) by renovate ([#19425](https://github.com/truecharts/charts/issues/19425)) - -- update container image ghcr.io/onedr0p/prowlarr-develop to v1.14.2.4318[@78e4f3a](https://github.com/78e4f3a) by renovate ([#19405](https://github.com/truecharts/charts/issues/19405)) - -- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) - -- update container image ghcr.io/onedr0p/prowlarr-develop to 1.14.1.4316[@882daa1](https://github.com/882daa1) by renovate ([#19255](https://github.com/truecharts/charts/issues/19255)) - -### Chore - - - -- rework SCALE catagories/groups to match helm and remove deprecated charts ([#21111](https://github.com/truecharts/charts/issues/21111)) - -### Fix - - - -- replace serviceexpert with externalinterfaces/networking-group in the SCALE GUI ([#21154](https://github.com/truecharts/charts/issues/21154)) \ No newline at end of file diff --git a/stable/prowlarr/16.8.10/app-readme.md b/stable/prowlarr/16.8.10/app-readme.md deleted file mode 100644 index 4e201b3174..0000000000 --- a/stable/prowlarr/16.8.10/app-readme.md +++ /dev/null @@ -1,8 +0,0 @@ -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/16.8.10/charts/common-20.3.11.tgz b/stable/prowlarr/16.8.10/charts/common-20.3.11.tgz deleted file mode 100644 index 010f5b5a245d342f6f0d2e0ef95338a45ead19b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99404 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%0AZSzDiWTe))Y`J0OOCXlO`z1O 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 P00960fC|;b09p(Hd4E&t diff --git a/stable/prowlarr/16.8.10/dashboard.json b/stable/prowlarr/16.8.10/dashboard.json deleted file mode 100644 index 905280f4b6..0000000000 --- a/stable/prowlarr/16.8.10/dashboard.json +++ /dev/null @@ -1,1612 +0,0 @@ -{ - "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/16.8.10/icon-small.webp b/stable/prowlarr/16.8.10/icon-small.webp deleted file mode 100644 index ac725e78b668b885670972f469e77d4a4d574190..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 698 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 USs^`-+!!x`U;f{a2tEJ+0A-v)5C8xG diff --git a/stable/prowlarr/16.8.10/ix_values.yaml b/stable/prowlarr/16.8.10/ix_values.yaml deleted file mode 100644 index 5becd95424..0000000000 --- a/stable/prowlarr/16.8.10/ix_values.yaml +++ /dev/null @@ -1,115 +0,0 @@ -image: - repository: ghcr.io/onedr0p/prowlarr-develop - tag: 1.16.2.4435@sha256:e82f806cd03fea6470430290892f0f906f7d5981b81456a2a717028a250bc183 - 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: true - type: ClusterIP - targetSelector: exportarr - ports: - metrics: - enabled: true - port: 9697 - targetSelector: exportarr -workload: - main: - podSpec: - containers: - main: - probes: - liveness: - path: /ping - readiness: - path: /ping - startup: - type: tcp - env: - PROWLARR__PORT: "{{ .Values.service.main.ports.main.port }}" - PROWLARR__AUTHENTICATION_METHOD: "" - exportarr: - enabled: true - type: Deployment - strategy: RollingUpdate - replicas: 1 - podSpec: - containers: - exportarr: - primary: true - enabled: true - 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: - 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 -updated: true diff --git a/stable/prowlarr/16.8.10/questions.yaml b/stable/prowlarr/16.8.10/questions.yaml deleted file mode 100755 index 715ff61e36..0000000000 --- a/stable/prowlarr/16.8.10/questions.yaml +++ /dev/null @@ -1,3021 +0,0 @@ -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: 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: 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: 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/16.8.10/templates/NOTES.txt b/stable/prowlarr/16.8.10/templates/NOTES.txt deleted file mode 100644 index efcb74cb77..0000000000 --- a/stable/prowlarr/16.8.10/templates/NOTES.txt +++ /dev/null @@ -1 +0,0 @@ -{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/prowlarr/16.8.10/templates/common.yaml b/stable/prowlarr/16.8.10/templates/common.yaml deleted file mode 100644 index 3c93f57861..0000000000 --- a/stable/prowlarr/16.8.10/templates/common.yaml +++ /dev/null @@ -1,11 +0,0 @@ -{{/* Make sure all variables are set properly */}} -{{- include "tc.v1.common.loader.init" . -}} - -{{/* Disable [exportarr] if requested */}} -{{- if not .Values.metrics.main.enabled -}} - {{- $_ := set .Values.workload.exportarr "enabled" false -}} - {{- $_ := set .Values.service.metrics "enabled" false -}} -{{- end -}} - -{{/* Render the templates */}} -{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/prowlarr/16.8.10/values.yaml b/stable/prowlarr/16.8.10/values.yaml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/stable/prowlarr/16.8.11/.helmignore b/stable/prowlarr/16.8.11/.helmignore deleted file mode 100644 index 77ca5567b2..0000000000 --- a/stable/prowlarr/16.8.11/.helmignore +++ /dev/null @@ -1,30 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ -# OWNERS file for Kubernetes -OWNERS -# helm-docs templates -*.gotmpl -# docs folder -/docs -# icon -icon.png diff --git a/stable/prowlarr/16.8.11/CHANGELOG.md b/stable/prowlarr/16.8.11/CHANGELOG.md deleted file mode 100644 index 941abb8a21..0000000000 --- a/stable/prowlarr/16.8.11/CHANGELOG.md +++ /dev/null @@ -1,3 +0,0 @@ -*for the complete changelog, please refer to the website* - -**Important:** \ No newline at end of file diff --git a/stable/prowlarr/16.8.11/Chart.yaml b/stable/prowlarr/16.8.11/Chart.yaml deleted file mode 100644 index 520e60c203..0000000000 --- a/stable/prowlarr/16.8.11/Chart.yaml +++ /dev/null @@ -1,39 +0,0 @@ -annotations: - max_scale_version: 24.04.0 - min_scale_version: 23.10.0 - 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.16.2.4435 -dependencies: - - name: common - version: 20.4.1 - 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://github.com/Prowlarr/Prowlarr - - https://github.com/k8s-at-home/container-images - - https://github.com/truecharts/charts/tree/master/charts/stable/prowlarr - - https://ghcr.io/onedr0p/prowlarr-develop - - https://ghcr.io/onedr0p/exportarr -type: application -version: 16.8.11 diff --git a/stable/prowlarr/16.8.11/README.md b/stable/prowlarr/16.8.11/README.md deleted file mode 100644 index e64167af9b..0000000000 --- a/stable/prowlarr/16.8.11/README.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -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/guides/scale-intro). - -## Configuration Options - -To view the chart specific options, please view Values.yaml included in the chart. - -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/ - -## 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 - -## 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/16.8.11/app-changelog.md b/stable/prowlarr/16.8.11/app-changelog.md deleted file mode 100644 index fc6d332fea..0000000000 --- a/stable/prowlarr/16.8.11/app-changelog.md +++ /dev/null @@ -1,79 +0,0 @@ - - -## [prowlarr-16.8.11](https://github.com/truecharts/charts/compare/prowlarr-16.4.0...prowlarr-16.8.11) (2024-04-28) - -### Chore - - - -- bump charts to ensure new icons are released - -- bump everything to release new doc pages - -- update groups html ([#21121](https://github.com/truecharts/charts/issues/21121)) - -- bump charts to release new docs to fix broken links - -- bump everything to regenerate readme's and site index - -- update container image common to v20.3.3[@3876ba5](https://github.com/3876ba5) by renovate ([#20478](https://github.com/truecharts/charts/issues/20478)) - -- update container image ghcr.io/onedr0p/prowlarr-develop to 1.15.0.4361[@833d7ca](https://github.com/833d7ca) by renovate ([#20066](https://github.com/truecharts/charts/issues/20066)) - -- update container image ghcr.io/onedr0p/prowlarr-develop to v1.16.2.4435[@e82f806](https://github.com/e82f806) by renovate ([#21057](https://github.com/truecharts/charts/issues/21057)) - -- update container image common to v20.3.7[@8cf9fc9](https://github.com/8cf9fc9) by renovate ([#20819](https://github.com/truecharts/charts/issues/20819)) - -- update container image ghcr.io/onedr0p/prowlarr-develop to 1.16.1.4420[@b92e309](https://github.com/b92e309) by renovate ([#20765](https://github.com/truecharts/charts/issues/20765)) - -- update container image ghcr.io/onedr0p/prowlarr-develop to v1.16.1.4420[@a60ce8c](https://github.com/a60ce8c) by renovate ([#20747](https://github.com/truecharts/charts/issues/20747)) - -- update container image common to v20.3.6[@27edfed](https://github.com/27edfed) by renovate ([#20599](https://github.com/truecharts/charts/issues/20599)) - -- update container image common to v20.3.5[@aedd88a](https://github.com/aedd88a) by renovate ([#20535](https://github.com/truecharts/charts/issues/20535)) - -- update container image common to v20.3.4[@d7e1b23](https://github.com/d7e1b23) by renovate ([#20527](https://github.com/truecharts/charts/issues/20527)) - -- update container image common to v20.3.12[@3303278](https://github.com/3303278) by renovate ([#21384](https://github.com/truecharts/charts/issues/21384)) - -- update container image ghcr.io/onedr0p/prowlarr-develop to 1.15.0.4361[@bd8092d](https://github.com/bd8092d) by renovate ([#20425](https://github.com/truecharts/charts/issues/20425)) - -- update container image common to v20.3.2[@0722ebb](https://github.com/0722ebb) by renovate ([#20334](https://github.com/truecharts/charts/issues/20334)) - -- update container image ghcr.io/onedr0p/exportarr to v2.0.1[@727e7bc](https://github.com/727e7bc) by renovate ([#20284](https://github.com/truecharts/charts/issues/20284)) - -- update container image common to v20.3.11[@dae6129](https://github.com/dae6129) by renovate ([#20875](https://github.com/truecharts/charts/issues/20875)) - -- update container image common to v20.2.10[@6f99c97](https://github.com/6f99c97) by renovate ([#19876](https://github.com/truecharts/charts/issues/19876)) - -- update container image ghcr.io/onedr0p/prowlarr-develop to v1.15.0.4361[@0b6b55c](https://github.com/0b6b55c) by renovate ([#19902](https://github.com/truecharts/charts/issues/19902)) - -- update container image common to v20.2.9[@10fd6c5](https://github.com/10fd6c5) by renovate ([#19817](https://github.com/truecharts/charts/issues/19817)) - -- update container image ghcr.io/onedr0p/prowlarr-develop to 1.14.3.4333[@60f146b](https://github.com/60f146b) by renovate ([#19780](https://github.com/truecharts/charts/issues/19780)) - -- update container image common to v20.2.4[@f245f5c](https://github.com/f245f5c) by renovate ([#19731](https://github.com/truecharts/charts/issues/19731)) - -- update container image common to v20.2.3[@06e462e](https://github.com/06e462e) by renovate ([#19673](https://github.com/truecharts/charts/issues/19673)) - -- update container image common to v20.2.2[@f7d0b92](https://github.com/f7d0b92) by renovate ([#19432](https://github.com/truecharts/charts/issues/19432)) - -- update container image ghcr.io/onedr0p/prowlarr-develop to v1.14.3.4333[@af90aa4](https://github.com/af90aa4) by renovate ([#19425](https://github.com/truecharts/charts/issues/19425)) - -- update container image ghcr.io/onedr0p/prowlarr-develop to v1.14.2.4318[@78e4f3a](https://github.com/78e4f3a) by renovate ([#19405](https://github.com/truecharts/charts/issues/19405)) - -- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) - -- update container image ghcr.io/onedr0p/prowlarr-develop to 1.14.1.4316[@882daa1](https://github.com/882daa1) by renovate ([#19255](https://github.com/truecharts/charts/issues/19255)) - -### Chore - - - -- rework SCALE catagories/groups to match helm and remove deprecated charts ([#21111](https://github.com/truecharts/charts/issues/21111)) - -### Fix - - - -- replace serviceexpert with externalinterfaces/networking-group in the SCALE GUI ([#21154](https://github.com/truecharts/charts/issues/21154)) \ No newline at end of file diff --git a/stable/prowlarr/16.8.11/app-readme.md b/stable/prowlarr/16.8.11/app-readme.md deleted file mode 100644 index 4e201b3174..0000000000 --- a/stable/prowlarr/16.8.11/app-readme.md +++ /dev/null @@ -1,8 +0,0 @@ -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/16.8.11/charts/common-20.3.12.tgz b/stable/prowlarr/16.8.11/charts/common-20.3.12.tgz deleted file mode 100644 index 621bd9e5a5277eda78f0f106b46b6afdc6f56acd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99407 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
        iZ#x$K}*@0J4scA@_XsWr>MiG1UB+r_n|MJ)K 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 S{{H{~0RR7!&lutWS_}Y48_RhB diff --git a/stable/prowlarr/16.8.11/dashboard.json b/stable/prowlarr/16.8.11/dashboard.json deleted file mode 100644 index 905280f4b6..0000000000 --- a/stable/prowlarr/16.8.11/dashboard.json +++ /dev/null @@ -1,1612 +0,0 @@ -{ - "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/16.8.11/icon-small.webp b/stable/prowlarr/16.8.11/icon-small.webp deleted file mode 100644 index ac725e78b668b885670972f469e77d4a4d574190..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 698 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 USs^`-+!!x`U;f{a2tEJ+0A-v)5C8xG diff --git a/stable/prowlarr/16.8.11/ix_values.yaml b/stable/prowlarr/16.8.11/ix_values.yaml deleted file mode 100644 index 5becd95424..0000000000 --- a/stable/prowlarr/16.8.11/ix_values.yaml +++ /dev/null @@ -1,115 +0,0 @@ -image: - repository: ghcr.io/onedr0p/prowlarr-develop - tag: 1.16.2.4435@sha256:e82f806cd03fea6470430290892f0f906f7d5981b81456a2a717028a250bc183 - 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: true - type: ClusterIP - targetSelector: exportarr - ports: - metrics: - enabled: true - port: 9697 - targetSelector: exportarr -workload: - main: - podSpec: - containers: - main: - probes: - liveness: - path: /ping - readiness: - path: /ping - startup: - type: tcp - env: - PROWLARR__PORT: "{{ .Values.service.main.ports.main.port }}" - PROWLARR__AUTHENTICATION_METHOD: "" - exportarr: - enabled: true - type: Deployment - strategy: RollingUpdate - replicas: 1 - podSpec: - containers: - exportarr: - primary: true - enabled: true - 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: - 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 -updated: true diff --git a/stable/prowlarr/16.8.11/questions.yaml b/stable/prowlarr/16.8.11/questions.yaml deleted file mode 100755 index 715ff61e36..0000000000 --- a/stable/prowlarr/16.8.11/questions.yaml +++ /dev/null @@ -1,3021 +0,0 @@ -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: 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: 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: 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/16.8.11/templates/NOTES.txt b/stable/prowlarr/16.8.11/templates/NOTES.txt deleted file mode 100644 index efcb74cb77..0000000000 --- a/stable/prowlarr/16.8.11/templates/NOTES.txt +++ /dev/null @@ -1 +0,0 @@ -{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/prowlarr/16.8.11/templates/common.yaml b/stable/prowlarr/16.8.11/templates/common.yaml deleted file mode 100644 index 3c93f57861..0000000000 --- a/stable/prowlarr/16.8.11/templates/common.yaml +++ /dev/null @@ -1,11 +0,0 @@ -{{/* Make sure all variables are set properly */}} -{{- include "tc.v1.common.loader.init" . -}} - -{{/* Disable [exportarr] if requested */}} -{{- if not .Values.metrics.main.enabled -}} - {{- $_ := set .Values.workload.exportarr "enabled" false -}} - {{- $_ := set .Values.service.metrics "enabled" false -}} -{{- end -}} - -{{/* Render the templates */}} -{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/prowlarr/16.8.11/values.yaml b/stable/prowlarr/16.8.11/values.yaml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/stable/prowlarr/17.1.6/.helmignore b/stable/prowlarr/17.1.6/.helmignore deleted file mode 100644 index feb7464da6..0000000000 --- a/stable/prowlarr/17.1.6/.helmignore +++ /dev/null @@ -1,32 +0,0 @@ -# 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.1.6/CHANGELOG.md b/stable/prowlarr/17.1.6/CHANGELOG.md deleted file mode 100644 index 941abb8a21..0000000000 --- a/stable/prowlarr/17.1.6/CHANGELOG.md +++ /dev/null @@ -1,3 +0,0 @@ -*for the complete changelog, please refer to the website* - -**Important:** \ No newline at end of file diff --git a/stable/prowlarr/17.1.6/Chart.yaml b/stable/prowlarr/17.1.6/Chart.yaml deleted file mode 100644 index 4e346d1d4e..0000000000 --- a/stable/prowlarr/17.1.6/Chart.yaml +++ /dev/null @@ -1,37 +0,0 @@ -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.17.2.4511 -dependencies: - - name: common - version: 23.0.11 - 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.1.6 diff --git a/stable/prowlarr/17.1.6/README.md b/stable/prowlarr/17.1.6/README.md deleted file mode 100644 index 64bd0cc3b8..0000000000 --- a/stable/prowlarr/17.1.6/README.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -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.1.6/app-readme.md b/stable/prowlarr/17.1.6/app-readme.md deleted file mode 100644 index 4e201b3174..0000000000 --- a/stable/prowlarr/17.1.6/app-readme.md +++ /dev/null @@ -1,8 +0,0 @@ -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.1.6/charts/common-23.0.9.tgz b/stable/prowlarr/17.1.6/charts/common-23.0.9.tgz deleted file mode 100644 index 12f30c4288409c1eca57b9cf3d9ebcabf6be3aee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96899 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 z 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 USs^`-+!!x`U;f{a2tEJ+0A-v)5C8xG diff --git a/stable/prowlarr/17.1.6/ix_values.yaml b/stable/prowlarr/17.1.6/ix_values.yaml deleted file mode 100644 index 0cd1223aec..0000000000 --- a/stable/prowlarr/17.1.6/ix_values.yaml +++ /dev/null @@ -1,115 +0,0 @@ -image: - repository: ghcr.io/onedr0p/prowlarr-develop - tag: 1.17.2.4511@sha256:01dce2a9c0e29a2a5338a9457698ea3e027727bed6b9f0ab7ac4a259cafb991b - 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: true - type: ClusterIP - targetSelector: exportarr - ports: - metrics: - enabled: true - port: 9697 - targetSelector: exportarr -workload: - main: - podSpec: - containers: - main: - probes: - liveness: - path: /ping - readiness: - path: /ping - startup: - type: tcp - env: - PROWLARR__PORT: "{{ .Values.service.main.ports.main.port }}" - PROWLARR__AUTHENTICATION_METHOD: "" - exportarr: - enabled: true - type: Deployment - strategy: RollingUpdate - replicas: 1 - podSpec: - containers: - exportarr: - primary: true - enabled: true - 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: - 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 -updated: true diff --git a/stable/prowlarr/17.1.6/questions.yaml b/stable/prowlarr/17.1.6/questions.yaml deleted file mode 100755 index 5cc5b73146..0000000000 --- a/stable/prowlarr/17.1.6/questions.yaml +++ /dev/null @@ -1,3214 +0,0 @@ -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.1.6/templates/NOTES.txt b/stable/prowlarr/17.1.6/templates/NOTES.txt deleted file mode 100644 index efcb74cb77..0000000000 --- a/stable/prowlarr/17.1.6/templates/NOTES.txt +++ /dev/null @@ -1 +0,0 @@ -{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/prowlarr/17.1.6/templates/common.yaml b/stable/prowlarr/17.1.6/templates/common.yaml deleted file mode 100644 index 3c93f57861..0000000000 --- a/stable/prowlarr/17.1.6/templates/common.yaml +++ /dev/null @@ -1,11 +0,0 @@ -{{/* Make sure all variables are set properly */}} -{{- include "tc.v1.common.loader.init" . -}} - -{{/* Disable [exportarr] if requested */}} -{{- if not .Values.metrics.main.enabled -}} - {{- $_ := set .Values.workload.exportarr "enabled" false -}} - {{- $_ := set .Values.service.metrics "enabled" false -}} -{{- end -}} - -{{/* Render the templates */}} -{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/prowlarr/17.1.6/values.yaml b/stable/prowlarr/17.1.6/values.yaml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/stable/prowlarr/app_versions.json b/stable/prowlarr/app_versions.json index e0204bf382..f23f347c86 100644 --- a/stable/prowlarr/app_versions.json +++ b/stable/prowlarr/app_versions.json @@ -3,13 +3,13 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/prowlarr/18.3.1", - "last_update": "2024-07-14 12:35:14", + "location": "/app/catalog/stable/prowlarr/18.3.1", + "last_update": "2024-09-20 02:39:05", "required_features": [ - "definitions/timezone", - "normalize/interfaceConfiguration", "definitions/certificate", - "definitions/interface" + "normalize/interfaceConfiguration", + "definitions/interface", + "definitions/timezone" ], "human_version": "1.20.1.4603_18.3.1", "version": "18.3.1", @@ -25,7 +25,7 @@ "dependencies": [ { "name": "common", - "version": "23.0.10", + "version": "23.0.11", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -59,7 +59,7 @@ "https://github.com/truecharts/charts/tree/master/charts/stable/prowlarr" ], "type": "application", - "version": "17.1.7" + "version": "18.3.1" }, "app_metadata": null, "schema": { @@ -5371,13 +5371,13 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/prowlarr/17.1.7", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/stable/prowlarr/17.1.7", + "last_update": "2024-09-20 02:39:05", "required_features": [ - "definitions/timezone", - "normalize/interfaceConfiguration", "definitions/certificate", - "definitions/interface" + "normalize/interfaceConfiguration", + "definitions/interface", + "definitions/timezone" ], "human_version": "1.17.2.4511_17.1.7", "version": "17.1.7", @@ -5393,7 +5393,7 @@ "dependencies": [ { "name": "common", - "version": "23.0.10", + "version": "23.0.11", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -10734,35693 +10734,5 @@ "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.1.6": { - "healthy": true, - "supported": true, - "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/prowlarr/17.1.6", - "last_update": "2024-05-29 12:35:14", - "required_features": [ - "definitions/timezone", - "normalize/interfaceConfiguration", - "definitions/certificate", - "definitions/interface" - ], - "human_version": "1.17.2.4511_17.1.6", - "version": "17.1.6", - "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.17.2.4511", - "dependencies": [ - { - "name": "common", - "version": "23.0.9", - "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.1.6" - }, - "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:

        " - }, - "16.8.11": { - "healthy": true, - "supported": true, - "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/prowlarr/16.8.11", - "last_update": "2024-05-29 12:35:14", - "required_features": [ - "definitions/timezone", - "normalize/interfaceConfiguration", - "definitions/certificate", - "definitions/interface" - ], - "human_version": "1.16.2.4435_16.8.11", - "version": "16.8.11", - "chart_metadata": { - "annotations": { - "max_scale_version": "24.04.0", - "min_scale_version": "23.10.0", - "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.16.2.4435", - "dependencies": [ - { - "name": "common", - "version": "20.3.12", - "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://github.com/Prowlarr/Prowlarr", - "https://github.com/k8s-at-home/container-images", - "https://github.com/truecharts/charts/tree/master/charts/stable/prowlarr", - "https://ghcr.io/onedr0p/prowlarr-develop", - "https://ghcr.io/onedr0p/exportarr" - ], - "type": "application", - "version": "16.8.11" - }, - "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": "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": "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": "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

        Configuration Options

        \n

        To view the chart specific options, please view Values.yaml included in the chart.

        \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

        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

        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:

        " - }, - "16.8.10": { - "healthy": true, - "supported": true, - "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/prowlarr/16.8.10", - "last_update": "2024-05-29 12:35:14", - "required_features": [ - "definitions/timezone", - "normalize/interfaceConfiguration", - "definitions/certificate", - "definitions/interface" - ], - "human_version": "1.16.2.4435_16.8.10", - "version": "16.8.10", - "chart_metadata": { - "annotations": { - "max_scale_version": "24.04.0", - "min_scale_version": "23.10.0", - "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.16.2.4435", - "dependencies": [ - { - "name": "common", - "version": "20.3.11", - "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://github.com/Prowlarr/Prowlarr", - "https://github.com/k8s-at-home/container-images", - "https://github.com/truecharts/charts/tree/master/charts/stable/prowlarr", - "https://ghcr.io/onedr0p/exportarr", - "https://ghcr.io/onedr0p/prowlarr-develop" - ], - "type": "application", - "version": "16.8.10" - }, - "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": "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": "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": "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

        Configuration Options

        \n

        To view the chart specific options, please view Values.yaml included in the chart.

        \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

        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

        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.4.1": { - "healthy": true, - "supported": true, - "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/prowlarr/15.4.1", - "last_update": "2024-05-29 12:35:14", - "required_features": [ - "definitions/timezone", - "normalize/interfaceConfiguration", - "definitions/certificate", - "definitions/interface" - ], - "human_version": "1.14.0.4286_15.4.1", - "version": "15.4.1", - "chart_metadata": { - "annotations": { - "max_scale_version": "24.04.0", - "min_scale_version": "23.10.0", - "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.14.0.4286", - "dependencies": [ - { - "name": "common", - "version": "18.1.2", - "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.png", - "keywords": [ - "prowlarr", - "torrent", - "usenet" - ], - "kubeVersion": ">=1.24.0-0", - "maintainers": [ - { - "name": "TrueCharts", - "email": "info@truecharts.org", - "url": "https://truecharts.org" - } - ], - "name": "prowlarr", - "sources": [ - "https://github.com/Prowlarr/Prowlarr", - "https://github.com/k8s-at-home/container-images", - "https://github.com/truecharts/charts/tree/master/charts/stable/prowlarr", - "https://ghcr.io/onedr0p/prowlarr-develop", - "https://ghcr.io/onedr0p/exportarr" - ], - "type": "application", - "version": "15.4.1" - }, - "app_metadata": null, - "schema": { - "groups": [ - { - "name": "Container Image", - "description": "Image to be used for container" - }, - { - "name": "General Settings", - "description": "General Deployment Settings" - }, - { - "name": "Workload Settings", - "description": "Workload Settings" - }, - { - "name": "App Configuration", - "description": "App Specific Config Options" - }, - { - "name": "Networking and Services", - "description": "Configure Network and Services for Container" - }, - { - "name": "Storage and Persistence", - "description": "Persist and Share Data that is Separate from the Container" - }, - { - "name": "Ingress", - "description": "Ingress Configuration" - }, - { - "name": "Security and Permissions", - "description": "Configure Security Context and Permissions" - }, - { - "name": "Resources and Devices", - "description": "Specify Resources/Devices to be Allocated to Workload" - }, - { - "name": "Middlewares", - "description": "Traefik Middlewares" - }, - { - "name": "Metrics", - "description": "Metrics" - }, - { - "name": "Addons", - "description": "Addon Configuration" - }, - { - "name": "Backup Configuration", - "description": "Configure Velero Backup Schedule" - }, - { - "name": "Advanced", - "description": "Advanced Configuration" - }, - { - "name": "Postgresql", - "description": "Postgresql" - }, - { - "name": "Documentation", - "description": "Documentation" - } - ], - "portals": { - "open": { - "protocols": [ - "$kubernetes-resource_configmap_tcportal-open_protocol" - ], - "host": [ - "$kubernetes-resource_configmap_tcportal-open_host" - ], - "ports": [ - "$kubernetes-resource_configmap_tcportal-open_port" - ] - } - }, - "questions": [ - { - "variable": "global", - "group": "General Settings", - "label": "Global Settings", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "stopAll", - "label": "Stop All", - "description": "Stops All Running pods and hibernates cnpg", - "schema": { - "type": "boolean", - "default": false - } - } - ] - } - }, - { - "variable": "workload", - "group": "Workload Settings", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Type (Advanced)", - "schema": { - "type": "string", - "default": "Deployment", - "enum": [ - { - "value": "Deployment", - "description": "Deployment" - }, - { - "value": "DaemonSet", - "description": "DaemonSet" - } - ] - } - }, - { - "variable": "replicas", - "label": "Replicas (Advanced)", - "description": "Set the number of Replicas", - "schema": { - "type": "int", - "show_if": [ - [ - "type", - "!=", - "DaemonSet" - ] - ], - "default": 1 - } - }, - { - "variable": "podSpec", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "containers", - "label": "Containers", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "Main Container", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "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 Settings", - "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 Settings", - "label": "Global Pod Options (Advanced)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "expertPodOpts", - "label": "Expert - Pod Options", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hostNetwork", - "label": "Host Networking", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "dnsConfig", - "label": "DNS Configuration", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "options", - "label": "Options", - "schema": { - "type": "list", - "default": [ - { - "name": "ndots", - "value": "1" - } - ], - "items": [ - { - "variable": "optionsEntry", - "label": "Option Entry", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true - } - }, - { - "variable": "value", - "label": "Value", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "nameservers", - "label": "Nameservers", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "nsEntry", - "label": "Nameserver Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - }, - { - "variable": "searches", - "label": "Searches", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "searchEntry", - "label": "Search Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "imagePullSecretList", - "group": "General Settings", - "label": "Image Pull Secrets", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "pullsecretentry", - "label": "Pull Secret", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "data", - "label": "Data", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "registry", - "label": "Registry", - "schema": { - "type": "string", - "required": true, - "default": "https://index.docker.io/v1/" - } - }, - { - "variable": "username", - "label": "Username", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "password", - "label": "Password", - "schema": { - "type": "string", - "required": true, - "private": true, - "default": "" - } - }, - { - "variable": "email", - "label": "Email", - "schema": { - "type": "string", - "required": true, - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "service", - "group": "Networking and Services", - "label": "Configure Service(s)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "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": "serviceexpert", - "group": "Networking and Services", - "label": "Show Expert Config", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "scaleExternalInterface", - "description": "Add External Interfaces", - "label": "Add external Interfaces", - "group": "Networking", - "schema": { - "type": "list", - "items": [ - { - "variable": "interfaceConfiguration", - "description": "Interface Configuration", - "label": "Interface Configuration", - "schema": { - "additional_attrs": true, - "type": "dict", - "$ref": [ - "normalize/interfaceConfiguration" - ], - "attrs": [ - { - "variable": "hostInterface", - "description": "Please Specify Host Interface", - "label": "Host Interface", - "schema": { - "type": "string", - "required": true, - "$ref": [ - "definitions/interface" - ], - "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": "Networking and Services", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "serviceListEntry", - "label": "Custom Service", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the service", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "LoadBalancer", - "description": "LoadBalancer (Expose Ports)" - }, - { - "value": "ClusterIP", - "description": "ClusterIP (Do Not Expose Ports)" - }, - { - "value": "Simple", - "description": "Deprecated CHANGE THIS" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "advancedsvcset", - "label": "Show Advanced Service Settings", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "externalIPs", - "label": "External IP's", - "description": "External IP's", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "externalIP", - "label": "External IP", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "ipFamilyPolicy", - "label": "IP Family Policy", - "description": "Specify the IP Policy", - "schema": { - "type": "string", - "default": "SingleStack", - "enum": [ - { - "value": "SingleStack", - "description": "SingleStack" - }, - { - "value": "PreferDualStack", - "description": "PreferDualStack" - }, - { - "value": "RequireDualStack", - "description": "RequireDualStack" - } - ] - } - }, - { - "variable": "ipFamilies", - "label": "IP Families", - "description": "(Advanced) The IP Families that should be used", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ipFamily", - "label": "IP Family", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "portsList", - "label": "Additional Service Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsListEntry", - "label": "Custom ports", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Port", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Port Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "protocol", - "label": "Port Type", - "schema": { - "type": "string", - "default": "tcp", - "enum": [ - { - "value": "http", - "description": "HTTP" - }, - { - "value": "https", - "description": "HTTPS" - }, - { - "value": "tcp", - "description": "TCP" - }, - { - "value": "udp", - "description": "UDP" - } - ] - } - }, - { - "variable": "targetPort", - "label": "Target Port", - "description": "This port exposes the container port on the service", - "schema": { - "type": "int", - "required": true - } - }, - { - "variable": "port", - "label": "Container Port", - "schema": { - "type": "int", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "persistence", - "label": "Integrated Persistent Storage", - "description": "Integrated Persistent Storage", - "group": "Storage and 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": "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": "Storage and Persistence", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "persistenceListEntry", - "label": "Custom Storage", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the storage", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "type", - "label": "Type of Storage", - "description": "Sets the persistence type, Anything other than PVC could break rollback!", - "schema": { - "type": "string", - "default": "hostPath", - "enum": [ - { - "value": "pvc", - "description": "PVC" - }, - { - "value": "hostPath", - "description": "Host Path" - }, - { - "value": "emptyDir", - "description": "emptyDir" - }, - { - "value": "nfs", - "description": "NFS Share" - } - ] - } - }, - { - "variable": "server", - "label": "NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "path", - "label": "Path on NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "iscsi", - "label": "iSCSI Options", - "schema": { - "show_if": [ - [ - "type", - "=", - "iscsi" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "targetPortal", - "label": "targetPortal", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "iqn", - "label": "iqn", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "lun", - "label": "lun", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "authSession", - "label": "authSession", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - }, - { - "variable": "authDiscovery", - "label": "authDiscovery", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - }, - { - "variable": "autoPermissions", - "label": "Automatic Permissions Configuration", - "description": "Automatically set permissions", - "schema": { - "show_if": [ - [ - "type", - "!=", - "pvc" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "chown", - "label": "Run CHOWN", - "description": "It will run CHOWN on the path with the given fsGroup\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": "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": "Security and Permissions", - "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 and Devices", - "label": "Resource Limits", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "limits", - "label": "Advanced Limit Resource Consumption", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "4000m", - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "8Gi", - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - }, - { - "variable": "gpu.intel.com/i915", - "label": "Add Intel i915 GPUs", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "nvidia.com/gpu", - "label": "Add NVIDIA GPUs (Experimental)", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "amd.com/gpu", - "label": "Add AMD GPUs", - "schema": { - "type": "int", - "default": 0 - } - } - ] - } - }, - { - "variable": "requests", - "label": "Minimum Resources Required (request)", - "schema": { - "additional_attrs": true, - "type": "dict", - "hidden": true, - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "10m", - "hidden": true, - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "50Mi", - "hidden": true, - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - } - ] - } - } - ] - } - }, - { - "variable": "deviceList", - "label": "Mount USB Devices", - "group": "Resources and Devices", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "deviceListEntry", - "label": "Device", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Storage", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "type", - "label": "(Advanced) Type of Storage", - "description": "Sets the persistence type", - "schema": { - "type": "string", - "default": "device", - "hidden": true - } - }, - { - "variable": "readOnly", - "label": "readOnly", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "hostPath", - "label": "Host Device Path", - "description": "Path to the device on the host system", - "schema": { - "type": "path" - } - }, - { - "variable": "mountPath", - "label": "Container Device Path", - "description": "Path inside the container the device is mounted", - "schema": { - "type": "string", - "default": "/dev/ttyACM0" - } - } - ] - } - } - ] - } - }, - { - "variable": "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": "Advanced", - "label": "(Advanced) Network Policy", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "netPolicyEntry", - "label": "Network Policy Entry", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "policyType", - "label": "Policy Type", - "schema": { - "type": "string", - "default": "", - "enum": [ - { - "value": "", - "description": "Default" - }, - { - "value": "ingress", - "description": "Ingress" - }, - { - "value": "egress", - "description": "Egress" - }, - { - "value": "ingress-egress", - "description": "Ingress and Egress" - } - ] - } - }, - { - "variable": "egress", - "label": "Egress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "egressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "to", - "label": "To", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "toEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ingressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "from", - "label": "From", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "fromEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "addons", - "group": "Addons", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "Codeserver", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "service", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "NodePort", - "description": "Deprecated CHANGE THIS" - }, - { - "value": "ClusterIP", - "description": "ClusterIP" - }, - { - "value": "LoadBalancer", - "description": "LoadBalancer" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "ports", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int", - "default": 36107 - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable Ingress", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hosts", - "label": "Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "hostEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "host", - "label": "HostName", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "paths", - "label": "Paths", - "schema": { - "type": "list", - "default": [ - { - "path": "/", - "pathType": "Prefix" - } - ], - "items": [ - { - "variable": "pathEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "path", - "label": "Path", - "schema": { - "type": "string", - "required": true, - "default": "/" - } - }, - { - "variable": "pathType", - "label": "Path Type", - "schema": { - "type": "string", - "required": true, - "default": "Prefix" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "integrations", - "label": "Integrations", - "description": "Connect ingress with other charts", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "traefik", - "label": "Traefik", - "description": "Connect ingress with Traefik", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "allowCors", - "label": "Allow Cross Origin Requests (advanced)", - "schema": { - "type": "boolean", - "default": false, - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - }, - { - "variable": "entrypoints", - "label": "Entrypoints", - "schema": { - "type": "list", - "default": [ - "websecure" - ], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "entrypoint", - "label": "Entrypoint", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "middlewares", - "label": "Middlewares", - "schema": { - "type": "list", - "default": [], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "middleware", - "label": "Middleware", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "name", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "namespace", - "label": "namespace (optional)", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "certManager", - "label": "certManager", - "description": "Connect ingress with certManager", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "certificateIssuer", - "label": "certificateIssuer", - "description": "defaults to chartname", - "schema": { - "type": "string", - "default": "", - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "advanced", - "label": "Show Advanced Settings", - "description": "Advanced settings are not covered by TrueCharts Support", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "ingressClassName", - "label": "(Advanced/Optional) IngressClass Name", - "schema": { - "type": "string", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": "" - } - }, - { - "variable": "tls", - "label": "TLS-Settings", - "schema": { - "type": "list", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": [], - "items": [ - { - "variable": "tlsEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "hosts", - "label": "Certificate Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "host", - "label": "Host", - "schema": { - "type": "string", - "default": "", - "required": true - } - } - ] - } - }, - { - "variable": "certificateIssuer", - "label": "Use Cert-Manager clusterIssuer", - "description": "add the name of your cert-manager clusterIssuer here for automatic tls certificates.", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "clusterCertificate", - "label": "Cluster Certificate (Advanced)", - "description": "Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.", - "schema": { - "type": "string", - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "default": "" - } - }, - { - "variable": "secretName", - "label": "Use Custom Certificate Secret (Advanced)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "scaleCert", - "label": "Use TrueNAS SCALE Certificate (Deprecated)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "int", - "$ref": [ - "definitions/certificate" - ], - "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 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

        prowlarr-14.3.5 (2024-02-12)

        \n

        Chore

        \n
          \n
        • update container image ghcr.io/onedr0p/prowlarr-develop to v1.13.3.4273@ca264d9 by renovate (#18137)
        • \n
        \n

        prowlarr-14.3.4 (2024-02-05)

        \n

        Chore

        \n
          \n
        • update container image ghcr.io/onedr0p/prowlarr-develop to 1.13.2.4251@23d16bf by renovate (#17956)
        • \n
        \n

        prowlarr-14.3.3 (2024-02-05)

        \n

        Chore

        \n
          \n
        • update container image ghcr.io/onedr0p/prowlarr-develop to v1.13.2.4251@1ada8d9 by renovate (#17915)
        • \n
        \n

        prowlarr-14.3.2 (2024-02-03)

        \n

        Chore

        \n
          \n
        • update container image common to v17.2.30@19ad5ec by renovate (#17804)
        • \n
        \n

        prowlarr-14.3.1 (2024-01-29)

        \n

        Chore

        \n
          \n
        • update container image ghcr.io/onedr0p/exportarr to v1.6.1@60cf3d4 by renovate (#17725)
        • \n
        \n

        prowlarr-14.3.0 (2024-01-29)

        \n

        Chore

        \n
          \n
        • update container image ghcr.io/onedr0p/prowlarr-develop to v1.13.0.4217@bbc16bd by renovate (#17694)
        • \n
        \n

        prowlarr-14.2.7 (2024-01-26)

        \n

        Chore

        \n
          \n
        • update container image common to v17.2.29@d7c41a3 by renovate (#17545)
        • \n
        \n

        prowlarr-14.2.6 (2024-01-21)

        \n

        Chore

        \n
          \n
        • update container image common to v17.2.28@918b4c5 by renovate (#17478)
        • \n
        \n

        prowlarr-14.2.5 (2024-01-21)

        \n

        Chore

        " - }, - "15.4.0": { - "healthy": true, - "supported": true, - "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/prowlarr/15.4.0", - "last_update": "2024-05-29 12:35:14", - "required_features": [ - "definitions/timezone", - "normalize/interfaceConfiguration", - "definitions/certificate", - "definitions/interface" - ], - "human_version": "1.14.0.4286_15.4.0", - "version": "15.4.0", - "chart_metadata": { - "annotations": { - "max_scale_version": "24.04.0", - "min_scale_version": "23.10.0", - "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.14.0.4286", - "dependencies": [ - { - "name": "common", - "version": "18.1.2", - "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.png", - "keywords": [ - "prowlarr", - "torrent", - "usenet" - ], - "kubeVersion": ">=1.24.0-0", - "maintainers": [ - { - "name": "TrueCharts", - "email": "info@truecharts.org", - "url": "https://truecharts.org" - } - ], - "name": "prowlarr", - "sources": [ - "https://github.com/Prowlarr/Prowlarr", - "https://github.com/k8s-at-home/container-images", - "https://github.com/truecharts/charts/tree/master/charts/stable/prowlarr", - "https://ghcr.io/onedr0p/prowlarr-develop", - "https://ghcr.io/onedr0p/exportarr" - ], - "type": "application", - "version": "15.4.0" - }, - "app_metadata": null, - "schema": { - "groups": [ - { - "name": "Container Image", - "description": "Image to be used for container" - }, - { - "name": "General Settings", - "description": "General Deployment Settings" - }, - { - "name": "Workload Settings", - "description": "Workload Settings" - }, - { - "name": "App Configuration", - "description": "App Specific Config Options" - }, - { - "name": "Networking and Services", - "description": "Configure Network and Services for Container" - }, - { - "name": "Storage and Persistence", - "description": "Persist and Share Data that is Separate from the Container" - }, - { - "name": "Ingress", - "description": "Ingress Configuration" - }, - { - "name": "Security and Permissions", - "description": "Configure Security Context and Permissions" - }, - { - "name": "Resources and Devices", - "description": "Specify Resources/Devices to be Allocated to Workload" - }, - { - "name": "Middlewares", - "description": "Traefik Middlewares" - }, - { - "name": "Metrics", - "description": "Metrics" - }, - { - "name": "Addons", - "description": "Addon Configuration" - }, - { - "name": "Backup Configuration", - "description": "Configure Velero Backup Schedule" - }, - { - "name": "Advanced", - "description": "Advanced Configuration" - }, - { - "name": "Postgresql", - "description": "Postgresql" - }, - { - "name": "Documentation", - "description": "Documentation" - } - ], - "portals": { - "open": { - "protocols": [ - "$kubernetes-resource_configmap_tcportal-open_protocol" - ], - "host": [ - "$kubernetes-resource_configmap_tcportal-open_host" - ], - "ports": [ - "$kubernetes-resource_configmap_tcportal-open_port" - ] - } - }, - "questions": [ - { - "variable": "global", - "group": "General Settings", - "label": "Global Settings", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "stopAll", - "label": "Stop All", - "description": "Stops All Running pods and hibernates cnpg", - "schema": { - "type": "boolean", - "default": false - } - } - ] - } - }, - { - "variable": "workload", - "group": "Workload Settings", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Type (Advanced)", - "schema": { - "type": "string", - "default": "Deployment", - "enum": [ - { - "value": "Deployment", - "description": "Deployment" - }, - { - "value": "DaemonSet", - "description": "DaemonSet" - } - ] - } - }, - { - "variable": "replicas", - "label": "Replicas (Advanced)", - "description": "Set the number of Replicas", - "schema": { - "type": "int", - "show_if": [ - [ - "type", - "!=", - "DaemonSet" - ] - ], - "default": 1 - } - }, - { - "variable": "podSpec", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "containers", - "label": "Containers", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "Main Container", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "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 Settings", - "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 Settings", - "label": "Global Pod Options (Advanced)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "expertPodOpts", - "label": "Expert - Pod Options", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hostNetwork", - "label": "Host Networking", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "dnsConfig", - "label": "DNS Configuration", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "options", - "label": "Options", - "schema": { - "type": "list", - "default": [ - { - "name": "ndots", - "value": "1" - } - ], - "items": [ - { - "variable": "optionsEntry", - "label": "Option Entry", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true - } - }, - { - "variable": "value", - "label": "Value", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "nameservers", - "label": "Nameservers", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "nsEntry", - "label": "Nameserver Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - }, - { - "variable": "searches", - "label": "Searches", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "searchEntry", - "label": "Search Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "imagePullSecretList", - "group": "General Settings", - "label": "Image Pull Secrets", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "pullsecretentry", - "label": "Pull Secret", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "data", - "label": "Data", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "registry", - "label": "Registry", - "schema": { - "type": "string", - "required": true, - "default": "https://index.docker.io/v1/" - } - }, - { - "variable": "username", - "label": "Username", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "password", - "label": "Password", - "schema": { - "type": "string", - "required": true, - "private": true, - "default": "" - } - }, - { - "variable": "email", - "label": "Email", - "schema": { - "type": "string", - "required": true, - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "service", - "group": "Networking and Services", - "label": "Configure Service(s)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "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": "serviceexpert", - "group": "Networking and Services", - "label": "Show Expert Config", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "scaleExternalInterface", - "description": "Add External Interfaces", - "label": "Add external Interfaces", - "group": "Networking", - "schema": { - "type": "list", - "items": [ - { - "variable": "interfaceConfiguration", - "description": "Interface Configuration", - "label": "Interface Configuration", - "schema": { - "additional_attrs": true, - "type": "dict", - "$ref": [ - "normalize/interfaceConfiguration" - ], - "attrs": [ - { - "variable": "hostInterface", - "description": "Please Specify Host Interface", - "label": "Host Interface", - "schema": { - "type": "string", - "required": true, - "$ref": [ - "definitions/interface" - ], - "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": "Networking and Services", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "serviceListEntry", - "label": "Custom Service", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the service", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "LoadBalancer", - "description": "LoadBalancer (Expose Ports)" - }, - { - "value": "ClusterIP", - "description": "ClusterIP (Do Not Expose Ports)" - }, - { - "value": "Simple", - "description": "Deprecated CHANGE THIS" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "advancedsvcset", - "label": "Show Advanced Service Settings", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "externalIPs", - "label": "External IP's", - "description": "External IP's", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "externalIP", - "label": "External IP", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "ipFamilyPolicy", - "label": "IP Family Policy", - "description": "Specify the IP Policy", - "schema": { - "type": "string", - "default": "SingleStack", - "enum": [ - { - "value": "SingleStack", - "description": "SingleStack" - }, - { - "value": "PreferDualStack", - "description": "PreferDualStack" - }, - { - "value": "RequireDualStack", - "description": "RequireDualStack" - } - ] - } - }, - { - "variable": "ipFamilies", - "label": "IP Families", - "description": "(Advanced) The IP Families that should be used", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ipFamily", - "label": "IP Family", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "portsList", - "label": "Additional Service Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsListEntry", - "label": "Custom ports", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Port", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Port Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "protocol", - "label": "Port Type", - "schema": { - "type": "string", - "default": "tcp", - "enum": [ - { - "value": "http", - "description": "HTTP" - }, - { - "value": "https", - "description": "HTTPS" - }, - { - "value": "tcp", - "description": "TCP" - }, - { - "value": "udp", - "description": "UDP" - } - ] - } - }, - { - "variable": "targetPort", - "label": "Target Port", - "description": "This port exposes the container port on the service", - "schema": { - "type": "int", - "required": true - } - }, - { - "variable": "port", - "label": "Container Port", - "schema": { - "type": "int", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "persistence", - "label": "Integrated Persistent Storage", - "description": "Integrated Persistent Storage", - "group": "Storage and 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": "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": "Storage and Persistence", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "persistenceListEntry", - "label": "Custom Storage", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the storage", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "type", - "label": "Type of Storage", - "description": "Sets the persistence type, Anything other than PVC could break rollback!", - "schema": { - "type": "string", - "default": "hostPath", - "enum": [ - { - "value": "pvc", - "description": "PVC" - }, - { - "value": "hostPath", - "description": "Host Path" - }, - { - "value": "emptyDir", - "description": "emptyDir" - }, - { - "value": "nfs", - "description": "NFS Share" - } - ] - } - }, - { - "variable": "server", - "label": "NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "path", - "label": "Path on NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "iscsi", - "label": "iSCSI Options", - "schema": { - "show_if": [ - [ - "type", - "=", - "iscsi" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "targetPortal", - "label": "targetPortal", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "iqn", - "label": "iqn", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "lun", - "label": "lun", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "authSession", - "label": "authSession", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - }, - { - "variable": "authDiscovery", - "label": "authDiscovery", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - }, - { - "variable": "autoPermissions", - "label": "Automatic Permissions Configuration", - "description": "Automatically set permissions", - "schema": { - "show_if": [ - [ - "type", - "!=", - "pvc" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "chown", - "label": "Run CHOWN", - "description": "It will run CHOWN on the path with the given fsGroup\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": "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": "Security and Permissions", - "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 and Devices", - "label": "Resource Limits", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "limits", - "label": "Advanced Limit Resource Consumption", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "4000m", - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "8Gi", - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - }, - { - "variable": "gpu.intel.com/i915", - "label": "Add Intel i915 GPUs", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "nvidia.com/gpu", - "label": "Add NVIDIA GPUs (Experimental)", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "amd.com/gpu", - "label": "Add AMD GPUs", - "schema": { - "type": "int", - "default": 0 - } - } - ] - } - }, - { - "variable": "requests", - "label": "Minimum Resources Required (request)", - "schema": { - "additional_attrs": true, - "type": "dict", - "hidden": true, - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "10m", - "hidden": true, - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "50Mi", - "hidden": true, - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - } - ] - } - } - ] - } - }, - { - "variable": "deviceList", - "label": "Mount USB Devices", - "group": "Resources and Devices", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "deviceListEntry", - "label": "Device", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Storage", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "type", - "label": "(Advanced) Type of Storage", - "description": "Sets the persistence type", - "schema": { - "type": "string", - "default": "device", - "hidden": true - } - }, - { - "variable": "readOnly", - "label": "readOnly", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "hostPath", - "label": "Host Device Path", - "description": "Path to the device on the host system", - "schema": { - "type": "path" - } - }, - { - "variable": "mountPath", - "label": "Container Device Path", - "description": "Path inside the container the device is mounted", - "schema": { - "type": "string", - "default": "/dev/ttyACM0" - } - } - ] - } - } - ] - } - }, - { - "variable": "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": "Advanced", - "label": "(Advanced) Network Policy", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "netPolicyEntry", - "label": "Network Policy Entry", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "policyType", - "label": "Policy Type", - "schema": { - "type": "string", - "default": "", - "enum": [ - { - "value": "", - "description": "Default" - }, - { - "value": "ingress", - "description": "Ingress" - }, - { - "value": "egress", - "description": "Egress" - }, - { - "value": "ingress-egress", - "description": "Ingress and Egress" - } - ] - } - }, - { - "variable": "egress", - "label": "Egress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "egressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "to", - "label": "To", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "toEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ingressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "from", - "label": "From", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "fromEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "addons", - "group": "Addons", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "Codeserver", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "service", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "NodePort", - "description": "Deprecated CHANGE THIS" - }, - { - "value": "ClusterIP", - "description": "ClusterIP" - }, - { - "value": "LoadBalancer", - "description": "LoadBalancer" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "ports", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int", - "default": 36107 - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable Ingress", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hosts", - "label": "Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "hostEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "host", - "label": "HostName", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "paths", - "label": "Paths", - "schema": { - "type": "list", - "default": [ - { - "path": "/", - "pathType": "Prefix" - } - ], - "items": [ - { - "variable": "pathEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "path", - "label": "Path", - "schema": { - "type": "string", - "required": true, - "default": "/" - } - }, - { - "variable": "pathType", - "label": "Path Type", - "schema": { - "type": "string", - "required": true, - "default": "Prefix" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "integrations", - "label": "Integrations", - "description": "Connect ingress with other charts", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "traefik", - "label": "Traefik", - "description": "Connect ingress with Traefik", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "allowCors", - "label": "Allow Cross Origin Requests (advanced)", - "schema": { - "type": "boolean", - "default": false, - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - }, - { - "variable": "entrypoints", - "label": "Entrypoints", - "schema": { - "type": "list", - "default": [ - "websecure" - ], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "entrypoint", - "label": "Entrypoint", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "middlewares", - "label": "Middlewares", - "schema": { - "type": "list", - "default": [], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "middleware", - "label": "Middleware", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "name", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "namespace", - "label": "namespace (optional)", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "certManager", - "label": "certManager", - "description": "Connect ingress with certManager", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "certificateIssuer", - "label": "certificateIssuer", - "description": "defaults to chartname", - "schema": { - "type": "string", - "default": "", - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "advanced", - "label": "Show Advanced Settings", - "description": "Advanced settings are not covered by TrueCharts Support", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "ingressClassName", - "label": "(Advanced/Optional) IngressClass Name", - "schema": { - "type": "string", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": "" - } - }, - { - "variable": "tls", - "label": "TLS-Settings", - "schema": { - "type": "list", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": [], - "items": [ - { - "variable": "tlsEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "hosts", - "label": "Certificate Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "host", - "label": "Host", - "schema": { - "type": "string", - "default": "", - "required": true - } - } - ] - } - }, - { - "variable": "certificateIssuer", - "label": "Use Cert-Manager clusterIssuer", - "description": "add the name of your cert-manager clusterIssuer here for automatic tls certificates.", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "clusterCertificate", - "label": "Cluster Certificate (Advanced)", - "description": "Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.", - "schema": { - "type": "string", - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "default": "" - } - }, - { - "variable": "secretName", - "label": "Use Custom Certificate Secret (Advanced)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "scaleCert", - "label": "Use TrueNAS SCALE Certificate (Deprecated)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "int", - "$ref": [ - "definitions/certificate" - ], - "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 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

        prowlarr-14.3.5 (2024-02-12)

        \n

        Chore

        \n
          \n
        • update container image ghcr.io/onedr0p/prowlarr-develop to v1.13.3.4273@ca264d9 by renovate (#18137)
        • \n
        \n

        prowlarr-14.3.4 (2024-02-05)

        \n

        Chore

        \n
          \n
        • update container image ghcr.io/onedr0p/prowlarr-develop to 1.13.2.4251@23d16bf by renovate (#17956)
        • \n
        \n

        prowlarr-14.3.3 (2024-02-05)

        \n

        Chore

        \n
          \n
        • update container image ghcr.io/onedr0p/prowlarr-develop to v1.13.2.4251@1ada8d9 by renovate (#17915)
        • \n
        \n

        prowlarr-14.3.2 (2024-02-03)

        \n

        Chore

        \n
          \n
        • update container image common to v17.2.30@19ad5ec by renovate (#17804)
        • \n
        \n

        prowlarr-14.3.1 (2024-01-29)

        \n

        Chore

        \n
          \n
        • update container image ghcr.io/onedr0p/exportarr to v1.6.1@60cf3d4 by renovate (#17725)
        • \n
        \n

        prowlarr-14.3.0 (2024-01-29)

        \n

        Chore

        \n
          \n
        • update container image ghcr.io/onedr0p/prowlarr-develop to v1.13.0.4217@bbc16bd by renovate (#17694)
        • \n
        \n

        prowlarr-14.2.7 (2024-01-26)

        \n

        Chore

        \n
          \n
        • update container image common to v17.2.29@d7c41a3 by renovate (#17545)
        • \n
        \n

        prowlarr-14.2.6 (2024-01-21)

        \n

        Chore

        \n
          \n
        • update container image common to v17.2.28@918b4c5 by renovate (#17478)
        • \n
        \n

        prowlarr-14.2.5 (2024-01-21)

        \n

        Chore

        \n
          \n
        • update container image common to v17.2.26@24c98f7 by renovate (#17409)
        • \n
        " - }, - "14.5.0": { - "healthy": true, - "supported": true, - "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/prowlarr/14.5.0", - "last_update": "2024-05-29 12:35:14", - "required_features": [ - "definitions/timezone", - "definitions/gpuConfiguration", - "definitions/interface", - "normalize/interfaceConfiguration", - "definitions/certificate" - ], - "human_version": "1.13.3.4273_14.5.0", - "version": "14.5.0", - "chart_metadata": { - "annotations": { - "max_scale_version": "24.04.0", - "min_scale_version": "23.10.0", - "truecharts.org/category": "media", - "truecharts.org/max_helm_version": "3.14", - "truecharts.org/min_helm_version": "3.12", - "truecharts.org/train": "stable" - }, - "apiVersion": "v2", - "appVersion": "1.13.3.4273", - "dependencies": [ - { - "name": "common", - "version": "17.5.0", - "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.png", - "keywords": [ - "prowlarr", - "torrent", - "usenet" - ], - "kubeVersion": ">=1.24.0-0", - "maintainers": [ - { - "name": "TrueCharts", - "email": "info@truecharts.org", - "url": "https://truecharts.org" - } - ], - "name": "prowlarr", - "sources": [ - "https://github.com/Prowlarr/Prowlarr", - "https://github.com/k8s-at-home/container-images", - "https://github.com/truecharts/charts/tree/master/charts/stable/prowlarr", - "https://ghcr.io/onedr0p/exportarr", - "https://ghcr.io/onedr0p/prowlarr-develop" - ], - "type": "application", - "version": "14.5.0" - }, - "app_metadata": null, - "schema": { - "groups": [ - { - "name": "Container Image", - "description": "Image to be used for container" - }, - { - "name": "General Settings", - "description": "General Deployment Settings" - }, - { - "name": "Workload Settings", - "description": "Workload Settings" - }, - { - "name": "App Configuration", - "description": "App Specific Config Options" - }, - { - "name": "Networking and Services", - "description": "Configure Network and Services for Container" - }, - { - "name": "Storage and Persistence", - "description": "Persist and Share Data that is Separate from the Container" - }, - { - "name": "Ingress", - "description": "Ingress Configuration" - }, - { - "name": "Security and Permissions", - "description": "Configure Security Context and Permissions" - }, - { - "name": "Resources and Devices", - "description": "Specify Resources/Devices to be Allocated to Workload" - }, - { - "name": "Middlewares", - "description": "Traefik Middlewares" - }, - { - "name": "Metrics", - "description": "Metrics" - }, - { - "name": "Addons", - "description": "Addon Configuration" - }, - { - "name": "Backup Configuration", - "description": "Configure Velero Backup Schedule" - }, - { - "name": "Advanced", - "description": "Advanced Configuration" - }, - { - "name": "Postgresql", - "description": "Postgresql" - }, - { - "name": "Documentation", - "description": "Documentation" - } - ], - "portals": { - "open": { - "protocols": [ - "$kubernetes-resource_configmap_tcportal-open_protocol" - ], - "host": [ - "$kubernetes-resource_configmap_tcportal-open_host" - ], - "ports": [ - "$kubernetes-resource_configmap_tcportal-open_port" - ] - } - }, - "questions": [ - { - "variable": "global", - "group": "General Settings", - "label": "Global Settings", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "stopAll", - "label": "Stop All", - "description": "Stops All Running pods and hibernates cnpg", - "schema": { - "type": "boolean", - "default": false - } - } - ] - } - }, - { - "variable": "workload", - "group": "Workload Settings", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Type (Advanced)", - "schema": { - "type": "string", - "default": "Deployment", - "enum": [ - { - "value": "Deployment", - "description": "Deployment" - }, - { - "value": "DaemonSet", - "description": "DaemonSet" - } - ] - } - }, - { - "variable": "replicas", - "label": "Replicas (Advanced)", - "description": "Set the number of Replicas", - "schema": { - "type": "int", - "show_if": [ - [ - "type", - "!=", - "DaemonSet" - ] - ], - "default": 1 - } - }, - { - "variable": "podSpec", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "containers", - "label": "Containers", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "Main Container", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "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 Settings", - "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 Settings", - "label": "Global Pod Options (Advanced)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "expertPodOpts", - "label": "Expert - Pod Options", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hostNetwork", - "label": "Host Networking", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "dnsConfig", - "label": "DNS Configuration", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "options", - "label": "Options", - "schema": { - "type": "list", - "default": [ - { - "name": "ndots", - "value": "1" - } - ], - "items": [ - { - "variable": "optionsEntry", - "label": "Option Entry", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true - } - }, - { - "variable": "value", - "label": "Value", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "nameservers", - "label": "Nameservers", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "nsEntry", - "label": "Nameserver Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - }, - { - "variable": "searches", - "label": "Searches", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "searchEntry", - "label": "Search Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "imagePullSecretList", - "group": "General Settings", - "label": "Image Pull Secrets", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "pullsecretentry", - "label": "Pull Secret", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "data", - "label": "Data", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "registry", - "label": "Registry", - "schema": { - "type": "string", - "required": true, - "default": "https://index.docker.io/v1/" - } - }, - { - "variable": "username", - "label": "Username", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "password", - "label": "Password", - "schema": { - "type": "string", - "required": true, - "private": true, - "default": "" - } - }, - { - "variable": "email", - "label": "Email", - "schema": { - "type": "string", - "required": true, - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "service", - "group": "Networking and Services", - "label": "Configure Service(s)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "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": "serviceexpert", - "group": "Networking and Services", - "label": "Show Expert Config", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "scaleExternalInterface", - "description": "Add External Interfaces", - "label": "Add external Interfaces", - "group": "Networking", - "schema": { - "type": "list", - "items": [ - { - "variable": "interfaceConfiguration", - "description": "Interface Configuration", - "label": "Interface Configuration", - "schema": { - "additional_attrs": true, - "type": "dict", - "$ref": [ - "normalize/interfaceConfiguration" - ], - "attrs": [ - { - "variable": "hostInterface", - "description": "Please Specify Host Interface", - "label": "Host Interface", - "schema": { - "type": "string", - "required": true, - "$ref": [ - "definitions/interface" - ], - "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": "Networking and Services", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "serviceListEntry", - "label": "Custom Service", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the service", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "LoadBalancer", - "description": "LoadBalancer (Expose Ports)" - }, - { - "value": "ClusterIP", - "description": "ClusterIP (Do Not Expose Ports)" - }, - { - "value": "Simple", - "description": "Deprecated CHANGE THIS" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "advancedsvcset", - "label": "Show Advanced Service Settings", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "externalIPs", - "label": "External IP's", - "description": "External IP's", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "externalIP", - "label": "External IP", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "ipFamilyPolicy", - "label": "IP Family Policy", - "description": "Specify the IP Policy", - "schema": { - "type": "string", - "default": "SingleStack", - "enum": [ - { - "value": "SingleStack", - "description": "SingleStack" - }, - { - "value": "PreferDualStack", - "description": "PreferDualStack" - }, - { - "value": "RequireDualStack", - "description": "RequireDualStack" - } - ] - } - }, - { - "variable": "ipFamilies", - "label": "IP Families", - "description": "(Advanced) The IP Families that should be used", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ipFamily", - "label": "IP Family", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "portsList", - "label": "Additional Service Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsListEntry", - "label": "Custom ports", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Port", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Port Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "protocol", - "label": "Port Type", - "schema": { - "type": "string", - "default": "tcp", - "enum": [ - { - "value": "http", - "description": "HTTP" - }, - { - "value": "https", - "description": "HTTPS" - }, - { - "value": "tcp", - "description": "TCP" - }, - { - "value": "udp", - "description": "UDP" - } - ] - } - }, - { - "variable": "targetPort", - "label": "Target Port", - "description": "This port exposes the container port on the service", - "schema": { - "type": "int", - "required": true - } - }, - { - "variable": "port", - "label": "Container Port", - "schema": { - "type": "int", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "persistence", - "label": "Integrated Persistent Storage", - "description": "Integrated Persistent Storage", - "group": "Storage and 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": "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": "Storage and Persistence", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "persistenceListEntry", - "label": "Custom Storage", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the storage", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "type", - "label": "Type of Storage", - "description": "Sets the persistence type, Anything other than PVC could break rollback!", - "schema": { - "type": "string", - "default": "hostPath", - "enum": [ - { - "value": "pvc", - "description": "PVC" - }, - { - "value": "hostPath", - "description": "Host Path" - }, - { - "value": "emptyDir", - "description": "emptyDir" - }, - { - "value": "nfs", - "description": "NFS Share" - } - ] - } - }, - { - "variable": "server", - "label": "NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "path", - "label": "Path on NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "iscsi", - "label": "iSCSI Options", - "schema": { - "show_if": [ - [ - "type", - "=", - "iscsi" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "targetPortal", - "label": "targetPortal", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "iqn", - "label": "iqn", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "lun", - "label": "lun", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "authSession", - "label": "authSession", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - }, - { - "variable": "authDiscovery", - "label": "authDiscovery", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - }, - { - "variable": "autoPermissions", - "label": "Automatic Permissions Configuration", - "description": "Automatically set permissions", - "schema": { - "show_if": [ - [ - "type", - "!=", - "pvc" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "chown", - "label": "Run CHOWN", - "description": "It will run CHOWN on the path with the given fsGroup\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": "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": "Security and Permissions", - "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 and Devices", - "label": "Resource Limits", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "limits", - "label": "Advanced Limit Resource Consumption", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "4000m", - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "8Gi", - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - }, - { - "variable": "intel.com/i915", - "label": "Add Intel i915 GPUs", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "nvidia.com/gpu", - "label": "Add NVIDIA GPUs (Experimental)", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "amd.com/gpu", - "label": "Add AMD GPUs", - "schema": { - "type": "int", - "default": 0 - } - } - ] - } - }, - { - "variable": "requests", - "label": "Minimum Resources Required (request)", - "schema": { - "additional_attrs": true, - "type": "dict", - "hidden": true, - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "10m", - "hidden": true, - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "50Mi", - "hidden": true, - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - } - ] - } - } - ] - } - }, - { - "variable": "deviceList", - "label": "Mount USB Devices", - "group": "Resources and Devices", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "deviceListEntry", - "label": "Device", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Storage", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "type", - "label": "(Advanced) Type of Storage", - "description": "Sets the persistence type", - "schema": { - "type": "string", - "default": "device", - "hidden": true - } - }, - { - "variable": "readOnly", - "label": "readOnly", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "hostPath", - "label": "Host Device Path", - "description": "Path to the device on the host system", - "schema": { - "type": "path" - } - }, - { - "variable": "mountPath", - "label": "Container Device Path", - "description": "Path inside the container the device is mounted", - "schema": { - "type": "string", - "default": "/dev/ttyACM0" - } - } - ] - } - } - ] - } - }, - { - "variable": "scaleGPU", - "label": "GPU Configuration", - "group": "Resources and Devices", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "scaleGPUEntry", - "label": "GPU", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "gpu", - "label": "Select GPU", - "schema": { - "additional_attrs": true, - "type": "dict", - "$ref": [ - "definitions/gpuConfiguration" - ], - "attrs": [] - } - }, - { - "variable": "workaround", - "label": "Workaround", - "schema": { - "type": "string", - "default": "workaround", - "hidden": 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": "Advanced", - "label": "(Advanced) Network Policy", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "netPolicyEntry", - "label": "Network Policy Entry", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "policyType", - "label": "Policy Type", - "schema": { - "type": "string", - "default": "", - "enum": [ - { - "value": "", - "description": "Default" - }, - { - "value": "ingress", - "description": "Ingress" - }, - { - "value": "egress", - "description": "Egress" - }, - { - "value": "ingress-egress", - "description": "Ingress and Egress" - } - ] - } - }, - { - "variable": "egress", - "label": "Egress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "egressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "to", - "label": "To", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "toEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ingressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "from", - "label": "From", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "fromEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "addons", - "group": "Addons", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "Codeserver", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "service", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "NodePort", - "description": "Deprecated CHANGE THIS" - }, - { - "value": "ClusterIP", - "description": "ClusterIP" - }, - { - "value": "LoadBalancer", - "description": "LoadBalancer" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "ports", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int", - "default": 36107 - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable Ingress", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hosts", - "label": "Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "hostEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "host", - "label": "HostName", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "paths", - "label": "Paths", - "schema": { - "type": "list", - "default": [ - { - "path": "/", - "pathType": "Prefix" - } - ], - "items": [ - { - "variable": "pathEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "path", - "label": "Path", - "schema": { - "type": "string", - "required": true, - "default": "/" - } - }, - { - "variable": "pathType", - "label": "Path Type", - "schema": { - "type": "string", - "required": true, - "default": "Prefix" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "integrations", - "label": "Integrations", - "description": "Connect ingress with other charts", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "traefik", - "label": "Traefik", - "description": "Connect ingress with Traefik", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "allowCors", - "label": "Allow Cross Origin Requests (advanced)", - "schema": { - "type": "boolean", - "default": false, - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - }, - { - "variable": "entrypoints", - "label": "Entrypoints", - "schema": { - "type": "list", - "default": [ - "websecure" - ], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "entrypoint", - "label": "Entrypoint", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "middlewares", - "label": "Middlewares", - "schema": { - "type": "list", - "default": [], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "middleware", - "label": "Middleware", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "name", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "namespace", - "label": "namespace (optional)", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "certManager", - "label": "certManager", - "description": "Connect ingress with certManager", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "certificateIssuer", - "label": "certificateIssuer", - "description": "defaults to chartname", - "schema": { - "type": "string", - "default": "", - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "advanced", - "label": "Show Advanced Settings", - "description": "Advanced settings are not covered by TrueCharts Support", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "ingressClassName", - "label": "(Advanced/Optional) IngressClass Name", - "schema": { - "type": "string", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": "" - } - }, - { - "variable": "tls", - "label": "TLS-Settings", - "schema": { - "type": "list", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": [], - "items": [ - { - "variable": "tlsEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "hosts", - "label": "Certificate Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "host", - "label": "Host", - "schema": { - "type": "string", - "default": "", - "required": true - } - } - ] - } - }, - { - "variable": "certificateIssuer", - "label": "Use Cert-Manager clusterIssuer", - "description": "add the name of your cert-manager clusterIssuer here for automatic tls certificates.", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "clusterCertificate", - "label": "Cluster Certificate (Advanced)", - "description": "Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.", - "schema": { - "type": "string", - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "default": "" - } - }, - { - "variable": "secretName", - "label": "Use Custom Certificate Secret (Advanced)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "scaleCert", - "label": "Use TrueNAS SCALE Certificate (Deprecated)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "int", - "$ref": [ - "definitions/certificate" - ], - "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 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

        prowlarr-14.3.5 (2024-02-12)

        \n

        Chore

        \n
          \n
        • update container image ghcr.io/onedr0p/prowlarr-develop to v1.13.3.4273@ca264d9 by renovate (#18137)
        • \n
        \n

        prowlarr-14.3.4 (2024-02-05)

        \n

        Chore

        \n
          \n
        • update container image ghcr.io/onedr0p/prowlarr-develop to 1.13.2.4251@23d16bf by renovate (#17956)
        • \n
        \n

        prowlarr-14.3.3 (2024-02-05)

        \n

        Chore

        \n
          \n
        • update container image ghcr.io/onedr0p/prowlarr-develop to v1.13.2.4251@1ada8d9 by renovate (#17915)
        • \n
        \n

        prowlarr-14.3.2 (2024-02-03)

        \n

        Chore

        \n
          \n
        • update container image common to v17.2.30@19ad5ec by renovate (#17804)
        • \n
        \n

        prowlarr-14.3.1 (2024-01-29)

        \n

        Chore

        \n
          \n
        • update container image ghcr.io/onedr0p/exportarr to v1.6.1@60cf3d4 by renovate (#17725)
        • \n
        \n

        prowlarr-14.3.0 (2024-01-29)

        \n

        Chore

        \n
          \n
        • update container image ghcr.io/onedr0p/prowlarr-develop to v1.13.0.4217@bbc16bd by renovate (#17694)
        • \n
        \n

        prowlarr-14.2.7 (2024-01-26)

        \n

        Chore

        \n
          \n
        • update container image common to v17.2.29@d7c41a3 by renovate (#17545)
        • \n
        \n

        prowlarr-14.2.6 (2024-01-21)

        \n

        Chore

        \n
          \n
        • update container image common to v17.2.28@918b4c5 by renovate (#17478)
        • \n
        \n

        prowlarr-14.2.5 (2024-01-21)

        \n

        Chore

        \n
          \n
        • update container image common to v17.2.26@24c98f7 by renovate (#17409)
        • \n
        \n

        prowlarr-14.2.4 (2024-01-21)

        \n

        Chore

        \n
          \n
        • update metadata in chart.yaml (#17457)
        • \n
        " - }, - "14.4.0": { - "healthy": true, - "supported": true, - "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/prowlarr/14.4.0", - "last_update": "2024-05-29 12:35:14", - "required_features": [ - "definitions/timezone", - "definitions/gpuConfiguration", - "definitions/interface", - "normalize/interfaceConfiguration", - "definitions/certificate" - ], - "human_version": "1.13.3.4273_14.4.0", - "version": "14.4.0", - "chart_metadata": { - "annotations": { - "max_scale_version": "24.04.0", - "min_scale_version": "23.10.0", - "truecharts.org/category": "media", - "truecharts.org/max_helm_version": "3.14", - "truecharts.org/min_helm_version": "3.12", - "truecharts.org/train": "stable" - }, - "apiVersion": "v2", - "appVersion": "1.13.3.4273", - "dependencies": [ - { - "name": "common", - "version": "17.4.2", - "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.png", - "keywords": [ - "prowlarr", - "torrent", - "usenet" - ], - "kubeVersion": ">=1.24.0-0", - "maintainers": [ - { - "name": "TrueCharts", - "email": "info@truecharts.org", - "url": "https://truecharts.org" - } - ], - "name": "prowlarr", - "sources": [ - "https://github.com/Prowlarr/Prowlarr", - "https://github.com/k8s-at-home/container-images", - "https://github.com/truecharts/charts/tree/master/charts/stable/prowlarr", - "https://ghcr.io/onedr0p/prowlarr-develop", - "https://ghcr.io/onedr0p/exportarr" - ], - "type": "application", - "version": "14.4.0" - }, - "app_metadata": null, - "schema": { - "groups": [ - { - "name": "Container Image", - "description": "Image to be used for container" - }, - { - "name": "General Settings", - "description": "General Deployment Settings" - }, - { - "name": "Workload Settings", - "description": "Workload Settings" - }, - { - "name": "App Configuration", - "description": "App Specific Config Options" - }, - { - "name": "Networking and Services", - "description": "Configure Network and Services for Container" - }, - { - "name": "Storage and Persistence", - "description": "Persist and Share Data that is Separate from the Container" - }, - { - "name": "Ingress", - "description": "Ingress Configuration" - }, - { - "name": "Security and Permissions", - "description": "Configure Security Context and Permissions" - }, - { - "name": "Resources and Devices", - "description": "Specify Resources/Devices to be Allocated to Workload" - }, - { - "name": "Middlewares", - "description": "Traefik Middlewares" - }, - { - "name": "Metrics", - "description": "Metrics" - }, - { - "name": "Addons", - "description": "Addon Configuration" - }, - { - "name": "Backup Configuration", - "description": "Configure Velero Backup Schedule" - }, - { - "name": "Advanced", - "description": "Advanced Configuration" - }, - { - "name": "Postgresql", - "description": "Postgresql" - }, - { - "name": "Documentation", - "description": "Documentation" - } - ], - "portals": { - "open": { - "protocols": [ - "$kubernetes-resource_configmap_tcportal-open_protocol" - ], - "host": [ - "$kubernetes-resource_configmap_tcportal-open_host" - ], - "ports": [ - "$kubernetes-resource_configmap_tcportal-open_port" - ] - } - }, - "questions": [ - { - "variable": "global", - "group": "General Settings", - "label": "Global Settings", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "stopAll", - "label": "Stop All", - "description": "Stops All Running pods and hibernates cnpg", - "schema": { - "type": "boolean", - "default": false - } - } - ] - } - }, - { - "variable": "workload", - "group": "Workload Settings", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Type (Advanced)", - "schema": { - "type": "string", - "default": "Deployment", - "enum": [ - { - "value": "Deployment", - "description": "Deployment" - }, - { - "value": "DaemonSet", - "description": "DaemonSet" - } - ] - } - }, - { - "variable": "replicas", - "label": "Replicas (Advanced)", - "description": "Set the number of Replicas", - "schema": { - "type": "int", - "show_if": [ - [ - "type", - "!=", - "DaemonSet" - ] - ], - "default": 1 - } - }, - { - "variable": "podSpec", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "containers", - "label": "Containers", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "Main Container", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "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 Settings", - "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 Settings", - "label": "Global Pod Options (Advanced)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "expertPodOpts", - "label": "Expert - Pod Options", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hostNetwork", - "label": "Host Networking", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "dnsConfig", - "label": "DNS Configuration", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "options", - "label": "Options", - "schema": { - "type": "list", - "default": [ - { - "name": "ndots", - "value": "1" - } - ], - "items": [ - { - "variable": "optionsEntry", - "label": "Option Entry", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true - } - }, - { - "variable": "value", - "label": "Value", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "nameservers", - "label": "Nameservers", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "nsEntry", - "label": "Nameserver Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - }, - { - "variable": "searches", - "label": "Searches", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "searchEntry", - "label": "Search Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "imagePullSecretList", - "group": "General Settings", - "label": "Image Pull Secrets", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "pullsecretentry", - "label": "Pull Secret", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "data", - "label": "Data", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "registry", - "label": "Registry", - "schema": { - "type": "string", - "required": true, - "default": "https://index.docker.io/v1/" - } - }, - { - "variable": "username", - "label": "Username", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "password", - "label": "Password", - "schema": { - "type": "string", - "required": true, - "private": true, - "default": "" - } - }, - { - "variable": "email", - "label": "Email", - "schema": { - "type": "string", - "required": true, - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "service", - "group": "Networking and Services", - "label": "Configure Service(s)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "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": "serviceexpert", - "group": "Networking and Services", - "label": "Show Expert Config", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "scaleExternalInterface", - "description": "Add External Interfaces", - "label": "Add external Interfaces", - "group": "Networking", - "schema": { - "type": "list", - "items": [ - { - "variable": "interfaceConfiguration", - "description": "Interface Configuration", - "label": "Interface Configuration", - "schema": { - "additional_attrs": true, - "type": "dict", - "$ref": [ - "normalize/interfaceConfiguration" - ], - "attrs": [ - { - "variable": "hostInterface", - "description": "Please Specify Host Interface", - "label": "Host Interface", - "schema": { - "type": "string", - "required": true, - "$ref": [ - "definitions/interface" - ], - "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": "Networking and Services", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "serviceListEntry", - "label": "Custom Service", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the service", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "LoadBalancer", - "description": "LoadBalancer (Expose Ports)" - }, - { - "value": "ClusterIP", - "description": "ClusterIP (Do Not Expose Ports)" - }, - { - "value": "Simple", - "description": "Deprecated CHANGE THIS" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "advancedsvcset", - "label": "Show Advanced Service Settings", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "externalIPs", - "label": "External IP's", - "description": "External IP's", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "externalIP", - "label": "External IP", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "ipFamilyPolicy", - "label": "IP Family Policy", - "description": "Specify the IP Policy", - "schema": { - "type": "string", - "default": "SingleStack", - "enum": [ - { - "value": "SingleStack", - "description": "SingleStack" - }, - { - "value": "PreferDualStack", - "description": "PreferDualStack" - }, - { - "value": "RequireDualStack", - "description": "RequireDualStack" - } - ] - } - }, - { - "variable": "ipFamilies", - "label": "IP Families", - "description": "(Advanced) The IP Families that should be used", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ipFamily", - "label": "IP Family", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "portsList", - "label": "Additional Service Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsListEntry", - "label": "Custom ports", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Port", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Port Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "protocol", - "label": "Port Type", - "schema": { - "type": "string", - "default": "tcp", - "enum": [ - { - "value": "http", - "description": "HTTP" - }, - { - "value": "https", - "description": "HTTPS" - }, - { - "value": "tcp", - "description": "TCP" - }, - { - "value": "udp", - "description": "UDP" - } - ] - } - }, - { - "variable": "targetPort", - "label": "Target Port", - "description": "This port exposes the container port on the service", - "schema": { - "type": "int", - "required": true - } - }, - { - "variable": "port", - "label": "Container Port", - "schema": { - "type": "int", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "persistence", - "label": "Integrated Persistent Storage", - "description": "Integrated Persistent Storage", - "group": "Storage and 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": "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": "Storage and Persistence", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "persistenceListEntry", - "label": "Custom Storage", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the storage", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "type", - "label": "Type of Storage", - "description": "Sets the persistence type, Anything other than PVC could break rollback!", - "schema": { - "type": "string", - "default": "hostPath", - "enum": [ - { - "value": "pvc", - "description": "PVC" - }, - { - "value": "hostPath", - "description": "Host Path" - }, - { - "value": "emptyDir", - "description": "emptyDir" - }, - { - "value": "nfs", - "description": "NFS Share" - } - ] - } - }, - { - "variable": "server", - "label": "NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "path", - "label": "Path on NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "iscsi", - "label": "iSCSI Options", - "schema": { - "show_if": [ - [ - "type", - "=", - "iscsi" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "targetPortal", - "label": "targetPortal", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "iqn", - "label": "iqn", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "lun", - "label": "lun", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "authSession", - "label": "authSession", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - }, - { - "variable": "authDiscovery", - "label": "authDiscovery", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - }, - { - "variable": "autoPermissions", - "label": "Automatic Permissions Configuration", - "description": "Automatically set permissions", - "schema": { - "show_if": [ - [ - "type", - "!=", - "pvc" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "chown", - "label": "Run CHOWN", - "description": "It will run CHOWN on the path with the given fsGroup\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": "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": "Security and Permissions", - "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 and Devices", - "label": "Resource Limits", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "limits", - "label": "Advanced Limit Resource Consumption", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "4000m", - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "8Gi", - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - }, - { - "variable": "intel.com/i915", - "label": "Add Intel i915 GPUs", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "nvidia.com/gpu", - "label": "Add NVIDIA GPUs (Experimental)", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "amd.com/gpu", - "label": "Add AMD GPUs", - "schema": { - "type": "int", - "default": 0 - } - } - ] - } - }, - { - "variable": "requests", - "label": "Minimum Resources Required (request)", - "schema": { - "additional_attrs": true, - "type": "dict", - "hidden": true, - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "10m", - "hidden": true, - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "50Mi", - "hidden": true, - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - } - ] - } - } - ] - } - }, - { - "variable": "deviceList", - "label": "Mount USB Devices", - "group": "Resources and Devices", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "deviceListEntry", - "label": "Device", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Storage", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "type", - "label": "(Advanced) Type of Storage", - "description": "Sets the persistence type", - "schema": { - "type": "string", - "default": "device", - "hidden": true - } - }, - { - "variable": "readOnly", - "label": "readOnly", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "hostPath", - "label": "Host Device Path", - "description": "Path to the device on the host system", - "schema": { - "type": "path" - } - }, - { - "variable": "mountPath", - "label": "Container Device Path", - "description": "Path inside the container the device is mounted", - "schema": { - "type": "string", - "default": "/dev/ttyACM0" - } - } - ] - } - } - ] - } - }, - { - "variable": "scaleGPU", - "label": "GPU Configuration", - "group": "Resources and Devices", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "scaleGPUEntry", - "label": "GPU", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "gpu", - "label": "Select GPU", - "schema": { - "additional_attrs": true, - "type": "dict", - "$ref": [ - "definitions/gpuConfiguration" - ], - "attrs": [] - } - }, - { - "variable": "workaround", - "label": "Workaround", - "schema": { - "type": "string", - "default": "workaround", - "hidden": 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": "Advanced", - "label": "(Advanced) Network Policy", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "netPolicyEntry", - "label": "Network Policy Entry", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "policyType", - "label": "Policy Type", - "schema": { - "type": "string", - "default": "", - "enum": [ - { - "value": "", - "description": "Default" - }, - { - "value": "ingress", - "description": "Ingress" - }, - { - "value": "egress", - "description": "Egress" - }, - { - "value": "ingress-egress", - "description": "Ingress and Egress" - } - ] - } - }, - { - "variable": "egress", - "label": "Egress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "egressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "to", - "label": "To", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "toEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ingressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "from", - "label": "From", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "fromEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "addons", - "group": "Addons", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "Codeserver", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "service", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "NodePort", - "description": "Deprecated CHANGE THIS" - }, - { - "value": "ClusterIP", - "description": "ClusterIP" - }, - { - "value": "LoadBalancer", - "description": "LoadBalancer" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "ports", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int", - "default": 36107 - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable Ingress", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hosts", - "label": "Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "hostEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "host", - "label": "HostName", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "paths", - "label": "Paths", - "schema": { - "type": "list", - "default": [ - { - "path": "/", - "pathType": "Prefix" - } - ], - "items": [ - { - "variable": "pathEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "path", - "label": "Path", - "schema": { - "type": "string", - "required": true, - "default": "/" - } - }, - { - "variable": "pathType", - "label": "Path Type", - "schema": { - "type": "string", - "required": true, - "default": "Prefix" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "integrations", - "label": "Integrations", - "description": "Connect ingress with other charts", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "traefik", - "label": "Traefik", - "description": "Connect ingress with Traefik", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "allowCors", - "label": "Allow Cross Origin Requests (advanced)", - "schema": { - "type": "boolean", - "default": false, - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - }, - { - "variable": "entrypoints", - "label": "Entrypoints", - "schema": { - "type": "list", - "default": [ - "websecure" - ], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "entrypoint", - "label": "Entrypoint", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "middlewares", - "label": "Middlewares", - "schema": { - "type": "list", - "default": [], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "middleware", - "label": "Middleware", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "name", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "namespace", - "label": "namespace (optional)", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "certManager", - "label": "certManager", - "description": "Connect ingress with certManager", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "certificateIssuer", - "label": "certificateIssuer", - "description": "defaults to chartname", - "schema": { - "type": "string", - "default": "", - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "advanced", - "label": "Show Advanced Settings", - "description": "Advanced settings are not covered by TrueCharts Support", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "ingressClassName", - "label": "(Advanced/Optional) IngressClass Name", - "schema": { - "type": "string", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": "" - } - }, - { - "variable": "tls", - "label": "TLS-Settings", - "schema": { - "type": "list", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": [], - "items": [ - { - "variable": "tlsEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "hosts", - "label": "Certificate Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "host", - "label": "Host", - "schema": { - "type": "string", - "default": "", - "required": true - } - } - ] - } - }, - { - "variable": "certificateIssuer", - "label": "Use Cert-Manager clusterIssuer", - "description": "add the name of your cert-manager clusterIssuer here for automatic tls certificates.", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "clusterCertificate", - "label": "Cluster Certificate (Advanced)", - "description": "Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.", - "schema": { - "type": "string", - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "default": "" - } - }, - { - "variable": "secretName", - "label": "Use Custom Certificate Secret (Advanced)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "scaleCert", - "label": "Use TrueNAS SCALE Certificate (Deprecated)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "int", - "$ref": [ - "definitions/certificate" - ], - "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 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

        prowlarr-14.3.5 (2024-02-12)

        \n

        Chore

        \n
          \n
        • update container image ghcr.io/onedr0p/prowlarr-develop to v1.13.3.4273@ca264d9 by renovate (#18137)
        • \n
        \n

        prowlarr-14.3.4 (2024-02-05)

        \n

        Chore

        \n
          \n
        • update container image ghcr.io/onedr0p/prowlarr-develop to 1.13.2.4251@23d16bf by renovate (#17956)
        • \n
        \n

        prowlarr-14.3.3 (2024-02-05)

        \n

        Chore

        \n
          \n
        • update container image ghcr.io/onedr0p/prowlarr-develop to v1.13.2.4251@1ada8d9 by renovate (#17915)
        • \n
        \n

        prowlarr-14.3.2 (2024-02-03)

        \n

        Chore

        \n
          \n
        • update container image common to v17.2.30@19ad5ec by renovate (#17804)
        • \n
        \n

        prowlarr-14.3.1 (2024-01-29)

        \n

        Chore

        \n
          \n
        • update container image ghcr.io/onedr0p/exportarr to v1.6.1@60cf3d4 by renovate (#17725)
        • \n
        \n

        prowlarr-14.3.0 (2024-01-29)

        \n

        Chore

        \n
          \n
        • update container image ghcr.io/onedr0p/prowlarr-develop to v1.13.0.4217@bbc16bd by renovate (#17694)
        • \n
        \n

        prowlarr-14.2.7 (2024-01-26)

        \n

        Chore

        \n
          \n
        • update container image common to v17.2.29@d7c41a3 by renovate (#17545)
        • \n
        \n

        prowlarr-14.2.6 (2024-01-21)

        \n

        Chore

        \n
          \n
        • update container image common to v17.2.28@918b4c5 by renovate (#17478)
        • \n
        \n

        prowlarr-14.2.5 (2024-01-21)

        \n

        Chore

        \n
          \n
        • update container image common to v17.2.26@24c98f7 by renovate (#17409)
        • \n
        \n

        prowlarr-14.2.4 (2024-01-21)

        \n

        Chore

        \n
          \n
        • update metadata in chart.yaml (#17457)
        • \n
        " } } \ No newline at end of file diff --git a/stable/radarr/19.3.0/.helmignore b/stable/radarr/19.3.0/.helmignore deleted file mode 100644 index 77ca5567b2..0000000000 --- a/stable/radarr/19.3.0/.helmignore +++ /dev/null @@ -1,30 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ -# OWNERS file for Kubernetes -OWNERS -# helm-docs templates -*.gotmpl -# docs folder -/docs -# icon -icon.png diff --git a/stable/radarr/19.3.0/CHANGELOG.md b/stable/radarr/19.3.0/CHANGELOG.md deleted file mode 100644 index 46f5aaa855..0000000000 --- a/stable/radarr/19.3.0/CHANGELOG.md +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: Changelog ---- - - -*for the complete changelog, please refer to the website* - -**Important:** - - - - - - - -## [radarr-19.1.12](https://github.com/truecharts/charts/compare/radarr-19.1.11...radarr-19.1.12) (2024-02-03) - -### Chore - - - -- update container image common to v17.2.30[@19ad5ec](https://github.com/19ad5ec) by renovate ([#17804](https://github.com/truecharts/charts/issues/17804)) - - -## [radarr-19.1.11](https://github.com/truecharts/charts/compare/radarr-19.1.10...radarr-19.1.11) (2024-01-29) - -### Chore - - - -- update container image ghcr.io/onedr0p/exportarr to v1.6.1[@60cf3d4](https://github.com/60cf3d4) by renovate ([#17725](https://github.com/truecharts/charts/issues/17725)) - - -## [radarr-19.1.10](https://github.com/truecharts/charts/compare/radarr-19.1.9...radarr-19.1.10) (2024-01-26) - -### Chore - - - -- update container image common to v17.2.29[@d7c41a3](https://github.com/d7c41a3) by renovate ([#17545](https://github.com/truecharts/charts/issues/17545)) - - -## [radarr-19.1.9](https://github.com/truecharts/charts/compare/radarr-19.1.8...radarr-19.1.9) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.28[@918b4c5](https://github.com/918b4c5) by renovate ([#17478](https://github.com/truecharts/charts/issues/17478)) - - -## [radarr-19.1.8](https://github.com/truecharts/charts/compare/radarr-19.1.7...radarr-19.1.8) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.26[@24c98f7](https://github.com/24c98f7) by renovate ([#17409](https://github.com/truecharts/charts/issues/17409)) - - -## [radarr-19.1.7](https://github.com/truecharts/charts/compare/radarr-19.1.6...radarr-19.1.7) (2024-01-21) - -### Chore - - - -- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) - - - - -## [radarr-19.1.6](https://github.com/truecharts/charts/compare/radarr-19.1.5...radarr-19.1.6) (2024-01-09) - -### Chore - - - -- update container image common to v17.2.22[@e7c9056](https://github.com/e7c9056) by renovate ([#16986](https://github.com/truecharts/charts/issues/16986)) - - -## [radarr-19.1.5](https://github.com/truecharts/charts/compare/radarr-19.1.4...radarr-19.1.5) (2024-01-02) - -### Chore - - - -- force bump to ensure up-to-date catalogs - - -## [radarr-19.1.4](https://github.com/truecharts/charts/compare/radarr-19.1.3...radarr-19.1.4) (2024-01-01) - -### Chore - - - -- increase common version for oci fixes - -- remove non-existent template refs ([#16738](https://github.com/truecharts/charts/issues/16738)) - diff --git a/stable/radarr/19.3.0/Chart.yaml b/stable/radarr/19.3.0/Chart.yaml deleted file mode 100644 index 7a934cb741..0000000000 --- a/stable/radarr/19.3.0/Chart.yaml +++ /dev/null @@ -1,38 +0,0 @@ -annotations: - max_scale_version: 24.04.0 - min_scale_version: 23.10.0 - truecharts.org/category: media - truecharts.org/max_helm_version: "3.14" - truecharts.org/min_helm_version: "3.12" - truecharts.org/train: stable -apiVersion: v2 -appVersion: 5.3.6.8612 -dependencies: - - name: common - version: 17.5.1 - repository: oci://tccr.io/truecharts - condition: "" - alias: "" - tags: [] - import-values: [] -deprecated: false -description: A fork of Sonarr to work with movies à la Couchpotato -home: https://truecharts.org/charts/stable/radarr -icon: https://truecharts.org/img/hotlink-ok/chart-icons/radarr.png -keywords: - - radarr - - torrent - - usenet -kubeVersion: ">=1.24.0-0" -maintainers: - - name: TrueCharts - email: info@truecharts.org - url: https://truecharts.org -name: radarr -sources: - - https://github.com/Radarr/Radarr - - https://github.com/truecharts/charts/tree/master/charts/stable/radarr - - https://ghcr.io/onedr0p/radarr - - https://ghcr.io/onedr0p/exportarr -type: application -version: 19.3.0 diff --git a/stable/radarr/19.3.0/README.md b/stable/radarr/19.3.0/README.md deleted file mode 100644 index 0915ee0aa5..0000000000 --- a/stable/radarr/19.3.0/README.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: README ---- - -## General Info - -TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. -However only installations using the TrueNAS SCALE Apps system are supported. - -For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/radarr) - -**This chart is not maintained by the upstream project and any issues with the chart should be raised [here](https://github.com/truecharts/charts/issues/new/choose)** - -## Support - -- Please check our [quick-start guides for TrueNAS SCALE](https://truecharts.org/manual/SCALE/guides/scale-intro). -- See the [Website](https://truecharts.org) -- Check our [Discord](https://discord.gg/tVsPTHWTtr) -- Open a [issue](https://github.com/truecharts/charts/issues/new/choose) - ---- - -## Sponsor TrueCharts - -TrueCharts can only exist due to the incredible effort of our staff. -Please consider making a [donation](https://truecharts.org/sponsor) or contributing back to the project any way you can! - -_All Rights Reserved - The TrueCharts Project_ diff --git a/stable/radarr/19.3.0/app-readme.md b/stable/radarr/19.3.0/app-readme.md deleted file mode 100644 index 94d7185029..0000000000 --- a/stable/radarr/19.3.0/app-readme.md +++ /dev/null @@ -1,8 +0,0 @@ -A fork of Sonarr to work with movies à la Couchpotato - -This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/radarr](https://truecharts.org/charts/stable/radarr) - ---- - -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/radarr/19.3.0/charts/common-17.4.2.tgz b/stable/radarr/19.3.0/charts/common-17.4.2.tgz deleted file mode 100644 index 31f3a104561f859f297067776ab86a1503525be4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100097 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 l8bLay74+E3;;+DksJU3 diff --git a/stable/radarr/19.3.0/ix_values.yaml b/stable/radarr/19.3.0/ix_values.yaml deleted file mode 100644 index 9e5f3f9e7a..0000000000 --- a/stable/radarr/19.3.0/ix_values.yaml +++ /dev/null @@ -1,108 +0,0 @@ -image: - repository: ghcr.io/onedr0p/radarr - pullPolicy: IfNotPresent - tag: 5.3.6.8612@sha256:d0786b4c22ab3a9a34cef30671a471c89df2beb95a7d50ba60e2f21dea5e0b28 -exportarrImage: - repository: ghcr.io/onedr0p/exportarr - pullPolicy: IfNotPresent - tag: v1.6.1@sha256:60cf3d44aa0b7dea2a65160b2e2e373c1ae38cd6b12a45fe81b8afa45ac31c22 -securityContext: - container: - readOnlyRootFilesystem: false -service: - main: - ports: - main: - port: 7878 - metrics: - enabled: true - type: ClusterIP - targetSelector: exportarr - ports: - metrics: - enabled: true - port: 7879 - targetSelector: exportarr -workload: - main: - podSpec: - containers: - main: - probes: - readiness: - enabled: true - type: http - path: /ping - liveness: - enabled: true - type: http - path: /ping - startup: - enabled: true - type: http - path: /ping - env: - RADARR__PORT: "{{ .Values.service.main.ports.main.port }}" - exportarr: - enabled: true - type: Deployment - strategy: RollingUpdate - replicas: 1 - podSpec: - containers: - exportarr: - primary: true - enabled: true - imageSelector: exportarrImage - args: - - radarr - 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 - CONFIG: "/config/config.xml" -persistence: - config: - enabled: true - targetSelector: - main: - main: - mountPath: /config - exportarr: - exportarr: - mountPath: /config - readOnly: true -metrics: - main: - enabled: true - type: "servicemonitor" - endpoints: - - port: metrics - path: /metrics - targetSelector: metrics - prometheusRule: - enabled: false -portal: - open: - enabled: true -updated: true diff --git a/stable/radarr/19.3.0/questions.yaml b/stable/radarr/19.3.0/questions.yaml deleted file mode 100755 index 43268ae600..0000000000 --- a/stable/radarr/19.3.0/questions.yaml +++ /dev/null @@ -1,2927 +0,0 @@ -groups: - - name: Container Image - description: Image to be used for container - - name: General Settings - description: General Deployment Settings - - name: Workload Settings - description: Workload Settings - - name: App Configuration - description: App Specific Config Options - - name: Networking and Services - description: Configure Network and Services for Container - - name: Storage and Persistence - description: Persist and Share Data that is Separate from the Container - - name: Ingress - description: Ingress Configuration - - name: Security and Permissions - description: Configure Security Context and Permissions - - name: Resources and Devices - description: "Specify Resources/Devices to be Allocated to Workload" - - name: Middlewares - description: Traefik Middlewares - - name: Metrics - description: Metrics - - name: Addons - description: Addon Configuration - - name: Backup Configuration - description: Configure Velero Backup Schedule - - name: Advanced - description: Advanced Configuration - - name: Postgresql - description: Postgresql - - name: Documentation - description: Documentation - -portals: - open: - protocols: - - "$kubernetes-resource_configmap_tcportal-open_protocol" - host: - - "$kubernetes-resource_configmap_tcportal-open_host" - ports: - - "$kubernetes-resource_configmap_tcportal-open_port" - -questions: - - variable: global - group: General Settings - label: "Global Settings" - schema: - additional_attrs: true - type: dict - attrs: - - variable: stopAll - label: Stop All - description: "Stops All Running pods and hibernates cnpg" - schema: - type: boolean - default: false - - - variable: workload - group: "Workload Settings" - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: main - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: type - label: Type (Advanced) - schema: - type: string - default: Deployment - enum: - - value: Deployment - description: Deployment - - value: DaemonSet - description: DaemonSet - - - variable: replicas - label: Replicas (Advanced) - description: Set the number of Replicas - schema: - type: int - show_if: [["type", "!=", "DaemonSet"]] - default: 1 - - - variable: podSpec - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: containers - label: Containers - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: Main Container - schema: - additional_attrs: true - type: dict - attrs: - - - variable: env - group: App Configuration - label: Image Environment - schema: - additional_attrs: true - type: dict - attrs: - - variable: RADARR__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 Settings" - schema: - type: string - default: "Etc/UTC" - $ref: - - "definitions/timezone" - - - variable: podOptions - group: "General Settings" - label: "Global Pod Options (Advanced)" - schema: - additional_attrs: true - type: dict - attrs: - - variable: expertPodOpts - label: "Expert - Pod Options" - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hostNetwork - label: "Host Networking" - schema: - type: boolean - default: false - - variable: dnsConfig - label: "DNS Configuration" - schema: - type: dict - additional_attrs: true - attrs: - - variable: options - label: "Options" - schema: - type: list - default: [{"name": "ndots", "value": "1"}] - items: - - variable: optionsEntry - label: "Option Entry" - schema: - type: dict - additional_attrs: true - attrs: - - variable: name - label: "Name" - schema: - type: string - required: true - - variable: value - label: "Value" - schema: - type: string - - variable: nameservers - label: "Nameservers" - schema: - type: list - default: [] - items: - - variable: nsEntry - label: "Nameserver Entry" - schema: - type: string - required: true - - variable: searches - label: "Searches" - schema: - type: list - default: [] - items: - - variable: searchEntry - label: "Search Entry" - schema: - type: string - required: true - - - variable: imagePullSecretList - group: "General Settings" - label: "Image Pull Secrets" - schema: - type: list - default: [] - items: - - variable: pullsecretentry - label: "Pull Secret" - schema: - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: true - - variable: data - label: Data - schema: - type: dict - additional_attrs: true - attrs: - - variable: registry - label: "Registry" - schema: - type: string - required: true - default: "https://index.docker.io/v1/" - - variable: username - label: "Username" - schema: - type: string - required: true - default: "" - - variable: password - label: "Password" - schema: - type: string - required: true - private: true - default: "" - - variable: email - label: "Email" - schema: - type: string - required: true - default: "" - - - variable: service - group: Networking and Services - label: Configure Service(s) - schema: - additional_attrs: true - type: dict - attrs: - - - variable: 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: 7878 - required: true - - variable: serviceexpert - group: Networking and Services - label: Show Expert Config - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - - variable: scaleExternalInterface - description: Add External Interfaces - label: Add external Interfaces - group: Networking - schema: - type: list - items: - - variable: interfaceConfiguration - description: Interface Configuration - label: Interface Configuration - schema: - additional_attrs: true - type: dict - $ref: - - "normalize/interfaceConfiguration" - attrs: - - variable: hostInterface - description: Please Specify Host Interface - label: Host Interface - schema: - type: string - required: true - $ref: - - "definitions/interface" - - variable: ipam - description: Define how IP Address will be managed - label: IP Address Management - schema: - additional_attrs: true - type: dict - required: true - attrs: - - variable: type - description: Specify type for IPAM - label: IPAM Type - schema: - type: string - required: true - enum: - - value: dhcp - description: Use DHCP - - value: static - description: Use Static IP - - variable: staticIPConfigurations - label: Static IP Addresses - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticIP - label: Static IP - schema: - type: ipaddr - cidr: true - - variable: staticRoutes - label: Static Routes - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticRouteConfiguration - label: Static Route Configuration - schema: - additional_attrs: true - type: dict - attrs: - - variable: destination - label: Destination - schema: - type: ipaddr - cidr: true - required: true - - variable: gateway - label: Gateway - schema: - type: ipaddr - cidr: false - required: true - - - variable: serviceList - label: Add Manual Custom Services - group: Networking and Services - schema: - type: list - default: [] - items: - - variable: serviceListEntry - label: Custom Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the service - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: LoadBalancer - description: LoadBalancer (Expose Ports) - - value: ClusterIP - description: ClusterIP (Do Not Expose Ports) - - value: Simple - description: Deprecated CHANGE THIS - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: advancedsvcset - label: Show Advanced Service Settings - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: externalIPs - label: "External IP's" - description: "External IP's" - schema: - type: list - default: [] - items: - - variable: externalIP - label: External IP - schema: - type: string - - variable: ipFamilyPolicy - label: IP Family Policy - description: Specify the IP Policy - schema: - type: string - default: SingleStack - enum: - - value: SingleStack - description: SingleStack - - value: PreferDualStack - description: PreferDualStack - - value: RequireDualStack - description: RequireDualStack - - variable: ipFamilies - label: IP Families - description: (Advanced) The IP Families that should be used - schema: - type: list - default: [] - items: - - variable: ipFamily - label: IP Family - schema: - type: string - - variable: portsList - label: Additional Service Ports - schema: - type: list - default: [] - items: - - variable: portsListEntry - label: Custom ports - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Port - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Port Name - schema: - type: string - default: "" - - variable: protocol - label: Port Type - schema: - type: string - default: tcp - enum: - - value: http - description: HTTP - - value: https - description: HTTPS - - value: tcp - description: TCP - - value: udp - description: UDP - - variable: targetPort - label: Target Port - description: This port exposes the container port on the service - schema: - type: int - required: true - - variable: port - label: Container Port - schema: - type: int - required: true - - - variable: persistence - label: Integrated Persistent Storage - description: Integrated Persistent Storage - group: Storage and 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: 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: Storage and Persistence - schema: - type: list - default: [] - items: - - variable: persistenceListEntry - label: Custom Storage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the storage - schema: - type: boolean - default: true - hidden: true - - variable: type - label: Type of Storage - description: Sets the persistence type, Anything other than PVC could break rollback! - schema: - type: string - default: hostPath - enum: - - value: pvc - description: PVC - - value: hostPath - description: Host Path - - value: emptyDir - description: emptyDir - - value: nfs - description: NFS Share - - variable: server - label: NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: path - label: Path on NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: iscsi - label: iSCSI Options - schema: - show_if: [["type", "=", "iscsi"]] - type: dict - additional_attrs: true - attrs: - - variable: targetPortal - label: targetPortal - schema: - type: string - required: true - default: "" - - variable: iqn - label: iqn - schema: - type: string - required: true - default: "" - - variable: lun - label: lun - schema: - type: int - default: 0 - - variable: authSession - label: authSession - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: authDiscovery - label: authDiscovery - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: autoPermissions - label: Automatic Permissions Configuration - description: Automatically set permissions - schema: - show_if: [["type", "!=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: chown - label: Run CHOWN - description: | - It will run CHOWN on the path with the given fsGroup - schema: - type: boolean - default: false - - variable: chmod - label: Run CHMOD - description: | - It will run CHMOD on the path with the given value
        - Format should be 3 digits, e.g. 770 - schema: - type: string - valid_chars: '[0-9]{3}' - default: "" - - variable: recursive - label: Recursive - description: | - It will run CHOWN and CHMOD recursively - schema: - type: boolean - default: false - - variable: readOnly - label: Read Only - schema: - type: boolean - default: false - - variable: hostPath - label: Host Path - description: Path inside the container the storage is mounted - schema: - show_if: [["type", "=", "hostPath"]] - type: hostpath - - variable: mountPath - label: Mount Path - description: Path inside the container the storage is mounted - schema: - type: string - default: "" - required: true - valid_chars: '^\/([a-zA-Z0-9._-]+(\s?[a-zA-Z0-9._-]+|\/?))+$' - - variable: medium - label: EmptyDir Medium - schema: - show_if: [["type", "=", "emptyDir"]] - type: string - default: "" - enum: - - value: "" - description: Default - - value: Memory - description: Memory - - variable: size - label: Size Quotum of Storage - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: 256Gi - - variable: storageClass - label: 'storageClass (Advanced)' - description: 'sets the storageClass to something other than iX default. Only for advanced usecases!' - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: "" - - variable: static - label: 'Static Fixed PVC Bindings (Experimental)' - description: Link a PVC to a specific storage location - schema: - show_if: [["type", "=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: mode - label: mode - description: | - disabled: use normal dynamic PVCs - smb: connect to an SMB share - nfs: connect to an NFS share - schema: - type: string - default: "disabled" - enum: - - value: "disabled" - description: disabled - - value: smb - description: smb - - value: nfs - description: nfs - - variable: server - label: Server - description: server to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "myserver" - - variable: share - label: Share - description: share to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "/myshare" - - variable: user - label: User - description: connecting user - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "myuser" - - variable: domain - label: Domain - description: user domain - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: password - label: Password - description: connecting password - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: volumeSnapshots - label: 'Volume Snapshots (Experimental)' - description: Add an entry to the list to force creation of a volumeSnapshot of this PVC - schema: - show_if: [["type", "=", "pvc"]] - type: list - default: [] - items: - - variable: volumeSnapshotEntry - label: Custom volumeSnapshot - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - description: 'WARNING: renaming this, means deletion of the snapshot with the old name!' - schema: - type: string - default: "mysnapshot" - required: true - - variable: volumeSnapshotClassName - label: 'volumeSnapshot Class Name (Advanced)' - description: For use with PVCs using a non-default storageClass - schema: - type: string - default: "" - - - variable: ingress - label: "" - group: Ingress - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: Main Ingress - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name (Optional) - description: Defaults to chart name - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description (Optional) - description: Defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: icon - label: Icon (Optional) - description: Defaults to chart icon - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - variable: widget - label: Widget Settings - schema: - type: dict - additional_attrs: true - show_if: [["enabled", "=", true]] - attrs: - - variable: enabled - label: Enable Widget - description: When disabled all widget annotations are skipped. - schema: - type: boolean - default: true - - variable: custom - label: Options - schema: - type: dict - additional_attrs: true - attrs: - - variable: key - label: API-key (key) - schema: - type: string - default: "" - - variable: customkv - label: Custom Options - schema: - type: list - default: [] - items: - - variable: option - label: Option - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - default: "" - required: true - - variable: value - label: Value - schema: - type: string - default: "" - required: true - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - - variable: ingressList - label: Add Manual Custom Ingresses - group: Ingress - schema: - type: list - default: [] - items: - - variable: ingressListEntry - label: Custom Ingress - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: ingressClassName - label: IngressClass Name - schema: - type: string - default: "" - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: overrideService - label: Linked Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Service Name - schema: - type: string - default: "" - - variable: port - label: Service Port - schema: - type: int - - variable: tls - label: TLS-Settings - schema: - type: list - default: [] - show_if: [["certificateIssuer", "=", ""]] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your Cert-Manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: Use Custom Secret (Advanced) - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: "Allow Cross Origin Requests" - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: namespace - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description - description: defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - - variable: securityContext - group: Security and Permissions - label: Security Context - schema: - additional_attrs: true - type: dict - attrs: - - variable: container - label: Container - schema: - additional_attrs: true - type: dict - attrs: - # Settings from questions.yaml get appended here on a per-app basis - - - variable: runAsUser - label: "runAsUser" - description: "The UserID of the user running the application" - schema: - type: int - default: 568 - - variable: runAsGroup - label: "runAsGroup" - description: "The groupID 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 and Devices - label: "Resource Limits" - schema: - additional_attrs: true - type: dict - attrs: - - variable: limits - label: Advanced Limit Resource Consumption - schema: - additional_attrs: true - type: dict - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 4000m - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: RAM - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 8Gi - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: 'intel.com/i915' - label: Add Intel i915 GPUs - schema: - type: int - default: 0 - - variable: 'nvidia.com/gpu' - label: Add NVIDIA GPUs (Experimental) - schema: - type: int - default: 0 - - variable: 'amd.com/gpu' - label: Add AMD GPUs - schema: - type: int - default: 0 - - variable: requests - label: "Minimum Resources Required (request)" - schema: - additional_attrs: true - type: dict - hidden: true - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 10m - hidden: true - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: "RAM" - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 50Mi - hidden: true - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: deviceList - label: Mount USB Devices - group: Resources and Devices - schema: - type: list - default: [] - items: - - variable: deviceListEntry - label: Device - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Storage - schema: - type: boolean - default: true - - variable: type - label: (Advanced) Type of Storage - description: Sets the persistence type - schema: - type: string - default: device - hidden: true - - variable: readOnly - label: readOnly - schema: - type: boolean - default: false - - variable: hostPath - label: Host Device Path - description: Path to the device on the host system - schema: - type: path - - variable: mountPath - label: Container Device Path - description: Path inside the container the device is mounted - schema: - type: string - default: "/dev/ttyACM0" - - variable: scaleGPU - label: GPU Configuration - group: Resources and Devices - schema: - type: list - default: [] - items: - - variable: scaleGPUEntry - label: GPU - schema: - additional_attrs: true - type: dict - attrs: - # Specify GPU configuration - - variable: gpu - label: Select GPU - schema: - additional_attrs: true - type: dict - $ref: - - "definitions/gpuConfiguration" - attrs: [] - - variable: workaround - label: "Workaround" - schema: - type: string - default: workaround - hidden: true - - - variable: metrics - group: Metrics - label: Prometheus Metrics - schema: - additional_attrs: true - type: dict - attrs: - - variable: main - label: Main Metrics - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - description: Enable Prometheus Metrics - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - - variable: prometheusRule - label: PrometheusRule - description: Enable and configure Prometheus Rules for the App. - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - description: Enable Prometheus Metrics - schema: - type: boolean - default: false - # TODO: Rule List section - -# - variable: horizontalPodAutoscaler -# group: Advanced -# label: (Advanced) Horizontal Pod Autoscaler -# schema: -# type: list -# default: [] -# items: -# - variable: hpaEntry -# label: HPA Entry -# schema: -# additional_attrs: true -# type: dict -# attrs: -# - variable: name -# label: Name -# schema: -# type: string -# required: true -# default: "" -# - variable: enabled -# label: Enabled -# schema: -# type: boolean -# default: false -# show_subquestions_if: true -# subquestions: -# - variable: target -# label: Target -# description: Deployment name, Defaults to Main Deployment -# schema: -# type: string -# default: "" -# - variable: minReplicas -# label: Minimum Replicas -# schema: -# type: int -# default: 1 -# - variable: maxReplicas -# label: Maximum Replicas -# schema: -# type: int -# default: 5 -# - variable: targetCPUUtilizationPercentage -# label: Target CPU Utilization Percentage -# schema: -# type: int -# default: 80 -# - variable: targetMemoryUtilizationPercentage -# label: Target Memory Utilization Percentage -# schema: -# type: int -# default: 80 - - variable: networkPolicy - group: Advanced - label: (Advanced) Network Policy - schema: - type: list - default: [] - items: - - variable: netPolicyEntry - label: Network Policy Entry - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - default: "" - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: policyType - label: Policy Type - schema: - type: string - default: "" - enum: - - value: "" - description: Default - - value: ingress - description: Ingress - - value: egress - description: Egress - - value: ingress-egress - description: Ingress and Egress - - variable: egress - label: Egress - schema: - type: list - default: [] - items: - - variable: egressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: to - label: To - schema: - type: list - default: [] - items: - - variable: toEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - variable: ingress - label: Ingress - schema: - type: list - default: [] - items: - - variable: ingressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: from - label: From - schema: - type: list - default: [] - items: - - variable: fromEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - - variable: addons - group: Addons - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: codeserver - label: Codeserver - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: service - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: NodePort - description: Deprecated CHANGE THIS - - value: ClusterIP - description: ClusterIP - - value: LoadBalancer - description: LoadBalancer - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: ports - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: codeserver - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - default: 36107 - - variable: ingress - label: "Ingress" - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - variable: scaleCert - label: 'Use TrueNAS SCALE Certificate (Deprecated)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: int - $ref: - - "definitions/certificate" - - variable: envList - label: Codeserver Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: netshoot - label: Netshoot - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: envList - label: Netshoot Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: vpn - label: VPN - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Type - schema: - type: string - default: disabled - enum: - - value: disabled - description: disabled - - value: gluetun - description: Gluetun - - value: tailscale - description: Tailscale - - value: openvpn - description: OpenVPN (Deprecated) - - value: wireguard - description: Wireguard (Deprecated) - - variable: openvpn - label: OpenVPN Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "openvpn"]] - attrs: - - variable: username - label: Authentication Username (Optional) - description: Authentication Username, Optional - schema: - type: string - default: "" - - variable: password - label: Authentication Password - description: Authentication Credentials - schema: - type: string - show_if: [["username", "!=", ""]] - default: "" - required: true - - variable: tailscale - label: Tailscale Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "tailscale"]] - attrs: - - variable: authkey - label: Authentication Key - description: Provide an auth key to automatically authenticate the node as your user account. - schema: - type: string - private: true - default: "" - - variable: auth_once - label: Auth Once - description: Only attempt to log in if not already logged in. - schema: - type: boolean - default: true - - variable: accept_dns - label: Accept DNS - description: Accept DNS configuration from the admin console. - schema: - type: boolean - default: false - - variable: userspace - label: Userspace - description: Userspace Networking mode allows running Tailscale where you do not have access to create a VPN tunnel device. - schema: - type: boolean - default: false - - variable: routes - label: Routes - description: Expose physical subnet routes to your entire Tailscale network. - schema: - type: string - default: "" - - variable: dest_ip - label: Destination IP - description: Tells the DNAT mechanism which Destination IP to set in the IP header, and where to send packets that are matched. - schema: - type: string - default: "" - - variable: sock5_server - label: Sock5 Server - description: The address on which to listen for SOCKS5 proxying into the tailscale net. - schema: - type: string - default: "" - - variable: outbound_http_proxy_listen - label: Outbound HTTP Proxy Listen - description: The address on which to listen for HTTP proxying into the tailscale net. - schema: - type: string - default: "" - - variable: extra_args - label: Extra Args - description: Extra Args - schema: - type: string - default: "" - - variable: daemon_extra_args - label: Tailscale Daemon Extra Args - description: Tailscale Daemon Extra Args - schema: - type: string - default: "" - - variable: killSwitch - label: Enable Killswitch - schema: - type: boolean - show_if: [["type", "!=", "disabled"]] - default: true - - variable: excludedNetworks_IPv4 - label: Killswitch Excluded IPv4 networks - description: List of Killswitch Excluded IPv4 Addresses - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv4 - label: IPv4 Network - schema: - type: string - required: true - - variable: excludedNetworks_IPv6 - label: Killswitch Excluded IPv6 networks - description: "List of Killswitch Excluded IPv6 Addresses" - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv6 - label: IPv6 Network - schema: - type: string - required: true - - variable: configFile - label: VPN Config File Location - schema: - type: string - show_if: [["type", "!=", "disabled"]] - default: "" - - - variable: envList - label: VPN Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - max_length: 10240 - - - variable: docs - group: Documentation - label: Please read the documentation at https://truecharts.org - description: Please read the documentation at -
        https://truecharts.org - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDocs - label: I have checked the documentation - schema: - type: boolean - default: true - - variable: donateNag - group: Documentation - label: Please consider supporting TrueCharts, see https://truecharts.org/sponsor - description: Please consider supporting TrueCharts, see -
        https://truecharts.org/sponsor - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDonate - label: I have considered donating - schema: - type: boolean - default: true - hidden: true - diff --git a/stable/radarr/19.3.0/templates/NOTES.txt b/stable/radarr/19.3.0/templates/NOTES.txt deleted file mode 100644 index efcb74cb77..0000000000 --- a/stable/radarr/19.3.0/templates/NOTES.txt +++ /dev/null @@ -1 +0,0 @@ -{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/radarr/19.3.0/templates/common.yaml b/stable/radarr/19.3.0/templates/common.yaml deleted file mode 100644 index 3c93f57861..0000000000 --- a/stable/radarr/19.3.0/templates/common.yaml +++ /dev/null @@ -1,11 +0,0 @@ -{{/* Make sure all variables are set properly */}} -{{- include "tc.v1.common.loader.init" . -}} - -{{/* Disable [exportarr] if requested */}} -{{- if not .Values.metrics.main.enabled -}} - {{- $_ := set .Values.workload.exportarr "enabled" false -}} - {{- $_ := set .Values.service.metrics "enabled" false -}} -{{- end -}} - -{{/* Render the templates */}} -{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/radarr/19.3.0/values.yaml b/stable/radarr/19.3.0/values.yaml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/stable/radarr/19.4.0/.helmignore b/stable/radarr/19.4.0/.helmignore deleted file mode 100644 index 77ca5567b2..0000000000 --- a/stable/radarr/19.4.0/.helmignore +++ /dev/null @@ -1,30 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ -# OWNERS file for Kubernetes -OWNERS -# helm-docs templates -*.gotmpl -# docs folder -/docs -# icon -icon.png diff --git a/stable/radarr/19.4.0/CHANGELOG.md b/stable/radarr/19.4.0/CHANGELOG.md deleted file mode 100644 index fa7bf6dc34..0000000000 --- a/stable/radarr/19.4.0/CHANGELOG.md +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: Changelog ---- - - -*for the complete changelog, please refer to the website* - -**Important:** - - - - - - - - -## [radarr-19.1.12](https://github.com/truecharts/charts/compare/radarr-19.1.11...radarr-19.1.12) (2024-02-03) - -### Chore - - - -- update container image common to v17.2.30[@19ad5ec](https://github.com/19ad5ec) by renovate ([#17804](https://github.com/truecharts/charts/issues/17804)) - - -## [radarr-19.1.11](https://github.com/truecharts/charts/compare/radarr-19.1.10...radarr-19.1.11) (2024-01-29) - -### Chore - - - -- update container image ghcr.io/onedr0p/exportarr to v1.6.1[@60cf3d4](https://github.com/60cf3d4) by renovate ([#17725](https://github.com/truecharts/charts/issues/17725)) - - -## [radarr-19.1.10](https://github.com/truecharts/charts/compare/radarr-19.1.9...radarr-19.1.10) (2024-01-26) - -### Chore - - - -- update container image common to v17.2.29[@d7c41a3](https://github.com/d7c41a3) by renovate ([#17545](https://github.com/truecharts/charts/issues/17545)) - - -## [radarr-19.1.9](https://github.com/truecharts/charts/compare/radarr-19.1.8...radarr-19.1.9) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.28[@918b4c5](https://github.com/918b4c5) by renovate ([#17478](https://github.com/truecharts/charts/issues/17478)) - - -## [radarr-19.1.8](https://github.com/truecharts/charts/compare/radarr-19.1.7...radarr-19.1.8) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.26[@24c98f7](https://github.com/24c98f7) by renovate ([#17409](https://github.com/truecharts/charts/issues/17409)) - - -## [radarr-19.1.7](https://github.com/truecharts/charts/compare/radarr-19.1.6...radarr-19.1.7) (2024-01-21) - -### Chore - - - -- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) - - - - -## [radarr-19.1.6](https://github.com/truecharts/charts/compare/radarr-19.1.5...radarr-19.1.6) (2024-01-09) - -### Chore - - - -- update container image common to v17.2.22[@e7c9056](https://github.com/e7c9056) by renovate ([#16986](https://github.com/truecharts/charts/issues/16986)) - - -## [radarr-19.1.5](https://github.com/truecharts/charts/compare/radarr-19.1.4...radarr-19.1.5) (2024-01-02) - -### Chore - - - -- force bump to ensure up-to-date catalogs - - -## [radarr-19.1.4](https://github.com/truecharts/charts/compare/radarr-19.1.3...radarr-19.1.4) (2024-01-01) - -### Chore - - - -- increase common version for oci fixes - -- remove non-existent template refs ([#16738](https://github.com/truecharts/charts/issues/16738)) diff --git a/stable/radarr/19.4.0/Chart.yaml b/stable/radarr/19.4.0/Chart.yaml deleted file mode 100644 index 2ad42672e2..0000000000 --- a/stable/radarr/19.4.0/Chart.yaml +++ /dev/null @@ -1,38 +0,0 @@ -annotations: - max_scale_version: 24.04.0 - min_scale_version: 23.10.0 - truecharts.org/category: media - truecharts.org/max_helm_version: "3.14" - truecharts.org/min_helm_version: "3.12" - truecharts.org/train: stable -apiVersion: v2 -appVersion: 5.3.6.8612 -dependencies: - - name: common - version: 17.5.1 - repository: oci://tccr.io/truecharts - condition: "" - alias: "" - tags: [] - import-values: [] -deprecated: false -description: A fork of Sonarr to work with movies à la Couchpotato -home: https://truecharts.org/charts/stable/radarr -icon: https://truecharts.org/img/hotlink-ok/chart-icons/radarr.png -keywords: - - radarr - - torrent - - usenet -kubeVersion: ">=1.24.0-0" -maintainers: - - name: TrueCharts - email: info@truecharts.org - url: https://truecharts.org -name: radarr -sources: - - https://github.com/Radarr/Radarr - - https://github.com/truecharts/charts/tree/master/charts/stable/radarr - - https://ghcr.io/onedr0p/radarr - - https://ghcr.io/onedr0p/exportarr -type: application -version: 19.4.0 diff --git a/stable/radarr/19.4.0/README.md b/stable/radarr/19.4.0/README.md deleted file mode 100644 index 0915ee0aa5..0000000000 --- a/stable/radarr/19.4.0/README.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: README ---- - -## General Info - -TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. -However only installations using the TrueNAS SCALE Apps system are supported. - -For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/radarr) - -**This chart is not maintained by the upstream project and any issues with the chart should be raised [here](https://github.com/truecharts/charts/issues/new/choose)** - -## Support - -- Please check our [quick-start guides for TrueNAS SCALE](https://truecharts.org/manual/SCALE/guides/scale-intro). -- See the [Website](https://truecharts.org) -- Check our [Discord](https://discord.gg/tVsPTHWTtr) -- Open a [issue](https://github.com/truecharts/charts/issues/new/choose) - ---- - -## Sponsor TrueCharts - -TrueCharts can only exist due to the incredible effort of our staff. -Please consider making a [donation](https://truecharts.org/sponsor) or contributing back to the project any way you can! - -_All Rights Reserved - The TrueCharts Project_ diff --git a/stable/radarr/19.4.0/app-readme.md b/stable/radarr/19.4.0/app-readme.md deleted file mode 100644 index 94d7185029..0000000000 --- a/stable/radarr/19.4.0/app-readme.md +++ /dev/null @@ -1,8 +0,0 @@ -A fork of Sonarr to work with movies à la Couchpotato - -This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/radarr](https://truecharts.org/charts/stable/radarr) - ---- - -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/radarr/19.4.0/charts/common-17.5.0.tgz b/stable/radarr/19.4.0/charts/common-17.5.0.tgz deleted file mode 100644 index 3a5534883aaac1a331bf10ad166cff7fe5d2dd75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100452 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 z 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 Wm9Bh-<^K-=0RR7ge;?HVjtl_2wPFzf diff --git a/stable/radarr/19.4.0/ix_values.yaml b/stable/radarr/19.4.0/ix_values.yaml deleted file mode 100644 index 9e5f3f9e7a..0000000000 --- a/stable/radarr/19.4.0/ix_values.yaml +++ /dev/null @@ -1,108 +0,0 @@ -image: - repository: ghcr.io/onedr0p/radarr - pullPolicy: IfNotPresent - tag: 5.3.6.8612@sha256:d0786b4c22ab3a9a34cef30671a471c89df2beb95a7d50ba60e2f21dea5e0b28 -exportarrImage: - repository: ghcr.io/onedr0p/exportarr - pullPolicy: IfNotPresent - tag: v1.6.1@sha256:60cf3d44aa0b7dea2a65160b2e2e373c1ae38cd6b12a45fe81b8afa45ac31c22 -securityContext: - container: - readOnlyRootFilesystem: false -service: - main: - ports: - main: - port: 7878 - metrics: - enabled: true - type: ClusterIP - targetSelector: exportarr - ports: - metrics: - enabled: true - port: 7879 - targetSelector: exportarr -workload: - main: - podSpec: - containers: - main: - probes: - readiness: - enabled: true - type: http - path: /ping - liveness: - enabled: true - type: http - path: /ping - startup: - enabled: true - type: http - path: /ping - env: - RADARR__PORT: "{{ .Values.service.main.ports.main.port }}" - exportarr: - enabled: true - type: Deployment - strategy: RollingUpdate - replicas: 1 - podSpec: - containers: - exportarr: - primary: true - enabled: true - imageSelector: exportarrImage - args: - - radarr - 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 - CONFIG: "/config/config.xml" -persistence: - config: - enabled: true - targetSelector: - main: - main: - mountPath: /config - exportarr: - exportarr: - mountPath: /config - readOnly: true -metrics: - main: - enabled: true - type: "servicemonitor" - endpoints: - - port: metrics - path: /metrics - targetSelector: metrics - prometheusRule: - enabled: false -portal: - open: - enabled: true -updated: true diff --git a/stable/radarr/19.4.0/questions.yaml b/stable/radarr/19.4.0/questions.yaml deleted file mode 100755 index 43268ae600..0000000000 --- a/stable/radarr/19.4.0/questions.yaml +++ /dev/null @@ -1,2927 +0,0 @@ -groups: - - name: Container Image - description: Image to be used for container - - name: General Settings - description: General Deployment Settings - - name: Workload Settings - description: Workload Settings - - name: App Configuration - description: App Specific Config Options - - name: Networking and Services - description: Configure Network and Services for Container - - name: Storage and Persistence - description: Persist and Share Data that is Separate from the Container - - name: Ingress - description: Ingress Configuration - - name: Security and Permissions - description: Configure Security Context and Permissions - - name: Resources and Devices - description: "Specify Resources/Devices to be Allocated to Workload" - - name: Middlewares - description: Traefik Middlewares - - name: Metrics - description: Metrics - - name: Addons - description: Addon Configuration - - name: Backup Configuration - description: Configure Velero Backup Schedule - - name: Advanced - description: Advanced Configuration - - name: Postgresql - description: Postgresql - - name: Documentation - description: Documentation - -portals: - open: - protocols: - - "$kubernetes-resource_configmap_tcportal-open_protocol" - host: - - "$kubernetes-resource_configmap_tcportal-open_host" - ports: - - "$kubernetes-resource_configmap_tcportal-open_port" - -questions: - - variable: global - group: General Settings - label: "Global Settings" - schema: - additional_attrs: true - type: dict - attrs: - - variable: stopAll - label: Stop All - description: "Stops All Running pods and hibernates cnpg" - schema: - type: boolean - default: false - - - variable: workload - group: "Workload Settings" - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: main - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: type - label: Type (Advanced) - schema: - type: string - default: Deployment - enum: - - value: Deployment - description: Deployment - - value: DaemonSet - description: DaemonSet - - - variable: replicas - label: Replicas (Advanced) - description: Set the number of Replicas - schema: - type: int - show_if: [["type", "!=", "DaemonSet"]] - default: 1 - - - variable: podSpec - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: containers - label: Containers - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: Main Container - schema: - additional_attrs: true - type: dict - attrs: - - - variable: env - group: App Configuration - label: Image Environment - schema: - additional_attrs: true - type: dict - attrs: - - variable: RADARR__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 Settings" - schema: - type: string - default: "Etc/UTC" - $ref: - - "definitions/timezone" - - - variable: podOptions - group: "General Settings" - label: "Global Pod Options (Advanced)" - schema: - additional_attrs: true - type: dict - attrs: - - variable: expertPodOpts - label: "Expert - Pod Options" - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hostNetwork - label: "Host Networking" - schema: - type: boolean - default: false - - variable: dnsConfig - label: "DNS Configuration" - schema: - type: dict - additional_attrs: true - attrs: - - variable: options - label: "Options" - schema: - type: list - default: [{"name": "ndots", "value": "1"}] - items: - - variable: optionsEntry - label: "Option Entry" - schema: - type: dict - additional_attrs: true - attrs: - - variable: name - label: "Name" - schema: - type: string - required: true - - variable: value - label: "Value" - schema: - type: string - - variable: nameservers - label: "Nameservers" - schema: - type: list - default: [] - items: - - variable: nsEntry - label: "Nameserver Entry" - schema: - type: string - required: true - - variable: searches - label: "Searches" - schema: - type: list - default: [] - items: - - variable: searchEntry - label: "Search Entry" - schema: - type: string - required: true - - - variable: imagePullSecretList - group: "General Settings" - label: "Image Pull Secrets" - schema: - type: list - default: [] - items: - - variable: pullsecretentry - label: "Pull Secret" - schema: - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: true - - variable: data - label: Data - schema: - type: dict - additional_attrs: true - attrs: - - variable: registry - label: "Registry" - schema: - type: string - required: true - default: "https://index.docker.io/v1/" - - variable: username - label: "Username" - schema: - type: string - required: true - default: "" - - variable: password - label: "Password" - schema: - type: string - required: true - private: true - default: "" - - variable: email - label: "Email" - schema: - type: string - required: true - default: "" - - - variable: service - group: Networking and Services - label: Configure Service(s) - schema: - additional_attrs: true - type: dict - attrs: - - - variable: 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: 7878 - required: true - - variable: serviceexpert - group: Networking and Services - label: Show Expert Config - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - - variable: scaleExternalInterface - description: Add External Interfaces - label: Add external Interfaces - group: Networking - schema: - type: list - items: - - variable: interfaceConfiguration - description: Interface Configuration - label: Interface Configuration - schema: - additional_attrs: true - type: dict - $ref: - - "normalize/interfaceConfiguration" - attrs: - - variable: hostInterface - description: Please Specify Host Interface - label: Host Interface - schema: - type: string - required: true - $ref: - - "definitions/interface" - - variable: ipam - description: Define how IP Address will be managed - label: IP Address Management - schema: - additional_attrs: true - type: dict - required: true - attrs: - - variable: type - description: Specify type for IPAM - label: IPAM Type - schema: - type: string - required: true - enum: - - value: dhcp - description: Use DHCP - - value: static - description: Use Static IP - - variable: staticIPConfigurations - label: Static IP Addresses - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticIP - label: Static IP - schema: - type: ipaddr - cidr: true - - variable: staticRoutes - label: Static Routes - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticRouteConfiguration - label: Static Route Configuration - schema: - additional_attrs: true - type: dict - attrs: - - variable: destination - label: Destination - schema: - type: ipaddr - cidr: true - required: true - - variable: gateway - label: Gateway - schema: - type: ipaddr - cidr: false - required: true - - - variable: serviceList - label: Add Manual Custom Services - group: Networking and Services - schema: - type: list - default: [] - items: - - variable: serviceListEntry - label: Custom Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the service - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: LoadBalancer - description: LoadBalancer (Expose Ports) - - value: ClusterIP - description: ClusterIP (Do Not Expose Ports) - - value: Simple - description: Deprecated CHANGE THIS - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: advancedsvcset - label: Show Advanced Service Settings - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: externalIPs - label: "External IP's" - description: "External IP's" - schema: - type: list - default: [] - items: - - variable: externalIP - label: External IP - schema: - type: string - - variable: ipFamilyPolicy - label: IP Family Policy - description: Specify the IP Policy - schema: - type: string - default: SingleStack - enum: - - value: SingleStack - description: SingleStack - - value: PreferDualStack - description: PreferDualStack - - value: RequireDualStack - description: RequireDualStack - - variable: ipFamilies - label: IP Families - description: (Advanced) The IP Families that should be used - schema: - type: list - default: [] - items: - - variable: ipFamily - label: IP Family - schema: - type: string - - variable: portsList - label: Additional Service Ports - schema: - type: list - default: [] - items: - - variable: portsListEntry - label: Custom ports - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Port - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Port Name - schema: - type: string - default: "" - - variable: protocol - label: Port Type - schema: - type: string - default: tcp - enum: - - value: http - description: HTTP - - value: https - description: HTTPS - - value: tcp - description: TCP - - value: udp - description: UDP - - variable: targetPort - label: Target Port - description: This port exposes the container port on the service - schema: - type: int - required: true - - variable: port - label: Container Port - schema: - type: int - required: true - - - variable: persistence - label: Integrated Persistent Storage - description: Integrated Persistent Storage - group: Storage and 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: 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: Storage and Persistence - schema: - type: list - default: [] - items: - - variable: persistenceListEntry - label: Custom Storage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the storage - schema: - type: boolean - default: true - hidden: true - - variable: type - label: Type of Storage - description: Sets the persistence type, Anything other than PVC could break rollback! - schema: - type: string - default: hostPath - enum: - - value: pvc - description: PVC - - value: hostPath - description: Host Path - - value: emptyDir - description: emptyDir - - value: nfs - description: NFS Share - - variable: server - label: NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: path - label: Path on NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: iscsi - label: iSCSI Options - schema: - show_if: [["type", "=", "iscsi"]] - type: dict - additional_attrs: true - attrs: - - variable: targetPortal - label: targetPortal - schema: - type: string - required: true - default: "" - - variable: iqn - label: iqn - schema: - type: string - required: true - default: "" - - variable: lun - label: lun - schema: - type: int - default: 0 - - variable: authSession - label: authSession - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: authDiscovery - label: authDiscovery - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: autoPermissions - label: Automatic Permissions Configuration - description: Automatically set permissions - schema: - show_if: [["type", "!=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: chown - label: Run CHOWN - description: | - It will run CHOWN on the path with the given fsGroup - schema: - type: boolean - default: false - - variable: chmod - label: Run CHMOD - description: | - It will run CHMOD on the path with the given value
        - Format should be 3 digits, e.g. 770 - schema: - type: string - valid_chars: '[0-9]{3}' - default: "" - - variable: recursive - label: Recursive - description: | - It will run CHOWN and CHMOD recursively - schema: - type: boolean - default: false - - variable: readOnly - label: Read Only - schema: - type: boolean - default: false - - variable: hostPath - label: Host Path - description: Path inside the container the storage is mounted - schema: - show_if: [["type", "=", "hostPath"]] - type: hostpath - - variable: mountPath - label: Mount Path - description: Path inside the container the storage is mounted - schema: - type: string - default: "" - required: true - valid_chars: '^\/([a-zA-Z0-9._-]+(\s?[a-zA-Z0-9._-]+|\/?))+$' - - variable: medium - label: EmptyDir Medium - schema: - show_if: [["type", "=", "emptyDir"]] - type: string - default: "" - enum: - - value: "" - description: Default - - value: Memory - description: Memory - - variable: size - label: Size Quotum of Storage - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: 256Gi - - variable: storageClass - label: 'storageClass (Advanced)' - description: 'sets the storageClass to something other than iX default. Only for advanced usecases!' - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: "" - - variable: static - label: 'Static Fixed PVC Bindings (Experimental)' - description: Link a PVC to a specific storage location - schema: - show_if: [["type", "=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: mode - label: mode - description: | - disabled: use normal dynamic PVCs - smb: connect to an SMB share - nfs: connect to an NFS share - schema: - type: string - default: "disabled" - enum: - - value: "disabled" - description: disabled - - value: smb - description: smb - - value: nfs - description: nfs - - variable: server - label: Server - description: server to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "myserver" - - variable: share - label: Share - description: share to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "/myshare" - - variable: user - label: User - description: connecting user - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "myuser" - - variable: domain - label: Domain - description: user domain - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: password - label: Password - description: connecting password - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: volumeSnapshots - label: 'Volume Snapshots (Experimental)' - description: Add an entry to the list to force creation of a volumeSnapshot of this PVC - schema: - show_if: [["type", "=", "pvc"]] - type: list - default: [] - items: - - variable: volumeSnapshotEntry - label: Custom volumeSnapshot - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - description: 'WARNING: renaming this, means deletion of the snapshot with the old name!' - schema: - type: string - default: "mysnapshot" - required: true - - variable: volumeSnapshotClassName - label: 'volumeSnapshot Class Name (Advanced)' - description: For use with PVCs using a non-default storageClass - schema: - type: string - default: "" - - - variable: ingress - label: "" - group: Ingress - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: Main Ingress - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name (Optional) - description: Defaults to chart name - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description (Optional) - description: Defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: icon - label: Icon (Optional) - description: Defaults to chart icon - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - variable: widget - label: Widget Settings - schema: - type: dict - additional_attrs: true - show_if: [["enabled", "=", true]] - attrs: - - variable: enabled - label: Enable Widget - description: When disabled all widget annotations are skipped. - schema: - type: boolean - default: true - - variable: custom - label: Options - schema: - type: dict - additional_attrs: true - attrs: - - variable: key - label: API-key (key) - schema: - type: string - default: "" - - variable: customkv - label: Custom Options - schema: - type: list - default: [] - items: - - variable: option - label: Option - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - default: "" - required: true - - variable: value - label: Value - schema: - type: string - default: "" - required: true - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - - variable: ingressList - label: Add Manual Custom Ingresses - group: Ingress - schema: - type: list - default: [] - items: - - variable: ingressListEntry - label: Custom Ingress - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: ingressClassName - label: IngressClass Name - schema: - type: string - default: "" - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: overrideService - label: Linked Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Service Name - schema: - type: string - default: "" - - variable: port - label: Service Port - schema: - type: int - - variable: tls - label: TLS-Settings - schema: - type: list - default: [] - show_if: [["certificateIssuer", "=", ""]] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your Cert-Manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: Use Custom Secret (Advanced) - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: "Allow Cross Origin Requests" - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: namespace - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description - description: defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - - variable: securityContext - group: Security and Permissions - label: Security Context - schema: - additional_attrs: true - type: dict - attrs: - - variable: container - label: Container - schema: - additional_attrs: true - type: dict - attrs: - # Settings from questions.yaml get appended here on a per-app basis - - - variable: runAsUser - label: "runAsUser" - description: "The UserID of the user running the application" - schema: - type: int - default: 568 - - variable: runAsGroup - label: "runAsGroup" - description: "The groupID 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 and Devices - label: "Resource Limits" - schema: - additional_attrs: true - type: dict - attrs: - - variable: limits - label: Advanced Limit Resource Consumption - schema: - additional_attrs: true - type: dict - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 4000m - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: RAM - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 8Gi - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: 'intel.com/i915' - label: Add Intel i915 GPUs - schema: - type: int - default: 0 - - variable: 'nvidia.com/gpu' - label: Add NVIDIA GPUs (Experimental) - schema: - type: int - default: 0 - - variable: 'amd.com/gpu' - label: Add AMD GPUs - schema: - type: int - default: 0 - - variable: requests - label: "Minimum Resources Required (request)" - schema: - additional_attrs: true - type: dict - hidden: true - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 10m - hidden: true - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: "RAM" - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 50Mi - hidden: true - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: deviceList - label: Mount USB Devices - group: Resources and Devices - schema: - type: list - default: [] - items: - - variable: deviceListEntry - label: Device - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Storage - schema: - type: boolean - default: true - - variable: type - label: (Advanced) Type of Storage - description: Sets the persistence type - schema: - type: string - default: device - hidden: true - - variable: readOnly - label: readOnly - schema: - type: boolean - default: false - - variable: hostPath - label: Host Device Path - description: Path to the device on the host system - schema: - type: path - - variable: mountPath - label: Container Device Path - description: Path inside the container the device is mounted - schema: - type: string - default: "/dev/ttyACM0" - - variable: scaleGPU - label: GPU Configuration - group: Resources and Devices - schema: - type: list - default: [] - items: - - variable: scaleGPUEntry - label: GPU - schema: - additional_attrs: true - type: dict - attrs: - # Specify GPU configuration - - variable: gpu - label: Select GPU - schema: - additional_attrs: true - type: dict - $ref: - - "definitions/gpuConfiguration" - attrs: [] - - variable: workaround - label: "Workaround" - schema: - type: string - default: workaround - hidden: true - - - variable: metrics - group: Metrics - label: Prometheus Metrics - schema: - additional_attrs: true - type: dict - attrs: - - variable: main - label: Main Metrics - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - description: Enable Prometheus Metrics - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - - variable: prometheusRule - label: PrometheusRule - description: Enable and configure Prometheus Rules for the App. - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - description: Enable Prometheus Metrics - schema: - type: boolean - default: false - # TODO: Rule List section - -# - variable: horizontalPodAutoscaler -# group: Advanced -# label: (Advanced) Horizontal Pod Autoscaler -# schema: -# type: list -# default: [] -# items: -# - variable: hpaEntry -# label: HPA Entry -# schema: -# additional_attrs: true -# type: dict -# attrs: -# - variable: name -# label: Name -# schema: -# type: string -# required: true -# default: "" -# - variable: enabled -# label: Enabled -# schema: -# type: boolean -# default: false -# show_subquestions_if: true -# subquestions: -# - variable: target -# label: Target -# description: Deployment name, Defaults to Main Deployment -# schema: -# type: string -# default: "" -# - variable: minReplicas -# label: Minimum Replicas -# schema: -# type: int -# default: 1 -# - variable: maxReplicas -# label: Maximum Replicas -# schema: -# type: int -# default: 5 -# - variable: targetCPUUtilizationPercentage -# label: Target CPU Utilization Percentage -# schema: -# type: int -# default: 80 -# - variable: targetMemoryUtilizationPercentage -# label: Target Memory Utilization Percentage -# schema: -# type: int -# default: 80 - - variable: networkPolicy - group: Advanced - label: (Advanced) Network Policy - schema: - type: list - default: [] - items: - - variable: netPolicyEntry - label: Network Policy Entry - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - default: "" - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: policyType - label: Policy Type - schema: - type: string - default: "" - enum: - - value: "" - description: Default - - value: ingress - description: Ingress - - value: egress - description: Egress - - value: ingress-egress - description: Ingress and Egress - - variable: egress - label: Egress - schema: - type: list - default: [] - items: - - variable: egressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: to - label: To - schema: - type: list - default: [] - items: - - variable: toEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - variable: ingress - label: Ingress - schema: - type: list - default: [] - items: - - variable: ingressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: from - label: From - schema: - type: list - default: [] - items: - - variable: fromEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - - variable: addons - group: Addons - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: codeserver - label: Codeserver - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: service - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: NodePort - description: Deprecated CHANGE THIS - - value: ClusterIP - description: ClusterIP - - value: LoadBalancer - description: LoadBalancer - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: ports - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: codeserver - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - default: 36107 - - variable: ingress - label: "Ingress" - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - variable: scaleCert - label: 'Use TrueNAS SCALE Certificate (Deprecated)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: int - $ref: - - "definitions/certificate" - - variable: envList - label: Codeserver Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: netshoot - label: Netshoot - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: envList - label: Netshoot Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: vpn - label: VPN - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Type - schema: - type: string - default: disabled - enum: - - value: disabled - description: disabled - - value: gluetun - description: Gluetun - - value: tailscale - description: Tailscale - - value: openvpn - description: OpenVPN (Deprecated) - - value: wireguard - description: Wireguard (Deprecated) - - variable: openvpn - label: OpenVPN Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "openvpn"]] - attrs: - - variable: username - label: Authentication Username (Optional) - description: Authentication Username, Optional - schema: - type: string - default: "" - - variable: password - label: Authentication Password - description: Authentication Credentials - schema: - type: string - show_if: [["username", "!=", ""]] - default: "" - required: true - - variable: tailscale - label: Tailscale Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "tailscale"]] - attrs: - - variable: authkey - label: Authentication Key - description: Provide an auth key to automatically authenticate the node as your user account. - schema: - type: string - private: true - default: "" - - variable: auth_once - label: Auth Once - description: Only attempt to log in if not already logged in. - schema: - type: boolean - default: true - - variable: accept_dns - label: Accept DNS - description: Accept DNS configuration from the admin console. - schema: - type: boolean - default: false - - variable: userspace - label: Userspace - description: Userspace Networking mode allows running Tailscale where you do not have access to create a VPN tunnel device. - schema: - type: boolean - default: false - - variable: routes - label: Routes - description: Expose physical subnet routes to your entire Tailscale network. - schema: - type: string - default: "" - - variable: dest_ip - label: Destination IP - description: Tells the DNAT mechanism which Destination IP to set in the IP header, and where to send packets that are matched. - schema: - type: string - default: "" - - variable: sock5_server - label: Sock5 Server - description: The address on which to listen for SOCKS5 proxying into the tailscale net. - schema: - type: string - default: "" - - variable: outbound_http_proxy_listen - label: Outbound HTTP Proxy Listen - description: The address on which to listen for HTTP proxying into the tailscale net. - schema: - type: string - default: "" - - variable: extra_args - label: Extra Args - description: Extra Args - schema: - type: string - default: "" - - variable: daemon_extra_args - label: Tailscale Daemon Extra Args - description: Tailscale Daemon Extra Args - schema: - type: string - default: "" - - variable: killSwitch - label: Enable Killswitch - schema: - type: boolean - show_if: [["type", "!=", "disabled"]] - default: true - - variable: excludedNetworks_IPv4 - label: Killswitch Excluded IPv4 networks - description: List of Killswitch Excluded IPv4 Addresses - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv4 - label: IPv4 Network - schema: - type: string - required: true - - variable: excludedNetworks_IPv6 - label: Killswitch Excluded IPv6 networks - description: "List of Killswitch Excluded IPv6 Addresses" - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv6 - label: IPv6 Network - schema: - type: string - required: true - - variable: configFile - label: VPN Config File Location - schema: - type: string - show_if: [["type", "!=", "disabled"]] - default: "" - - - variable: envList - label: VPN Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - max_length: 10240 - - - variable: docs - group: Documentation - label: Please read the documentation at https://truecharts.org - description: Please read the documentation at -
        https://truecharts.org - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDocs - label: I have checked the documentation - schema: - type: boolean - default: true - - variable: donateNag - group: Documentation - label: Please consider supporting TrueCharts, see https://truecharts.org/sponsor - description: Please consider supporting TrueCharts, see -
        https://truecharts.org/sponsor - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDonate - label: I have considered donating - schema: - type: boolean - default: true - hidden: true - diff --git a/stable/radarr/19.4.0/templates/NOTES.txt b/stable/radarr/19.4.0/templates/NOTES.txt deleted file mode 100644 index efcb74cb77..0000000000 --- a/stable/radarr/19.4.0/templates/NOTES.txt +++ /dev/null @@ -1 +0,0 @@ -{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/radarr/19.4.0/templates/common.yaml b/stable/radarr/19.4.0/templates/common.yaml deleted file mode 100644 index 3c93f57861..0000000000 --- a/stable/radarr/19.4.0/templates/common.yaml +++ /dev/null @@ -1,11 +0,0 @@ -{{/* Make sure all variables are set properly */}} -{{- include "tc.v1.common.loader.init" . -}} - -{{/* Disable [exportarr] if requested */}} -{{- if not .Values.metrics.main.enabled -}} - {{- $_ := set .Values.workload.exportarr "enabled" false -}} - {{- $_ := set .Values.service.metrics "enabled" false -}} -{{- end -}} - -{{/* Render the templates */}} -{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/radarr/19.4.0/values.yaml b/stable/radarr/19.4.0/values.yaml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/stable/radarr/20.2.0/.helmignore b/stable/radarr/20.2.0/.helmignore deleted file mode 100644 index 77ca5567b2..0000000000 --- a/stable/radarr/20.2.0/.helmignore +++ /dev/null @@ -1,30 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ -# OWNERS file for Kubernetes -OWNERS -# helm-docs templates -*.gotmpl -# docs folder -/docs -# icon -icon.png diff --git a/stable/radarr/20.2.0/CHANGELOG.md b/stable/radarr/20.2.0/CHANGELOG.md deleted file mode 100644 index 2612ac2ac2..0000000000 --- a/stable/radarr/20.2.0/CHANGELOG.md +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: Changelog ---- - - -*for the complete changelog, please refer to the website* - -**Important:** - - - - - - - - - - - - - - -## [radarr-19.1.12](https://github.com/truecharts/charts/compare/radarr-19.1.11...radarr-19.1.12) (2024-02-03) - -### Chore - - - -- update container image common to v17.2.30[@19ad5ec](https://github.com/19ad5ec) by renovate ([#17804](https://github.com/truecharts/charts/issues/17804)) - - -## [radarr-19.1.11](https://github.com/truecharts/charts/compare/radarr-19.1.10...radarr-19.1.11) (2024-01-29) - -### Chore - - - -- update container image ghcr.io/onedr0p/exportarr to v1.6.1[@60cf3d4](https://github.com/60cf3d4) by renovate ([#17725](https://github.com/truecharts/charts/issues/17725)) - - -## [radarr-19.1.10](https://github.com/truecharts/charts/compare/radarr-19.1.9...radarr-19.1.10) (2024-01-26) - -### Chore - - - -- update container image common to v17.2.29[@d7c41a3](https://github.com/d7c41a3) by renovate ([#17545](https://github.com/truecharts/charts/issues/17545)) - - -## [radarr-19.1.9](https://github.com/truecharts/charts/compare/radarr-19.1.8...radarr-19.1.9) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.28[@918b4c5](https://github.com/918b4c5) by renovate ([#17478](https://github.com/truecharts/charts/issues/17478)) - - -## [radarr-19.1.8](https://github.com/truecharts/charts/compare/radarr-19.1.7...radarr-19.1.8) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.26[@24c98f7](https://github.com/24c98f7) by renovate ([#17409](https://github.com/truecharts/charts/issues/17409)) - - -## [radarr-19.1.7](https://github.com/truecharts/charts/compare/radarr-19.1.6...radarr-19.1.7) (2024-01-21) - -### Chore - - - -- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) - - - - -## [radarr-19.1.6](https://github.com/truecharts/charts/compare/radarr-19.1.5...radarr-19.1.6) (2024-01-09) - -### Chore - - - -- update container image common to v17.2.22[@e7c9056](https://github.com/e7c9056) by renovate ([#16986](https://github.com/truecharts/charts/issues/16986)) - - -## [radarr-19.1.5](https://github.com/truecharts/charts/compare/radarr-19.1.4...radarr-19.1.5) (2024-01-02) - -### Chore - - - -- force bump to ensure up-to-date catalogs - - -## [radarr-19.1.4](https://github.com/truecharts/charts/compare/radarr-19.1.3...radarr-19.1.4) (2024-01-01) - -### Chore diff --git a/stable/radarr/20.2.0/Chart.yaml b/stable/radarr/20.2.0/Chart.yaml deleted file mode 100644 index 41d3dfdc2d..0000000000 --- a/stable/radarr/20.2.0/Chart.yaml +++ /dev/null @@ -1,38 +0,0 @@ -annotations: - max_scale_version: 24.04.0 - min_scale_version: 23.10.0 - 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: 5.3.6.8612 -dependencies: - - name: common - version: 18.2.1 - repository: oci://tccr.io/truecharts - condition: "" - alias: "" - tags: [] - import-values: [] -deprecated: false -description: A fork of Sonarr to work with movies à la Couchpotato -home: https://truecharts.org/charts/stable/radarr -icon: https://truecharts.org/img/hotlink-ok/chart-icons/radarr.png -keywords: - - radarr - - torrent - - usenet -kubeVersion: ">=1.24.0-0" -maintainers: - - name: TrueCharts - email: info@truecharts.org - url: https://truecharts.org -name: radarr -sources: - - https://github.com/Radarr/Radarr - - https://github.com/truecharts/charts/tree/master/charts/stable/radarr - - https://ghcr.io/onedr0p/exportarr - - https://ghcr.io/onedr0p/radarr -type: application -version: 20.2.0 diff --git a/stable/radarr/20.2.0/README.md b/stable/radarr/20.2.0/README.md deleted file mode 100644 index 0915ee0aa5..0000000000 --- a/stable/radarr/20.2.0/README.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: README ---- - -## General Info - -TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. -However only installations using the TrueNAS SCALE Apps system are supported. - -For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/radarr) - -**This chart is not maintained by the upstream project and any issues with the chart should be raised [here](https://github.com/truecharts/charts/issues/new/choose)** - -## Support - -- Please check our [quick-start guides for TrueNAS SCALE](https://truecharts.org/manual/SCALE/guides/scale-intro). -- See the [Website](https://truecharts.org) -- Check our [Discord](https://discord.gg/tVsPTHWTtr) -- Open a [issue](https://github.com/truecharts/charts/issues/new/choose) - ---- - -## Sponsor TrueCharts - -TrueCharts can only exist due to the incredible effort of our staff. -Please consider making a [donation](https://truecharts.org/sponsor) or contributing back to the project any way you can! - -_All Rights Reserved - The TrueCharts Project_ diff --git a/stable/radarr/20.2.0/app-readme.md b/stable/radarr/20.2.0/app-readme.md deleted file mode 100644 index 94d7185029..0000000000 --- a/stable/radarr/20.2.0/app-readme.md +++ /dev/null @@ -1,8 +0,0 @@ -A fork of Sonarr to work with movies à la Couchpotato - -This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/radarr](https://truecharts.org/charts/stable/radarr) - ---- - -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/radarr/20.2.0/charts/common-18.1.2.tgz b/stable/radarr/20.2.0/charts/common-18.1.2.tgz deleted file mode 100644 index afb1de8120d9e1088c1711607a6c323d4dae355b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99288 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 Du(4)S diff --git a/stable/radarr/20.2.0/ix_values.yaml b/stable/radarr/20.2.0/ix_values.yaml deleted file mode 100644 index 9e5f3f9e7a..0000000000 --- a/stable/radarr/20.2.0/ix_values.yaml +++ /dev/null @@ -1,108 +0,0 @@ -image: - repository: ghcr.io/onedr0p/radarr - pullPolicy: IfNotPresent - tag: 5.3.6.8612@sha256:d0786b4c22ab3a9a34cef30671a471c89df2beb95a7d50ba60e2f21dea5e0b28 -exportarrImage: - repository: ghcr.io/onedr0p/exportarr - pullPolicy: IfNotPresent - tag: v1.6.1@sha256:60cf3d44aa0b7dea2a65160b2e2e373c1ae38cd6b12a45fe81b8afa45ac31c22 -securityContext: - container: - readOnlyRootFilesystem: false -service: - main: - ports: - main: - port: 7878 - metrics: - enabled: true - type: ClusterIP - targetSelector: exportarr - ports: - metrics: - enabled: true - port: 7879 - targetSelector: exportarr -workload: - main: - podSpec: - containers: - main: - probes: - readiness: - enabled: true - type: http - path: /ping - liveness: - enabled: true - type: http - path: /ping - startup: - enabled: true - type: http - path: /ping - env: - RADARR__PORT: "{{ .Values.service.main.ports.main.port }}" - exportarr: - enabled: true - type: Deployment - strategy: RollingUpdate - replicas: 1 - podSpec: - containers: - exportarr: - primary: true - enabled: true - imageSelector: exportarrImage - args: - - radarr - 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 - CONFIG: "/config/config.xml" -persistence: - config: - enabled: true - targetSelector: - main: - main: - mountPath: /config - exportarr: - exportarr: - mountPath: /config - readOnly: true -metrics: - main: - enabled: true - type: "servicemonitor" - endpoints: - - port: metrics - path: /metrics - targetSelector: metrics - prometheusRule: - enabled: false -portal: - open: - enabled: true -updated: true diff --git a/stable/radarr/20.2.0/questions.yaml b/stable/radarr/20.2.0/questions.yaml deleted file mode 100755 index fb70bd2d47..0000000000 --- a/stable/radarr/20.2.0/questions.yaml +++ /dev/null @@ -1,2899 +0,0 @@ -groups: - - name: Container Image - description: Image to be used for container - - name: General Settings - description: General Deployment Settings - - name: Workload Settings - description: Workload Settings - - name: App Configuration - description: App Specific Config Options - - name: Networking and Services - description: Configure Network and Services for Container - - name: Storage and Persistence - description: Persist and Share Data that is Separate from the Container - - name: Ingress - description: Ingress Configuration - - name: Security and Permissions - description: Configure Security Context and Permissions - - name: Resources and Devices - description: "Specify Resources/Devices to be Allocated to Workload" - - name: Middlewares - description: Traefik Middlewares - - name: Metrics - description: Metrics - - name: Addons - description: Addon Configuration - - name: Backup Configuration - description: Configure Velero Backup Schedule - - name: Advanced - description: Advanced Configuration - - name: Postgresql - description: Postgresql - - name: Documentation - description: Documentation - -portals: - open: - protocols: - - "$kubernetes-resource_configmap_tcportal-open_protocol" - host: - - "$kubernetes-resource_configmap_tcportal-open_host" - ports: - - "$kubernetes-resource_configmap_tcportal-open_port" - -questions: - - variable: global - group: General Settings - label: "Global Settings" - schema: - additional_attrs: true - type: dict - attrs: - - variable: stopAll - label: Stop All - description: "Stops All Running pods and hibernates cnpg" - schema: - type: boolean - default: false - - - variable: workload - group: "Workload Settings" - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: main - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: type - label: Type (Advanced) - schema: - type: string - default: Deployment - enum: - - value: Deployment - description: Deployment - - value: DaemonSet - description: DaemonSet - - - variable: replicas - label: Replicas (Advanced) - description: Set the number of Replicas - schema: - type: int - show_if: [["type", "!=", "DaemonSet"]] - default: 1 - - - variable: podSpec - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: containers - label: Containers - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: Main Container - schema: - additional_attrs: true - type: dict - attrs: - - - variable: env - group: App Configuration - label: Image Environment - schema: - additional_attrs: true - type: dict - attrs: - - variable: RADARR__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 Settings" - schema: - type: string - default: "Etc/UTC" - $ref: - - "definitions/timezone" - - - variable: podOptions - group: "General Settings" - label: "Global Pod Options (Advanced)" - schema: - additional_attrs: true - type: dict - attrs: - - variable: expertPodOpts - label: "Expert - Pod Options" - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hostNetwork - label: "Host Networking" - schema: - type: boolean - default: false - - variable: dnsConfig - label: "DNS Configuration" - schema: - type: dict - additional_attrs: true - attrs: - - variable: options - label: "Options" - schema: - type: list - default: [{"name": "ndots", "value": "1"}] - items: - - variable: optionsEntry - label: "Option Entry" - schema: - type: dict - additional_attrs: true - attrs: - - variable: name - label: "Name" - schema: - type: string - required: true - - variable: value - label: "Value" - schema: - type: string - - variable: nameservers - label: "Nameservers" - schema: - type: list - default: [] - items: - - variable: nsEntry - label: "Nameserver Entry" - schema: - type: string - required: true - - variable: searches - label: "Searches" - schema: - type: list - default: [] - items: - - variable: searchEntry - label: "Search Entry" - schema: - type: string - required: true - - - variable: imagePullSecretList - group: "General Settings" - label: "Image Pull Secrets" - schema: - type: list - default: [] - items: - - variable: pullsecretentry - label: "Pull Secret" - schema: - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: true - - variable: data - label: Data - schema: - type: dict - additional_attrs: true - attrs: - - variable: registry - label: "Registry" - schema: - type: string - required: true - default: "https://index.docker.io/v1/" - - variable: username - label: "Username" - schema: - type: string - required: true - default: "" - - variable: password - label: "Password" - schema: - type: string - required: true - private: true - default: "" - - variable: email - label: "Email" - schema: - type: string - required: true - default: "" - - - variable: service - group: Networking and Services - label: Configure Service(s) - schema: - additional_attrs: true - type: dict - attrs: - - - variable: 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: 7878 - required: true - - variable: serviceexpert - group: Networking and Services - label: Show Expert Config - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - - variable: scaleExternalInterface - description: Add External Interfaces - label: Add external Interfaces - group: Networking - schema: - type: list - items: - - variable: interfaceConfiguration - description: Interface Configuration - label: Interface Configuration - schema: - additional_attrs: true - type: dict - $ref: - - "normalize/interfaceConfiguration" - attrs: - - variable: hostInterface - description: Please Specify Host Interface - label: Host Interface - schema: - type: string - required: true - $ref: - - "definitions/interface" - - variable: ipam - description: Define how IP Address will be managed - label: IP Address Management - schema: - additional_attrs: true - type: dict - required: true - attrs: - - variable: type - description: Specify type for IPAM - label: IPAM Type - schema: - type: string - required: true - enum: - - value: dhcp - description: Use DHCP - - value: static - description: Use Static IP - - variable: staticIPConfigurations - label: Static IP Addresses - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticIP - label: Static IP - schema: - type: ipaddr - cidr: true - - variable: staticRoutes - label: Static Routes - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticRouteConfiguration - label: Static Route Configuration - schema: - additional_attrs: true - type: dict - attrs: - - variable: destination - label: Destination - schema: - type: ipaddr - cidr: true - required: true - - variable: gateway - label: Gateway - schema: - type: ipaddr - cidr: false - required: true - - - variable: serviceList - label: Add Manual Custom Services - group: Networking and Services - schema: - type: list - default: [] - items: - - variable: serviceListEntry - label: Custom Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the service - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: LoadBalancer - description: LoadBalancer (Expose Ports) - - value: ClusterIP - description: ClusterIP (Do Not Expose Ports) - - value: Simple - description: Deprecated CHANGE THIS - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: advancedsvcset - label: Show Advanced Service Settings - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: externalIPs - label: "External IP's" - description: "External IP's" - schema: - type: list - default: [] - items: - - variable: externalIP - label: External IP - schema: - type: string - - variable: ipFamilyPolicy - label: IP Family Policy - description: Specify the IP Policy - schema: - type: string - default: SingleStack - enum: - - value: SingleStack - description: SingleStack - - value: PreferDualStack - description: PreferDualStack - - value: RequireDualStack - description: RequireDualStack - - variable: ipFamilies - label: IP Families - description: (Advanced) The IP Families that should be used - schema: - type: list - default: [] - items: - - variable: ipFamily - label: IP Family - schema: - type: string - - variable: portsList - label: Additional Service Ports - schema: - type: list - default: [] - items: - - variable: portsListEntry - label: Custom ports - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Port - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Port Name - schema: - type: string - default: "" - - variable: protocol - label: Port Type - schema: - type: string - default: tcp - enum: - - value: http - description: HTTP - - value: https - description: HTTPS - - value: tcp - description: TCP - - value: udp - description: UDP - - variable: targetPort - label: Target Port - description: This port exposes the container port on the service - schema: - type: int - required: true - - variable: port - label: Container Port - schema: - type: int - required: true - - - variable: persistence - label: Integrated Persistent Storage - description: Integrated Persistent Storage - group: Storage and 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: 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: Storage and Persistence - schema: - type: list - default: [] - items: - - variable: persistenceListEntry - label: Custom Storage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the storage - schema: - type: boolean - default: true - hidden: true - - variable: type - label: Type of Storage - description: Sets the persistence type, Anything other than PVC could break rollback! - schema: - type: string - default: hostPath - enum: - - value: pvc - description: PVC - - value: hostPath - description: Host Path - - value: emptyDir - description: emptyDir - - value: nfs - description: NFS Share - - variable: server - label: NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: path - label: Path on NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: iscsi - label: iSCSI Options - schema: - show_if: [["type", "=", "iscsi"]] - type: dict - additional_attrs: true - attrs: - - variable: targetPortal - label: targetPortal - schema: - type: string - required: true - default: "" - - variable: iqn - label: iqn - schema: - type: string - required: true - default: "" - - variable: lun - label: lun - schema: - type: int - default: 0 - - variable: authSession - label: authSession - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: authDiscovery - label: authDiscovery - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: autoPermissions - label: Automatic Permissions Configuration - description: Automatically set permissions - schema: - show_if: [["type", "!=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: chown - label: Run CHOWN - description: | - It will run CHOWN on the path with the given fsGroup - schema: - type: boolean - default: false - - variable: chmod - label: Run CHMOD - description: | - It will run CHMOD on the path with the given value
        - Format should be 3 digits, e.g. 770 - schema: - type: string - valid_chars: '[0-9]{3}' - default: "" - - variable: recursive - label: Recursive - description: | - It will run CHOWN and CHMOD recursively - schema: - type: boolean - default: false - - variable: readOnly - label: Read Only - schema: - type: boolean - default: false - - variable: hostPath - label: Host Path - description: Path inside the container the storage is mounted - schema: - show_if: [["type", "=", "hostPath"]] - type: hostpath - - variable: mountPath - label: Mount Path - description: Path inside the container the storage is mounted - schema: - type: string - default: "" - required: true - valid_chars: '^\/([a-zA-Z0-9._-]+(\s?[a-zA-Z0-9._-]+|\/?))+$' - - variable: medium - label: EmptyDir Medium - schema: - show_if: [["type", "=", "emptyDir"]] - type: string - default: "" - enum: - - value: "" - description: Default - - value: Memory - description: Memory - - variable: size - label: Size Quotum of Storage - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: 256Gi - - variable: storageClass - label: 'storageClass (Advanced)' - description: 'sets the storageClass to something other than iX default. Only for advanced usecases!' - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: "" - - variable: static - label: 'Static Fixed PVC Bindings (Experimental)' - description: Link a PVC to a specific storage location - schema: - show_if: [["type", "=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: mode - label: mode - description: | - disabled: use normal dynamic PVCs - smb: connect to an SMB share - nfs: connect to an NFS share - schema: - type: string - default: "disabled" - enum: - - value: "disabled" - description: disabled - - value: smb - description: smb - - value: nfs - description: nfs - - variable: server - label: Server - description: server to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "myserver" - - variable: share - label: Share - description: share to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "/myshare" - - variable: user - label: User - description: connecting user - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "myuser" - - variable: domain - label: Domain - description: user domain - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: password - label: Password - description: connecting password - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: volumeSnapshots - label: 'Volume Snapshots (Experimental)' - description: Add an entry to the list to force creation of a volumeSnapshot of this PVC - schema: - show_if: [["type", "=", "pvc"]] - type: list - default: [] - items: - - variable: volumeSnapshotEntry - label: Custom volumeSnapshot - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - description: 'WARNING: renaming this, means deletion of the snapshot with the old name!' - schema: - type: string - default: "mysnapshot" - required: true - - variable: volumeSnapshotClassName - label: 'volumeSnapshot Class Name (Advanced)' - description: For use with PVCs using a non-default storageClass - schema: - type: string - default: "" - - - variable: ingress - label: "" - group: Ingress - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: Main Ingress - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name (Optional) - description: Defaults to chart name - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description (Optional) - description: Defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: icon - label: Icon (Optional) - description: Defaults to chart icon - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - variable: widget - label: Widget Settings - schema: - type: dict - additional_attrs: true - show_if: [["enabled", "=", true]] - attrs: - - variable: enabled - label: Enable Widget - description: When disabled all widget annotations are skipped. - schema: - type: boolean - default: true - - variable: custom - label: Options - schema: - type: dict - additional_attrs: true - attrs: - - variable: key - label: API-key (key) - schema: - type: string - default: "" - - variable: customkv - label: Custom Options - schema: - type: list - default: [] - items: - - variable: option - label: Option - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - default: "" - required: true - - variable: value - label: Value - schema: - type: string - default: "" - required: true - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - - variable: ingressList - label: Add Manual Custom Ingresses - group: Ingress - schema: - type: list - default: [] - items: - - variable: ingressListEntry - label: Custom Ingress - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: ingressClassName - label: IngressClass Name - schema: - type: string - default: "" - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: overrideService - label: Linked Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Service Name - schema: - type: string - default: "" - - variable: port - label: Service Port - schema: - type: int - - variable: tls - label: TLS-Settings - schema: - type: list - default: [] - show_if: [["certificateIssuer", "=", ""]] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your Cert-Manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: Use Custom Secret (Advanced) - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: "Allow Cross Origin Requests" - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: namespace - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description - description: defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - - variable: securityContext - group: Security and Permissions - label: Security Context - schema: - additional_attrs: true - type: dict - attrs: - - variable: container - label: Container - schema: - additional_attrs: true - type: dict - attrs: - # Settings from questions.yaml get appended here on a per-app basis - - - variable: runAsUser - label: "runAsUser" - description: "The UserID of the user running the application" - schema: - type: int - default: 568 - - variable: runAsGroup - label: "runAsGroup" - description: "The groupID 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 and Devices - label: "Resource Limits" - schema: - additional_attrs: true - type: dict - attrs: - - variable: limits - label: Advanced Limit Resource Consumption - schema: - additional_attrs: true - type: dict - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 4000m - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: RAM - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 8Gi - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: 'gpu.intel.com/i915' - label: Add Intel i915 GPUs - schema: - type: int - default: 0 - - variable: 'nvidia.com/gpu' - label: Add NVIDIA GPUs (Experimental) - schema: - type: int - default: 0 - - variable: 'amd.com/gpu' - label: Add AMD GPUs - schema: - type: int - default: 0 - - variable: requests - label: "Minimum Resources Required (request)" - schema: - additional_attrs: true - type: dict - hidden: true - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 10m - hidden: true - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: "RAM" - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 50Mi - hidden: true - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: deviceList - label: Mount USB Devices - group: Resources and Devices - schema: - type: list - default: [] - items: - - variable: deviceListEntry - label: Device - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Storage - schema: - type: boolean - default: true - - variable: type - label: (Advanced) Type of Storage - description: Sets the persistence type - schema: - type: string - default: device - hidden: true - - variable: readOnly - label: readOnly - schema: - type: boolean - default: false - - variable: hostPath - label: Host Device Path - description: Path to the device on the host system - schema: - type: path - - variable: mountPath - label: Container Device Path - description: Path inside the container the device is mounted - schema: - type: string - default: "/dev/ttyACM0" - - - variable: metrics - group: Metrics - label: Prometheus Metrics - schema: - additional_attrs: true - type: dict - attrs: - - variable: main - label: Main Metrics - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - description: Enable Prometheus Metrics - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - - variable: prometheusRule - label: PrometheusRule - description: Enable and configure Prometheus Rules for the App. - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - description: Enable Prometheus Metrics - schema: - type: boolean - default: false - # TODO: Rule List section - -# - variable: horizontalPodAutoscaler -# group: Advanced -# label: (Advanced) Horizontal Pod Autoscaler -# schema: -# type: list -# default: [] -# items: -# - variable: hpaEntry -# label: HPA Entry -# schema: -# additional_attrs: true -# type: dict -# attrs: -# - variable: name -# label: Name -# schema: -# type: string -# required: true -# default: "" -# - variable: enabled -# label: Enabled -# schema: -# type: boolean -# default: false -# show_subquestions_if: true -# subquestions: -# - variable: target -# label: Target -# description: Deployment name, Defaults to Main Deployment -# schema: -# type: string -# default: "" -# - variable: minReplicas -# label: Minimum Replicas -# schema: -# type: int -# default: 1 -# - variable: maxReplicas -# label: Maximum Replicas -# schema: -# type: int -# default: 5 -# - variable: targetCPUUtilizationPercentage -# label: Target CPU Utilization Percentage -# schema: -# type: int -# default: 80 -# - variable: targetMemoryUtilizationPercentage -# label: Target Memory Utilization Percentage -# schema: -# type: int -# default: 80 - - variable: networkPolicy - group: Advanced - label: (Advanced) Network Policy - schema: - type: list - default: [] - items: - - variable: netPolicyEntry - label: Network Policy Entry - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - default: "" - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: policyType - label: Policy Type - schema: - type: string - default: "" - enum: - - value: "" - description: Default - - value: ingress - description: Ingress - - value: egress - description: Egress - - value: ingress-egress - description: Ingress and Egress - - variable: egress - label: Egress - schema: - type: list - default: [] - items: - - variable: egressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: to - label: To - schema: - type: list - default: [] - items: - - variable: toEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - variable: ingress - label: Ingress - schema: - type: list - default: [] - items: - - variable: ingressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: from - label: From - schema: - type: list - default: [] - items: - - variable: fromEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - - variable: addons - group: Addons - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: codeserver - label: Codeserver - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: service - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: NodePort - description: Deprecated CHANGE THIS - - value: ClusterIP - description: ClusterIP - - value: LoadBalancer - description: LoadBalancer - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: ports - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: codeserver - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - default: 36107 - - variable: ingress - label: "Ingress" - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - variable: scaleCert - label: 'Use TrueNAS SCALE Certificate (Deprecated)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: int - $ref: - - "definitions/certificate" - - variable: envList - label: Codeserver Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: netshoot - label: Netshoot - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: envList - label: Netshoot Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: vpn - label: VPN - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Type - schema: - type: string - default: disabled - enum: - - value: disabled - description: disabled - - value: gluetun - description: Gluetun - - value: tailscale - description: Tailscale - - value: openvpn - description: OpenVPN (Deprecated) - - value: wireguard - description: Wireguard (Deprecated) - - variable: openvpn - label: OpenVPN Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "openvpn"]] - attrs: - - variable: username - label: Authentication Username (Optional) - description: Authentication Username, Optional - schema: - type: string - default: "" - - variable: password - label: Authentication Password - description: Authentication Credentials - schema: - type: string - show_if: [["username", "!=", ""]] - default: "" - required: true - - variable: tailscale - label: Tailscale Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "tailscale"]] - attrs: - - variable: authkey - label: Authentication Key - description: Provide an auth key to automatically authenticate the node as your user account. - schema: - type: string - private: true - default: "" - - variable: auth_once - label: Auth Once - description: Only attempt to log in if not already logged in. - schema: - type: boolean - default: true - - variable: accept_dns - label: Accept DNS - description: Accept DNS configuration from the admin console. - schema: - type: boolean - default: false - - variable: userspace - label: Userspace - description: Userspace Networking mode allows running Tailscale where you do not have access to create a VPN tunnel device. - schema: - type: boolean - default: false - - variable: routes - label: Routes - description: Expose physical subnet routes to your entire Tailscale network. - schema: - type: string - default: "" - - variable: dest_ip - label: Destination IP - description: Tells the DNAT mechanism which Destination IP to set in the IP header, and where to send packets that are matched. - schema: - type: string - default: "" - - variable: sock5_server - label: Sock5 Server - description: The address on which to listen for SOCKS5 proxying into the tailscale net. - schema: - type: string - default: "" - - variable: outbound_http_proxy_listen - label: Outbound HTTP Proxy Listen - description: The address on which to listen for HTTP proxying into the tailscale net. - schema: - type: string - default: "" - - variable: extra_args - label: Extra Args - description: Extra Args - schema: - type: string - default: "" - - variable: daemon_extra_args - label: Tailscale Daemon Extra Args - description: Tailscale Daemon Extra Args - schema: - type: string - default: "" - - variable: killSwitch - label: Enable Killswitch - schema: - type: boolean - show_if: [["type", "!=", "disabled"]] - default: true - - variable: excludedNetworks_IPv4 - label: Killswitch Excluded IPv4 networks - description: List of Killswitch Excluded IPv4 Addresses - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv4 - label: IPv4 Network - schema: - type: string - required: true - - variable: excludedNetworks_IPv6 - label: Killswitch Excluded IPv6 networks - description: "List of Killswitch Excluded IPv6 Addresses" - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv6 - label: IPv6 Network - schema: - type: string - required: true - - variable: configFile - label: VPN Config File Location - schema: - type: string - show_if: [["type", "!=", "disabled"]] - default: "" - - - variable: envList - label: VPN Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - max_length: 10240 - - - variable: docs - group: Documentation - label: Please read the documentation at https://truecharts.org - description: Please read the documentation at -
        https://truecharts.org - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDocs - label: I have checked the documentation - schema: - type: boolean - default: true - - variable: donateNag - group: Documentation - label: Please consider supporting TrueCharts, see https://truecharts.org/sponsor - description: Please consider supporting TrueCharts, see -
        https://truecharts.org/sponsor - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDonate - label: I have considered donating - schema: - type: boolean - default: true - hidden: true - diff --git a/stable/radarr/20.2.0/templates/NOTES.txt b/stable/radarr/20.2.0/templates/NOTES.txt deleted file mode 100644 index efcb74cb77..0000000000 --- a/stable/radarr/20.2.0/templates/NOTES.txt +++ /dev/null @@ -1 +0,0 @@ -{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/radarr/20.2.0/templates/common.yaml b/stable/radarr/20.2.0/templates/common.yaml deleted file mode 100644 index 3c93f57861..0000000000 --- a/stable/radarr/20.2.0/templates/common.yaml +++ /dev/null @@ -1,11 +0,0 @@ -{{/* Make sure all variables are set properly */}} -{{- include "tc.v1.common.loader.init" . -}} - -{{/* Disable [exportarr] if requested */}} -{{- if not .Values.metrics.main.enabled -}} - {{- $_ := set .Values.workload.exportarr "enabled" false -}} - {{- $_ := set .Values.service.metrics "enabled" false -}} -{{- end -}} - -{{/* Render the templates */}} -{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/radarr/20.2.0/values.yaml b/stable/radarr/20.2.0/values.yaml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/stable/radarr/20.2.1/.helmignore b/stable/radarr/20.2.1/.helmignore deleted file mode 100644 index 77ca5567b2..0000000000 --- a/stable/radarr/20.2.1/.helmignore +++ /dev/null @@ -1,30 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ -# OWNERS file for Kubernetes -OWNERS -# helm-docs templates -*.gotmpl -# docs folder -/docs -# icon -icon.png diff --git a/stable/radarr/20.2.1/CHANGELOG.md b/stable/radarr/20.2.1/CHANGELOG.md deleted file mode 100644 index b95fda7a37..0000000000 --- a/stable/radarr/20.2.1/CHANGELOG.md +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: Changelog ---- - - -*for the complete changelog, please refer to the website* - -**Important:** - - - - - - - - - - - - - - - -## [radarr-19.1.12](https://github.com/truecharts/charts/compare/radarr-19.1.11...radarr-19.1.12) (2024-02-03) - -### Chore - - - -- update container image common to v17.2.30[@19ad5ec](https://github.com/19ad5ec) by renovate ([#17804](https://github.com/truecharts/charts/issues/17804)) - - -## [radarr-19.1.11](https://github.com/truecharts/charts/compare/radarr-19.1.10...radarr-19.1.11) (2024-01-29) - -### Chore - - - -- update container image ghcr.io/onedr0p/exportarr to v1.6.1[@60cf3d4](https://github.com/60cf3d4) by renovate ([#17725](https://github.com/truecharts/charts/issues/17725)) - - -## [radarr-19.1.10](https://github.com/truecharts/charts/compare/radarr-19.1.9...radarr-19.1.10) (2024-01-26) - -### Chore - - - -- update container image common to v17.2.29[@d7c41a3](https://github.com/d7c41a3) by renovate ([#17545](https://github.com/truecharts/charts/issues/17545)) - - -## [radarr-19.1.9](https://github.com/truecharts/charts/compare/radarr-19.1.8...radarr-19.1.9) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.28[@918b4c5](https://github.com/918b4c5) by renovate ([#17478](https://github.com/truecharts/charts/issues/17478)) - - -## [radarr-19.1.8](https://github.com/truecharts/charts/compare/radarr-19.1.7...radarr-19.1.8) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.26[@24c98f7](https://github.com/24c98f7) by renovate ([#17409](https://github.com/truecharts/charts/issues/17409)) - - -## [radarr-19.1.7](https://github.com/truecharts/charts/compare/radarr-19.1.6...radarr-19.1.7) (2024-01-21) - -### Chore - - - -- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) - - - - -## [radarr-19.1.6](https://github.com/truecharts/charts/compare/radarr-19.1.5...radarr-19.1.6) (2024-01-09) - -### Chore - - - -- update container image common to v17.2.22[@e7c9056](https://github.com/e7c9056) by renovate ([#16986](https://github.com/truecharts/charts/issues/16986)) - - -## [radarr-19.1.5](https://github.com/truecharts/charts/compare/radarr-19.1.4...radarr-19.1.5) (2024-01-02) - -### Chore - - - -- force bump to ensure up-to-date catalogs - - -## [radarr-19.1.4](https://github.com/truecharts/charts/compare/radarr-19.1.3...radarr-19.1.4) (2024-01-01) - -### Chore \ No newline at end of file diff --git a/stable/radarr/20.2.1/Chart.yaml b/stable/radarr/20.2.1/Chart.yaml deleted file mode 100644 index 8141a02b03..0000000000 --- a/stable/radarr/20.2.1/Chart.yaml +++ /dev/null @@ -1,38 +0,0 @@ -annotations: - max_scale_version: 24.04.0 - min_scale_version: 23.10.0 - 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: 5.3.6.8612 -dependencies: - - name: common - version: 18.2.1 - repository: oci://tccr.io/truecharts - condition: "" - alias: "" - tags: [] - import-values: [] -deprecated: false -description: A fork of Sonarr to work with movies à la Couchpotato -home: https://truecharts.org/charts/stable/radarr -icon: https://truecharts.org/img/hotlink-ok/chart-icons/radarr.png -keywords: - - radarr - - torrent - - usenet -kubeVersion: '>=1.24.0-0' -maintainers: - - name: TrueCharts - email: info@truecharts.org - url: https://truecharts.org -name: radarr -sources: - - https://github.com/Radarr/Radarr - - https://github.com/truecharts/charts/tree/master/charts/stable/radarr - - https://ghcr.io/onedr0p/radarr - - https://ghcr.io/onedr0p/exportarr -type: application -version: 20.2.1 diff --git a/stable/radarr/20.2.1/README.md b/stable/radarr/20.2.1/README.md deleted file mode 100644 index 0915ee0aa5..0000000000 --- a/stable/radarr/20.2.1/README.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: README ---- - -## General Info - -TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. -However only installations using the TrueNAS SCALE Apps system are supported. - -For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/radarr) - -**This chart is not maintained by the upstream project and any issues with the chart should be raised [here](https://github.com/truecharts/charts/issues/new/choose)** - -## Support - -- Please check our [quick-start guides for TrueNAS SCALE](https://truecharts.org/manual/SCALE/guides/scale-intro). -- See the [Website](https://truecharts.org) -- Check our [Discord](https://discord.gg/tVsPTHWTtr) -- Open a [issue](https://github.com/truecharts/charts/issues/new/choose) - ---- - -## Sponsor TrueCharts - -TrueCharts can only exist due to the incredible effort of our staff. -Please consider making a [donation](https://truecharts.org/sponsor) or contributing back to the project any way you can! - -_All Rights Reserved - The TrueCharts Project_ diff --git a/stable/radarr/20.2.1/app-readme.md b/stable/radarr/20.2.1/app-readme.md deleted file mode 100644 index 94d7185029..0000000000 --- a/stable/radarr/20.2.1/app-readme.md +++ /dev/null @@ -1,8 +0,0 @@ -A fork of Sonarr to work with movies à la Couchpotato - -This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/radarr](https://truecharts.org/charts/stable/radarr) - ---- - -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/radarr/20.2.1/charts/common-18.1.2.tgz b/stable/radarr/20.2.1/charts/common-18.1.2.tgz deleted file mode 100644 index afb1de8120d9e1088c1711607a6c323d4dae355b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99288 zcmV)PK()UgiwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PMZ}avL|YIGVrt6eucNYvqa*zbSE#w|=suIQm7FbVS+Nz5CnJ zf-@kAqv2pOz))r!SKZgRuXms17Cr}<50a87*-kj;Y%I}&EckBoPovRj^g12!Z==!3{@ZM}8{aiM-Cn=b?Y6s(?;6ckr{DSxG@b#M+>=lS zcrgGtWM~qLf;Arnc#h&l zzI=c^6jC$*Z{82jYt4GIs7QE62jKS#007iL2xn*jXc9#vX5t+HNgNEol(C2o_V;~E zJretMkIeRQIL8d_vk&y@=BHn7SX_Y-{(xeNNjL!WRs}|p`58clD69C0dNGcec=uxx zdi*aC;86_Y1sIbU+{6hI^Pg6xgkz(do?wAAZ<)mj@dq(Q(rWH6?62`Zr|_DIN3$OP16zu)UL8vSm!a)%c8B=+f`QUhsYm72!1CSFu( zKs9rhjF9Q-U;qBPS#NdfjauWcl^Mh#gE&O70ET7|2Ymd-m;63fTF%dfDG|7 z6=ZRR0b4|9pwX+$H7?DAdb8fDeCc_;eb##v|DVGkLG+n6fTjGu+3dG_tt|iVclulY z{}Rs*sMWyRfQ(=Ot_W0Q7y#`6dj2{0ag%LILL&@{a-d^m%y&Yopcz<0Otz$bto+WQG74{SWdO1wH{GVR{<@Y>KJkZUVpn zRI3#LW{ANc7!AZWBicLieJWp{zp-%wi~x$_Irb10rJ?T+TANjj$G{a$^hHw-h3P=omOy%Efioh6uL_U~d-w)6|jCqL=z#srP zoWzJy)sG!;3_~zNfXq=GCjs(7gkoJt6hWeeA33~tDL4m-qbLe6qE>UfUyo{SoNY(R z09rEerVxj<5v15tUpUyyNKURjFj@c~jbRcnaF2rkuy_F&v5Hm$Lhh2NDyU>;1Q zCVKpZ`YPt`I~?L!G6Ny;(G_1#f-ms(gTo8;ZU7D&jfSovC#9I%j6`5YC<77kDS)95 zxWFUD5r9K4NPHYlfEPv+QQIeoinS}hAwU@n{Td8Nhy;uZ5I~QDU;xH2pr}$A^HmJJ zyAw$aYFO0?8siWF$ZN!Kf{p`7=>?o2z@|_UZG=F=$-yN*K4Y&w9MekaRK5CeEDifraMNVpVw zc9p}6OJtOx&`YsPU&+eR+{;$GMtrnX$D_F?e{0%j3SWIV21EQCl12Gn1JGM0Cdb(iC4}1bzHpn!j;^lWU!N<691;Kc?BrVg zqI1vuswjcUOJd9xKmn*w^}+%u3La}N40H*>n9)aOIAO}D%lV-xQvvDUa)QK3ctqb* z6c0eRcaXk%8R5cVSu5M5A)W|nv%_RFgn&vAez=#+XefKq$cEQqgW z_1U-IQsjAL7G1?;j02>nt<+PmlaNnE#UI2c4@Pi=1I%!`Aw%CEfPej4{qkdCW%fN!gj zM{t~-i0Z}h6owO|SNvtj=jA(0XOMYQIjfQ=3eXIN35%De1QsPyD%DJ@h>1j75lwBZpPvSfG0V-k+> zMACz#9kRvq&?k%U}KP zYxcF^gd_=>)@nVE|GFV}$l~V=#WNg=w%^9kLszaS(QBv~`pPFB-RILNAkg2xK0P{l zcUqtMyA}P8(|g9nRZElgt-U3R@eImsU%ipLLrPrn(jWZ-F|+Fte;6T8&x@43rMpAg ztbFo~D>*5Lf|9PdbYkX>{OMF9BSh^6@&fFtrqljbKYarA57OqRw23?~~s-d@@2)x#IIz)n-oU7W=kU&8_aPrcP>G;57c-6OL)`Uq!H zfCkE*R_B6Ioi1pz{&De}t{EiZ02nmJR9dRgN7ey5m)TZ$x6VR_;;|3}HNVOi6t)XS zlq|y$YaSkUYK^WyEJpqmvH=&}n)%8wVbdX^;(SxT1DvTwx<@y+#M?y*%XVD7Q}{8y}U2LOK&!Ws5z z(cD`FDVlrBAT3#{RwFeZGB^~<-Sf2vK&}-4?r_M*>Pqi8>;nlBA(rEr82~lp=p&{K zhm)%h$KsRzUGsS9wGr3VL>p=#J*&M3cT59}=FdA|0L%q(F47fn^+6y_8D!Y2g=6~M z7|52)@Xd(NwaqcrFSxXU`1082=*eGZ97P)nbMd#0Je`fc2=a6`dIIudS`#6y$xrf! z`IZRtqG2%ReF2}ciQy%bk=Ylahiuy58Iw8Y`-tgA-FlUhAjWf3LjEw{cEGU!366(n ze7_Sr8wmlIuXP!|*Mm==rY5!W03}x(I z%F5Jb^uVf7#<&;pIXP|l^t*y2GZ9qMq?CWC^l>o6W5IM}oto1b`Obj( ziOf)G=Y|M@8HweY?+-r+qn6XVAASIkfmi&40Q>p#ZUulbA-v>80FAqOD`l&{TqZ^nki)*ZLBxS zkeVL93l>o22v=2q_fr2N;iIT*p7L-FhnlO@E7n1OWfCNaCE;12i-PCHbxij8zx%47 z@kVIZ+x>b&dn5Ewvww&>$ZPi+p5Jdmg!^$$C+;~zA7 zEw9r(XmuN~x6J>c5+X*Ygs{~}>XHV_M!nfevFsuUn}@yD$m=zlqh_Py9gKQC)oeCA2>WA*pf~EkPTy}fx~<-5+-fexl0h7ZjcGNSrl{rH(QDS5#<`=} zM5uMxK4|m~TL)dQ+vs->VWZjd+MTY~hhE!*-CnN^yFI_*!RC0}YQx4s8;*K@W8`YOmF29t**r`!gg$CCdR^2!L_UO_ zaqqCv_B*`}Lj6Xs(QP)HuyfEp>~z~bAB_$><92h@>or@wPQTIVb`O?fNWB;`Z@L;q zRZ!z7gG9{oIcSYWqt1AIaM*lDy5{r2bp zqUP9xOFmcl*souiNz-2VSSq74c#7E1< zdWP@N7{+kAzxY)n+^Kh3>6}E!@A{3t-x~K|Z{!~wv_`1gZ62b-0}r-5zwLYNgXUqQ z(LHE2{Da2mpbb%P-1htZ4(hcJE0u^)#)CE)DIq(kgSw-` zak~$@e#1NP4;y~J)A3QO?Kcm){YL+=ao8P?M%}L8I_z|ici8j~+O1A=+-tP^%lY^W z#u)mehhnU%6(ihh9dr*y2hBsiW?TJc&p+rKbQPICa|bfj4V3rG+PIUP495j^A3CCX0zF8d;Y<}xa&6$ z{c*e78jbs-ZnxhUHxF9fagQ^BCT#gW@|vrtOTr0x1a)P#VuTM{y#v&0AGZ2l2af#1 zk>6-H(YV)w2e8eTI%;;?y{0#Ak9*DjVWZb*9gbmV)El?DUcb3~A5zXgDEx4B0jL)7 zJX=Gq?12BJk5+`#gTM#{Q0 z;CLMz9zK#-C3T_nw@yEc zS}?vtK7drCP%m-RP#spVFtvd|;lZc7T2~Ilza}`&b{u_-VCYMoRN5-DPOmYUV;|X( zX)<(8sirfy;A5?!%eI{0wsJsrfY%ae`Jgu|?9CcpVHlQl#Wd9>ZQ|&0x|R)4@U!tT z1b=_stTzuUmP%_`n$wsj9X-Qmt)3-H;S~;s`ke{P-YL|Zcf|jUrfii~vs(PuGO$^T zlB??Jg0v^M_+oit?|_=3)lYOI)QLzv zARY{?GCAxb$fhZF9E4R`d>mLWfWhzzvS}Txi&|=&*w4I`X75QzV!mRf?aT`M27iAI zn)PO<)+m4`ohGhgG{zr`z+NgNiewUc*i*~7nQt7J6L}`f%Nf9@=adKpGmU5?%`kP} zvOh1yB80P2RB~{{nbJd`3s<#up{Mqv%$9OZ|879Vg*gYDFNC9M3V(}s( z!pYfkh^!SBT@myORP-(1rYI-B#m)KHP{d3*;lh1$KFnhqlZb*5pC%?M+6RK9xjaDNTBrGdT!$*T;#NKrQ^?72Qd~JCU=ougGT$aL8fIBj z*t6P@c}=Y1_t>8xHgIU;0?3d~xhGePYVZZDJu$b2;+9~R7t#lB1i11-hx6b=7QG0)>LvG}`^$|_Vt z5v-lekdi*!d7cLI+Np&WTF8s7E4i>^I(8r9B^5iL3#Sh_elg<5~Dr$=uW#lBrt{{LrU3z9!p>l zEWka9?}V=Q25~ewAyhyq4EF^S@kFE;*PX-}Z^GLU$9N=R95nWjImS~7DH4i65(a!$ zFGvFJVJK!glPVfyAjb5rvIGA0uNaO0{qI*M^N=KY4Mw<5@r2gz4n*vbkz43KjgYs$ zqYBnT8D53Mi7NV+)_C58K{SP}-BJZq5cvV>rzpQv`P7<>C@I_#)wd5Yz`l;J0(>Cf zUSAzw^J078r<FAXNlf*nEc4u!rD^$SLPNI>r;wDM)}&snDyQsoI$n;H9dE zwJDQr8F&cI#PDjf@RfXXPVP~BrSMUOr2=LIR@qzm$rY!C&}Y38z8_*@crk(uIoV-k z-X$N+VCYwzv@wz>ZYG({(jY|EeT8yKhUix&aW`A`8^|Cpa5rM zmF0v3|6pDIrr`2>S{#MyByNSj~;TSuF z(DR@SSzW1aF9aXO8mvt9rdqeXpht;!hgc!e)LSc*9|0D+J@}GVCy&;VW8ImDD((dYL1V=8-Kd$!-?4En7;5QSTZg{88-Lp|>!! zn38)imTy_G(2c8hRYfV^%5l@W&*{a<8ivUUcUzLp6=6j>bVc^sTJM_FyF=f3H8U5 zsrZleP1rm9@x&izKJ7S5NTDDIFw^Ca?_W3~^OQkzHsmAW`Nxscs@uMfwg6*{0$*-h!aFz1mt-^6 z4!grQ*@+b!x&r`h|43pFajA6376EcTy^jOy_uY*Cj2379zy>E38JVyqeSb4W;OxW< zO)@eviKZ!^sN$QN{!qI7@9~M_LvtGSK8H_Smt%2wtsH zh5#&k6oH@G7GAQ_I>eeQ5%Tj?yG2S_ZlAC7tR z;!I+AhohVG;RmsesG|k7G`MKCr$$cro>1%~&2_0Xy`%_?130OJA4#m)v#NAVW;1c_ zfbWoIq>9E;%pIY<%=>^$XzH~MeP5cu0yqJ+nnt|F`&nZFt;sDg#iX!ngUU{stoXr+ zKzh2cI4^|vIBC%hq)Wxc;x;UKF)JSaZu41L8)&du0a3q~ma~ztP%?Oja)L}wD6QA) zC8!mKu9b^*8NF~VSufkGRWjZmY@;kDZ5@DDS{T_s^5-!0?C86VY@f@U_}ceW@zUN? z#S0i=mA`Xfm&$FG;{B4XQm&}X)XeK%58pG-#@d~a*Mf^b%D`@>^K5~_`2dWGHjX%V zT9lU3Z4W@T0UF>3{(m|kIicwCK1A`gId3@&B|$R$ZwH*oyv2TMLEY1vw(T`TtTQvr zC$7@5e+tn!2ooP<(qmjjC7`A z`-AHwCjG9I-P!3snISes3B69z9H@o92osge^3!L_1%MBrJV$VxHg@ES=G>hxSLd5N z<*;2gtQwqJDl5Md(&S;v97C}pWFYt3_h;rLmCRAhb^56mzw<4o=W*G#cffgZtFp5o zp&F`bSk+8nD!QaC){I|qAtjP^F5z$u68D8C{FoxsR}TKGAYT0Qh|{V z?vc;}v=ox!l+6*%MQL;VuY%8!udF+=4dHoJPBWm7h~B|F;a(8d#v}>tHm5N5Yh#E5 zeR9J8z6?*}nDYu33N+IQePl7Tpzys{1SO9Zt4hcCQWsKlY)60+awsRA5DlgIQ&=aV zz6B#CJm!>1LSIJJ>q|0}ugEHB`i_edXxfo)O=v0iDg&67SQn-jki-um!*f)NCS`El zQftFTF{{m_!(%CAtBmDo!zEOC`Hq^7iV<+pVUA)L@G-8Dkk)xoYCMRwAc=fs0v0p+ z4lT;#4505TAI%jl8yB4qR~M@JIyhr%G|fS08@Hm(`6`NR4--4egEz*v-g<$Ph?W5N zfC_xx)8RLJz=W@G{$t1TN*^g1(8O2sFQy=j(+GRy10O{(@OCJ)9qV-jRG>-=fZ@vQrsQT{WuBhbgE97Rk_rOg7e^n zO{F49^udH?!<<&GmjF!IR4Bj3pI`?Z@m0X7=fPOyJ6Bqh2>%F?%wZfSAy)wsiei0z z4^X+Al-H!?7Ry_?C1Lih=b?z*`eDY;Rl1g0DEWx8TWmW$P~zQnZ%ytg{aSF;TNqEA z+K@|mw}szG!bW@%-}3Rejbid~aT|!_Iu1oRRV^>0u{{+vrF5sV9(M-9is-vlvrDZA zXQ+=|Yf1TNtB4?RHduqZ28K8Tk-NIit|f1_A<1NF4Qa+>)yl+GwR(6I1YizhEPct0 znj@{V`kYd_3Tm5O6l(fq62;5KBu>NJd>mubHyJKwWuqVCiN4-SZsT)H?%e?<8SPh$ zuu-1PDC^4;$qb=zZr)e4?bkx(v5^OfM&(>s>`2(UW$q+k8E5o(N?QYUX4_Jz zNhGVJAOUdvl%&?709V$A>y!I151GGR4%>C@Qw}=#H{^>Ube5hZg)zpa7B*?)6JuAm zsPrQaP-f<@+Ykx(j+$x8nP7aLWGB{5X4LG=D#A4b`G6uJm>`wOXvZBCzCl`))J%LN zO}YNSl&sTfrZ9gKBR(WtY*OGAAw+k|ND-POkJ^CAXMRc)ZPAcZUlr9Uw;YgC?Ut8K zajbDDi7P}N?eZ^-oS>Q}+^EXy%4m9&k$&T__~#E-7e)SB#+gs(@e;h1d(09wLSOTB zQR)r{!SEh4Z))vy=%X|qsoN3g?b+45V-|VQ*PimY%FA;4O4GbFXJrpjQl03(ykUt? z8@e$mFQsG7otVo7VIHCM9uwuDAn)zS*(@yC5%F2O;5-q>B;@?mV%2;UZ1{#XXrBKR z9&b&PN3nXV{_}Ethgepto;mvq5rFYTplG5=k4^F^sq}+djc@THpKZ;@LPv*ImO+PI zMX_wep}qzredpC(it)s9imlbS2xxwWBt%w!GYD8;sw!vRetk}Pi&eYNf+;|2Zds?6 z4r?fmXw4`n%6%FL3fLFPaly+(>)E|#>M~s*L#ajF0iL5!9^S$zk{~kHVZpE?I5lbH za7>vsFQtL@9WN!FFeP3mSR`51+jBPJGF^bs9FC{@N0u|xvlc^3DrdP1=hT$9H)VYR z8;P0Fb>bPcVwIe%{CRd!-Zofrbw(yfzx6>_T$`b%g3!;q8 zbw~i{EMUua0$t`=wgCe?zXynvb(?uATnZB>KA!E0L#5yu#i*tQG!olBbJDpCMJV)9 z=wU>`&L**{cwsbo)Nu)y)DkAompKr9c^8|A>b+JKGt-eT1kJUNFRtDSOW_DoR0qbVU$9RTBk%+G zk4^#gYw(}UOH8dd49}1-C-|fPSZ1oUwnjp)STY7z=A&|V+S5C*p+X2nGzRsiXok|( z0yKf%LN_ljT^4@gGNGZ^C{tG(b?dtvG;;;KgrU(=`-PY;95+L9n>MrbW>0~JxCK^R z0{b6OGn)!8RR_o7IFpJoB{4`MU;MPS3NZ$%r}Y$Sj6^C%4pIYwK)p1C5hwknz!Xtz zm~uvNphFS$PeF=37$r=dzlzfjrw!#@wP*XtBHpDrh9H{U@(Co1$UdkH>jt={@QIpi z+6hCv)-!MbsxVULRVsbD`CVkJF~Bsgd0UkFlJ27Gt#q50lf+aoO7bN_g88a{!yd|R!%&8+Hf(C&mEl#_$qUK?`wG@uj-w4 zgV!&BXmS9mt#0ovuC9UAJq$LC)IAJ_>*7_b$%Ge@v2ofrxbR_bFPPeL-j39)G$Q8m zL>XkJ4eJKJb-AK>_YSeC)a_+{X2BYxNeq3I3*ket_WOn)CNe3tWHd65hcDub;g~NF zzJn{=8+4}n)|3hrv@ zQz80Zz>>WhSYXl~4_OQunk>GGJ`VskeO5Q5A|Jd;LYhQeE#cyjVfBInGZ-c?0I$*l zsd@TTioN2@-NluvPFq4gup1dzt*a_(=hnm^e0sycP7dTg`JQW{`so;2&D)I|moU{k z{Y`7pDCRm-Nz-Csrt`(c+g@BMR$clRXzDVe54RkG=pD3ZcIg>3aB8G8>_+6jQ4IL6 zARrSEpg9WmiqoM>`^EsEI41EPxQ8*<1NP*hn4#Pr@X;ul>;V?1$43E~oO8$nxzHU9 zvZhqY;f{~gS$-hK+H$~7dEOAIo7(AMf8RX=Rt~_a5oce?m-{fnwa^4Gj1aa0nRp(7As+?4kxP51T+k-kMoWcat2g_5ns4gN z@m4i4Wg>50QLD~X#@dmLgs8r>8|kTS9->TfRM-_yUNx~N9mbHjPg$I^7a-y984UO! zGhS{K!0=9`?ouaKdWAS-87+)m3JU^Wygxs$rz4~8venqhtLU|xj4tGiv~EYq-NXMr z2PRwd<|dk!>Wd~>st#CF>-hlY27hR z>~EAT2CT%@h=u$|#t_4)#Az}7@AGVWq~q(;qnlH3`j4B_i{aVj1vvW=TwLCO(|?=| zZ-!tl41|9xfOVAScYiooVaff-kchqgTdLP8@m0=5+bu@A%(b&Z}K6u=-GBbl3wlnZ24K7~PJ7 zJIYbs1^Zm0$i4l)GDTwq{apb|^b!1ceff?nW#X16a?2UREfcn;zq$RlJXO<|d@3lM zvLAp@%(&DHs^>>BHyJA%qL%AfipTfHVbu%y|yNAKUBu59#}4?37)2CPBf z0oo#xItpTS)-fd%Nh=X&AE~0O(|GFp2vxH?Dch2+=LWJAaZ_#6SPhIBXC_KmcHJMq zf28Kj)p7-hE8w;+ueEUTP6ax>x;neL)<t_JHX|6%VCb3zvRFCr9Yevg2Id$-E*&GN@^BcwWi04*@SdV^5@Z7AveKxGg-xfN zAkZ=A-WP&EN@C!dxfr;o|8iB=$Cc7f$ zyBZKZR`RF08{M=Z86_Bsfi9l%Y5*@>Pn(@gf=d(cWW0#9*-X2lJ6UVewK8m{TQF_c z|4T;R{Jjom@HY~|ds_F%%=l3$SnB2yumjE!SAxXVx10j0hqZ2g*fzBujCv$;sg|Nm z+k^f6|B@l?fB!FD`0pv3_$`So;o`sC7}dYm|4SW)akBos?vWVP?{Vmpds+_>+y5_% z>RHfl37G_F04B7oc^^@xuC%|hZ=SJY-T-Y2H!Cr}XnPO9--Loa5x}**shv(+6%l3U z_fa_u>{sfdoBi~SJm~+~apeO_1#sUA3`ZcElZI+CRs0vPdP7wkHIOJwSH%PGW&4;Kz9xdSWty4>|cgBqbRiP3v$C4LOZvfbor z@`fa#S9nkt5fa$vbhVncD41Yg6>1bsMhc3&K^6MKrC%;&EryB;*O%@P@it`I8!E5J zw_AJI8IN<4r=eJZpq3gkgCB2YI*VJ*AqJq@Y&05GtAyf@w;aD)a|oqNtUh>5Z8657 z!_GheLmwn@K)H4kB_h^W-DIdDw0L0+N`SdWKBlR|$70PZU&K8|yz2!Cg*kHaKqXQ3 zeQ_;^$cjt#=wUwIAz?@*i+X>3KGaE2Qa4b(fu6kK%1Vm3SR{CisGHM0hlsj~)^uC5 zq(V7HQA6D(^>BKqiiH%(xeBYoqD$5FNd}*pWQqjx%BM$=KvrCn1hVkgNdhmx-rbZW z!gt|;R7mTtM~Jli*GUUXg81Q7;I#_-&p#X!kxaj-eoF7Vql8WQ3f0L1s-dvu<>DE~kJh+WUqtWPfI^W4;t&Qxz-FC0{U9;1b7u9wf-!)pzR=@cjXgo`gGfzSpjK6C< zxvgyHzLDqCr~Mx)`oaKd+Y~_`8Q*6TR?d{)JC+Ggz&^m@N`AG{lnvBOB=;5#;r*^- zMJhk+fBszg^r@!ONrEc#>hoq@&c(WDu5L%`)Ku~BU3Yyjc+IzX9Hu4k*xUgx;n2E0 zdEM&rg7G52uOA4-z8gJr&3wMT;%TP&{U5+l#Myq%>D-B5(2)oMfj$L-gbMkz*xtlc2fqtTwzy*CXN& zBjlxMQ8!*Ihe_r(dI5I|>6J8w=-Af5Yh^r3E6EG*zo&EWLL3nCza;kJ8hh0d9Vp@8 ztp{%K8oVkdbAU(ngyBGsaTUDsv6pJZ_EU`sVaM!a6?_k>auegqUDd*cJr3G^!pGABnJD6zk~TYB30L=3329P1Wt{?yh^yKOO`0Yf6ABSK6wXEByIxq^i44 zs!JD+iq0q?p-a2+*3_s}U5XdcJB5*567ITm8+h0V>3ExUM@R?G6poPkxXuXac8h51 zfGOTEWEI{gN|PBttWtH~VU_DK z%amQ39u%_6(oxGX%={8w&P11Rl(XVdEuEsPIZDN>mvh7bjo>}s#ivjvPM6o=uyjpi zn#;~Mm;1QLr(0M3W-hKziwr#YM$U@~Xg=Qs0&J_CmdEmU1Wq$|1CWM(fHGsG@Wo>0+hyzenml*2oH5}l+ z1fbJZsFha~%v@b#V-qINrGzj=6#?(|!1r@OzO=)4rk8WOXGINv{#=oH98!?w&GVAH zMorABBGBSvwN~S^x61!~(&VqImP!GnnG?Y8#!IBSU(NRROLOPvf6DfM9XtQz&42a& z-|Y3X`+uX`?r-=1mw29W|JPG!`R=bW((rAg2KGld+!rYfYoO+de`tVE1aLUUA!du! z!h*e>6z%Kge5`N_mS3~GrS6H^D_>^E1Hgk39N_>ntYhP$@28n_E>3T5k51m5T{v&9 zkA7LUS!V6pW{|#-z0&0Lc+yU}j0(@cQI@v8);_t}{b@D-H`qOv{jcQz&1N^t|2vJ& zmjA!R^VOdJ>1p@C)4%eC{iP1winhV8^~fzH`qBfpty%34^OW)bc@zrKUnc8+Jn#Q* zHUDpP8!earH~XDVd&~b{;xY2S$}T&`6Cw4fEWbwZmzhY{W8L#eUu86dQIX8=Lk0(> zb_-rzHD6C6DRd=KolXbf_nKj8oP~xs^tt@k$;w4*!S>00D53Me9t8i7!}OM}f0c9p z_=y&P73;s<$m##h##aA-na8YuHP#!_{rNgm5SOd}8C6@=5sJ3a^-CPPcpKUXaK($t z#cbOJcuhuxlx45ymRZk616^uOu(YqI85Y*G96Z=kVA~tIy@RLN4)pJLKVMv)m|w$x z4sYLGp1eOltw`$v04Ep2+n-NQuWm1n-klCluRok#4?vZKRsQYrhW|YtSC@n7^<+RndCY_CYJre(+WS{M`LjF@1%RIOI*YCD-^50hfdzt4Miybor%=4jHS-!kX~<4rtp&l_&PyBBQuE^*%|Os%pCc4rUQ{a? z*JB@j+ymcB8Hm%-v?2!Q`ttqF>FuXa;!Y1)8Z^@*xf0o{xW6mq?WN-O;5DdL^U);_ zR4UdL=l@nH&d+;Bpm%z@f}{^4fFODA2{bQ|9=Edkv&!mg87h~`e=@NDX~zFG?EmdX zM*eH|`n~P>?~6P}{?m6*>KoWhcHu{v|7G=Z+rPLERvZ$zM)&;OSNJS3#(!xNe$&s= z^>1!6eVPWiV*Piz{jC2-v)yWK*Z)gAX8qq}Z>`;c259EbgLJ^Esiyqx{&;$z>-3n= zcwb!KCEOnksYZmbB8_ng8B&6q+m;owsg~JnG_s1O{c7#A2NkX0lJ7x&kP5=8!wrY( zkJg7PVx|uf13$lib9y^GJ-$A@5jnO+(m^V+%c(1)JY?M`uG5!@3;8s5@-`$Ue5PXP z-QjRjul#~V2&lQx)cvk6v;8XrFt~>cTDc3!z0Q^lqe#Y)CL*1#xKK>4LtnUERX7g% z4p|-DtrFh}L0I@^1qjLuPGFG4NG()#UUM_NwR)}+&fN@ehnL4c^WXb(81KhPSajRC zU#G;oQ{``tZccAc&aPFJ0FSIHqR+A**VS(?FOE;8xV?0`nrpyaIs9gL`+j(OJ-j+v z3rafavrvwXk58{|Zci?T>mXxpAJ1zAr80V2z5M2IgN`{-`RV57>h|jT@*n@aJwF@X zoL82&2w+){RRo%00z@D5AZ*I@7o($K%t=$0UGjiCy)n|%NY$Cng z-869ekDKeG+oS8ZnlOcm>%$0?y-MCRc5`%gK0H1;KRtPlcGWHY=|ty??&s5g7LjeM za<8v)Ye#U$i1Gke@ZxsAKFwvR{4Xz@eQy1~+wS$V{(p_uHvacT9wYzDu?Da7#VTB4 z;Y&+-%k5^A0DwbzTa~^KZhfsl%_;@h^6wr&imo7=F3BB{gQDwHL0wqxUClyXm1%qt zE5y2$WFDz&>}e%`Wr>tMRb-${Z(42i`~7MKGc-$ek(I8CHF?>I@L#Oxh+O%r;D})j zZ$$-Axhxux`nSbt@^@Q*DvQ;Wdy3;et{EI>byB{bN1+z9#ZA>RB{k=KX5dya+!b?8 z4%FtSnuNRInI-@kLWo_|rbA{XssSeP5*t^cMc&TJC`MIGX{lu_o1k3x5i>|)Q^1-#mb;=f&tu$uVq@+bbO+!X!ZYdy{!FX+*4~o4^bhnz0&~8e~DWRfL zMgLLOJ&76DP@SORc@&DcVO?Ebie2U9suh?pa)sg<7O9clJibc(^`_)LG{58(t14TwQBJFSO9__( zekk2E_yQ0ssJ8zDI1OnMBX!XlFiM7fyYUR-5Jbe6H>Bb*NJ5T|om(QG=tB6uTG=j2 zy#Q8ayDx6xq51BMJD+DuZXyjU(}dMqb+)oR?=||>(ijR)#IzJ(4fWb7I!dBdzb~3# z%QAI5AX`U0Uun%89YR1VZ2VJE%HLEKt6EC+S|r^60sMIOk9Vi(^@kJ8rpbsCugFVa zA5)qjx_{6-I9QV8+AKWcUy92LDX5Ao{<)g%dNznl`l?0w;U6}*g^oyH=kVHt^q4_b z@eI$jN(y3nzD_beewA1@k7psFf&Ygi;tF}y1RMK$3 zKS(v}$>AE5s)wf~r@`mFxH?M^=av)$SH|G&udjPaj^jBcg(uc`It zi~*HLJ^6edtDIzE5Rm(;7|(HlCg_xN5p}ffpr0M4#%j^3P~4sYKa9shiKaWVkaaLgW%bp(K) z&(6<>zntA1|1?l{b(F^Yb+YM5{13g(XPO4$^0?swCKv9fu5uLhoraI=K6cPO49@XE$ql}Nq& zI1anZ?y)nN!yq^pwJl6jqrvWOHmYMCnDQuo87TtYr2J!-?`bifsa~sDU!Kym&}YV; z^Gj%D7kebZj#3aWN;T-TYyHa5&t?bf5b^V86WuP9&L{w{l!#$d&KLa7>aQbxD7)7U z=efLl`~#+7ieh<%y6*!BLUa!T&K8U={#YTUbpMY@_&;Q{3HP6s@gMzmHve<4)o5(@ z|Ce~=E+3Qdf0NNhc7Hix}WadviIM_&Mi^h?f|twO26CNefvfCZ5knO@Ze=S zjF9(;`OeXGw|xGjELI=Y+3PiZ)?5?%Jg<0dI1tO94XmIIwiFRxxAZ8QKL<`!9bBx7 z*v%qBRZxwHU)8TJ4B9GMn&0znr4FKt!Uef|#_2dhf08HzfwE-Bg z--Hn$9fGYDU~2{Vnymn4rf$suTQk7c46ro=Y|Q{$Gr-miuzkMfr%eAxp&t>v3GIK4 z_^(dx{=ar_tN*{qqq0`X!QO=SuP4sS>Hbuv3=+!!p1ed!B&;kp0;mK-%3`plAt3FP zrCdEroRuC5`YkBu8riLCzE#a%Ry9vX6ft$n0rdSCQHs{oip|bu>TOW?;mt=RW)H5EK}%{m2~g}0uSKw`^XhxI3#!r_2H5A{<)$Uml1dEt zKfNlb{`lV~7uDTtnzWEGxyStkX{MnR=58i`n#dSpZgO#FX$_oyjF88W5B_C=`?os& zA)$z{|JPsWzxTi>VPHa-_*Dh3{)gZYRQEvDZQI6bca6l)SsBj9)FX2gFY0#(w2sMs zPN)-@e@lWLkkkBY6z{AYhN{8pT{1#(h!_&oSInRm=IoP#zFR@@&mbsTOIj{7oAZ4B zTv4*xdQut{vd{)awU)eSNI`!X8s^sqQQ4aA{&Y{7{68fz{*8nT23N#CN*ED&NuTHb z|4t*9|FhHF-v9X`kIMgP3HL&ZMif8_AQ%M+67rYG&X!IJk-#3BX`y6jDrIgMBjCjd zGUQhhDy~%*iH`V80|6ezFkY-mBPylsX#^dUn@kda!T0adM82F=O8r0xL-lbI1X2d5 z+o1UCjR2ZPP{T=qTHod6H$vuDndznx%%n!1Li#gWfI6tk8xLhc_iik);nwZ%22d(7 z>(*XdS)Yp~Shok~MygW~v=rwSJ91?aUDlR8+>XJ}2d`A`G;UQ+#LGE~W9)O;QbVy{ zyIO}P@oOtRV@;%I)L)jsu%v;k#9pq&TFFv5mFsCOuDyQ#tOWa?in(Noh_8_?5baIY z!ZbfvD#V$OlYoq1P*Ua^iOh=i3-fiQ(4G$bQ-$^ClM-KEsLssujR@1vNuTEupKF#6 zl$h5yg8N>hvC1D@;9|(%%cUW1M3>W6a_ygS=v%~mRkHLXuk}dCV#2ji>2XpA=8QaD zPY!r{Em+%xs5HajHHrf4LF&}B-dok1suKKITq%8TRcfnBh{f2m=!?f0Jddy5zh^kW zzlo8!La~QJ1}8{&uLk7xme+`qB=(SE?y>rrIt55Ncu`{B$Oew)D25YcHBvyWRaj&l zU<$kP4$Vls*ko^J0^(yjv<5Dp{!DpY*L}+5e;iJ@p8Nv&-!p`W--O|y&f7Q&f@%)+axzqzSJS91xkzZ`va#k= z-9s^Z2SYenZhQ{MowmtFsp%k?3dIY^J;XqdCqLDaKWetY64gjK=t5b+;6fBEullcXe)_eQh&Z z)qRW0x=%!6mah*$n9N2fc46?cE{r1EgUuo2UIzi++wmBCkfAe56BP6PPm1+E!1Dh2 z`zZ;GFtf*119?Q@3Nzv&97q02rBYjjSgTN7-S?$J;DY>8!v4p-)eB1A>~5B>v3%1S z3ux^xet}QJD-K#j5i%>JM8HjlqqhDcEug%w7H{NgyLv#>ghU z24;7JgIz&6mZcmEX!aZ=rJf_M1N-8}x>YC_>1BOW-ce5ZoO@KJN35Qop3B>K@Bo*$ z93+&X_&7yi&897sYvL~7xb_#W%B$`dz|BkdxqzhHOt#xDo20pohq=omJCT=dG^;tv zpV%%~X8+sN-4EZbasNZNlg_S;C1QPJTh7DIs^qwl(LW zis1_Vuib8E?*DDII@|cqmwAM)_io8xZ$dF#HkrQcEy2rrzWn0gRW;YSOL!HG;_HQ1 z)mnAq@Y4DZzJz%B*gn_2#L%B%%Kwbf1XHGv&mI>q>*=?kB`dtQn(|gteo;;NUd}tJ zwPj_ASFf|DFS@krEL<*asY$K7W_}y^`Q8?YSOr7>O$c0H*;6L}DJPsG#-KNyp^%;M zEdW18{9Bp-tJlxQ|Fv4Zt^eAKmAU#x846= z;t}!xZ=5K9YhRMXug==nir824CK45^&k}I&Ow9*|-aB zr@|Ks(a#S`K3G3rX8o{zM{JM~9udm#P%0nPUo3g#(JqiZzDxjr(Nx)n@|VzO8`SSg z9TD+|)&(P<+z@Z;YYIX5n=`_DTvTvZ(4?qk?VRewY`gFa^$SUuY#`(sV00|w74bP7 zJx--*2l%*5Q4pb+)(uQiU2g*qP*ZoyP%*oe^)B@i(6yfNqL;{WKFB9GM@5}@*frXZUI@OTY1EtWa zEd!~s+XE@|Wr9bZR1&%bF8|Khf(y#k03%tC{W>EVIe`i;J%+rOZbWD_%6~D4)p7JD zAl_a1m%4}jI4gf~psxXo6DuQyDxZ24@QPv+cR`glgg$yGa)MUmn9U3?!SFMxQaj{F9%frtT$7oaLp6Zh5!h@q-!!LA<7y&)f$HM=Xy zW=qFgc|2SQ$VBN3|$gHfuSIoX+Brx|m2 z(L1!Tyx7J2k_jnKAL}!Cht5KF8D9_*Rju}REjX^C;%JIGjaasEu$FRD^eaPQ%BQ#I zI{S;$sw$n0ss%;sGvenAV5PH3&C@!ajgE(Bo4VY{>1%qxRt?8=b0~*n`dlbKn{rsH z{}KNL(>M|9;7#IB(BrQHU!nhXdi|XK*X?Zc|GdZ})VqlIz8UP180?LxfcZJ}Wp%=$ zNxf7_EUB=L)>u-tIHa?r@Ty48qG}Hg;4B=a=L!grQehegaFuWTTk!wCB0fm*28wFi zFwH-T`txll4tkML=VTyf*e{Ubyo53`JGVWF!87KfDQUSN>qoxZy%mCM{&2O(_wRpG z5-#i216}`~&MGo8{EKENDs(>FEuwj$GEj5@!wiQ5&A z<+6%q^A)d;0{r+sgjpn^aXNgO~DS`o;F0P1wI>#b6uC0TYe>a%bm$dpE zhe4(Ce~d|t*+Phc&wKxWyWPy@|Lk|R_y4@iBjtZJ*kbHABKg|@zp%`2qq0KU&lX)v z&UY)VCvv;w+1PQ4DkP&!)Dc3~1!?W`5(i4=*u-t&b$PwjCl1t`B0mX=Zu_{hdC)hZ z7AS<}658qmTYca~^#Nff&MgaRthTPVlp7SU5XA`1qKp*c9;>(oGWSdHZ|CG5#d_ik zsmoyi5~Rx$xaxwa7vm_s%+YGp`ewIxL4f^bg6Al#K1)pWpXn);|K{FH<$v!q+MRs< z_ig<5i#&z?KgR*Yv&}dG73EKUQ7@q5Rc=7X>-zzTq9x8XAC7bWGyu#6IWG!Plix({ zdK~(I5xai1y1Rxi(D7Q%K-R&p!dt!pQrwqbNOkb)Xhc!S)^-E(p1}_&b?$kBE07Uu zM}!1x_yDC~9_R-2E&B0@rTtCF(pg6UAW+{5)qfbF8jtO@_uOtq--Zak-W>(n;eZQi z^znBT5!{#pu*(0xo4fzL+v#roKVIY!lKu6YqvK78`+U-TS$SVf z+ob}(F0qcpugj{7?|#8PvV?I}0AQ*MfP3sCKw=OQ;lCkoQkDJUe`ev*M081uR7I9*Gm9? zIhmEOBU?Z<;dxtW^_!PgzYY1(+}*rffD|iQl-;1{xH-1*28TWlCyINRUtf}m7zKYx zmbUG3-!AtTUhX77*J#X(!wA2PNfIqtcNGAhyj!nWUPhu>j|Hi_#*aLYBw>+r@MC$= zdaWyD|IF%hss2Y2_N1V1>sg`y^&9P8R{!fanp^$vB_5Ig_r})p0AG}d0!RS_BPTO3 z*9foq#84T5sk}@d#t3*Zf(-c;&NtQhgq&I+z@r$(i~3sWgT=I~8gI9P48Ed-DX=na z@2BFVy(tt>nyR~W^yHe+DLL=7nyuUU-PLHMwW<@7(e6C zx2eFlCHt)Zr<vSqegT!0J#JtLQcg^@VrZ$p2+2;i?bM1RoVkiq}qAuCl6NUr5 zG1XP=f*nFh3kEY)11KUt5nZ|Q7!~I@5Lkil@ z&y|8gE8*v6j|=3A#LQ4E150LRS$mv$>D*}3xu>~Fj#SP};PlO^KNHB%JzVIV(~g51 z45BG)IYSa6du>$TUSA!{6|kH8madNcx0~bgPv^t3Pw!7mt#nw&5C`Cu9>xp800hEM z5J>JR7VWFQ(A}y9Yu6dK&!1C8&uXt!VKXzfNCW#K8MbXEzs;drHrEr>Y{iWI${==sr*(}t^&EInv!OX z#pu@r$H-4twn0noteB={xX|~PIS~9iUA|_S?gGoMqFYHLYe4tp9JX(duvQKQHkJ{dFh?dlMc2 za@u@Z9{@FVmwExDW!CWnNK3Otq*~;E<-ZrFcSygl%IKg^S^--VHD0ngwBT_r&< zv^u|5D?ah=P%N+4`yZ+=z;v6;wO0Cxf1n?oK{@PwE#ctSo2HyJSgIC-Ey}l zpD%Xu>AL%Ky8Q%cei^6aDw#ettmGDP=%H@A)7~g~fuw4Fc zwj2GN{NHM9{eNHNQS!e$)Yymupe#BspaDp)S%o|2D0}ie`W^=X7$J~Qj5JXxX!(*ymY@8JNQu!%={!%_hH}Li*Fq z&DBsJp=DDRexOC=<>{{u5hJJRS?{1{2W6@w^(*27HHSu!uVoS{ zC0X6w@=9gSha-wYsYGM8tJ}^^#4nu+Ok2B^xSg5R8cTb;EkfAqO^R+wEJWtCy9FzA znfpjY{JK?k?Y!xvDj&ZSK-;!9-u_?a0>28$N-BM zX;d^HZa(`YFHnGZ6WMO7t9r!p%LD*h80}_$x#gtaqm)0tGvbBDI$z6M69rtQF=NF)_alJB(s3Ux^{cy0j_( ztONg%`3{Y+=H@)K$0Uuj!= z%B&WM2M&N2#r=Z#!lB_&c!#F)i{k9+ERVn&IRL&0?vI?}$f~|^ydT6=9Cz6#Afp&c z!G($ISo~dWGE41@Rw*jF8L~eWTx#M78?MVtnGM^mQ)tcZy)?$t={d+=KA*uMZ-Y3xI2ao1+6@5lc||eWz756%ZnFiS#koD0A6O_M4=xM95PXF zGt04&nG8d9=pBH^rod2lE%%>d#t?>V9^_$uJFa2(_yFLGTiN`trQKP-V zbD;9b-WPQUbLR32$FOYK^&G@uq88Sat z3Ye@#Of~oo8OHSF{%Qc`qNzM>-Gn$+y8koC z&^QU`2AsfG?Ek$^r<>jXo6T+f|BF0w|5t-O+>8^rkD`DqX6S|XeNj~YmR{G4lzD%o z{akl{O_#yOovX_k*FA~v0s?)z`42F_zTiBDsLKeM-N0cK(KPRpMTl==3s2GAZr|JO z`zy@ITeM<_kI&5OI>WBG-|q|963b3gGxj7Edzfw<0)LC&SjN27YdIqRP#l~TuIZ)c z&Fh~!Kjl<={Z=C4uR92Z^JCNaJpatdae#E_UyOV5CvX-{o&g+y40g7=j+v}$a#THI zmvGiK2Jk_XcO?hjXoKctDr6`gLl0dM|7mCS51rlX;~Hg9Tedx=L;VFdDgNX(DzNTc zRj>561y*hkX6q8Gc@xJ7J+S_PqRM1HPcNsq(W>av&liiJuDkF5Ne(*7_5bwNn5P;5 zR_OojUMrjbuixx%?|*ucN9y>(pLhnNjadHW%=rqg{phS3b5%-XQGEAq8p5pXGX3r25wSQ+4V3CMP3W_e(^cC#l z{pwrTKYy-B`BLSle@Fa+%U81{>~5dUX2{1nnEcBKoMrOgT$!80$uDR$CFJhdjyZam zM7T=+Yj<0&{MTyr+uQS>7kLDe`H&rKH^6KILSb$?IW2ryF>yI=%LT{Pb=MIkS3@bz zE3~@as(eE$AUrq^(W-HNF8>th&oJeG#%O{mi;J%t$<1?zseKD4VG8f^ganm*P+rZEFw$OEb>#h9Yr&RtEg6lAZ5uK9f_5W>m8ae-; zZf|Sr-=M~Fa`RU>$ddIY;@TrM)Bqv5XA9H7#U&P&Swb1Ct zc&^TuzfkbM9!`3Ur%&O5{He#jG}iA)KIi|JF)m{um)}h5XlTwwf9Fui5UkxANah zJW{r^64n3z?7e$;+c=Uae*ey=z~Rr?v2r8%ZO?c%cdpxUr@funUfaps*{s)xCLxJq zieLy(jylPA{~bIDfZ#(9%SlE&r#lu26bc2PP*o^YEkN!w!sI`tyr<9GS~<@u*hapy zsx%q=^x`FJUxPqcN~N+0OJC!aCKi!%46~>|39?$xaQ0bGj=)it{DWmK^w{}qGVp*$ zXIu9j|K_=Kr&`qu=}()fKZ321q6~Zjdx!Qh z?+{_4rGk{Q+}f~8d^7H-i2NqM!wK(%9}iF#k>ThNoE*QtI^yzu^anfy+k5-$S0=hG z1>2+e!Jpt~07Mw)FuR0(4oYzYTUge3)G4cC`T5Bll`EUM|bOg8d_s;A?gSxZ8%RIi`n zsnY+Fbg*%I=Lh$B`q=SbcDJ^-?fgFnJDV&0Zy8UM>XD>_9-jt!p#24ypf_HCGk+8% z10yXBZ;BoC9lioGZTRzXmw)K8%;2`rqQB4pw28FBl}RS;E8kVkA35Qd+BKkF43hyF zdSH8Rr_-tl#kU>sTWAnx7jM8Xd;mHI_1+1%2K~_8Ki?`TqEUs=hinj|J3rT`1>zMbwr}%`)?Zf#bX^(U{qx8a3fgH6RWzyrCJEIJ=v_N-M>7I*5KsSX z)1|VHk6|*9gh~-6gAC$NF=sfo!5~I?c;=I647(R^Doh4t7=_h<_ol*Npe^pFwG|jE zy`(71PKkK;CG}0bKWlN)Wv-zg)rznf+ks;l8B&;s%@^MpJ9Y)DdAr6pE=AT-c+e%kYj>IS_zh!vee#Hp2F-shM6Op#afhH zWQfXq?j|yrV|el5*i|*nV2u3mZFHCURTw<@@fD>s701P7tIWVU4hSo&RmXGGO|xj^ zXOs77=o5HFGM~V~gpE#~U`mp4gkk7aR(S`>5QTg=A0iSA(b!tQF&eyuW5|L9cu~?v zo~c~=_YmMbgWw)cFo2&aZSG(nWl-j4^n-v>-cKd~=XboEBkQM3g=$Q7V{$8_tvg?z z;y#wH<4z0XYHp+^ZMzn=^0PN8benc9%EGfYC;1g!z041)O|#`n^EXe|%q$pa^{S9~ zB)f+|!ChMlKvP07bZ+yLhUucM6QZFSII=r4!*g}4&YGZgvE)i7ktwz$)0tGgE@GUx zrh`gFYVsbGnMajkUxah#Ak}wRy1^!{1f&wVH!y*jZ{X$#SQ474iuhJs)9V^yx;G93 zy1R(GxoKJxdroy*qQFcosqM-Duin;A5lv{R9|%>jnZ#j#qBsiv%OzQ=_cqbotPZDoZ>=zuGAvoh#Mac$%%J^n$3(E6KQ8%x&yCq1<& zj1`r~7JM2WGJ&c7aKePKW+kJ_398JqSrxO&sNuM3+xX z&UbYOAr5i=Cpih3=IFyI5OB)c5(NX{l%{!kx1e3F#pPm09U(CDH6=t{UQ7wT?3+@R z#PuenIn^jcYG+d1$gx*&TvdshtKtrDg7o$sAr7G8mXO@|Rg_9Qj-|B<+!BWSlDWHg z0N|mY!SGgmzK!K~2fA@|$5suUN_6GCPohs+(Dp7Lo9J#@G!35Ml+idcg@koz%U=Sn zl#&ij`Kk5l3s6G*D1liogZwJ~EMeH?bgzE} z>q)$UF8ByM>IDGaM|WjG)#+duhsDO1M?3`Q?bLt~U6~b{qf;#pz)jyP2TH~F0-<7a zeS)KI{Rn<@31)UqhsU?F^VL*gWY?DZ(;L>+x?g}@-B^Juv%1Ty-ee*#ulIjJ3;EQS z1DXufbgwR_PSW;qZiXJ*p*#s>!}Pl|N;=_%NfO3_D za}~a{LKNg9m~e`1Z1uMGHUg9+FrdGgY#b$njsH&})-`fnbdktGB$#!D;as9?#MJ_g zc5^s+$+9x#&}BV`6Vraq%FSj&Uukkb_fxC?;a~{EJci*fb6o^)(*Jf#@xM0r_Ez^l zmh!aG|I{@29xj42Wd60UgI~$lUoMYyPRuN;^ag~6rZ$9fq zW&0+9g!#%{uP49Pn9(0iWiD{5@X(a1wM_ju8)Z~=n>Gd9D(Vy^9$%riHjc;F?5|9L zl1jOoF<~uHw3qp0ERF z?)<}o=eCMFCDil?!!tMCQwp9=kN1W6VJc;hxzjyAI&12)C~a^(Nm+1+00 zf6I6p^uH8^!cE7}`ucespUrr2zh@q>Nca+50b47^ELeZ?Q z_0G$Cj+;&T_nw&W_5~-=aJ!pLr9Nqz4hJMvBxh+`(ic^H_i<9x2YwP3f}+5b>8R&p zm}OB&r9%lte{EeLF^9lVwwZoy6{vx@NLjL1oC?Y2aZh&{Lm5PvLNr9kiwun*8NwWQ z&r_KBbmqF{$m$^Ge(K*vaYQ0xp7n~#9$2FwM5em6jkM{uAA?0Y3zO znp){r=+tBZj$;@QlpPwbw1REOkGdewGJp_7Nm44;VHC6Q(wqr(R%TioIeCbm4IsG^ z&^!g-d~bl^O~delhtQCt1=efW*$~Dl%y3V^WYy*7Ger`FP8BL@gVf$>UaO+k$S1+@ zZ7Fhci)keZE|+s9&exL^a=z@zSKQy&#+FXHsvyGrOb>!C<3Rib9#7-;c83n#e1K zp@KdurNLAhSoV~1l0Z5;UxGFE^+UnhdFdjtOv4K4makwjW^ia+-r}BDT2nn%NWZov zK*&DeQVFS304K)55tJ3`C3d%j-P^#QRtvz(fkbbqzaqf7eQWH$NgI9V$2#J zidQ<3e)bXhQMHdI`5(h<90hQ$Gk_-fe|KlIB>!)%{J)m+G|2yA_#gEQz-(hm`QNPk z-O2wZdTr!?v&Iw2|BfLk%m0o-%RU=0QFsdR-^8Fw{J%1|XodLipyziZ{yXRKO8l>& z&r1CNmpwBOD}A1G0|8=TX9oga>HI*vf66liv23c&5j4yj&l2G31Ywq^LjE7a7-mRj z02Cp7-lBl5|7o>=Ci(wh)5`y`y}h$_u#*3m@i4b-;hxJ!IToY5h)nQ&8ugs;pEfnT z6Q%kj@s(BDq>Hbt+>|)pU9prxzA1-%{YZ4b*QD}Jd{u8O_wf(xZG||ms@Q4aEavtj zq?LD%;wq>7DyRHYc#NkR8b_hyT7vvwg`YGWu`@`aN4|&`TKu-Ww|lyQU&dGK@te-h zu`M^nZfA>T*x#k|2zNNr!mh&7pU9x$QNnKUQSG490qY5*vgQ?G(FfPY9pHJIIBtbB zHA~JK-Lyrgh5R;2f(w{MGMKFWmJ_ozC5xMjzh>}L4wFEPg5!e=G@o!Rvaa(AfALAb z7;p*w@b6hf(Pwo(pZyZua{zM(p{)cS z_{T6K5&-|D)6N9CI8CKN{+Cxh=86HQ*(fakG2*^H;D0QMpRM|$RxjTd4Q{xwQM zHkP~@ZH(91(ugp47{Uy4Z2b&UDaI!-><9oyNeFTbK}3L$8KeS4A7#co0R*8Qt7pWG z(MIbPSTAAy74)MFla6DsmUzu~QF@u28ndfn8o5?F(Ml)!-fq#-bzTZQR-gJR$I!ep zi%%2I=LE9V1xh$n7j?+#L<>RxrN{zlq$mN!FFyvW}hM(hfgg)hyEg9xa@ghOw#S3r;0oyp4emyDVI~d$!0pkwF z=mGFG&Gy*@_*DO=yKb663=`4=$9a~)gv67VqB5^0K%gX^2nZGcI*|pCm*8O-1w;CF zgfNLG0Q-F?AP~g%Z$C!KfK!0t$@|1NYjd}DxRDu$kX9zu9`GubOfesu*OW`?6b<$4 z*}R(NCfGXKm3fslCf_j^tF{;YE1q?(p7PUR{~4n=AHl1{Pw^0u84rM)&VM(z4(#*a zy}i}_ucbUp=jNk~#V9|*0kFG)r?m~aajLfzRo7`_H>$4PWJRi|Ijc>nYB;{zV_-MJ zi?TO-a5A|c;UJh}4kYT}?dmLeW%qb8y9YPmUJILO!MA{1xaz1_s!OY*F@)C_+h01+_YkJx~(EnOj$zAY~t*VscZ9c z3qrU;=d{LIz%{Sfo3oHk;Ub=iB0lFxHYOBmQNcBVKoRgZBiD$_ymWEs_4vrrWvSno z)(X%+I}TDseIT`a%+zzwY{;zPz~mKJXUV$scSVwkuOLc@qgiVJG;C1DjSdAT=*8%v z1J+|Ax-45^ushrrKeJe+u$~TJ; z=vs!vZO%DQmqeYQCS9(1Z(7TK4JT*KU0IaqCJOP>9acd6X|j#5*c7cSPi5z{FTmf2Q4GNY1osJg;8RdZf&C1PfH@2=K@7>CFx!hF z0^sK~j)I8969(}LDPcMA6OgGKDQxM5Q3eC%=tdBCgyNTk;m{vPD9`BB_SFiY@aUXC zIk9k1^5VLWaXx|=csYhrWb`_g_qo1z%3=0YC(U?HN@6t>fCSkX6hiAuN;{5+zJO_o z97oB3YnMVwRa&NkeiUOw;U|!5Xv_tWSu#g?OrkWFl_Q9mzu`*|QTi+65lSFHT!&TD zytv9{l0t~6DUWc?q}0%*Cn-SPl4_Eo&@oNT?=>=c<+^34*cBLeC)T9I<{YCV&t?}& zoH|wOX&}i`sVB@PEGY{G5CN^C1Wq{yjWR$a!{#(9Eg-+0*3zv%R%nivO^R z|F)c`$*0Ab1%`OTmJs)N)E1b!0Ck!Ww!VIY@rW^rI|yJzhU~nUyrloz-vuZG{TTUV zf48S7^1Ybdn9$>~Q7;>X5SsYN6&Mmca zEBDjy>nZX7IJ(=oCBdx`<$5mnpGN+_zkOiy|DEmC{ja4wx=_SCd(t#RX~vRi7uRN( zh+HH(1@%rZZ4#&!e1NH4z;lLfXYpKYCh=?voXx=N)8Jhb*nLU3n>nMVqIq>rswLrm z2FU};?k`Xr1(PW-Pk6nQ)vHHb6s3sY{~62RKl32{8_J?T=r$N%pztUs2nRmZ?)`fo z{C06PMK^}2Uyr;mphwAIW4v8Pdui+6$^QeGk*Lpnz&CCS{q~XUzq^}zcK*lB{jJsc z|56@q)-A@HO5cV#V>Y|5HiNWqk<+S!&WVw}UQ>}Kz=h>`F7#2>)S=wTO}d``LfGC@ffj#4rKA4?!_ylPK)2TDVP37#Jf z2Bt;R>b4w?S&D!XDxJEU2Q6?CmRRX1dmD;blNFa=VLuTl! zrJ*GB&}EaJlD04**@Rt!Fo|4YB44AWD2B}Oa9GS`3qM_r91@ZqZftnGa;Mgi-UfLa zWjY#^9-89+QM6ea84CrMHPC@QehT#Q9QYTS`QfAEEsYr;52wLay(r(DEtQ^0bE|8zJ$b2{|1$0=+xFo0tK?%PDy;KEe++?7Kn#6M05kLV!AFkCOZ`T)wx}w7 zpj+J5c5I3j8(|F%i$DOC6j-mU-SMiX-pV@juk*O&e=0_8+_KX#VF)5oJhLIF$^Nsq zTgv~qxxbSCm-1BWv+UltuGJc1?-0f#sXJ4__E=Yce=9!rWTA51W0Wx0Iq(1M^#0P@ z^(+~%cg%$OBP-RR5?)48!c$L%@UyG1N3tBUnT&fV8*GfCN)mI=+*qzl7TTCjVZuU>SxewKp%pR z-4`QUnx5sF1)#hCa#@?o!(W@6$o%hY(z6IXpYM z0$0aJZ%@GamDi>(6$iZLji|-o$BG7V1PDTLuN8Jb$DUco|9RHd`E39HtA+pHmhJzy zwZC()I{#hD!_7NV!|3Npz`181WncgknE5OaJDUnXT1>Pn!^DcJ#`s8st=i5D%yR;3 z+)r?G<^dwk9a)5;JPE-5jtEwCmG_xW*Y%{K*KPIXILh3^^Wa(JFV>y#lBsea>-moh zUawR<4$X{FYV3Lm&&BI1;XZavtmM78OLrr)J}*?c8S&4H8i-F}GS?t{3e8A$MbCP) zXEmX+DsoYGfFmRBSCGLprhj?=+XLRMH%q^TEfr#Y{j~0>ZE&ADi93+^ny6|0e(L{;l&u z{@wZ8n#VEkfb|&C{}TCIwBM<-=do$3yI?Zn^uW6uOJfT~jN;5}5PkyuI34;)K7v^k z@TnX480zjBr-V7CNSnu>x_|1i>)^C^%p^!yENJk2T-3rn(GP{Ti)7`gaLiIda04}G zm=s?rocNf>7r2`gW^5kDZpt~s{;pUaeBo=XRs1a_^f{;eQ}1M}XO^c{{zGIL^553x z?v^e8?XLVkmh-gXEOZ)}+IhnkJA^(9McJFCQjlYUMpIVmBSf^8N=&$+YZB3dg|nj& zm13VQ0A9#Q7rkja|F&sNcCfZFUTFTtBw=bB}{3K|8`gM|5Bc2{vY0Hq1IUxLpl?t*b3xIPtpOu$V~re;X$VY)ZShA7~4!e^)Y@x znHj=A=jN}1KOHjuWahrh6iA($zD7A^jNWsPa!-f@Kjqgp4p?39mXmpW?%fjpz9PQbzh5AMWk$Y;Q1(Sx;*BhtMbf zosSIzV1h7?r)%qP7{?CP~7+bPP(ZwM2+d969ej;EgrS5~gC_s{Syuk=+G=S zbQGa|*NQ0e$ReF`uP)CW!2|3lkqE^w>+#gKm*w5QEui*zSPlkfmF%KrQ74QvBF?ZG3Y+W z-ExEKs&&V_k3UBbv$zQ4!KQ*Imy0K6hNtGpLOaJAp0;xvFTmfS3IQ<631#8zYDhqG zKL+a*d`DgpXW?e44#OkDrxRNp&=NWFJx-9IvU7SNd(lspC#u~0yz)*~S%DDrexjaSrOj21YQt7l_!<^f=nqTvY|XzaNv6+Sjcmd>yNgYq(_5A=+dCvO$7q>C%z^1z@^oSqb~=P<>&Nh4zJ!$=EYBlo@)L=URC& ziwYF&uMRZrB4t$V5+=I#R}*EI)6x{M;igcFTx_fjPAkC?`Fq*K%9zmj)ad`5W4?nVi-Nh10UPxH&7IwyQvBb& zRs6T5Jk2Y8Bqji#4#ic~HU2^xTzlHjiq&0Q1%D=^1kp8J%ID0QjnGB`Q7mh#g)l`? zLRh6PZS8=m+i zg2gaXp83jA_;- z->v=9{r}BX{_o{HEhK$0{(L?xFvO{ORhomht^A_V-pEgKKmLXPYIAhVD~gDM{D*Ei zZc$gIH5Ro+lH}I)%`CqHh;Q9yde(eplnsKYUK>iGUEtjM26>urt;spssWclr^_*Wl z#na6HA3grdW-0&6_U7Ks){6fx<7wvq4%V{(FQ9@ym%aYIy_riF;fhCY*H*d@O@<(<51QM?X<}1ieKx?c*P~KH3y#D#4YVxT6p-bJbz3xG>$@; z(Z3lPy7Kf>;o{B>$+~AA#7lG5`^&fNQoKRY5MmM~jQd{r+{eW%a9?^QQdTnZc~VEV zyc6{{U)i2}tU^yOV$`)!s;F-lGhp05&I z%e}7-lq$n!2|<}ZfJZ@qawF$s`Bog;Ct13Jf1q5QXyX(HQGWtHKF54 zr5g{db83GDfj@$A;A7aK{am|mj8dfG?+o8Q2l55HN5))bG+r3)2E@f<@0i63MHzL9 zU5jO*J$nyP5~2qdWOL&==5A1~DOVmx7k$>(`P-B>TqH~NHoT5?TX4fGg-X-x_wO&? zazmcJR=<6FX7!Diu{-<#EB3W$9R~y`Ng%t)&aHy{T%kBP)L6S9=RKSp zg5&eEvyg=T3e6{>y>b<;aX4Fvp(`xNx!Le$#5C@Jf zF5aFVA2Ipn`10iS$=UVk(c7z)N$g+vnM(e{J2M>tG|7M4rSspd&HdH+?^2%msp|CjSjBme39@cgnK zhj*yoH+5~qJRLOW4*YM%IeNfmf&gTYP~L?So_36L7zaqJ9IspwZ#k=a@Z&?Vi3Dhr zW)R~DC5K?}N0f^9FbT3rO4#e8ldJ8$efB~6EzeLDfPbPpT!}yZsBNX&K)YongwiTM zO7&e1)5Z(%Di@E z9^JA%B~x~^z-PPvn%+Te_&-9JWPW-nCHn=R|7`7SZ`*Q?p&F?+B713JcX$Y%p@a(*?fp6uwCRDb z;8Tu>QVq&DuADmOecJJVVr&2>p9#zoKNhp6aX)C}|91Sx?Y-Tt)%pKY9+Us~Gc*Fw z9A3P%U7=^StnU&FO0zjN`?QI{FB^0IUCU6N8bx6RsuI)-u4zi@&9Zuvw64afB(DDe z0=p6%bdi03wG+(!OvC@Lh@XUhjFKr`z#91f?!mro|JmN(-CyzlWjwR+YpmwM!Y_la zMM*@$J4ZOWwG?4;nndL4KiM%^9AW2Yxmh(7J1QJ0DoRrRb3BB>JozmnTQpC*b7&U7ws?ot~e8(_g{a`87ECf2UX1S3qn1uU_rho)dW%z%#;6fVgP+ zuikX!ZwX3Kj0Tg|75n)ge@rmRSPY!$n~Mf8yB$Cjpb%zd5`X*ljL)?1%X(r=dvO?P ztOV7Gaz1Hu0l_3dp@{mytm*8R>wuu!8fJ{>j6Fs%3+>CQ8Lt)solS5ZHjj`r599|w zzJh}hOvqLAhX8KAtA`);E0+!{9 z?%~9<;8ZU$O^z&U1Vt_rOIl=96&d(+%7|-b>(>T6AEw0QwE1JD4RtffY2Vmfcm&DT$%#Npkpr z0*8K5A_i^zykF7k0y-ZhROb$$9aTE&gP4GIy(YIRj+q zCty?WddR%sYT8~v&qpYmduvwqUH4@HE3C6PVh7>%upuVlaqZ`6 z)LMjMGeJo&>q09r`gP$cV>Y^7VedGZzgm*dpNisixC1`acB6oC& ziqW(VXsQ9Sq0TZ`5`{W!?Vj2Ww%X{m8<8}NMt(MVpN3T8CYev*U{WzW;&WuOo;-!w zIKnWba!jKAoMlv;=#-kDdzhTf%ra&=POba%xP$nPo#s^xA^&KM-$O)#A>Ag}hQZQF z&p&j$9kbEJjv5C#(;g$yY1xZ~4_C=9K9h~ZCZ;_`QZDOtf$pBw&8Vs!*)kY2nXTfolOy_^ItzD*BAhPDC8A0{lputbSi2gk z7?1Q1v)m56bZ|?xV&$dUR@AcH87g^C#bj`G`lAJOVeH0&+Zd;(t+SnzZ8!PZIoa}* zGeLuAO^Vs3xKrqqx6VqFg04dMJvbIjyUw@XwM%lpJVPnq+X9`Q8SKNX%QUXLvZPcu zL#>vLwpwkD<*1M!O_($32oiy6RI7GCop2c(z|Z1N!Qm_5{m;j(?q6;`Zg&52^WtOp zFuGY|Q-YuA9iudYA@{h-Q%o}Gj|x|wG9@o5@OM55hGs)8E;!6fSPLAZFgvgU3=u)& zg1+bIe{*YVdu9J$#?x&7m*cPJe~}DtF;1Bk zUNpcHO}6l!QDvJF>WKt2B1wfS(30BNq?j>=y>_^(4UgKwug_nfAAwR?{x9Z%3dbL0kZ5UO?M&X42^>q& z)%85ucEol)RG4S_xmv;1&Gg?!Ap2$*zn}cWQJ*sC=DI4Xx&wj?)LsduWXYUr5Gpof zS5oz7#tFeXI}C9Vt7Ck#hr_YSHkysyxhKvq?Gkodl67*5gbeTExP{$4Ru^C+%(MW4 zz()q`#ubjw3L#f9;T-2F4r=`lCmq*&IpEG+V>(j(4ks=$Sq&|OO4V`-J5DMsii$}- zMVC<$Pt>MZ)%}-X*%K3rCDNEvfQZy&nk0SQGgxR7Xe*87Um-J3?}9k#bukG9ZJDcVq3>co8?gU zIkwp#V|*WNTHfd^kRQ(~GCKpetM+j9>Z#O)vd7cng)2epozLO9oQntrwC3@+k_$ z90gr)hU9V2gO9-=8pEW_o(pLZ%Hv(d(kv&2*OuMG*xeEvQ-D?a~U$*Me0*z zdX5cAryQNHG8CUoYQz53F=7{W)@MLON{?kEthNf@k4pDH!9=772nStu0MQfmJjW_g zkIN-QOiK;9-cK$*wc7v7>uf4ruu=cpxBY*2Hdp??%Xy~Q|6Sa6Q5HZq$6dM!u-J|) z8=$-dv;Zq$QykW*?`2h40!uVqnF3dj{j}o$Gv3cIQ0VIH7n<-=0VI{eLUdd9S?Z?Af(>SypV%Un02B#%N|^h@N*%P>Ezg94xpF38se;f>9n8z^We1DFMz)kYs-tL~g{`Xh*|K&W*>t7DLH6QTe z4gk!6pR64rYgG6N*{C#M9+Z}Oe)UXmgWWZ258$nT2V-o3h}p~bK#r0G5ynYvNPh9f zy4?8AzlXpF0ZJ#7r;s588er4RoWO^3V?ZdMdktZFOlz-|Mn^Pp6ow40BCj|FaHW|k zx@R`#vC6{Gq7S9%U|Mg{vBtOYR;GbM2TXI>QZ*${Zd%^Dw3_^31=lI~|IAWg1OMOI z+_%qvw|90|^50UP7W}_vF;06C&=HNv5roOoJFgTwDr=xx7^Z~9U5YdpNPC;O0WcxO zS!0bxte*`@ex|_9iKhg!09;*{2^GF_vpJ``_a*GZ3?_j){;Mpai_i&=q>EwP_iAFD zR^F{E=;lJhZn(u|yE^iIbhXinz%yLa(~xf8;ko0@>H`~%Mlg(KiG^JtsbI`YdIe}2 zdQTNf+lBN(>4|fk!X%u7ngYVSv=m^LKuL-4qVJQgo*(OR%YQ7D@C*P=Y35~hE!tIq9ZIp1OtUQ)VSR5nDsuL50RnMo>g7trWbM84tHerL zt;J!F+Ra9O>Xq89^+a$Xz?)TD5gp+OC4M&1ccXE|Zp2z#`5QdxQ^o&@A0;r`xb?FE zp6l?xP5y5?|I^mN*4EyN|1aYa`M*h?B^c1b=4mqLWBz>d^e8xoL9J#B`1b9YD970| z{XzLMfuD(D(?dTaJ$s4lvGkvuclsF2Yr~F}y zf}$UO#sXKGjj*@X?bu3(>&;3ndDN$g|I_b&5tOF-bH)Fc@fiGH4E6%I z00Hr**acKy7Q7KSShbM?MGT6;R~_HoY_^7#yMX9iS1|SlRI2xp73cl|o+kbelkvRb ze-r=TKiISUKeqM{_E+-%QXYf<*uHGBfd-`U<{+ew1O-;ix!rft9R`d{P@$MwpCmxbo|R z4EE{b9{S_f$F{6x{f&ViMj1JZ)1lw#w8`?r{KblCtbcQ=^bI606C~;bd0aW>z|<6w zKM(E6itheNo8&o_c&YM~){M=j*V~lCp;?`&c<>xEXg7AM>`F4a@F`^qix+77;jNq*>#%Cs{PQ%KQE3Gw|ek z`3hq6pk1!CK!jquar_Yd}M`|tkN z>i+Lio|67gM|)vL01E79F$D0wEZ7)Osh{bZg03cLd$qvHVMAcAEmy`Op1EAo3V6r* zpd-=X(O9LeQ8=2PqOGhs)HAmuVksnf33)f#i^N(BSZ?TRZQW8-fk zs~z&nv82VEiXt61mo7Jx>cpt1X>-m-O9G5G*`=bx&IM|;qes<^nlz(cbxkQi!Txk= zQK1wuCSfZ^Q>aB6F|AN@MhR}OD;d+Q#&|yrj^b2=M0;)(s&I7EN4Y|!5_rARyv1Dj z>2cr~k_Dfe1w#?|YZ~;fv_KXXZcQ48z-4BYL#h*6+_-}G5Cq`o2op~s+t{nJ>QrN8 zc58G`VQMz7Q9s8OJuYm~t<6e0Gg_=ZRW%fvBEil@*`$_Mx|>t>&ZizbrDAjsVLgUB`e$ zsnT(vu?G}9Uk#PP@fUY6IPcET#Q*!zXBeK$=LAyE|F<^xwoCl~V0)GSVJVNn|9_=} zy*MurId^`F9iZsULbrg87vN}&q7Woe3{n&&1ZLRCaW9-B$~Rbnr*Ntak?bsOM=-Zz zpeN%fjQnFi#oR<#s34Nq*fDD%O1lZ&muAr0D6HR2RY?}v*hPD;sdWS zs!)vLLe66!uK&vx1{DFX|4WNts*Do-}S%+>q|f4zE>p**Fs zbLwNd57C*&wxAS+I*VVscvGfe8Blrd@W4(-X-bh0@5HRU_kef(Uz7uQbVBJIpj~A) z%%VQ~dqxnqS0~qHFy>ZcyCxJi%vNhOgIq(vy`hiaT)dx2$rz;h^(3W?l;cF3+8Cs{ z*Xh`%S{-x4tHHe+v3YAxe1&tT=36h0MiH@s5SA=^4YkXDd<-G(yiw{bSRWAK9>)^O zZ+z^Cz%m6T_cz4eLGUs)cg_2B%3fMW~-$sHsaTpryou(>3)3l z%jw(G>(i4fzEn{rlgr!rq09||Zfz38o7q6TxjcV=aXUX4 zCj`e9PA3^cGIJt{hAwH-Q4H|}6F4f*wKJ5^A~O)+YXA1~ z10@IAeM%!>p~h-f!17%M_O{CERv}hYnBADwud`UY+xPM`+5e)EKY&*-h5TuS=*W&ebHQy$q%ZM+9Y#WEibIstSBGcsDa*MEt>GP$B+cRvgkijxSIg1(Pas zvl?ozDC+_5w10-kMFufUNNw^>S|NhEmD8;19mNm+1XDc%j3CS0YS`=Igbp|wExFZ9|n_Pj_mI(;y)i8*!%z1>ilmx zkFo!&!CuU!ufY8j8@|??MQ`>)gzj~wmuB#aP}Rdr5hho}&xpb5Se8<~0{jdE4|qdD zQt=P=O6gj4k)Rl9hrNuV^OFA~_GlK^sbnBC*)1(Dx-#1(Uxm{R_(;LD;H^4G6)m%W zTioN7yIaxAo{?aBI;R>Pcb0A1zT;kvfk{Cf6+X=K6O*UEo{E^FWg8_IUD*l}!(ZG? zE=>5PZi(4y_o`Jyxqu%za|kW12--X@yt<3k+!5DK!B>z(NeB}Hw(V{Tf91-N63fuJ z{$}eTh4BWuoaY{`llD!83hVO^ZSGh-*3%^ar6?ow1^{h}|FgZnWBY&Y?5yO!r96iG z#|C?W(cc)npF;Q(Jz22eCo^8bY#asf%pbv*>Q^Com3<~y0aFK0QOGSk&~edU9&5;& z5e6blYp>U{e0uv920c;IlwLSIGK3j}<^!eVYQcEi@Q9xcATi8Q+Ag{A0vshF^N?T% zdZJ6E5I;h;s0FPHyp%pF%YV0YmBgT5#fhy$goAcC1xc9%6%>iEy6Zy)F446#i$==4 zYW2)Q{6Z969NN`a#|s>E(59pyrfn+7`I7&sO;~eOI9DkhkE_Myp0_2EHcVa>t?Vqi&Yn^=dv}Qt6MSBcvQ^f8roJw-*8Nj%DLTgejA;3&ho06?wsa} z?UQv^&RJBO92Fxd_7gf-?g?1N)v6voD(WoK}D}UWV$r+h8{2B9~R< z6>rfhE7)aF)Y{ktOP+^CihgcQEUT_=rPD%WEWHDBeNY636f;#)!5L zIab*2s_dW7j$0UQ8Jx58YvA|$RLs`M{}T9E6%k!#Bf-#-KrwInlyL9(A&gVZg>ywd zo*iBvSgLj88Qoe?zb{1gr&gJMs;5!^=bQ3}dD1{N`F~Jl-_HNMzsmo#lt<=&lKyMI z_&5p{mj+6z&-N^u<@N;I0;W>h%dNK7&>OUTCW<>xv+mb#n6!<~LU z5$cJp`Y_;c5I|$YZUGbXa+uJ>60U_6!m8!#OjWrQ20hJBv1=rkKJA;5uGE@JrUBid z&sMDLK562)ZZ{|?Mh+c8cg~g0CPf`j)bKiBeXTUyrQj2MszNt1{GifKcV}uY>x_Pbc>6TAG*WRbxR?0G$dTaZ5^st!*JgH%U) z`+u7Ee{=`uJOF6A|GmAnYuo>KSN@;Nc?|pi1sm)|ZTS?|&td!*U0Jl-2ZKv>e%&+@ zM`M^kj6LAdEh-X!(^*RL)N})30In@x5W}h>O)Y~g4Lou3-f=nk8Fn}}3+lPH%L#&4 ztV=>^21wTl&@}}O<``k+Ig^OF(w((&i4d&J70TCuSYwPZ?cWmnm*Ve|*i{g+`eL<$ zqLX8W?r{vJa`MpID}FS@FIHE{S=e;+c&m( zSnfZr&N+Q$mg_9T=~MX02nIieClEWUQC%vVd8h3G3DPSR+&^U>_!cowCpd(s!hgwL zWpm)~;00|3s_SS3QSNlAs6|sPRL|h_6}UERgO<8w3y?q}xj;d(rr$rPJX!Q;QDUVn zRkAY0FJ1B^a)b`~ozd42rpG9qxZ|rVU0zx^9D$gxCTo;e=sDy+(Q35TzWmk00r(Za7NNiuMGxYT2J@6}tyk75g)-Voq?Y zg87jaH>ST;+V}>3@VnDL!_#E{E5f8a*8Q)oty28Q?ai%&RsN5qJcjsoDF=HolAD@4 zKZVq$^=8qAKn1!ak5vYDs*$wJGD@^4Uc05J;(Hx1*RDNPh_12Y47i}|nilAZHIczj zIm84XJ_8^~^Ft9{T|$$edqJ9W*Q5~~p=?rFj(-OF0oGb66x6qG&-h=5&rDm8T~aj5 zW!eiL<0u(`&6nI0hWq!hX%~@~U<7^Ud6XxtZgGw#yVY|i&aQ1=b!R>lG@{jFVF%P& zN27>12lGLh z1IRe6JMoK{Z2z;q`QQKD`?%Hp%gtBz|Bsv9zudg&tkbvj&#$Aub=JyBT;wbT-v4OT z)<2$HT)%nu`%Uz>uaLd^-<`j$na3|M%TV?X52{hq&|ANV{U`ya34sHqUBE#PY;|6O z^@x-O>pX2H3^}Vf*|^xa-gvX|ZsT{^)*A}h zDiv*9L>t%9#+zv4U9|Cgq{>FLu!(Y%fV&A@LZZy(_AV`S@;OBbOk@wXc6Q-@$2??G z)5t!nve-oVj3w|19H30krz=^xr{#wJJ7n$^evA?D!;mVAln;4;`+M}k0|XC#LbxQr zogSFOq3z&OoI7dTp+sT^rCB>2E7lqh3sHvZJn0aGAnG*3AZ6EfnNc06>BX9Tm3Q9m zSUoB?FonOb%TQvEyc*w*Tf{lmXN^sV(pjG_0;rmnfwt`^ScrU(nFvfQjw=aO#^{4g zN}y*!=W&zy?j>z!u4L$CThS%urSDipi4$e60+DrsuGp;stNo5U^-vqri9Jv3bZ~TM z>!UbE5471n%0@oH?m#NcsKoDE^XzDn{|f9aoGbk9t6Z(hZ>EznYBt;yg^nP#3%2`; z0Jf}z{M)ekTD;c^X$m}l6l%W)Y2J$x0%P_r`pedy9c^b#Z$(Xg-i&NTmZ=M9Ge~oX z|KlTu&gGYFh?{{92v~Po!AnB!8tJI;uVofMd-a&1U(4>DwUT-ZchC~USQ|U9&(RXJ zYLt|+r8thZYH6;Td-PDxV=cn-8Y#zgZXP-J*v-j9^fmAmDDFEQd#NMOl9^27TAn+m zv#~_$;yD+r$FWGO272z1dTM*#v`>@$*ACD>ixs%R{(G>$YsdfE+TGe&*?*Vu81~;n zg1ZvK4rJntg;++c$@Ej0g-d-}sBzf5VxkgAc!L<-`LPEO&%tAuOTMFYCv?oTpw--f zR~6A(7JiRm<}OLUsA4SWy1N|Dmq80UgKC#6xnpmC`}WMIipfP5jiVS2;0X@=m>J1R zAgT(o15x=pELAH$v9nni1Zb3AWT+p-%$JS|Or=U@G47hE3+6m9Ms0ELEeia2h%oVZ z)mZ+PjW;x!@_&JSlpXk~e;36Oi6FC{e^D_&f?`e;MS6Z1au|LX9@^4tVGDzw-f<;RdX~csN0`7w1qIUHR0jsq3Yj`NEF88Q^Q`lt)k)TyJq~SDT|h)?Wvio_ zJEc99UFL6*c3lJFbxO(t%itmjz?DARGAVsYZNvqu4BPuvQ^rPq#>x0`%N1I3NvuD%|>QGZg&}`5oYy0nfZmjS|5V? zUP=tk$1uyHP&jC6rXok{rSP&=6DBv(P<4AEXa#yTG%D_OV|IxA0Kq643<)imryMC3 z#X?xd{XT&i7}3TYcc`tS1}ScO;%_EW+UE^p)4Z?Y?L1|0J8X`*v3l|Tn)WysZkr#Y zgxr`un`{TB>`u3}^Zr?wPUp|Lu+&N><%^K>8qqyno$yMVYdK?88z_zG-73WS;%ssV z6QF&dB3PEgm!MK*U~H8gQd&3gD-f;%)CPHr-L@c4(G{<3JDUf?8HcvH8ehkot;_SZ zt}3)Wp416b(_^bEo?H1`1go(w;*IT7u>~*^3felTdn``EHtb4;wCxUE>Wm4dbTzcv z5G*uc{YdRHPe?R^;+}+OXxZNTBtQv=TAQ|_L33B_PM^V|UDw;+6%=SRU|gSJWJ+6w zW16=xQaGmkOeB&3tyuz4B4)h8^v0WOZtIqWnP;{RWQuuB;3z#e^jV>nsHl@(b!1f) znx!I!sd;@JW#p1^(w25go}aBO!HP(U3|4DHrP;mbXic_Z{vD zWobx-Q2pR1ggG1DMM(&J9>VS4U$I)uS?TQL`u3O8v)8v*Czl^ik58;U-w(rMk*vGU z9#$u7dU_M5AC6Bv3D({YWNT(BLGjYFF|C^9HCwDXwLL!!6)x4HJ_GpUc6UGqe^Vw-d8SeVXmP z6}rXF->!E}F$ktu6Ls4~4Z_nb3pOL{gdg=)u1>C5Zq+I4yqUJnujhY1JGq>$&g-M& z+w%`6mzSrnD^~czmw1Il&8m7~hDw@uMBvCJ4V!H@i^e!+racC4;cH5hlWBk44sB{> zFcjK3gR|@{5)v`m`Q1ml`zn1ct`Cp5{Ud+*<2JojiEHwJF=;J}1`i0gtf*AV)c;SyFjeLVokk?kIi}IqX$>qzhS1bV3hJb9yFn9kM)tH~wA@yK z0^IU*{lr zPZA%}^#s~>b{-4wiueTf^Y{u9%dv-H{2C=hT_R+wUCo;f46^`|jd8#(%hCyl*@Sb1 zXE#xG=BM%s02JRs)N=Q$VuCwdlhi`_0o|`^T&;MQx@EVhf-jgxyW+jO`U0G#1h>!$ zt~FbL*?2*vU^*Y{tEiS}svvo6@@cAs`qWcjDwGQ+IGo=(fr3!{1~S_MiPB9vpW*lb+Y z^FbeF4}KN`9Q$|(K5jIkx|S9cwfD9&lu+gFH-yPGQo5H1ykDX)${-8k>Br@uaK64y z%Hy_fDuFcvY~$A8l~qr#0@m~g?!+-3oF+j(Dfdpfg_IgD zcfd-Urm7?=cbb}yR*7Qav0}0ftCV~Vj2?5dN{OMcGUA7wHOQSGMc}m}l)NsWFL%Gjeg<~d76+%F8M2A`r3Z)i>wbaL_Pc3qVeapd1afMJ3mOHxP`14jZN$BM83 zGG(P+pD`wv=xXVL_Qnfv1qldpOwb6h6@wDyr;);J6k*J~(;exYY}L!Huvmb+jtgm8 z=t66)WLR#lQyE&JqT{U>o!pi;*h{?ed|c*eQ=G$AX2Yc~Ok(NtLI!D{iqe+gwjw+@ z5oB~FTXs;pVHu*V))|7CjT%ABCJdS|iulnV>9%}RB@i~^QY+x{iCdXU{)-iHy2_`~ z#j-7`eg*e%QgX^#lcQG1K-^!Y5ndH8RYzFn2%60{ono~cv7R3En-5ya6QYuUh4Ytz zSc?O#!fDH(KGs&~@0=L(c71_68p{V2o4VZn377AtlN_f0qTxdOS?TU499B6Y(sw2iEO{ZVEm3PZb)LBV6hq04~-eW~|hwg~{saVx7#jRIH zO8v~tRMphr8t3JvE~QaO!1NQqnH1Ak4T$WG3z#EHK-=@bhVx&R#h@EUeHcuF7yS14cDTcna3rrW)l}dRZ1(+L_(}Z^HhI#yJgJJTXZ{MEL zQY=I}uUbS&X){YirI~VqmoixGu6&ZFd1mGRgDhPf|KHmw@&B!Z75`txWAJ}EsE@+` z>(U$kM4Nz~Lh}2yFlcJezaYqTXSV5)t$2n zbSqMPyNyULhpW_Zv1&OiVldjdSIsb7s0MLD*3KuB)Fj$JlT4oOs2T0Kzd=4we@dfkApth({|C1HcXxk#CI2nuG4KD%L0uUEW|slAZvI@B01_-r3VbX> zfTI1%8qo4_^8XN~bU7qJ1o6gg5J$oN5ak%2CjaCP6VqJ;ZQ%dA`}?;3zrDM^;{Qu| zM0l-howI`hOkl=h%llOL4Vj-M#t$gt=k+kbc?L0v2oSDJ82CYkFa~+b(yVU4Fyc|q z6gO^Qruv-g6;rM!Z!s$QGwK6*6HzN>I`!GU;$uIH=y%gQocUZN!kt|*#pk$NfDJMj zVh{8#VGMl?d$yl@c$a2y9HE?F*F@+(Pk}ey;sMMV-bP)V`T^7%cEUn&I1Myrj%9;j6SEr zyWgmit52wL_xaeKLt4w`JqwhPGJwNBZ*A{*3bSIV>4 zS?BQi`2Rj1Grv{G3M>A6k734UuOxEON^LzV1KjyWOy;$JhIfIE4E=o=40#{82d&-% zNq=$u5u*`Q9&HHdtAawdHy3geGni~_=0T5=o?TgxLohEe+26SVvdO*9r~j-}L!&f? zEQ<+S5i^3J6PAKt6WM?v6sHW*EtPpzGJXoykI`rZ6T;IKr?Ed_`z(qf6|)1BWmHGu znNUfT3_5&|LJ4{1v4qd&8D9d&THe>#{bzY!C@~)U+XUDj&Y8P)?f!jUM>Q z?w0+-AH^D65$TOBBybLPUAf?pW~W_3Uf+w2=S9yTAL zW5nok%2)P!+Ke}nJ|n6Og?9@YHvw%ma(v_jIUa57P%=P^8#@kdHFjd`I5{3`>?*Al zvksrGL;mC=*m?{#x%ZKV5u-R;&;U|UKmE|P95_mgg$~(T25}yf>NJaLT_)+krn}>k zunu$Dtl|7t5vw}ql26jXTr+0vN0>70S9_8U7BgwuDWXo1wOdlodDdQ@$mv-$@&{1f z>pKLj(s3NYgq+eZ&#dU#iod4QC~b(Tw$h zH+0FqhA@0dc^qwzGSY%!`bo$g3+bnkA0>qk#5(S%i2&Ha%XCfCt%R4L?e=;-a1}$y zOon}wfvrutu(TEc!1O!V+7vJPk(?0;Z~El?*O|DrQdFno*P_~rV>6DOL5%V&;Ds~z zDTkPdib0wmg00OF`@tvhA=uk|7d-JAxSA z<~>0ob$Nb%y|k^N7CUKb$PgmM9`Weg0pr#JkI@8wiv4gDC7_!#KdkQ1Tl=C9;5QF+ zQ|+BWzi%GntcuzG+rKRWBqlz|@m~eZ5DAvDy(mT^ttL}45?*b^NS4S*&d=VQFN=}z z;cdZ41X8b$u8)2>x;i-o-j^>W1E2U;9hraowggE}U)sN&zdL!g!Q(Qh^rult+*}+OoAh zF50i$hXGtI*rhDkileg4_#}o-6~^~ zO3r!E?UF2l_|+EZc5xboFazG&7mFI-yuTKD5pU&~cHlSK0nh~rQreOxWp7jZp(Mnb zkS!LLxvm@#{UCrT>qLN(ghyD$-b|~Hn>ttP?)zMKSLbgpm$FOJY0$hyGIWm5FHf$_ z&5@bj>Hm&V1~JhFyq6?+4br1(e>&1Sw&@@so^N6nl*_68FyL1I(q%? z^z8Qi)yd`A(YuohAj$`>RB>6lK{Y9vDP1W9i)UcM?omy6ZtR#qY+Eom>kINM2Hh^Z zjL_}om~%S^?Z0`4<_As4mmj!7aQNrH{CQ`Cc6>vAVDsmjx50D?<_@W`Pua^W6lb8` zOyOdnCJWV>XfclEzJ8x5_oLawDRvSu9YaqMCW8#F%-_pk?Ne$Cmag#Si*@alosu2C zGEdFau?jzVO45NkI1`^5naP(gyrK*%Uvs03-RYv};9ftEV-c)fL!tm=xL>nVBIZl1 zz8iOCIgYO(;WwZz{|-`wVwk-I1Y(A@dIkKkAH{r>Cr-VI1G^R#L#e-^gnLJtXnyi*YK9(MohJG=cQ9Te-Xez~0(=ezf1THC+#OJ63kt#5p3*O7mmi(&Glqxz1P z-K`eDjAN5WzGt?W4wT`w=|lUQYr|GI*Nk)2`fF=DJDdBSf~=L7cW?Ca_)}bU3r#L| z@o$U!XI2f@&9gj<6NGVGi^JbAjz=hjufhmZM)JrwId8+^PcaXvVwp>bYT3^MQ@fBjY<;KB z1*5o)I3JwZt_@Z}n(fY@1x>%~rB}u!Sq3@U=ZND9P5> zjivnk+-S7-(DHRg=dQ?$sRd@x;TTIfZM?)7+i>8J;%!KX*lVH2r^XZ+EYx|L-B%;?Bz57I2Bz1xmHcAaE~+fdL6P3)MZ*Q0k%=&TcKbX7PuvWx$b)$MYA}Gu~nSJ z*e>3n2MfFwrU&cr6dh;QgPqXk)Pqf!v+2PO7&Ga?4mdOF!4;5Z)PqfEGX=e|VDQ;3 zAhcJ1OF&4B1rR#>X94n^#@?~Hy+c!V@$XtqRYla{G*>T`g38IL-cyoRDxWpFYNMVz zui7a_Z~sRaoxGOBEr2{d5wg#m2r>yL#nWq7z5`mnv8WIem8=Qt% zz3#%tby1p&22J#RR;|T=G*jTuGK5)TewLxkrdzn-%%)kmdqx*Ig{3CT^sw?QcB&^& zD$|=RtRj?VIgDmmem5w^zbRVHc+#{m;hYb{{Gz$JfiFie*EaBsXMak*~Fit03QddZ~k|A|SGl}XY0JBKy1`t8&>1Asj z%6BOa8_P%}U6iBMB={~|Y-QA%UureBo#hCv1t)(hnbj%(!6Zykl#q>EKMXU7F~oC( ze{anHx4U;xivPa3y^{Zy@h~QGBE}nZfg136a{tNs(^JqKDgR^=x2nv4oXagD)1N4b zVK$Be$R*MGYtF6?Sl%-;C-bw6m0Ef{_?giCIzGKHmSLn!@$LX^CX@Cy3xlFoL+zk1DvOHV}l_G@+^Z1i6?ZEVRI#p?o0!!nS8La zKYA}jl13kVPDhl&=bEo(hy0Jkd8P$M*d=zVm~7 z5#@pkwv3vx8^!J*N>G+9D**}lCEs+^Z@PEzK?sXILQ{?zCK}?z&jygtxv8CX>IL-7 zvK$hf)=Y^3T4k%PsPEVXDJV0xd4bj|uwG6>+p*~B2!Ags(+A;v#KqJ4Ez)!vR|F5R~pUGw$xANz#f^)Qgom_*1BZn#F@h%K8`63)}Gjd6mFM{qMle|Gv4k zx3d2&<#F==g(-oYYyQZZpwWYsI=E5?SL)zO9sIGkeB*KN|5D&d2+aCEl>x?n9EB`g z>ca2;?{4qd@&C5z=hgndghy~jKHfkLIQXE(doDS^o=Cl79w~vKcK5H_)d>Ou90X+O z6PdLNv&~+%P1&sI6whXnXS98k^jgUQwLO?Y%VXhJwOyKTM>0k-ST}VsDt&l0SrBYZtEy3SLH-Fy*So*LgMH+FL#M@LNQoRUV6$SMNEf8@m)rY8K<&>35MaL(llN}4j^Ec3gH7_Ls+9WHfQmmcfJ z*uq<+3NA^#f*8G!1+(TGWm$Tjvez208xSR~5wDiNo#+jG0w4Uz{HO^))1$SLvA^rb zDgU#y4HtPFb1(FbTOJjj@A(VA|GmApTe|Amub4hf zLO(YTdX_O|1{2^jz;py&MYjRkxV2FN>iW}K1!yoF7WbY95hmH>O1Unpgz3sHKPN-F z=iTk^!X!W;mt{prKv+m7Gu#LD2yh!d_ZjE?{NKxN4hZ`SIY$k78Mw{m`LP zdU~9!H8QC}{ddUv?j)k>-kQUzgSt9kmMO(L>6s*4E_U4uIOH> zUjad^%wzlPFY;-(|IcInYxe)x-!H}g++FSe%XyZv|IcCcdj>%4-@zF3ot*z&xt9ar zCkY~4QRFqW7d6!$Pga=ITxe_DrLB=`Lz31Diuy_?xfwuX3YNL|7O2=jBSRX(K?P&w{ z5#JOf(8hvUxlC}&SBu^JKN(~YaM|FLDP%i6?W(@` z#BamO42A2}nB*jidqrun+Z7^mgYQcZcmj9&Pf;!K;}~Wh@J{)Fc;NqM@6DUr#<9iG z-{1KZC|;+ol^e^J*E_D~n&)gnra9KI67Wd1I#t|$27Z|pV2pE8fN+AsTUw7<;mkvND$Q~{h55Z>@IgOQEHmnB znV$%H#9+m=K zU!buU+h4fsRSem$Qms~at39X=%3_7dJ_8;}YN*?}_>Qfz9eT=9PSKC$l(T-So_hXo zUhpm|0yOad!<}8n|C<(H^Zyk*n%aX18_AeUs*={Gd1=7MgC~|`yOs1{E~5UeC?&*# z2{PuPle!>~L~dtLA)QzXNM>GE^^MF!$vOiks*CkSiyBdF@==N!+t0v15SYL@0_Cxh zo3^A$d=Ex|o^CMVsjO|btROo9n>F2iqm2;ojTr;JqU_l`f0W}magRV&Te3^51&!y_ za&e=!bI)u_j1^}szQ*(u76(yV!1SO+S1$U3NfA`Q>@rSi9ot6Y<3(+8uUX)eW7Mk% z{wycc75?UQvLKO}jYTXKv?0Ao&%TnH1N(JLx`Oa4Lc5TFJWXEE=gjyrj z+}CA9-$!S%%rE= zUvcjD-1?ThwbKo7Tl+5nYdlY^#LvJV=Whqu7|s7Cy*)3mhl0p zR7Z<~j<;%+mLf)pjgifpLT_kfj(V{{GocfGfgz7sfN1yn@FOOO%03%LDX*fRgN=E^ zIJfMx8j&EVdJ)3Y4bsyKW)u@ zxp$|Dy?qu#Lf$&pd^k*e7I{u3ORO~{N7_bEgj=LYvy95xZI5<#FAPm|9^*G1EaEdUae=m+ut=vcBd%*3Yope<#Dh29 zv9_jYyR9e}@2=URWMXe&7ef+_lcARAv@`lx7}muYa^Cy1h1@bS0{V4fwI z!D8ZfziP7vS?#7pShbl&=ZoTl_uYCg%ih{?=(sG>g#`CEU32GD9IA8~%spRF$D0 z6jWwki!gU>+SF(}x^~(?DEL}PDy*!cg&g5k$lk~p0xx4onsDnup$~m_gDwIk?ls~@ zsTyr!;88Aj$2Y^ZPTM?0&F!sTX|3NkoR0x4K#U+M*nD!I0Gt5J@JI{bG8_)=8wnAz zV`x{ZK-aM1qM;)Vv%6!>HaaSrkf`7+{X#;U?c_4qPM8yfu5gYVv0qv#EJ>#Q;EI?t zuZ0;!VGDb$j}xlr)@-7%B)xhz!KFPvY7~$4lgfIep`^&~nft5{d(||~l=rI0TWevj zC8B-ME+O_+E%5fD-vhwiMhL6}yj~FO0pRu`Vat2RjS%ICpo3UZ6pfEJ;W z1T4@wAv1Q96~;4Cp!}@-WSPuwq**~OxxXT7bIZNIPcu%LbQoNuvdhPUmG*?)lHHsz z>lKloNWEoUbVLargPQ_usy3L$X#hrDDHAi$(PSP$o(L-Hq#q3z1LK1Lros$Fqw_q(Pd-C&(}(64&h*wWLK>ABokcst$oj?oN0vf~q;n@HEfP9S+% z-UFAPy%F>TKx}PFOA`5Rt9O$iVBRrXdT`ONUA}`6NrO=k7wY8ju*ZtzYpo55&X`Ih zpRlY^j`(<*M0!^h7T+>T%LEeUsw!&)qI@s_n;X`uu}Q=BGw_P;P%M+%F(bJg!RTJI zkdQ4q7TEM`r!A>wiSM104x-G=*EiB}3V^EHKZVKYvd&_b> zhXvZYMfY2|D7KZQF%GF1aT?#jdlLA>PKR(Wx{x%~wq8;FEg8n(+GDu#s1J<*W)*$A zjV~0NzqZA$S7;qzZ6ATZ9zyS}+nV>U{^`K~C+QSr@CJ1@1#7VX8XY-Zll zc{-DAxeEGc{<7s-GOh}3xrY|{N&V#)0Ln`lcHC6ef;$}DAou#m&r6;ugwVa+{K(>3vtPNjig|=8UPQMvDA7?bIu#)rbktd%1@;~8S0j~2O+D+z^{aHV zXsqXE$l&CH)H|+BQ2|-VJ?6WT!4NHwsK%p{9XK;Z@n{5Fq_Z@9N`_<}vcQXcoD8`X z>V|Jmg&NlEwe@5Tgw`CmmM$`&|3$T z+{>03>G!wH%_3CIn>?LmtwfL7&RH`uMrB3M6=AVUqKoj&#My@3Vd3orU~_1AEY+`R zX=JU3CWToxyq#U6JV6B_L!55ogcL9d(aBTtJWHctjK?Uv4`T#y0yZ<0Phog0 zQyi$7h%AjN%(F|_v`8(qceeCt$4|+i0UUYB7l2{K<=zqq&(dg%s6Y!PxHe(eCBNlo zx#aP3)fc+en?njYzD>TeZ11yN24-aqHzi|wV%_~%;zl?lMLKoBbL{$C)GIrgTkqQr zS*^5+p)=lbE93Fb^-M?Zo^w&r^iJBvc!zpx4@wMn$nI<(aKOV`bPvRsMQ6Q@yY}L( zR~@MLJk(hQ+Wp}Cq&4C5Y9YB1*RZ?wmKP$u-_}-L)x^`UMs3=vzHxGAD}Tkl#%?s) z*8Qpiq+T$h?dY1hudMtac)6W-Fbb~%te)8lDu)X+t)c7&xzi6xv>qc#Hf3pJO?iuC zUX50$s4^O?pZE&pdI$Y)kwY}bw|(b-8}08o@jrLh`M+26bY@v%74)zE6%E%iF<%=2>s$A@j>eT4-#3@)$a+kl5mfbCS89l~dQ1k{zQH<_j&b=TU zgUt;VU+gT+Nn=SqqF1z4+Y(O=TjAXb*K`x7*DwZwTvCpH+5y%L`NZ2$XmM&-E$ZMl zHl`J>Y0`_U#~XJI1OR!SoLkRMU)TqjdlHS3nj7y zo7L7~m&Pub^Mavb?YP@tH`aq}lOcfIZyvw0-@>JDn1Jx_nly&)7j%JuIW@D030fXs3P?huI5q~K8iqFLsFl1cXw zLfOmDGfGsZGgADP;LpY?7+AmB$@pjK^qS@LmfKffKhn1$nq@Jw3?Ux#c)io6>xz1N z>^aKu_&&^|I`uyL9B7DEw7i6ao{7kFkfSX~ z2)^NIb>=X~bo*8qfqMXRUkzEyuJX{Wd(x)1S1-8z3|!DzVi?{+5twCl2o=Xies*-> za6nbJ*i-Wc%3qS*OZkfP4`!Y1XW)$GCj$_WDZ7{AYl|@(=B84}JSTSu+`**qgd}&D zsOfU!emA3;aaRTHQmq_Fcdw;!nonU-G;bL>4LIW1swKQ{b<75VZ!tqqVi^-~gXbvW zLETwUUUv=Cb}MJb?)Id*c-5L@@#Vch75P0VQZU9z1h5Y@rl&Cacc2@mv&19DTiE4} z^zH)iDuP)wJ-)QnV7+Q#iag%G{k5LSln`*YtI`u0-~>!(ae=cKl_(=a@bU{~Ik<@L z0by?Q_u!-Yeif8}+UjHPyg2x?Y|hB!-of(n5PLQ1FTo5sipDOwmhbOtR-KVkT|)f6I$XCQq1iUT%VB^9z4(mKe}Z z*lQu~`8pd^z4od(+lYWVNp2+qdi(FrLYglYmCz%!F6Mo6p3Vy9QJ@4;{VLZl9k-sw z{@~NlYrt1Oi&YCS&9y^+nuqAa>&r3}hIZnsJs$Kmwjw58vy}(AnRE4Qov-BY;f^XpS zEG-Z%?iwMpJoD}Q=Bm-5zb$FdY{J28mA&QXC@;b0jzOnc_B(%D4>tGxj<&Av&CX<8 zK3-`-q~^Ra|1dgHTRGiBuue|#U{3@6M_+hY>GPyO`51<15oxf2{_pSZ*zrI14)@ma zKUVUHaA7aSJOee+4MJg-Mwb~1d*KSsBD+W42K(5U=5U}Q+#>0+MM zvNCCemT7{P<-eq65+^t1U74trrBN5Q)i}1k&FC=gXo{Qq%TzVml z(Mub8?NBbRd$sWXr*TYiNKgSF*Oya-v7Q{WgP~o~(is}VFm>?8Cq57ptd}uCHf(9G zKuaPziTtO?by^QD%UdWesO|g>Wnf_4IZ-Y}ySSqo?PHjUh&ssZh_2H);>s2=Mj8F9 z-4OLrxLNd;1Gz!R#cQ*h66Z`#N-Of`hZ=yX#lr zvaRS|!vBg24cpiEfMhW)3Q1G&D_MOLf7udJ(-xJdwsr=d3whqm@dkams7;*6-Urs&a<5AD)#F)|{6i(OypCbcrIL9kuGFQ0hk2TY{y+u=a+jOC z+A2aSd-e>UgFBHixE$wmieIkuU^GEzU?()^Y%d0)G>Gb>i#%=~Ei=gafaYCa3(D2Y(+75Sl|eKpPMwQqy<)li40)&5^n1>Cs*cSrX9 z&)(iT{?|&Ls{J2xm2l^+uj^=g+4Zs10-771zh3Y4WuJ!qUs~xs-2Kn){_c)_|8q3j zS?~W#H) z`ZDYGtE&}=U4M&R^~JHU!^mM0ol@@bb~XhEx)sEqd5_mU&HMl1?Z5VpT>G!1wfw)5 zr{4an=dHh}?Uz=y#o?iwlZFggtmn&=VTolSrfkr>M5Vu2j1areD>Lbx2&}C z`u~A>fmz-a^Z1Cez7;Ql_jUpT`MoAV#D)qjsR8i8Pn}n}T zAqLysfB*i(2*Ansf`DMn2b`yY{&U6LGQ_`y{%7aN(f{o3t?hqT@(BGeon->LuK{#&hV6|U;iR5o}Q03fh+=B1l8O?R0(JEow zwA|3fYg%q-A2x0)EjAWZ0&pa`Q}lqCIYEHB9fd!P`D1XQg!sfgDF%VKev+NTV z-vKGj!%NfcA^0#sEII9cI+G%RFkF;+@4Ga=jZ@gk%-bGY*JG+o^)u9dI)#+6srFOS zWyz4V`Wt4kuV1y~Bf=L+FE03yQ%fDIdh&l#2x)eM@~3WCpW=Fa8t8u+mwt&eU=#g6 zIB@9yXtehKS;@m=2#NUyWitL=D1Q4aZ)FB0ao5MyPGy1PCqNuZj~NLUryJ?Y!>p*M zFdIGry6GY>s|)$Q3KUjeQg`&xigYkwE?$@s$w1;Hm0jVFCezfl}IIY^UBlJP=$WBaN`k$rI z_9r+i(l_ZWDTG__X&BO9AJSXYkr_16|3gpy_tEZ}{;%RO>_6$0Pb;Q;8HPXw@4B|V zdc4Yj_N8|xC)$<1okN{}aKWFucQP`sS<)0K;JQ9m_acpkEoA@ZLG^uCrFt_%bSht< z1Q!^__}{2Z_Ze^_o&cm-$<@nCA1i3OWdM|=(YuTre$)-rx*;l|be&3Dwpiovq=Mix z{auzu|4G`7O?PbMx0(wNs$)|%w|8Z;Kgutvn*IypxutJ^8tMPx&d9$1IXv1sTGRhk zJO=$glT*Gdu~%#7(NcD81bvfnJcT#t-Sxj170=V@|By5Rn>8vFwGmm(OO@ZTbDmm5 zNZlw-@iZE0!o2oTRQV=4>n%*T}zwG(j7`14s(>H1Q%(3ue~hb zjn=@$ERHYI7>7LEO<62cA9(4axOadlihC{91!uafFexIOIK|mpe+6~v)C#}!B}{6w z6;y5`p6GeNyA=%`D_%AP-#~(s2qgvBcb#*)0t)k+7P{OfC}}H;fT%Cx;S>=<=NlFi zF`?zhH{~}Tny7oT`bu#dE*DsR)2)!ItXG!DY-tGdP%9uy^P-0(z?yk5Am?d3n<93e zT^>}ev91ueLTH{|qh&Cv0kXRgwsJ($SspG0gus<*suiL*X+_~I$Hl#HIXLcsI;(0w zIMiU&lWVY+$7v2ok>)tL0VtXOCjle{n7f}`Q)vZ-w)fB$-J+*GQ4ftq3Q>A{Th?rR;j(NW=ZwR zTF2p7KmVuQ`TsJ5cT1@On(RN14qX5Lo%Q*DB@aL2%c)+<(8D-3i$(MJ&;M#5J*xrQ z34$yF+wbl*Y8OtinU7*h})BPk@o-N2WM4aS196EB)C} zN^BTe)2wlO%WK9>76ff-TfsBEkqcY4bHR}ow22&8)rMi{WqROfZqR2kA(Xt^pxe}v z_n-4!e|-<6ROuvn@&XaUIGj-u7rnatHBV=m|H8m2X0NG*m7@M#tZI0~y`2^oyDbE~ zYW^QB?C)zo4gCLLf5-O!J2=>1^Z%7RhW`J>+e;wSTri0Mk4?C&NDx&-@O=zYK$JXy z%VEYbe0&0evv@`dl)u6`Da_C+9QDU1r3zrdYhG`l673!~N{E01W)2;7$ohT`iQZGF!f13*r=jE4-#~o(rMZ@hxhr)Z>JnxgAp>uq7tQ;Az?E<(2|(~RO_1$p zYdQwW*_Qp)nX#1?Y-({!`!x{&`r}jLCfd?svX;Gwjw?;`wx5B2&;=#n6Oprv6wo2D ztRT1Oo-kj59DSbQyiDN#Rm=OzYjZr5amH$t4F`;fNTl%G-PE~JnJQA%D8D?+ zv}>huqlnQAHI%4#0vqbLM3iWpkK))0eC=t^!R1ZC<2VfmV6Qy}!8Fa8mv#a^?p^7K z)H=Je%_>DlJ`}PSTHRwO_O`fT+me2BL&K?{)r5F(qwrXVn8U>ob7&w&_S6|Gvf`>x zB9|JgAbwQ#O?y`t`V0nsLU!QLIvUQY)KGq6KaV|w@VG zy~fGy!pFfz|Bu5%TmO5ozmEU1lE*mzxl_LE;m>XH(Vhi;L+Sfy=$U|(oBFyiSdz5| z$XZKZPx;l@_bxb+RxQ;W9x4j|oE)c`{?lXCX^bI3%jyA}?*DcU_ni1IYx=*M$Dsf8 z5DUbdFH8Bg<@0DszA=X0y*UJ)od7QV>-e;BSZ)pC<%8?J zyY~5SZU4EV$EE-BcDV;0PtpKjC z*T5WT8-GsbP*49a&R_f(`G0R`t^ZreMWU)~D5iT)qD^#5p`|7A6gOaIxN zuQ`BN{13weIF4N|z@4dTJx~6osyif-zdiv)K0|HD^@DI32E@R=r)g8kx<{!RQr$Jh z197B^G1ZmsYcNLD2jE}z^gn@9mic!%7SKfhcXyoo|GhQ+U(Msu|G+8ggZy)s#z##5 z`2Ze*{7YBXAZX=yqN+F)UwEc=Nc_9uZLFP7ttXtb@LQFQ*2MZXJ6=oSKgm-~|5fa? zOBCj)c)0lQyPo*(I|u9huPb>B`hQNR9MCxjeA2;dOp0ZhfwhnxEl+U9(KlOs4dpL=lJTfjsmPS>G zs}Cd5)3CgDeYJ-$vGJ_7%^0ShxQ{=-m{Y_56I`725(BD%{~zt`+wq@9qrG+hmz6x~ z=Ap+RP`;J(c)7lJFuk*Wy%+9w&d>z{a!(304H&o4$h-duXglr8k^;tY+v2nACWjH? z#f_*^EM>IrD=%Rd;FLY7M$GzCl;5Dp9KY`%Y+=cz&us!*Ih`3?U_(kNv}jXQE5Wdx zcm@^GujFffU{^nlbGy!CPsasauUQOm0j^P)P7#$mcsI`(|ApW>O=FvxN(X$|1CONO z@=*;ST_tI9WTPRbudZ#W)M&fBwvzW!#;+sIR&j{d>9zEJe+KbjRjt$!8N zNd;nTs$-d?kIkMBoQ7CqrC?_^$@foF(1OY_@sV^31tEGg0jY{-(02qkbL=B5gps9 zu>A~t5JCz-Y;zF63-hv^%|`&uQNjqDAUG``6(PAPz;l!!Qo6K>MgmUvoF!k^R*qnV z`)Z6zvBfN_ZR$}((=!+#KhhPcaFiPB3+x(-EVXRC+JI4U)e@*!lo(5ds3(Bh@M`OE zLMRWQR@ZtIzt)$2`jx3netJ&Mxg2FQV@p1jLse3k6Gi9Yq82VW-ru;ixZrqAS@Y)_ zZ~IXQS$fd&zNV)kECn)?`hO(AKfl`Lr+KRNKS>&?Ttg3g|9`YMvhV-*N9+6ll|07% z&)YOYKq99Dq(?0G8}uWecu3E6xfW z4@r?`r*W*G5m{JC`-Bs`fM}W~mx%JJ@86#UOgHcalL99LPs+b>D^u??y~4a>;5H5)4-v2c->atobl%MKz{AA<8totK+WCKX z4)@ph|0{V6`hSr|K+ZW3lfEn)XwJy=I5>ebj-Hu;q!bnbx4NaE7-WF!JL$yvwVa;% zSCx@(yEB~)fbBw8Og`7sx13!+|z#vKc$} z)Gv9J@@zPPM+4kg1lr9`lMJD>XKdm;cVmrH>455ML@1uEfieYJ zOb^3>k01xWmTu8K#dq0IFmUYEH{B~CPe5fC@@88beL`#RlBoRF&_SA)#xrc4HJ0}p z(bU_}Y&HY&jp@3*RyDQ5b)~f$0~e*jUj(OZF4go_oT+9px?Mal;g}N<&rP3BU25T~ zyZ@@_)kl2X*{$}aXqJ>+hW7^EB0y$20!hk(Xn~-Z;N*q`EW9}r8Y*Jv(+$ zGhJcYEy=bmF{vAq?s`&jB|88nPoUVe;T*y^PVX*qJjXG*K`%)NW1c14Et<(vk>_Iw zGkA?-Twp|oFpAVJ-ei)lQ$9y9dY8oa@6)t+g=553--F8Hv*eV#O%qytP_`WxV6&ny zT@2tGz)3Lxqd{#^ej!zs-RjGoOVC{^Nm^zZ){T=Uk_Kd!Wigtfq<}G(0t2uarb!5m zf< z8R2gU{@hS-P?rzHI`e&Wt23LB37jL4ChD`ezX>Z0 zx+s+;hE%~B!l^HvxRg`;b{Xy%d`c;|)EV0+o*Y{(2dvkx9=tyl(`kGM?@0iHcZ~PH z!DI@Ha8jRYsbL7MQZU&h*Eg1hQ!>>9Xj9$q-=Bz5?CQY3`#E(TPT?&&Pl|W>+cd41 z^RhX;Q=Xxy0dtmWuAcLK|Ng{%>qIQp0u^@|*svy!vAA#XbPhgVJ@Hj>ha;#KZHE7O z+$ffKhGneJp~vX3X$R3NR{$sAqX6S7sGxUdS3KTzx4u}Nrq0A{)#d)N()Udqwd~Mp${r({Hs|((u zIlD~P)CR90j%WFUBxg28$E2GX}AAbMzf^jk~_uts5WTM5Ar69oE(?tBc= z1YDk-zJ56z4y}v32_%0YS7VC{f}3o{-Q)w_FYRReCYuEVOQ1rZ6=;re z$M!QYDT<67Z*Sk=VlumCtLQMKQXAIoiIC)9dY>>v6bqFgiR8_r`xYxE{gl z{SfZMzZ{PC5C1Y6kM{R=_M+=uv`z9*s~j1BXYuR?CuI9}c8&4`6^ML_aWea|Ju7fb zhS~jpydE8zx5?UC5`(R~oU2+vKbotppSDl6{71qGie@plhI>f;&uDLd-`4*eto?sh z^BD5qrJV9!WItm8JzBxf8b#k6PBs7VDt}`nmZ_?OVs+~NUcoUct+`SAr-uHcoY{MZ zVLD5SWtc$I`G0S;Z=e4U_SX9Ul{_Z>=Ti>EocF^8oMrTQS%GILz4HU8?tjGz-{^yX zK4Y_Ud;)g#x@K@_6Ih?4oK?c0z;uEoAdALkld##QgnF-4(aKc+ZiMRc+lHQUz+npI zdD-f+mpIf`n~g4VVqQ-)@GHvj$vpuuibm$Ut%nLuT{D;kV^nu&u^oasph&Oq(}k|? zYaLV!v5md+O<^`SYIBzZ3ouOyEqrN`4Nh1gA^0ZY@z@|k(#NOdY6yOr72xC3`4zZB zd0DC|?4b@;-F1&Z;#$sI{;84wCNM`Ac^V?F<0Bai7ZU-S&i{vdcKnag?%v^A{#(Uk z%71jqftYikCVgoU(6^EvuN3GXP49xBubb5;j`f0Jx#amltxYQHuhK!+uy{hhrAE}Y zy*lPqS^h`xvTFKYpnQrG=J@+-4nuT-a?Cbhg${Pb5Xl-PRlm9T^w`k%%qhhiBll>xkg{vYh@IQM^hyKDNt zlEdU4cFJafm&^H;^8h11OJpdusx-&Js+J}~8yM!l8qiSG$qbyBruf74HZf73+W$0J~%3E}=)uq2$RpaihWkvqGRaG<| z(SfVq%Xgqa8{sz z{w+;a0uWr}XpD00m9t7&j25wTHq9j~-pc;`GuyCUdEJhYA7qE}ua--dLGMN@DYyDy zU=5L#em6GCNSxw?r)Mh;_X7}&;}p`r1`A=qAukdk5G1qdHOh5t%&$zKox!uznsQC? zI239zYehMyp_G`tyhS2rg?eLOiRjhD+_U%mZ(dn{Uss>+B=))tXiyP^!o4|LWL|jN z4yHNS8oBqcq_2-EGwJ$S#Z!0w%hEW#xxdVE1f#PwAw>>xQV`JfIM`_avv2$V?Cu_| z?LSxY80Ww0DPR6LSkdw$J{(q#sPCg_-Ej(Nmi;ArQg@z$gMFow5L= zIO3N~Fi&Sm1P~_29%JtP zpW&&N|K@2to1$fP|No~={{KVE{%3T!f4I*7wvxw?|9o;J)EMg{NsWl3B&FBd#o`Z0L!dnWaz@zH3$_%_}4%6I+E<>T~B)n;1Id6q1 z)(M6ds@QBt#p0n9!BtaB&14NAu2+DCRafCzk&1_ zYZ%_X5J5?FzEvhxw^s)G41#PP2BK3BZD=883|R{;gF0k-UZHQG$nn%TL^!Lcq=*4a zF$0UqlHiujtN>=2qHQUNWg{zqS4%Iq6v$dTD}cJpf43CSWiu;)IT@2B!DTJ108&gs zf|rC^r7Ov zAMEYe_WwKkqqYCnN*+W1bH=9n4a|fls2@d8EjRvw8X*B)C#8@+mY%gk(m`H3MU;Ae zLoFhbcKA*C zQKOskD>am^N-h5yZB;q{P7XMxsVYbA%kC%EB}K{&a*t7}aeV^3)@+;FQW+S(_ynW56+0&_`(?S)$4%p?Z~OzaVMD zD%&e9Jl~@m^yLjK!U+ie@5i03zg&IY|Gp8ZqP?Jz<&eBalmv{^d27Hw75$1=Tgn8N z#cjLQ0_*}+i#Ai1VUW3n{A6o=r0e-$^Qbi>-(ggJ^BqN{oIZi%B1dEV1q9nc*`7C7Z-r1)0$!wm=SgCc0i-g~ z9n2#@Vn`<7<955DDeK+|%wMpwx;<)9-21ZAY*bFWFfO63F+&o)*)99VutbNF1-BzK z-)6~_Y0ZI#bLS4zT42GM>dHdo2Hh!xf{LyOTz zH@vW_oe=X&+1YZKagzPuoZVjEzst{Z1es5qdKZA;6^@biiT(^gaG8d;EG3XWVFr*M zV`ph^l!Xr-vJo!ND>=2Ca_3lJU_gAOAer^_uRoU< z+bsXdYsm-9|FeJKqY=Ji}aFd068p< zYx4%zXff^@Y+laBWBdh092+mUFSb8y|GNEV`|n^2pqn8W{W^FK>{5990&jo7+rQ%N zH+cK+Se3=J@I?%90?v~H-Jl%c1YF-2RQBLyc6Rq^p_gB>G(kxrU+?Xs!+|X`RP)l3 zlhQGkIy=Eb>3Schah%>!Jjen2IIF@2M^>GPq8W>dr53zFQzn1-7L9$^Q6}bz@e~(i zIAxWab)cfN%>+3eFCu#ICTyYOpTR$a=YThBA&Ck1k`PGoUO+Mci%K41glVn@#SzCo z%HEFk9U;q!5%XWX8}o}#+*DgryrX}=rt`oX&_7j7y$Kljx;DCaluxt#CuP_NlmB)P z*7DyEdkpzc9dmk>|7t8=ADjGF4rQ(STUPa_>C^sr%D?8ptyMc~)y_}wH1mIEJN=OP z{|Hxka*L;f?WF+ zw&Tadl`mN6hF6z%@D%i=*bhMPWlRDPB*mCmC-Du@)^UaI$kp;N79?sJy)I@>$6LCx zkkS;*_AR%<=Fd%?lVWH1m1`&LC@Mz7it*IazE8eoi{}?}=sTKoifB z4zijCPCRP|j##DfEMa$qJ^(B`N5_iMfswT)1XlW|TJqn3i04-$6vA0CxkTJa+heNA zzQ4dEOy?-SuP|nHhoQG>fU18m{8C*cRW@9L<1}4<@-|M#-A;yMy>S6fU-HV9tYK@} zMrJj{FJm>7k)QbKn)z+;FO0;Owrg7opv>y|8~8j+3j`YPf~9rg=cHzIber0Pif6or zpF2-boS}R;g}3NDDcG>lyFM?v{ed*yo>)Y)BF%ME zPvfQ5&oUhe79$GsUoD0peufj6otArtFJFB#S>@D5C`*=m!{mf%Znm`H-(yn8&Rler z!$t3Q^>%bAsWoQZzDMI@Wd~7iV-2Rqdp!EXKh5XAWc) z{(JlCvftC6-$(qho&DG-9{%K)Evi?|luk7nlV*)$R-sGH96f5S8a3;vLd`m;Puq;c zgF%AwIm#EpA+OrdduwH5GA6d3G1GL6yfd$0Cx)O49uLYYo9VxbMDRfV-=m|QgOTI^ zy|>o?t>iK2znbcPxj@f83AHsMuS_wwnQeZ|e~4U92YkrU09=&Nsl~;C%xzN(Nd=_Ey_IP2zi|#TJb* z-FAj@=A6nL_ca2*30ajtg05BI9uqczW1JH^2mQvpjA&{E6^8^<)~aY%2~k{qZPU!2|SZnEf;P9Pw`_zRuYiG zS%g{t0yz1*QlIV)-DuC9PSLRQL1)$$t2SZ{7&xptVlS{O3|iRVZt#Q#=H(WW`brqD zm`I=w2r^6C6lUCURWC`GMWt{pps5k2t;NeDXDoEHOlw~G;q$6#v{GD7Q-L~k5%rt_ zR0^nLjN<4$8V4Yd4hpa2t3kQIguKVZt5Qbt3{Q@qez9Y4EVOx*L|2IgXA5juo1lcn zcfF-iVb+(15?g*PM<&bgKfKPdZAYqFxB@eFRR1U&Z#{ko0|3Z2jt!VNxiLooGyFRR zvb?=xv`oFNxgGTOEc(81r@(_W?|q{Xj?7tcR%gxZ*ky-dniLQxC^tgOb)6}r6*XIS zXA8`lb5N=oihQx~C}abD4nV!I+bWlz{9>(%>hbv&n=u1TEt!*EwRWwA<}?F>2+uJ| zb3-H-@Ax^~-@Pc(7~sbgt6TFoIYHX|*j{i<*rtcrA^2rhfH6xw41pS>kze$b2=0 ziHZw)8OYN_^@UQ|``Vk^Rs9701xp!V1Fl8Y655wb41$Q05)m6k*Gyyj8MKF#!>YaJdi z{_nx=!J!lXcmHTj|5x!C^#77gb-yg2(xlJ)AZDB3vS>zps%oG*OI z*Jy^M!B79$UUv$M!IREYM+Wx=0y9c{#{ohI+cD{Rq3dl}O zzpE);^7Qut6JzxZ%f+LPf)%oSDV%TcKRA2Q4th@jh~YJg2|x1jzty==rK^1c08Em! zV7-d6+6!-mNF5{@KHMS8C^qKv-7hHu*W_;0)_2Pgo+ zX?zFo$!Q#?cY$*>H$s(dnhNki*+IjxuyHe052#}>%@Uwt2j_zgaa8sNp<-rmCH|&3 zIh{is!)xZ%H-%q*OQ3q8Pol7WxaIBgcDDQ`7#hjjFr{f7IwP!<)`}BbjO$^nMh8vC z3r&+mS%h5P6v&TH=T~*>oK75FKG%o`P!IUnY8QW#lw4~#C(yLSc83Ls5hR6SOW9## z>noAYcV%QD&sf$6fCqg1@_&xg92fUzF(hOO!CyR0_y0RPR{qD`(dcMrE&s3Lsh4EM zItb}Hct{zR$JV@Xnes)BD2aTX-l6adw}g{-~#3Z5$XC2 zpx6M<*-<;3pzxMZHbSfMTNA<#zf@9A?gcd?~z7?edra z$XAgCsdQI${G_ZPcUoia0i4!X(pkc6PTE#qdi1_KDQn*7A`9F(2tb!O0Ey=-EG;*J&Cfm<*mfYn`1%23Iwx`ES~m1Adz$3G{XHxGEpp48eo#{6_v}WYVPY(+q-Dp-xU3wn7{So|XrO|)t-O}es|BPzU8u^dR7@1#Q1Z=wh**~)Ve-4lK*8V>$c})GE znDHKUexk*-6zD-o&w`*UoXM{AgQ%d7n>qSC!#RqY#S}#cXaiRPVE+y(=xd@!qFSUA z+5qi@tI_K_hkx9=vl{xp?6tpon&|)0u6_PLTA%+{^lmJu$-|3+ZWLnvvY`v%Kb!^h+^Uz^kvZ4oCZI`oD^YEqv+s-wWjz z@gmwge01~g5Y4xA?kG$9Jv-$077WQVt_4)JhIr0AB2*!hFo-!3(Y(r{DvB4GWm%eA znTS01Yvz%F#lj12XV)lCP=Ux0r`zJ(vn9?wTZJChAJqC;L|XWm3iy4JIIUK#@&r|W z4Q%E%Jz>#pi0aMsT+lc`Dh6l7?d)NGZwK`EdJ~&H)(vLU=XuWJGI(56d{OV32BIeg zXBp3L(S6X$-v5tvtXV%Tp9=oZ2*UO!7)6+SNuQRqwX-bH!2b`9M*Ft^=jdo}&Hq>N z2>#C%Ut7!*G=BXH(58DiS%5V>obqP1R+}T4c^pHbUVlUT#VK4LIzuHFFuO7Bgxb`yH3S5^~c@QN3;mUuTL_ z<;mJKh`fo@YZ!xoO<8>H`V0Ci3`O}Nj3Q|wWX*tf;Qd6APf%e_o9uHqOYj`!1PzPv zHj84v#Rs{CS?U-A53bHY$61`h=oc8nBt-f7Ma?JI?odj9lA>rHqs-C4tp6NX?b%*s zQvAA3i%FZDbvSeETa{|#Z!n2sWc3I(2~KWeG-xonv}$=Q?;5?V%_e+ii?(>@Akjjf z7B-&s*T%Wpg2FYv^ebB^Vof7K`exIPcVn*{Wf$9Q5bK>D0ygDl?>0m3%B%|DU)@9> zQ)Gws?>BKhoqp1Y%vy( zXFxl2tt?-4?U)IWd|qB-%7kHf`+^79Q*K{!7_==eyNME%ZOBSMw)~t+Ug|f%M2Yv7 zM91J|kZ6FjcNWw<;>?AowD!fSlcW*y)llzkf%GK{?+RG|uITBC`m~@cAn`Gs2w95# zXp)NE$~Y;+-xWY=!)^m=S=01rjL4tn zg^0LMN6z1gKE!+3<2NwNG9>c*l@rZNX%qiVhU-*qYHoE}#pkMAkydU&^x1Q{^;S$& z;PoqHw=Bk7nmDY~Uuah=vO0^eExS{iDmyD=-KlztleZdKVhgQ8QKXgh3~Mviho!f> z*dewYB0s%O@XbUfy#Dxfe&uAk*5Rw!naWaI77x4ybs;;EPa`!N8im;XmQ zd;5D%{)eN{TK-?fW61w~8GvvxdN~V_wnqQ}>_dR0!~A_q+YT4xp2hzahw1du^i>At z+#vJt!+mB1b2{TG>CP_#5WLp3d4a~WLGbcRf${{#JUN8=d46HXdvegp(xO&IcH$W; zC0N~&$IL05piMO~n^aeoRvkXPmG*;DDDWgO@EY})h|@>so+0Z`kLLN&b8_^<>Kb91 zbHy5Kx9B}Z2a5?Zo|am#{AMUBB|9l;vL><`QL_$sJwK*w=gK42`ejQgn%mouD;#D~ zrP{%>1iWV&^IFA-g=*E(1EcCt*;CqSQe{iscBR$738-(0`9ke`t~jb>Roh?K-ZXyO zIcLan52{0k$kt%mDl-b&QDQc)J^J+mP#U!*906+D*!m&90CEa6cL4cn%k~J6AL^U} z6jq(+Ot{`XpOJ zkvyoP6n%Ilh@Kw6F`=9UuWy2!kgo0t7PX-iaAhQ?A@6{D2BD`3E*Y7Z30=+U&mf2VklInLR+4qlN}}A6megd?h8mzkh$CejIzE*gO!8>$?AuQpdHo3u@f|2X_4b zy@S2A|NlxJYyWH0+Xn^EntN0mpG-fJM_$NO$cBTI~ zdj+RBZX)@{(?I`s4-R&0`EO@`o&R+uk469G^!7pWWm}Jp%9n6IwAd$m@@1$T!|6pG zS=T&S3mD$&RQ-}UG+xrz0ZXAZM)`{wjO81l<||*-C%4o<5q)(h`{qbH(tFuy35b{A zn|*LfUxHp`aN#i|5e-pRx!L3~SeET~-U;G~SD6l`W3bu4|07;4{o;FW4zefcfCQS*v)u z^8ajh9b+UE@`Jj3n z{T>82L`Sp(@2#!w6my-XvB{aLz#LeoLamdNRt?k`FY1jw77F<1e!9|sf(XHBaylO4 z1Q+d&ferM3Z|Bga|NHy*8S*b4X2}AuJ^0}@*e-Je)#!M4Z$2I`mBA@&|;3Q zX=XT0bWSO(+AtK2nr1s5Lg!4aMJ=C`^;c=hcbF!1do14fxEb)ko>PD}H)h zUn|XvoR+x%uD4hH6fH}X*5LB!D!vTlS{%nIEDq_>5GU&2z%lYy&8Io{ag;sm48Z1% z_WQpN_jh*O+6%5yKDBBRtx1w=ScW6}xC6F00Ipx88n;5+_?ZtmI$67yqK5gZ{%M67?nSaq8(VzZ*73e7u%mHuQa+@QeEl9hcaCQgzm5M1IApm2aTP@w8N!GkK;aBX(cLKD^(7es_C* zp(&<^;2TJA5}~93yRJUJr5{Hx#}R>|5}qB<0fOar!*YEubt&iXdMzA0;-@43FE?ff z0ia3$f3&-2^Z(s-{*To>7XL53?fVq~%60Q7B>)}#zC?gE%l{Lx{Qk@zd*;Cl(*L(` ziu$tu-`zhvbnO4v@qbqHRM3AqzYoI!cyy9S%meiBDt%q`dUE*d-PQU``l5yCm06HF zV_x+@bwk^IvOJyYb)M)gD)*#Hcy$kjHJ@9G&pj$O_ajfXKP`*>sh^JgUk}3H8~;Dr z8#(-cwD$j7$z$<4XPMiYtxEdmA0(f1NqQ|q@|++aB(U-)2aeijV6X@j_I{7p3nZdhU2#p4OXDM5a~ zaGWK+Y9jzk+^xfMKE}t-|BEz-H)#743`0c7n>4C-@NRgT`2UV`|G%?ywC4XSc^JXD z`2CFTayHq3&Gs_KX}ro}JPsEl)_iE@>Lo2C(JaJO_^Cs`e51oh67Pl@4?ronRsP*UXg z&7PBTh3OuYE)WbluMZ^;Z^D3ol+jGqPuHiO|6>vod^Uj{f_;0Q2L8Xdb8uwm|2sH1 zSo8l?JoU$Iz7B?L84SY-%sS+)Xva4rQJaYfCd)CxRxt?RteD6M1v>R|qg>g=hcklm zL^q`q{g+w$86-iHMoLZ08c;O@p4n>X$=>WeXJu@ihRX*bUro89!h-{Q1(0lAjy%3q+T1m-r=slT$5SYLuiqUg1`fWC>|Hx5{AVFI&%eLleJewlsw;?VM_?y46 zimc~SMe&sU$5RscKoQvWePO88Kd`ydx;ib29AD20X%8u9&Escc^=27IiV3Z$$6?W` z{khp&J^d%s>lM)d1N;7eba=GR|FN2f-~Ye)r7!x=SIlFl{}dse>AxKMADaGeuZRIK z6M3WW?d_-Y?Wc2bxM^kygX)3?4;XMbk~Bh>1-wC*D9lmu9*sF9iFA1MgU<_)3<_w~ z-N$>5;o)2P`RC*{4fLP?aTY^DI=OrsPXqnmAMNei_FwD!-xWRD{qH58Y`|t4l=NUp zhF~qBpXxfe9bI=u(6bJ_=303B8KW`hW1vF;FcDx!AWhhiOuk5;X8;6S0mxA?%M${E z;5oRP;BW$_2qpyN=<^Jb0w*^Bf{Wjo!YZ8=Afz2=O~ zN)sUNd2izM8pcEX<&4h68J`^oeP!F=WlWH0l@B7vH#mW@8k}C2>(*EmJO+0NP$G^K z025&L_#D9a4&D>JWg7?^eP#=0SEY%XISH}}tPtQ_bnE4xm+)XQnDd00Zl$yb5JG}f znItVHIJtQO_!d+vMZtf30s?&@TB>LRP~$e+_;P&WW0G0{Q-f%Q(51_3!`qVs?gN{Ohu$XFl|a(W_3+UO9acppxw%I%=zl>-?eB8?OJDX7Cx$RTp5c+UCsM4i_~C^ zP0nJ2^%^Rm(#o~EKko{tQg`bU*$Psh;l$GO+5c>MX3UsL%|g}iKN@XzOtoMEPzh?6+ho?}FF1*83(kK)T)ay2S2!n>DU#WgrJ+5a zPEmwmJ-WHdh_;H88`^Mdl)E)82p7e>)9@m=*Py5cy3GW%<-_&#e@Vwb@if{09qt`C z_WwJ3Yx=*6hwFb(PB1A@5~7}b{<5+~gK-GmPpzWIRAsbP`v71oel!@ww_z(MfC|ui z=6M^%eP&R^Y#s(6n1@9G0>;8#U`i2_F$qAxtcL;+Oj1%@z+w`BfG|CE0D_RE3z@|i|ZL$ezC2gee2&n2Znd)mrr+~C#N1`YCvVo{~M6i>!a-F_U%|Ep{ z1E;b!CyFp(4s8^r(`$wCa7K!B+LR)xqF1e_dX7?sO|7v-IEjagXe};o;TXXJ^5{k0 zQ@pq2&|}TWrMRlWTXiJ@lx!E&o8Hw!bBi5~OKWIo-LBB^3HdutB7M>Q&UpG|0y8p6 z=_Xda7yQ#1mA5*qK6`{(w~MX7ieYzIg`)QwFuScpd+T%i$4eBWut;+&S2LrB)un5* zHCNI&qX~(UkCdmm*zn|Rt^ncd4|I`jEB~Dl{Pxx5gWUh^?K%1XM{D_SMGq72gv^Kf zHw5$ve?QzNWSY*B;$238BD@@X15*C#hnNjMuzE!XZ}2LoL11d9gT+hO^=N@UnYO4+7W1z914QPzNfMDBie?y1v3+UhjjTL6lQTkVKe}#|R z)ta*HXW+xT7w?Y2X&k3_AWh#GW(7t&e`Z!v&D>I0C5|XLcd}+Wq9pItoKX|W+5%d8 zEVq9;$bXk_et8)A?{MVWf9uz#jqy5jW9shOrXyc*~y%_Az4Sk&ZkniV*f2_?k5C{M}qY4q7vAo?nEbu1eV2)J)up!kcm z<^o>>x9DC!g@h;=xPGZDR|Wc94m>FG85J4$TLmGvcV+gr&Y5B!vJ(oE6kZ^dou%2m zR@KO7!4DzKq{~hfq7^6u`O&rmGD&lBs@hQIk-D2}FNW3g&^azuH_Z1A3ufVKSWMnL zEQSjB_Kig8-=oNn$$PD2a5Dd{BPu=kB*)D@G#Cf2nlHG{mHHtY;p|!=&GI6kq%xqw&hL@<#&bezH?7Xu; z0%7Cy^>Oegd}_~s**x6-lq?+gNj?qdzx^Fs|2I0?J6NCp zR`M9GKf7Blc%W}u;40jEQY4amaeloTZOzr`U3zYNA ztuzM&CYTf5pXzj3qDm6W%JZalnv{WohT2c7NY#P!tH@(FDNmR|U>V)e!JtTXq6J#n zdP>jo?T!}XSsaVAgbFRBfnRENxm)Tu&8MI|G#D8imp#kqBQg>Ku>?4}{<-uEtkFCR zqaaJ;>~~k>UV_bTgwxW4&^T^NAy=e#~L z*ytXQ(mB0a7YXSU;>0~;)PNHhU){#4Vn3PDnRq~~swE-)Qf&o8HCS^Wib8^0-xuhM zf_4MOc{=4Lm8Cl!NBdY){E*uhkk)WS!)mSk%!Z5gHf{{B#q;C`S3-E}2cM%Nm_IvukwD+NcCvF?%+D zbbhp^_3XG73t0>7f6%8{{-+1U2bKSK4|nYR4@Y}PJ8SuW6^}>$hqnBGnW3;J`M*Nz z@ObWh%0YCI%q#DCOmVJ@%=XonWJpt4mMwerl$r+ViI!>dxKXxVKD(=?;J^6&Ebyq5 zcG;{WZuP`q647d9bZ|ZyJm5APqZ+b<5-qy<_wP^2Un)t&&`KiVN<&TRz#c;#SKx+i z1G{-Pf?+MtZR9A9Wp#EmqIG;#v0k~XR1v1a5=L3q%z{rYX#I9l@6eI1O<-E!yt9T} z>%o|W;h-)wtF~QAJkrHT(ZVN!A&3<(L&j^J{iG^TFaMtvINtsQXGNN!e7a2PZ}!yl z|Iz4R-^u^EyR*CI|EqX7OHY#mViDP!PWu*}cgzwd67a9|8ZM*AVYl=qoh1cZy`V@_ zHH3|8ND%FnX}PwU+eZm7?J&UwfYPdsk(D9^lQfRFEK#<^>zesXSrfmeAf2P!h(QLE z2;4vx>pMXxLUwDWwZ~N2Pgh%b=qe^wTv~9*pL9Adw3#fa8Aq%A9TOm07!HT(=2aeK zy=|&49c40MI&ahiIrcA2#Xm6582qY^)KnR#!rd6$L#S?}YdvXtk_y27xO zhf=fGz3=|tG$lQq6)7+#42TBGg;WUh@o}27`2+e^g*o#0DzU)ij?a<{o`5^COgrjF zF0hr04D5@H@qg*=X4ju`Cu?KcPVW+wlL^k)aHp`qR7AR$gW}SL>R#C}wI9azGjJM3 zfTUBd(E>TTfq8_J8*n#)1%M$}J#$<$jkIQ!;28J_n!xRP8aCphSEf%45_`JWI@tyh%6l$=?a<7vmkCvYbKO z3g;NWIKv4#r!PeTg2Gvji+kZBeXQ0^K1)u?+cbHfro}Ng8#BNCMo@kXcGSxdX7C!v zxWI@UYnx0&FuXiGgBdY^W8;gWW5b$m3!MG!-9O%1?_QjqeR}u%%lGfkU%a$Fy?XbL zw=ds|m&UP-KQW%-!hk5uX2)Q6XJ==sy_}+HN|CqwD^~bSug!+$C_%(%imzn!1%-P1 z>2wMcXIvpHtT)@mG~1pa7#EZK61fOQcm@5ig*?k1v=^uD7TCVV$u^m2Z?991eBE%p#qI6B8(>y;Fl`hiRUpkhQOo^(4|eVx3ql z#4?0UV)gATpf@%-V#PPCv_$3;cSDZoI+0U+?KqwMovJm_1@n~ zMc@3ASS?Y5E!zNa!P4owVVUYXfQnr7R9`Nx@87L0K_AZTPBu140SmAdg5W6(oQeah z76*@IkOSYpvp;mGo%-P0Hv#)A#zW-|oB{ES&^N3N51_odjzA9jG5EN_|GH|f0>=gA zQXiX!ThUa|VXEILlF=~H^mx&AqDy+T_%zRspWZajbO~*Jo}BOB^^g`(1Q-Qj$*77n z{i}-v{%p@kzD+0(NXBIUOO$`Q!wC#yumu4}&DO6BM!wU<(#pX%K+ghf@zKH9qX@uO z=6hSU3`>0SMaY5h;8DB!_Kt_ctTx8hnElOg@%{U;Gmut$#0HM_Q4O2Wll#_Fxh7lg zow9;&=Txkq&YQTai#;gwh z7fxgAdY!f=N4&(Lpga#)$2qx2@6!A>PGJNB>%b7`F#LQ9-iD_}|I2RG#7)~$D&PkF z@8RB&qyIfz=l@*IW8D9;+?c|{;~#Rpi(Ax|8eo0V1cu$oMUFCQ z%~hE##PGJ%!qPny1EurRG#>#+wuG6z^;t!AqeHRMH=$s zZ!jr}%;=b!iY_skFKF2pJyot?jU&s#j&9gYrZquZlH zqZFBkW~n2il;5UL?lAL4;xzgf<gk~Bh}aApP-<0CQcV%e+GF4i2Q z6Fx4Vp|_`(fMxM4!^DMYgzV+LNUFn@GVk+r&)}qC@BB~DnbPc%g9vz zSv=Qr_TuCwM}$0Q_6UrpDC$_$h)>u#Ma_z4{jM3Wd8pL3X zb5i_G&_o%;QAdFa#Yke7G-*hwi!&&#ofELR$qQ)|g|326%C683XTEc+fg9Go)3v1h zst70i?N*pRIWURn`YzB-E?iEGU&A7YXpC>|MWTgSu)LqOb~i;BUVn>9jv17=zfRLQ z@Ryf2@1A*(z?{_AY+ff6>26`wOOfAaDHawGn^k?4rOE{$>_6_%HPdLTNDg`jcns_% zs5j=SIq(?BD|oHtx>~wqWC}+5cj=a)H{PY$|K9Ponz%Tv_K{y^$%ZH|-oOOjpuGA^ z#iA%hP9bp;$MwXEJuj>q1$Q*x+#D8h2O3JLQJS;rL!S1IyE@R{bO=;Pg9SP#WQIgB zA>o{rUmd#M!^oQDk0dQckUIp}Nw!Go!3zj6$r3DCV6IxeCggxiUcIG^B06g?qgb3< z^j0Yv$iaA^vtqQgl~YPdMYipV74xtWAo+)vzOWWNmO%EXPu!9VZdZw)3vn28Vh`vM zE-syc+f8(x{WLFH$f+P8^N`~)aG-G`aEkBVAyp2F!$QmPO@nTpgO^_llqWD|ql!|* zT?0jEcEBsRrZ-0aay9sSvr$*;k=J#(mJ62A4bQTYC-6ED**`v0F^WS^!+s?AN_J;D z<_sE?>B4Sb4Nw_xR}AnQU=eb@0g~p$X`D@9l_2=AYiE(w<5@Nxa47i+mEAXuj`@oD z28#5u$Z>KrFlBjj9+a7(*@EO|(zKRohXiBu$cP&Et7ym?k1slq!$WNr>R(Cdvx{OL zj_Y*_qhDYQlMv;BZz+_g5{4+3JPl*5iSrBJPBPDq{(AmhrX9XCw~=z*dKdHj0>(R` z+%}Yh4xy4NaOdP-F~j;~x@D?_Py3jvDj9>z083UJ&!%%MNyun$t+TLUZT&b6h_Jse#{gN(cW0vycxS?#0vKVsd zPz=MCxT`R7;(gn?#Y!39vv`cb>u0uxvDX)^0JQg!Hw?Tk61;w&rQL~fEpt%nn**U5 z4wRCZmxNjNTOJ2|#Nw9)cin!jJn=zhv>7!`#iltzBN`_B)_96=UH3Blfm_QTHl4SbE zG>TQaCRU2wzL98yX7>}y9jzjNlN+YD8jFTj{i_u$M>WExyQUR0IB&D0{r265m&f2V z=GT!qg4|LiX9hDU0y!eHxB!p}F_e&<)Yj~mNmz}qnp>2E zHW`MF49+vkH?9thn+c5zl(WK^!W^bkL;w^7_&FO11lMUA1KWj}v5K<&3YKGlRLga= zrYabZ-qvb)kBRU~_ESUuWt8LBm^`HY@6Kp+xMS1*gTsS0{a?k?O#kUJpiAIG`T~bV zcOC$fB&GH3fR&nK^6Sz7g;il;zkPLhJaARKI-QXo=-VJTrID#l_>Cyt+WnQgNj-gu zi0Li5k>SoOdN8woFr1dyYi!;a^9JO+bAzQ^FqogeH||kcBEGphG3!+6f|Nrd$>2e%5wkQhk-}Myus@c(^Ke9v?rxQBi9hahHo4qB9m!#$P_HnpTnJ5;_ ztVA}DRaCX@8~qwL;+&W3C%J(s6F?%Tny4WWd$+|bU}0fe6BgD|ccs4=9u^zP|9^OR za_HuNI_&a4ZKo7Mf*R4YwS(*hqG{V_AV}OKDnA2*v~yU@deY3R`m8ruO@~_AZ^1=t z4o+5g#C7p=nP*c@)vO++`Y~uO@9ro;%zOh~fvDA)gRki%C|mUPB<`xg6f>}xIDBp7 z6KX1~%k2KLy+!sjm@=h}#Q1k0Tr5i&qzS1b{2zU3LjU9Be#7#A!Txi4+|mE7lqU3_ zZ-BP+pYItT{pUY0Gpv~a?jisDJ8D4xd2>!yCEx=6=Xf-w|EkMPF#wIJ-CHFG;7u$J zU`*>1Z~za|)y{hr|a6i3Ba zCn~|Jf^9y@`K`otul530y$CcnfKfvlx(z&jnBYi-?RdmdBx0yOQk)8tyL?jtsTtgE zN+_=nV{qth(>;Jw=>!a8fElxc;<5aRMxG%Egyc~kgNScv@#>x9VKfw%E+#TnC}i!5 zPU|Jy+U27yq>ts;Yy2I>Fl!Eu59clQ77lqT}O+5j!-zTP%Iy00M`dVv1q zQ3c-SwJUW21L}?m&Ll<}tEM`E?pud*^?+T2ZeU{WbnFZu(+zYJLp>;xUS|y)(yL+; z*m8gVqabztw;6dOG0L_ACwzRGV3tjIAj6BObY5(hB!s3Y92C9yeID^^q=yyyjO19) zA{4vRybBIX^(jmD(aT~yS!saU$Ey%Ep#OX!H);PF9u9|H{HG@>(xXDsRTX0y$M;~M zvh#_j#msnVDuVAbrZc$-QEfbnWlRptfDk!Dkf#eWc#Eb&!oyy~F9-K{j$)wSIZ6gI zXv$$qUNtuNKgwP?iVFE(t?9RZ*q1}hpQx=v@eoJw>9vl`A>V3Mt#XKWb(Q*tT0a3@ zBpc4+AgoCNNr?B}WHZ_a@9Zg64{MD+UcI9$A4h4x|0$U*d-E?#o&Gm0>VF3(haLal zMroq|i4D+F`;(i-&y!~zlKM6ou0A&kT@skKORr@rQ4c!Ih=sNvX z-3G}<=5>%Y$xnA5q>=9~gg(8}fc|SSdvo_c2WLh5Uw8krl~Nl2msvVlYn5zMmpv?x zLsS;=XH7bn9?H|JT?&)7nwOrBO65ycTAQxrY=DicTdKdO)VSQ``J|Mt2J~M?zF(RF z)Y<6ETe))?zd`IO8yz1oFnATT=8H3(pUq? zL8+^sA53)Ds0&yFD0E(S{gbt-y#M*ZS&h{%fO5<}n=7DfNR2On@<}MY1}Z++G-9b1 zm)D;1^Atn~vecS!nZ9J?PI_6yt*2opUHQaH1^=h$9*ZdPBtaCWgf1%p)bal#*Z+HX zaCX@Fe{ZGKbM$QW^?oo}86Ia29EEzO0wJT~Vv#$9OXxD=EYNL0FhRkCkUz3dSqw+? z0khP6%l-T-@B;#&e6;=uW09U)P)-s9mA{tlDX~8XD3lB+pHq*xpo18S)50V1oxu&_ z)E5md*`>nM;R+;q&2eH4BClq%GDj4TeKA)-pCmH6!p=Y>Ru~k+24q2n^U;V|VS94i zDG`^qIG!O>{V)`_4CR96W-y*Cn7}*Ti^#Cd*DRt4h6}xLC>($bArV9iK9|{NK;ocs zB())OvkWNDzfVG#%D{UvW6WEaIO#w<>3>S{!ITx1Cq^$z8tm&C-j~`n0M=+~z&XH8 zaC1Z%CUHJF@8t(e^M3x7NK!Fy@sRNL!JRhITYJGi8wCKW=L~@UTbcQd#j^mq3j!d> z6Y_{ii@Y@)kvTFl*=LP}yMQ=zBLrkP0u=I{+Nbh-iGl6Q#6IGmX|OL>!(Qadyg*r- z9q;S&?g?^Dso?)CCCPadZ9M+l!P$xX{_FIld;hzg(!iuEw?U~X*U~3=<$}Ijp7}_@ zwoSGIMj>X8H`41eNtgzh-KHc-iZ*~^$3Bkr{44N1L*rQ_T$lpL5Cai@;51G~px$=^ z``1kZzK;n-mo-@R8)qQUZ5q+Nit{femR|z8Y6!@>`=5j3LjK32!|winE2aMY%WV)) zI|5`tLm7IDS~t8RDXPpMHPHVyvc72f@~!&m;^vi1t1V(22Q=Jmabe^+QGBmTe7%tt zcOpU_X31L|h7o#%R5}(slV3p}CYYb$Sf-(W_#bS5$@BSPAM`I~EG5$$#K?>W=oOzY zoC;yCZ{rP|3?PsqfKxPOdw`;S$QZttcMfw%F-NdSB#JoJ7?uigz$Q?nPP624aWmh~ z7N|)$uTEzA0!lsoU)B0koB#LV_^9~)=j^zn|Jx`n>_2ipIHI7>08~nWpMM3uCE}hJ znARUAFJEIM^}~_SQ1KY&Ib}1ui)^4ngO&9R!%&cC7`@B7ux_(=is_-;V8MnxNHdp0 z8#j5Py4aES96QKOv8|c8s(2B==hc^atsMVC;yK?{i~oy=lu(3NxS_G;|7&p}ah@a` zp8Zol&k4Fu(OBnOZe<7Z&8F3fBPNeg8cb05F45MYbsFa6Ka50HB}TbNC{31QGK<3! zOPq~pF>s^;{f)F|MhnsILlWTtr_lmH_JG2okAb;S-Q&Oogm>|4N}Y5?HI_g2bEPC< z&PmmVlhfo3Tip?g!HdLbY(i#HDD$KJ_4eJBV^Q)7KiRI#41i8AGJW=68Hqg!aEfN7 zY#H^Q)1ZxI2X-=Z5oc9ol_gZ>Fo%KPUYQ?VUW0@ELHN34c1zoAnI*86D7g4nSV=`* zZ3Bb2)DE{Zo<)(cyk(}s9lhm?cvqR>vh9-r5(2&6BJP-%xv{iJL~E|qDouAra0cq1 zrfO~4{@vj6##VHE7P6_XNg6M#p(3Cn8|Wq_`Ge(7GxZm#s_2E!n`IXod@wA50W#Eu zdA|66p7#wz_3G^!3S2fSLj@Cf$aMV{r~if@MR_;`d$$NBP8o{EfTe`W4D|e0Wy>|J z%r^UGKag4d(IJ7@wy-*|ZWrlQo6JY{!% zQ^>!{i@UxiMuWk?!%JhNJ#&mx+GyJIInL)j!$3WPw709c1`}`7z%7}gbb{l1@QC6R zJW>+h51Oxl9K0T8c4-IW5KJL`$h(BhFGb`8$dhT<$C--l1&zwsj^RXFake9mOFd5X_f6HJcz4xDqCD9HI|0rr8%*OlHd+L0dBFhinif5~EzJh7HlT~%PS}21}{OYW= z%XW;V0Er3Q(>oleOwu99q+su=^h#1s376B&zLjj{?Sr3P|GG1*0=x)|h-GBPua^#CUS zL(;VT?-xA)l$P^C__pvrfX@4;99*PQ)dRq2Cn|ff(NQRR(g~(g)oeVf7TRZJPKEL; z1PLW`93pB_bLmbj*A=LR1=-3P3W%X(Xh1(#r^&gH&6Fq);{o}@|&eD*8BG3f7szKw(*(RP`Q z+(nlE)VQy@#ul`e+s$e_7|ntQl&%*c1=NezmnJuTE~Qfb)2!eY1r#kG1FTN|J3A}f z|DGIl@gKKRnus@g8w{A(2er~nQ(;C`N+=p*2|@kSw6}A%#~hbJp|(FDz-APIOz^>Z z7C1ZYxvtkaUb;65HWeq zXRk_NQ0W0Z^UjXSr=1;bf7aPi{iM6wH=pzi63-D$0XyRI7~eMh6wFx!W-%YGyI-43 zxjql(%opd|H4A+_YwuXBFUR0f+fPG*fP}dx35di}kr117sP(tDgsf;ib?G_g!@lVS zC~siZpv_4Z7hYylot3Vb+|8_IrN}EuJ7?CHS8RGGMr0QD)wp!$yQaHG{>r2{D{5Z6 zMr)S*6bZ`}n|p|9Lp<;=gXEnD)P0wcP79`RPscWL7?nz!HW% zFYcSSce&Tg4dj+$s*fkX0ZI^Mn5CScEWsWc4CYBMe&m7zy`r1C`6*g4mg-)@S*r6j zPJ#n)ows0ZG1=TT*wUD6I6F8gy#G4x z?EhOSt?d7%jnVW(*CzTwZnw$j%1WlW){H^kVbzlq_{e@|M}t2z>1h3v{QGB+TLjIX{Tjv}fAm5jV*K6%;3wr+ z{&Noi_{e^dH_yL3pv5mZ{Q9@w)PM#!louzwj+|tps!@;A(Di9B-t+&6MiW9Fp8oTS4Ai^k4rDOc&;=dmq9k~2|c+~O#t&~RR-`oZ^ z=Qnhf`gMaE=1@kF3OWBDA;h45PzQOVmdf$2n7 z<^O)+A*t3h_}>;(^+0Hv^+0Iq>!CC1ZlF}te>#iM3WPfw*=g4jRo7DLP5GAg`1edqt*{7- zN7o*t+s=O_*1|=F?}~=g&+&UV_TyDCJjM7`RoCa;yBvDiG{Tuzs3maR(YKfYYlt#m#w3HhxW|;{QHiFGKOlF;_ zTAwV{nr$*!f|KaBo7kcy1jj|*!!%oXfNAiy71XG; zCTWu-L#@}s$tnq7F9hv`3lViH@O^NArzvp`98KFF0+rlv%mT6?BKl~ zTElRNUXRBpNL}G|2Z_)1w8jKstPhDf{pbIA7r&y5n^|1HM5;>@hE1)tn`oR*@&|nW&jQ+lE^hXC99e#uulVd;H!r(oV@mu%YXC0;b{y$r# zP3Hd_9v>gN_y5DQqwfBH8>Pwpzjf(vTrBF}8+d>1JI<~C+q(=*l@>25S)WRsMT_o6 z1%W@=C1@|7JvRixgvm2sYB-3@t zWiEWqJq-CCdzO+P;WVlMvupYS`p~G_k}CSBg^~TO1|7R{V_d!RCsn9wOq_W(l(Owu%AFP=X~@!%0Z-~@#j4hX$}&i{JOs}FjBcN)wn zMRBmuT>CtV$m1UPhR_iX_W+^b1|<;;&;Y!WZ+%79JW*|+gcTJ2m5kVTn5Bd+-ry-t zC5G{AIzp5WN!9{m9Ah>?A^4Sy1Q?1^h+`Y{AqUH5;(73R7S(~yYc>OaB*3STrZ~QT zghxl$wlg%C|i%uu?D1XySPIXXOZ<-gOz?)~3ZiV*Z(iB-Nu>G~up`wK?*|@rs#el!DNHWzVlWyh9npv3(91F zTnb7^$fRN$qennu#0G7|5oadXEs*E|xDtu}Zm`lD5=A(^mobtBNA=IN!>oLjT*fEk zcHin*=0e{>y(r94G=-t;>fVR5gQ*>MotnQH5|R+H2=xU;b=vf&@Wb~poI@PJQN-al zYjZoJ_o%DE26kmodh^l_Ejda9A@QLe6;Z7miK4CO z3$)g(ztr)6ltg4PMe!;EKpp=-J8|tlhX=zh{?k^9* zLD6`U?>NrqvbyV(kys}kb<)wgrK1}Dzw+JBf7J8;;G|lc-ry*Z4|-f*LwH! zH1|H71(WgE%f%^5DMk#8(3nsJrjS0!+X>9X^@KF|+E)pu^6qDvL`a73Q7oNdibC(z zO0>u?R|GHDw;yamW>E-62+&z9IK1aFCxH}35sEOI%C4sH1D?*No-TdBIb@iMiz;wohS8YNV7VVXf=>S}gMb;yECA62{ zD=`qGIifkV5QH;{qx4)6*GFlj26{eD5&cFj(hG2R_r~`Fi1;RwQxV}Y64z8@44^nC zVz?8?^2J6UP%sno^-MjezL5I{0YbqyVsq_^F^C;E#wZFo>I|iOWyk?Imd>R}bgKGd zdjO}rDT?qt=3Gg+&Yn13Ql zawsDdkSQt*S3v=IIz=IdDT)?qzHpjN)d1XC9l$7=!2Jl#Q6$78%m9g_g&q0xL8+e#6_KIcnolm8PEdSw3!p?^7}q~mO@zW<|QZ24+&f}vn0D3KJdUo=`xr_l;%ySVYa_B}(i z2{X*@Q7+W3}4SkeZwxm2Y>|lcT`s?O!-EUy`+{#{R=nn4v?)~4val!vvRN@CV@PrnWS-sAyzAGiATK>xu|74*c-nUN)RpWiipwQbp--D8fvkt40?4M1-)gh zge@+x24PUm7^iv9MZ8Lb348wZq`}HU9GFnVh25_w}N_#DEa$8SSeV9tu^4#1z;uZOMHV`|UPn|W! zX4>kr&9>jguY@mkzo_9?vhA!718gc`P?M{?~p%Q5g>o8zi|;D-({T)&`bvK&sZk} zbY)$oIsaeI_WvIZ`2Xr_o}qc-F~foy4*I(wzS*@3JK> z0BZIBlcR$Ef70>)t(1cQ=bGgJ!zb~Ju>h2e`J*)fZ0{Dp+-RK*ppgxrY|1(#Kv&jK zn)84CvAq$Xj{hGIk6r$MaM<1dZ>0$K{)1Xt@Def{tXl*~D4s&PFj?V_ASi8Oaui{h z4p5gdPO*qqrahYsucn;|WY@Air{8X79scuc@zg%Ff7ZaiC4kHk1sWL>Hihv$0y{CB zqCK#a)!AN^uh$+l~ zs_=2DvwmTDoH;6<4&N*_SKrk%+@OEVFhu~S0y}r;dr~r5xLe+onT&-Ka+87MuE&GY zniP})&gLbHD``(mXM6DSe*!~9pZ@}*X!XcnvefYZgQEjC|MSW5argdnD@7dHw-Cnw z#VK7R1jnh!$tR>%Ne!UF#{MyeM`6UO9rwsj&a%tgU0n?l0=KF!IyeiH&DvY zKcDgSP=K2Ae|m80#{WJ&IO_7hZ>5Oy|AxSjiz^XeGS~xac;w}&v?cLhQILXQ#!@mB zNtwquLTnE}ra*-N$4W{cEZ{V%e}JHn8lVp;g?CBRw?Z}?SpC0_*^C-the3jYbzHn*h$Md&u0HTyoR^OeP z9sOdXuayZ$&Jqz0Ws32)FnPvyn@?pRS_v~$`CO_Vbo{Cyf{eB5#cJ80Cm9~ERToSJ z=&OZ&IfeHKT+gCNb<=Jrg@}L+1|wc+0~Iu}U3Yc}$OgULyga{X)dL;DpaI<1A5uhP z7=g<;MRW`U)T$SxnrE#Wbg9MpRvl?!zxl!}wIB_^vy@PHFQZkq>q0hcdRVUCw_EUJ z-ekRHY@FK|CTv359YqyZM>TETSNjRGJ8U{{IKHQ-WlyS21L)tv6g|QPIKRFGH)NK! zJ1&&BXwuDhgyMg4ZWf8)z2~!(umDDgwj0+ZfekuSF-67m$VDsovDvZ-t0Cbl%;-#H z7=Jkn?^|*MPx}VFKBCctkcW2kMz(2kPAQq9bb@9KyhSO+LAxcI$~Fx;xS!)j-^!p$1zUVWB{zu|Bp^jT>by#^rX}Ow^FR@Gnn6>nJzZXi~-W5S8LDvgu*5^kW4^`ll#7mg6r*vq7bv?x(E@Ud=v*5v4May zkTx1Zt9qP5ieWffL!Sy#vtCJjPuA0`gw&|lAi}}Jgv=OPL&rI=Mtw69(KYnS!IbrP zgYGd)5e4rO-Y21LddbcNQH=*wfpdC!k0>55IA|&_D?^~0NXuYC5#yrI5?#&(Y!N@u z>Qi25f`Ei*UnUv@Fbwzk!8g#bFGIB)4a1PcY{1*frkOW@=`G+zP&74K_I>fI9UR|Z zU)AHr*+7VyK%?(sI!|KhDX`xV!Fdul!7N58n-G$=o;uyI?ZoMJmB^h-o)N+njvzze z5#rReHK#;I_H4A9LX@xphtLN*VDoZ!sr)DS*;ej<4u?la-TluKl{%?Ti8Zxiofffd zGx;0LnqBj%<_V&V6YMxZZJUNjrb%hnis|es?V2fjVB2ORpKYKmkh#~)u_Ba}S_{i< z>zP-!2D@QrWY}^k(0?W7KmUcx`P-oXhX-dv*Z=4A;HZoLv6W(24`s$` z!hfr(>Wz}&g_)P~yoS7Me-kwfG5&r4qlnAm{fn#XZ~OiR4`|T`eKCvbtw!!Wd?7-1 z00;t-ENrJ?=WWq+#?n^^B^SKnPBt@6?JKn^+I9EOY@b)%|1;|w%O;VxF}X!D`M3DV zM&uU`k)hO%=dR|#=r_lQ!Xh?haAgL+%js-I<@+(F-n7p$_j6dQ)Y>Y z2zi(#pg%w4M@XaC2Rnls6d}maAj{ZSG8ET++?hW?B|`K83`A;Cb10S1%H`O`ga#Dsn*<6+!8)H-zOO%Bq(7dXj(i!R(UiepYuPI6)m#FW^D;%WF9@?5OA{4Qax0vj? zzDW$#2hYn0kvPJaxkFuII@u!BSKoUUo4I*okqJ2mY|<564cilpzye;@Kh(?cGrYNh#LM1Ehje- z?U$ZX6O{`k4_Jsi|4KiOE2&V6sS*SR^Old{J!j5I)-o0GOEd-Q?-nZPpE!+}kWhE{ zi`XcA_cfPyYZ)@gQ*SO~p!M79BIkU1*(Atjt0!E`to2)Mi`~6@_3nj6Dq|l^OtIb| zQxfBpaK<%|&eZ?+3{i}j&6A64{u?1Wse38G#gxCRBQS=eYhIx!DSAXK?eprBubvq? z!;JBnanlhM9=Pki9Vx4?ua^3p|Bgy%a;3e|9NQyI$kjpdSNKONv z6ci5h<1}%>`+!g)wuHXm3bV^C04bTp#pjrW%2Q>t=-q5Y`!=n(9A}Tw2nDK+!bL8P zJP3RIVC7qsIqL{vpo zex8x)nI(jt4$F?CfvIpB(~vY~*@rPkQRoi7M7GR!j5RGDYX0gaKW-t4Qw$@fPQ)H~ z#8Cub#E5ze00N3aabY75yZEaefe%Nbnd(VVIzN|}780qH*JZ`^+&rx%N<)SHFB7j< zH3HW8|C}5+`F{@24o*7z-&TrbkC_H@o4`lD{L4Q4_q;DL-ugE%8s_bc7y6qr9A?8d z-s|TdpU8r!`)_4N%xoZ)w#005Z5vY~&9h*2)E;8le7PjsHbg#iERnidLA-TLl8(_) zuf~T2#-XlLyC7NZvNdTU#}ym3UX03xu$Lkqps^Yjhc@QvYfB9CSZy1GOW3es;Tq8~ zp;M46K9aKnn*uQ~fpfmcrtpKb#YQN;PbYl44Ns0*Fk^!nc$BT88M-e!>ho?2@i5A} z$+%=&jjjoFKIvRGZUNl85sS-V+3jnOa$8e=dwaY^XE?_ZI+u{da=~~Boh|1lODSv> zLf7YUS6wdu6`t-bEeF=ff5YK$=)`|II63L!KWwE)HM;P~b8Uj4=K*LdfzZ>wD9>Sm zvLVEYw{WlBrVYFiInga{{5t9@`rkDqR@X!DiadfxBw3q&)g1z?J79Z&$_G3-l~a1B zGtf9hANKfv^^lA~;}3-qGsyyGRJxek60I$tiD6kcqh4_@?-|A+NM#wCiZEW2Y(P(k#pBVr6z3G9#@$p(qL<}6)N1TTp!m}Of4nA zv74=Mo!)EDOY1nPddhj8rZAXHQJlWw#}-@TZ^K(ZKUVrlmP-CFqHV1116ITT4^GYw zT>r1L!!G{wR!S2Ftb(rO>`il{6irPAq^knkXfCYQqOPqT$lz_Sc_R@h#-9LJ1N|9r z5dDHV^p8J!`}_N5e>%vn_6CrBTV3<+wXs zN(nEM*2L1}{WP;mNnubn^78t>_2NT{}jTewKDz`T5tYN5Kr&(4lV17jms0=4qE87xgjhpapg^+JMm9{UuX@y z?#{5$W!T4Z^`%eTr*-e;a)*!a_N%z#i+*TouQea0G@!|DSMdN;8DoT4$&qMw;TB53 zp^+#ExTZz%>^>z$n%=Mv%Ceq7g`VpMD>WK?Hzm z6re+&i_)|D`ZI7uUo%FZd8ln)>d+&`qd*JW=|9{AyH)3>F>CagvRn^S^-0{sSA1Y%8Ld5WWEFHcd34M?&FMQlJ5Z$ux zx=JnkNUQwrRCd@-@Rf~KHWJuPG=9Bd>{Fv0H6;&F&E)Y#G z8Ji*M=AAQ+y?Lr}oT7UQ{W-;Ta;%d2B5<>g{@kRJ=R%|ec_S^DS<8LdQ<;$5hUkLQ z7s}y>J+PBTO!Go>9BITnsPY+94b0Hho_?~y@oJuc7iq-y{~Q*duW@-L`~ZFjI8L1h zxE9EFqhB)??&pna>u3EJHg&PdgoyB4*$~Cw#cG9-_bX<_YF;v;RSBgY@T@TC-F{nC3=plzr-7Mwa_#4+MlVt-)gNCuW}!NimA|tYy?qr-iwC^!&=>#i zE&@OPQf~iIi3c`s{}~<}7xI6dbnpMRQws6FGznct2(T=7MY#irs)8E&f2iuF8AX3` zeLnR5E%EzMKO4RuCLq`U!;Li#9KB7*I2K6D(SvJnI(}B2lCAO1vX$=a7BlS{QnEde zO*xBXOKJD#NgT{oSbHYKl|(-wp^9lxe9KnF(#&={?ohZ$UD2n~@QIs9LX+)XP< z0d@YLM?;tYpPii!JO00oQt(KW;Z`v+Gzus3&!h+tJR z1cf5#w(g?#K&u=_JvcOWA@$+EDfz(atMBc*jf1JPWja^WO_g%`@5!aNBp0an|2%a4 z{|^s3|NpHNL9!AOhS^eR)#7r>j6v6Wwd7sBQ}L6dM~@)Hjh7E#)o3uqFK+Bkk* zlMv*H12unD&Y!;dUZVr3Z?mNx6YeIESG(KwZ-8bu zuuYEC7H?y#CdnsNw3)B`$Q7q%jaR^4p7Xi+e*Q;|{6|x`hS%S<^5604@ri5yKOT1e zpIa%Cpvnx+>l688;^vl8o@``T2j0ce0?=735g;+Ry*PjK+DY`5g<-#s$OuLQ{6S>e zyigf7O%ctJ@8qD(#3AZaL2g*9WLGKM2?WZTl}Qd_;>sFnfk9L%mk~+@xoS~P%vYJ? zSeg7LT2{>0*~kVkNv_pb=@Mf9_8nn11VWt}d3f$7Bg4%3O*az>qQzo*d;IGynJ z=W%FN_f7$cSxRR?>VM|tmDMwGGY#a-NTJgeHS@(*&(n3xBA;)bDW90%L-Uxua-PxD zNSDh8D%_gyVQoi^gB51e+y;De=bda33uMfj;-I-)*T6%jc|<^G5^SXK-{daxWP;e4 zF?2;jbb0Ob`?Kh-bBaNKCnh2K1t)!SsBoM(4$@n3~r^(?|Hm6be?2gG9vzVW_;3=}qwgyMM)FXDIL z`2He-c3Q0LT7fL*`Vdp=Yl)-t0+oH2MiDpw|S^x9Lyq;%{ zikg;L}Xp%LmLDP4<7yp z8(`uaWeFg?f%+lE^HNa78M8CWiubOC9E(QRvR?J8>SD3=mTc*pw2a^gMeYujAC0}q z@z`ww4#qJ_CD(9Z8ow+9*t)u$F+__)R(n|gXywW*R?|P$_wIj2Etb-R8 zSbgKzFzc_o=Un$av5;cdlA8a$n6}#(CTv1d&wa5{c;_VImE5=|bEkR5Ua?g@*^sG* zz8$2yEK&K?uSL;InGC*}MUmVMK%)ov-@cwS8lJ!_!uagUX}a?gsjb#LY!AMbv&MRC z#MXez9X8gc*O^OcD0c5Jz`ojn*&?}478N>DgFTcVdkY2MG*pW4R%=tMDeQ!XAjpgc zxgM4&4QWm~ zxb?$qglLRX#O2TDVn6K%ld|mD76hev)$a+pO9j*=d`$n!NL)9b=8R-DJ;;RLg@5|Y zO8NaC9lwM73E8_06rFGl>5b(~ONMhi!t61bTHmH6Pq z_L3X7B&L`6(TL?GA-I&UamY^t+|mI*CB99=eVPN`R zKA$p?$a;5;3YJab<4mUg36^sD&sI(Qnw2{J|9I&7|DGP5b@9KpQj8RoYjXi+%j9}x zTTAiE3b|cbp3)U;TQg^^Q@J+C-^$jWwzVXmW2JJ=8YOG}^xkciEkOC?gD?1@)~A`@ zmVK;gZLM6kb%u~G3u|Xcs4i9VpNN0I`TQTp!?VKu&&f%r|8J!z(jn6wuIUO$?VQ#E zplbCL7eRWnH@gbbwcFhW>7nk>n{lZzp=nHL8|9Wu2$L98#EkBB@jBma9Te zU4G3fSFM%Q`Z*_4%|_5AQ~ji`5cN@LqXtMyzsdZmdUt(BQo7>gotXa7msdo&3LzV#)t%t=FsvD5%S+16kuI)CvHUNHp~nb571uT7q7R zqOzcWc}kr@;jo12p!Zl46+&12Xfz3hQ0H*=B}t3fj%_E+DVp)wNp%@P?u5I~p;X9! z#_QbGjKFpB-|3Ni|9^IJ+};0grPx8u*XIHtH_tMmU+tz_a0f8@v&1d)b^893gcvhX zYb9&Rb`7GwTCelh=`LVSYCBQOX!#ks4pgs9-Ku=aegw;8Uic_n309Ost-a7p1g$!J zAA6`*6ZwxY(yPs#K7ARuT>i7;j%?EYcY5sRe?2%n?(%$b)YDmnw)@?$VgmjzW+Jy;=gUB zh^_o~mckUr_dm!bmp3glDjnk1B?zkh)Kd7%T5Vq7n^w(&A^9nko=DoO!m^Fnr`lHv zdV2ELDBM*}aw{pX3ex8%?v*ZA#ZrBlLft3rbEucOnNUc4YW+jd6VMiD6zP-DU06ItAuBt&$GT%#tE;)I_lzhE=3=CHzdH z@R1liyJD3J`Jd2-h`?}l1)xU$KRGx#cIE%GqfY+cN)c4?2es7edibNaPFq<&YxWe6 zeX{-D?2%7az1{O3-ON%b^tY$cD0KI&v;lUutR&_;5~hk^hJeI*{M9`$WAYP2 z5eia5o7zHajhcG62?=i#6aYp5PDSYI_%A6KLmcsLV;q5m;5gN+qOkA1k*gI@Pt`Y!{G=NFEMjP5yNr|o3w&}g?F3BQ2a zZ3NK;i{704k7a*GMPhkx2xiZNA!ebo3WkSN&`v184-|+D4_^i|awoxRj%vX0^Dqun} zp*USE8bNuu-Gcv9j1O{?4sO+6O-dqV$ddD7s;jc6150mGlhc1WLNZ~b_?_cq^hi7M9{NJquzm5T!6tR^rJ!FDAz0NFku6yTJhXuJo6%!*?WK!!wsUSTmGQ!)jQIGx~FH!kd* z1W}k0DhWr3K7bv4z_XwFvTZ>l%8}z6M^_)@pYwd>6^ zaZ#l{=-Av-mN@pr24Q#veFsWs$oe4f^&= z-ff?CY)EIRmc%~g7qMSfsn!1&KTfk~l{_$Y`rqNvi5vfAcyQF|f7>WB-KkpRb*p?D z?s8gQ-g@(jT{Z(|06_Ka$)f+M{+CeRZuQhvX=~Z|T4-oRKJCQ))AQIa=AUY{#Err8 zud*S&QnGbQREBddFk}cxNNkW*zvFuvGcZB{oH5P^3Cj~7LyEwR&0w?;szcUFs1V{o zqMYd>P1W8oL%wHL{y`**rDR z314Ul`eNQ{oohY~1-SeSRPO&T^U(~j_`s*8LOBfMBYgUtZN`Q-9A#v5yQ)}cacO69 z$ya%OCYFt;ZMkUGX=-0~sn!4N$RTf*xd5!c|8wJi9vu!l|F5kSPXv@rT>$!fSxz@B zgSB~0aZVzB7@W&L|0#JQ#W6>53DwaJ($eVS&p-Ul1%+Df>Mx&{&(Afj_3AZWx$fTY z(~?3<_rT|K@#m)opPJgb-e_7aul^bm)b8$Y#k;@xQg?s;)%nOS|H_20PN)2IN@7tb3`90PLYG1)ujb0W4Z&-m%sN5LDP)h zc9(D$@5*OZO6k86HCFNa(4~(4pA_T&oD948KU*nQmM%{A7g`<^;U`q^2O(YuBu*iY z!30H9fGEwvPAEoznY=NN79fBzn7|}KF@WO~QNZaAj_);h5ehksGny|$UEomkLs86y z`hZZ1g2?0?=Q(ylz8@iwK*lxvlz@IpeuUGgzapp6`@Rnb8MmopHhCMv{s^Ner|Qon za$vA)3b=TzCzXM|m{I=s9MP1|)sN?I-|&I`_4eIW--MSFeHqm#&bW3;0Gp6U{ijf% zI1`qz)wuHrNBT8jh{UQrBITp-2;)@7+DIu3QUe5uqs1N=&C<+m0;l<^XJdKM-^*-5 zmnpbMDFX?le5D`*LOtLD22S}-;VXWRK4|rge-)eN5zm6*otj6g$uq>AfSlNqLj-eYBvs?hT4HcG=2g8SNy+X@aMVw?=8|(07qnw)C>>I zb@B1jkDj5H(fWV+)d)qcU(_ z7n^_Jruu7lRRQYH%10ktsy{A?g+>-Zda_GidbvnXlU25omh~_vzZ3(_p z>gfN`u;BlFc-qnbt&}?YpKpNn1Yfo-r};T-%Z{OL8qL-!T9*9ey??Vff~?nqA6R{D znk6KNGR#sG2Q|*RRSj1r{{}Ek^sV(WS44y`v-`3I@mHcHkV^^P#nA%%B%%Eb#L{tv zaD=jGhByZK;!Azvo}}QXKeM0vo|U&vX3GUS=!&=0(0@FI_vm^SMKYqxa*Uvk{vRH? z@xO)#-TR;Ilv+D_aRanx1P+jLj^OF7Uj9#JQ6#Tu+o}Oxyf#k%onG7V0JrhVe82&y zd4Ye)Ig_*;{NKZqgO2`hqtwxV zX9Kk70S16_KH&7?nuB8Gfz#3^q}sP-AH{CJSo2VEC7alY`qu^|WgrqOml=rIL|i(T znTN!kbHB3yZKl-Ge?pfu`WU5#{tt&oj{JXkc6KoA=>IlKE&W#;pp@|Ie;Yrud61L( zLH?J)B6iYga%)y|0)kj=EV^m66zG+CLE3%vMOBM17DDw6ZdW3?fnOgU5N&N~A+_ySvkGYdp!G(=s^s~82>8vbfxtALo@K*^Ys4ztr%59VlWY8KBnw=kovI!O21Q{$nepj{j#N zftJ($bn|l6&+4H5vL~zFR*|zY*|-*G1ea=~!{yCZ*5LABPD+1s)}o`oU8$%4QWo6k z{m<~YkpJP}==8Ls|Jx|F^grJKji|pCoo{8kwkk)RvawrK*4R9_Qb9aTg|a{nWf!(i zv9X9OnQml9^wbDe#${0hGUJLFi%=DYMU8QZc%EhNy$e==W?CS#RlsVyU12$;e%NF+ zi&~KSOQAr@p2y_?Dv#j++1 z^uQ%ydYhBR7W#g)#XJGA=LLY#Y)k6yyU#z`z%a+E-V zD2Q;32EDCZvUXGlb1W8hkz zh&_PQzc4^V@(>y5?JqLQ8pWeoN+?s{PzZh?^x;Jbxc-HTEBhUara*k`orfXj1O!Il zdxpTb6vpWb@FSUtKyNyiUZlZ468Zpe3=&GhS->0a0mwi^;(PB+D&W836kx`Q3kuR` z0hpK?l|}%X2&xd_VF@TQ9^(MR2vC#|hEqZpdmw-*jL1D8Q~@4j*u#hsnIJHscn(v4 z>PG;kB*bH^q_vcY5f`u(QxK>r*eih~D80y$V9n8>S5luZ(3nIKdE}fSfDDOLiF+WN zA%zL1AcpCTf8^sS0i>ULKnDJj_sdcFi`X&fLlWTt^8qE4Oz;S&D11=@Y#+Rw#bG4a zjJ#Lm*bxds%#sK$bYMSgSCq{NPAAWBybEAV(g~t^2c;+u`5usg=nZ^Jr&b4Fgh>J^ zic!{>ySKuIW>5>d_W6^s@jonRV*1kw~E25?*gVvb3q5@n2K zG)y%QgI@1qA{4Y&Fh$0}9v++=>>nKN9~@>i)OppFj`o8{gnxW_`$~iB^}Z27CdY(M zWq)u)W+{LXXXa8SkX6N~sn89lC{AT~e?C>WWSlMfHIih=_sYSbFBvLd-aVn!=ju4o_5CJ%cID(@H^=2ZTsRHewC#VriVJeTH z!1YbGJbDZ%`jCorI27McQt&L;1;c~GGw>Et3}3wj7lbB+%1J*T?Sb2v zI!EE4_wRrG?~*zC_rLxRp8yC_3PUu7^nq^`Kkz}Xx4+KP>s7L#J4B~UF0kf6V1g(b zExq`WbS_no7r zBAHvuKH#Jx}J`S}f!-np0k#>qxaiAkS`d! zDNH6k8IhHP!ZA$w3|@|TceHf%%%H~8BwFOenxcQqFqLGf7tAOp+|h#fiNvai__c@y z6pxB0c25j)Iup}Rg9)c#u*XGgM1>rn=t-VMSkKj-NLB>LV;o^Y3s9V5PS(YG!&y2Z z6#o;2J&G8LB1Gj6S$7nTDa5e^JY$;S*;}^P<8&b)31=5-TDWe5`BoJNK*$v+wA;yr z$PbXTO}13UU7C zkS==7Ku{#uOUSvXUV=fd_oJT9fW$1p!HmpUw9rz7H5h(0ML*dDaw?$bkCPzp1Py@P znt-AJ@wqJGhGP?EFM}!4At@0w=llzK=HxlzGZT2aeq+L^gxaS)bM6;>ee6>L zQ?a&uqr{8y!-HdwOrb#wb_i!F;W9wLIbtt6nX)^R2-t147@*Fb7!QmhAOx|VT2bbw z$DBtPpt1ulsD_ww7%vo)5HX?`Cby#?BKHK4aZb`@RhALOEjYh=1uouQy}G=+e0O!b*L(f9 z>zmiNx8U6kxO{v4=JNHcJ#cw-@#gzimsj6{XFputefRGBJMiZ6?d9D$Z?kJcd-qN6 z?dzM1@6NC8&R<@>xxD*v4}5cZcf}!o^X>+mgX{B~yUUC3-<;oo>+f%_-`&3616S{^ z_Ajr#xw*Xh_VwG>S9g0HtKQw^-J92gUQbIXMMfjoEMrPPl3HOt(f|I}|I4IIm6A+) z6?;?327<&8PE}=!b`j)U6V-gBD9u#an3YHC?bzsGWY%3 z>s`izIN=acAzr*E&{fcJ{X4+jT=PsR%n!4y$V{e^DE zf5?=36CHt8I7ZkqqyrNI+{-1nW zo{e?^jv1nMG z6lMRtd42xs?d!ob+(aL>_y2DE&%@zC=l{E%lHG#5k$Jj$y+8d4T)`=4cDKO{t|hYT;k-*>*5MbQB*gz{{hg0bP@jEdk}4gc`zy%p#(yWPceykMaFmnAiZa&-sV~ic%L>{w=E!zzBiY zAB0&g0+(@$=okj*1^7Guu)lL7l^fYo{q_Wtaai00960GOP=<0B8&V Du(4)S diff --git a/stable/radarr/20.2.1/ix_values.yaml b/stable/radarr/20.2.1/ix_values.yaml deleted file mode 100644 index b320e78f6d..0000000000 --- a/stable/radarr/20.2.1/ix_values.yaml +++ /dev/null @@ -1,108 +0,0 @@ -image: - repository: ghcr.io/onedr0p/radarr - pullPolicy: IfNotPresent - tag: 5.3.6.8612@sha256:8d299e59fce7f947643bc709dce6b4d0780d8eb092575274b396eebe7f9e1cfa -exportarrImage: - repository: ghcr.io/onedr0p/exportarr - pullPolicy: IfNotPresent - tag: v1.6.1@sha256:60cf3d44aa0b7dea2a65160b2e2e373c1ae38cd6b12a45fe81b8afa45ac31c22 -securityContext: - container: - readOnlyRootFilesystem: false -service: - main: - ports: - main: - port: 7878 - metrics: - enabled: true - type: ClusterIP - targetSelector: exportarr - ports: - metrics: - enabled: true - port: 7879 - targetSelector: exportarr -workload: - main: - podSpec: - containers: - main: - probes: - readiness: - enabled: true - type: http - path: /ping - liveness: - enabled: true - type: http - path: /ping - startup: - enabled: true - type: http - path: /ping - env: - RADARR__PORT: "{{ .Values.service.main.ports.main.port }}" - exportarr: - enabled: true - type: Deployment - strategy: RollingUpdate - replicas: 1 - podSpec: - containers: - exportarr: - primary: true - enabled: true - imageSelector: exportarrImage - args: - - radarr - 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 - CONFIG: "/config/config.xml" -persistence: - config: - enabled: true - targetSelector: - main: - main: - mountPath: /config - exportarr: - exportarr: - mountPath: /config - readOnly: true -metrics: - main: - enabled: true - type: "servicemonitor" - endpoints: - - port: metrics - path: /metrics - targetSelector: metrics - prometheusRule: - enabled: false -portal: - open: - enabled: true -updated: true diff --git a/stable/radarr/20.2.1/questions.yaml b/stable/radarr/20.2.1/questions.yaml deleted file mode 100755 index fb70bd2d47..0000000000 --- a/stable/radarr/20.2.1/questions.yaml +++ /dev/null @@ -1,2899 +0,0 @@ -groups: - - name: Container Image - description: Image to be used for container - - name: General Settings - description: General Deployment Settings - - name: Workload Settings - description: Workload Settings - - name: App Configuration - description: App Specific Config Options - - name: Networking and Services - description: Configure Network and Services for Container - - name: Storage and Persistence - description: Persist and Share Data that is Separate from the Container - - name: Ingress - description: Ingress Configuration - - name: Security and Permissions - description: Configure Security Context and Permissions - - name: Resources and Devices - description: "Specify Resources/Devices to be Allocated to Workload" - - name: Middlewares - description: Traefik Middlewares - - name: Metrics - description: Metrics - - name: Addons - description: Addon Configuration - - name: Backup Configuration - description: Configure Velero Backup Schedule - - name: Advanced - description: Advanced Configuration - - name: Postgresql - description: Postgresql - - name: Documentation - description: Documentation - -portals: - open: - protocols: - - "$kubernetes-resource_configmap_tcportal-open_protocol" - host: - - "$kubernetes-resource_configmap_tcportal-open_host" - ports: - - "$kubernetes-resource_configmap_tcportal-open_port" - -questions: - - variable: global - group: General Settings - label: "Global Settings" - schema: - additional_attrs: true - type: dict - attrs: - - variable: stopAll - label: Stop All - description: "Stops All Running pods and hibernates cnpg" - schema: - type: boolean - default: false - - - variable: workload - group: "Workload Settings" - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: main - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: type - label: Type (Advanced) - schema: - type: string - default: Deployment - enum: - - value: Deployment - description: Deployment - - value: DaemonSet - description: DaemonSet - - - variable: replicas - label: Replicas (Advanced) - description: Set the number of Replicas - schema: - type: int - show_if: [["type", "!=", "DaemonSet"]] - default: 1 - - - variable: podSpec - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: containers - label: Containers - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: Main Container - schema: - additional_attrs: true - type: dict - attrs: - - - variable: env - group: App Configuration - label: Image Environment - schema: - additional_attrs: true - type: dict - attrs: - - variable: RADARR__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 Settings" - schema: - type: string - default: "Etc/UTC" - $ref: - - "definitions/timezone" - - - variable: podOptions - group: "General Settings" - label: "Global Pod Options (Advanced)" - schema: - additional_attrs: true - type: dict - attrs: - - variable: expertPodOpts - label: "Expert - Pod Options" - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hostNetwork - label: "Host Networking" - schema: - type: boolean - default: false - - variable: dnsConfig - label: "DNS Configuration" - schema: - type: dict - additional_attrs: true - attrs: - - variable: options - label: "Options" - schema: - type: list - default: [{"name": "ndots", "value": "1"}] - items: - - variable: optionsEntry - label: "Option Entry" - schema: - type: dict - additional_attrs: true - attrs: - - variable: name - label: "Name" - schema: - type: string - required: true - - variable: value - label: "Value" - schema: - type: string - - variable: nameservers - label: "Nameservers" - schema: - type: list - default: [] - items: - - variable: nsEntry - label: "Nameserver Entry" - schema: - type: string - required: true - - variable: searches - label: "Searches" - schema: - type: list - default: [] - items: - - variable: searchEntry - label: "Search Entry" - schema: - type: string - required: true - - - variable: imagePullSecretList - group: "General Settings" - label: "Image Pull Secrets" - schema: - type: list - default: [] - items: - - variable: pullsecretentry - label: "Pull Secret" - schema: - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: true - - variable: data - label: Data - schema: - type: dict - additional_attrs: true - attrs: - - variable: registry - label: "Registry" - schema: - type: string - required: true - default: "https://index.docker.io/v1/" - - variable: username - label: "Username" - schema: - type: string - required: true - default: "" - - variable: password - label: "Password" - schema: - type: string - required: true - private: true - default: "" - - variable: email - label: "Email" - schema: - type: string - required: true - default: "" - - - variable: service - group: Networking and Services - label: Configure Service(s) - schema: - additional_attrs: true - type: dict - attrs: - - - variable: 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: 7878 - required: true - - variable: serviceexpert - group: Networking and Services - label: Show Expert Config - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - - variable: scaleExternalInterface - description: Add External Interfaces - label: Add external Interfaces - group: Networking - schema: - type: list - items: - - variable: interfaceConfiguration - description: Interface Configuration - label: Interface Configuration - schema: - additional_attrs: true - type: dict - $ref: - - "normalize/interfaceConfiguration" - attrs: - - variable: hostInterface - description: Please Specify Host Interface - label: Host Interface - schema: - type: string - required: true - $ref: - - "definitions/interface" - - variable: ipam - description: Define how IP Address will be managed - label: IP Address Management - schema: - additional_attrs: true - type: dict - required: true - attrs: - - variable: type - description: Specify type for IPAM - label: IPAM Type - schema: - type: string - required: true - enum: - - value: dhcp - description: Use DHCP - - value: static - description: Use Static IP - - variable: staticIPConfigurations - label: Static IP Addresses - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticIP - label: Static IP - schema: - type: ipaddr - cidr: true - - variable: staticRoutes - label: Static Routes - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticRouteConfiguration - label: Static Route Configuration - schema: - additional_attrs: true - type: dict - attrs: - - variable: destination - label: Destination - schema: - type: ipaddr - cidr: true - required: true - - variable: gateway - label: Gateway - schema: - type: ipaddr - cidr: false - required: true - - - variable: serviceList - label: Add Manual Custom Services - group: Networking and Services - schema: - type: list - default: [] - items: - - variable: serviceListEntry - label: Custom Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the service - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: LoadBalancer - description: LoadBalancer (Expose Ports) - - value: ClusterIP - description: ClusterIP (Do Not Expose Ports) - - value: Simple - description: Deprecated CHANGE THIS - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: advancedsvcset - label: Show Advanced Service Settings - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: externalIPs - label: "External IP's" - description: "External IP's" - schema: - type: list - default: [] - items: - - variable: externalIP - label: External IP - schema: - type: string - - variable: ipFamilyPolicy - label: IP Family Policy - description: Specify the IP Policy - schema: - type: string - default: SingleStack - enum: - - value: SingleStack - description: SingleStack - - value: PreferDualStack - description: PreferDualStack - - value: RequireDualStack - description: RequireDualStack - - variable: ipFamilies - label: IP Families - description: (Advanced) The IP Families that should be used - schema: - type: list - default: [] - items: - - variable: ipFamily - label: IP Family - schema: - type: string - - variable: portsList - label: Additional Service Ports - schema: - type: list - default: [] - items: - - variable: portsListEntry - label: Custom ports - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Port - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Port Name - schema: - type: string - default: "" - - variable: protocol - label: Port Type - schema: - type: string - default: tcp - enum: - - value: http - description: HTTP - - value: https - description: HTTPS - - value: tcp - description: TCP - - value: udp - description: UDP - - variable: targetPort - label: Target Port - description: This port exposes the container port on the service - schema: - type: int - required: true - - variable: port - label: Container Port - schema: - type: int - required: true - - - variable: persistence - label: Integrated Persistent Storage - description: Integrated Persistent Storage - group: Storage and 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: 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: Storage and Persistence - schema: - type: list - default: [] - items: - - variable: persistenceListEntry - label: Custom Storage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the storage - schema: - type: boolean - default: true - hidden: true - - variable: type - label: Type of Storage - description: Sets the persistence type, Anything other than PVC could break rollback! - schema: - type: string - default: hostPath - enum: - - value: pvc - description: PVC - - value: hostPath - description: Host Path - - value: emptyDir - description: emptyDir - - value: nfs - description: NFS Share - - variable: server - label: NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: path - label: Path on NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: iscsi - label: iSCSI Options - schema: - show_if: [["type", "=", "iscsi"]] - type: dict - additional_attrs: true - attrs: - - variable: targetPortal - label: targetPortal - schema: - type: string - required: true - default: "" - - variable: iqn - label: iqn - schema: - type: string - required: true - default: "" - - variable: lun - label: lun - schema: - type: int - default: 0 - - variable: authSession - label: authSession - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: authDiscovery - label: authDiscovery - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: autoPermissions - label: Automatic Permissions Configuration - description: Automatically set permissions - schema: - show_if: [["type", "!=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: chown - label: Run CHOWN - description: | - It will run CHOWN on the path with the given fsGroup - schema: - type: boolean - default: false - - variable: chmod - label: Run CHMOD - description: | - It will run CHMOD on the path with the given value
        - Format should be 3 digits, e.g. 770 - schema: - type: string - valid_chars: '[0-9]{3}' - default: "" - - variable: recursive - label: Recursive - description: | - It will run CHOWN and CHMOD recursively - schema: - type: boolean - default: false - - variable: readOnly - label: Read Only - schema: - type: boolean - default: false - - variable: hostPath - label: Host Path - description: Path inside the container the storage is mounted - schema: - show_if: [["type", "=", "hostPath"]] - type: hostpath - - variable: mountPath - label: Mount Path - description: Path inside the container the storage is mounted - schema: - type: string - default: "" - required: true - valid_chars: '^\/([a-zA-Z0-9._-]+(\s?[a-zA-Z0-9._-]+|\/?))+$' - - variable: medium - label: EmptyDir Medium - schema: - show_if: [["type", "=", "emptyDir"]] - type: string - default: "" - enum: - - value: "" - description: Default - - value: Memory - description: Memory - - variable: size - label: Size Quotum of Storage - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: 256Gi - - variable: storageClass - label: 'storageClass (Advanced)' - description: 'sets the storageClass to something other than iX default. Only for advanced usecases!' - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: "" - - variable: static - label: 'Static Fixed PVC Bindings (Experimental)' - description: Link a PVC to a specific storage location - schema: - show_if: [["type", "=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: mode - label: mode - description: | - disabled: use normal dynamic PVCs - smb: connect to an SMB share - nfs: connect to an NFS share - schema: - type: string - default: "disabled" - enum: - - value: "disabled" - description: disabled - - value: smb - description: smb - - value: nfs - description: nfs - - variable: server - label: Server - description: server to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "myserver" - - variable: share - label: Share - description: share to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "/myshare" - - variable: user - label: User - description: connecting user - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "myuser" - - variable: domain - label: Domain - description: user domain - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: password - label: Password - description: connecting password - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: volumeSnapshots - label: 'Volume Snapshots (Experimental)' - description: Add an entry to the list to force creation of a volumeSnapshot of this PVC - schema: - show_if: [["type", "=", "pvc"]] - type: list - default: [] - items: - - variable: volumeSnapshotEntry - label: Custom volumeSnapshot - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - description: 'WARNING: renaming this, means deletion of the snapshot with the old name!' - schema: - type: string - default: "mysnapshot" - required: true - - variable: volumeSnapshotClassName - label: 'volumeSnapshot Class Name (Advanced)' - description: For use with PVCs using a non-default storageClass - schema: - type: string - default: "" - - - variable: ingress - label: "" - group: Ingress - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: Main Ingress - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name (Optional) - description: Defaults to chart name - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description (Optional) - description: Defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: icon - label: Icon (Optional) - description: Defaults to chart icon - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - variable: widget - label: Widget Settings - schema: - type: dict - additional_attrs: true - show_if: [["enabled", "=", true]] - attrs: - - variable: enabled - label: Enable Widget - description: When disabled all widget annotations are skipped. - schema: - type: boolean - default: true - - variable: custom - label: Options - schema: - type: dict - additional_attrs: true - attrs: - - variable: key - label: API-key (key) - schema: - type: string - default: "" - - variable: customkv - label: Custom Options - schema: - type: list - default: [] - items: - - variable: option - label: Option - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - default: "" - required: true - - variable: value - label: Value - schema: - type: string - default: "" - required: true - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - - variable: ingressList - label: Add Manual Custom Ingresses - group: Ingress - schema: - type: list - default: [] - items: - - variable: ingressListEntry - label: Custom Ingress - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: ingressClassName - label: IngressClass Name - schema: - type: string - default: "" - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: overrideService - label: Linked Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Service Name - schema: - type: string - default: "" - - variable: port - label: Service Port - schema: - type: int - - variable: tls - label: TLS-Settings - schema: - type: list - default: [] - show_if: [["certificateIssuer", "=", ""]] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your Cert-Manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: Use Custom Secret (Advanced) - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: "Allow Cross Origin Requests" - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: namespace - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description - description: defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - - variable: securityContext - group: Security and Permissions - label: Security Context - schema: - additional_attrs: true - type: dict - attrs: - - variable: container - label: Container - schema: - additional_attrs: true - type: dict - attrs: - # Settings from questions.yaml get appended here on a per-app basis - - - variable: runAsUser - label: "runAsUser" - description: "The UserID of the user running the application" - schema: - type: int - default: 568 - - variable: runAsGroup - label: "runAsGroup" - description: "The groupID 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 and Devices - label: "Resource Limits" - schema: - additional_attrs: true - type: dict - attrs: - - variable: limits - label: Advanced Limit Resource Consumption - schema: - additional_attrs: true - type: dict - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 4000m - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: RAM - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 8Gi - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: 'gpu.intel.com/i915' - label: Add Intel i915 GPUs - schema: - type: int - default: 0 - - variable: 'nvidia.com/gpu' - label: Add NVIDIA GPUs (Experimental) - schema: - type: int - default: 0 - - variable: 'amd.com/gpu' - label: Add AMD GPUs - schema: - type: int - default: 0 - - variable: requests - label: "Minimum Resources Required (request)" - schema: - additional_attrs: true - type: dict - hidden: true - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 10m - hidden: true - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: "RAM" - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 50Mi - hidden: true - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: deviceList - label: Mount USB Devices - group: Resources and Devices - schema: - type: list - default: [] - items: - - variable: deviceListEntry - label: Device - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Storage - schema: - type: boolean - default: true - - variable: type - label: (Advanced) Type of Storage - description: Sets the persistence type - schema: - type: string - default: device - hidden: true - - variable: readOnly - label: readOnly - schema: - type: boolean - default: false - - variable: hostPath - label: Host Device Path - description: Path to the device on the host system - schema: - type: path - - variable: mountPath - label: Container Device Path - description: Path inside the container the device is mounted - schema: - type: string - default: "/dev/ttyACM0" - - - variable: metrics - group: Metrics - label: Prometheus Metrics - schema: - additional_attrs: true - type: dict - attrs: - - variable: main - label: Main Metrics - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - description: Enable Prometheus Metrics - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - - variable: prometheusRule - label: PrometheusRule - description: Enable and configure Prometheus Rules for the App. - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - description: Enable Prometheus Metrics - schema: - type: boolean - default: false - # TODO: Rule List section - -# - variable: horizontalPodAutoscaler -# group: Advanced -# label: (Advanced) Horizontal Pod Autoscaler -# schema: -# type: list -# default: [] -# items: -# - variable: hpaEntry -# label: HPA Entry -# schema: -# additional_attrs: true -# type: dict -# attrs: -# - variable: name -# label: Name -# schema: -# type: string -# required: true -# default: "" -# - variable: enabled -# label: Enabled -# schema: -# type: boolean -# default: false -# show_subquestions_if: true -# subquestions: -# - variable: target -# label: Target -# description: Deployment name, Defaults to Main Deployment -# schema: -# type: string -# default: "" -# - variable: minReplicas -# label: Minimum Replicas -# schema: -# type: int -# default: 1 -# - variable: maxReplicas -# label: Maximum Replicas -# schema: -# type: int -# default: 5 -# - variable: targetCPUUtilizationPercentage -# label: Target CPU Utilization Percentage -# schema: -# type: int -# default: 80 -# - variable: targetMemoryUtilizationPercentage -# label: Target Memory Utilization Percentage -# schema: -# type: int -# default: 80 - - variable: networkPolicy - group: Advanced - label: (Advanced) Network Policy - schema: - type: list - default: [] - items: - - variable: netPolicyEntry - label: Network Policy Entry - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - default: "" - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: policyType - label: Policy Type - schema: - type: string - default: "" - enum: - - value: "" - description: Default - - value: ingress - description: Ingress - - value: egress - description: Egress - - value: ingress-egress - description: Ingress and Egress - - variable: egress - label: Egress - schema: - type: list - default: [] - items: - - variable: egressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: to - label: To - schema: - type: list - default: [] - items: - - variable: toEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - variable: ingress - label: Ingress - schema: - type: list - default: [] - items: - - variable: ingressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: from - label: From - schema: - type: list - default: [] - items: - - variable: fromEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - - variable: addons - group: Addons - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: codeserver - label: Codeserver - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: service - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: NodePort - description: Deprecated CHANGE THIS - - value: ClusterIP - description: ClusterIP - - value: LoadBalancer - description: LoadBalancer - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: ports - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: codeserver - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - default: 36107 - - variable: ingress - label: "Ingress" - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - variable: scaleCert - label: 'Use TrueNAS SCALE Certificate (Deprecated)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: int - $ref: - - "definitions/certificate" - - variable: envList - label: Codeserver Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: netshoot - label: Netshoot - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: envList - label: Netshoot Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: vpn - label: VPN - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Type - schema: - type: string - default: disabled - enum: - - value: disabled - description: disabled - - value: gluetun - description: Gluetun - - value: tailscale - description: Tailscale - - value: openvpn - description: OpenVPN (Deprecated) - - value: wireguard - description: Wireguard (Deprecated) - - variable: openvpn - label: OpenVPN Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "openvpn"]] - attrs: - - variable: username - label: Authentication Username (Optional) - description: Authentication Username, Optional - schema: - type: string - default: "" - - variable: password - label: Authentication Password - description: Authentication Credentials - schema: - type: string - show_if: [["username", "!=", ""]] - default: "" - required: true - - variable: tailscale - label: Tailscale Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "tailscale"]] - attrs: - - variable: authkey - label: Authentication Key - description: Provide an auth key to automatically authenticate the node as your user account. - schema: - type: string - private: true - default: "" - - variable: auth_once - label: Auth Once - description: Only attempt to log in if not already logged in. - schema: - type: boolean - default: true - - variable: accept_dns - label: Accept DNS - description: Accept DNS configuration from the admin console. - schema: - type: boolean - default: false - - variable: userspace - label: Userspace - description: Userspace Networking mode allows running Tailscale where you do not have access to create a VPN tunnel device. - schema: - type: boolean - default: false - - variable: routes - label: Routes - description: Expose physical subnet routes to your entire Tailscale network. - schema: - type: string - default: "" - - variable: dest_ip - label: Destination IP - description: Tells the DNAT mechanism which Destination IP to set in the IP header, and where to send packets that are matched. - schema: - type: string - default: "" - - variable: sock5_server - label: Sock5 Server - description: The address on which to listen for SOCKS5 proxying into the tailscale net. - schema: - type: string - default: "" - - variable: outbound_http_proxy_listen - label: Outbound HTTP Proxy Listen - description: The address on which to listen for HTTP proxying into the tailscale net. - schema: - type: string - default: "" - - variable: extra_args - label: Extra Args - description: Extra Args - schema: - type: string - default: "" - - variable: daemon_extra_args - label: Tailscale Daemon Extra Args - description: Tailscale Daemon Extra Args - schema: - type: string - default: "" - - variable: killSwitch - label: Enable Killswitch - schema: - type: boolean - show_if: [["type", "!=", "disabled"]] - default: true - - variable: excludedNetworks_IPv4 - label: Killswitch Excluded IPv4 networks - description: List of Killswitch Excluded IPv4 Addresses - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv4 - label: IPv4 Network - schema: - type: string - required: true - - variable: excludedNetworks_IPv6 - label: Killswitch Excluded IPv6 networks - description: "List of Killswitch Excluded IPv6 Addresses" - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv6 - label: IPv6 Network - schema: - type: string - required: true - - variable: configFile - label: VPN Config File Location - schema: - type: string - show_if: [["type", "!=", "disabled"]] - default: "" - - - variable: envList - label: VPN Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - max_length: 10240 - - - variable: docs - group: Documentation - label: Please read the documentation at https://truecharts.org - description: Please read the documentation at -
        https://truecharts.org - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDocs - label: I have checked the documentation - schema: - type: boolean - default: true - - variable: donateNag - group: Documentation - label: Please consider supporting TrueCharts, see https://truecharts.org/sponsor - description: Please consider supporting TrueCharts, see -
        https://truecharts.org/sponsor - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDonate - label: I have considered donating - schema: - type: boolean - default: true - hidden: true - diff --git a/stable/radarr/20.2.1/templates/NOTES.txt b/stable/radarr/20.2.1/templates/NOTES.txt deleted file mode 100644 index efcb74cb77..0000000000 --- a/stable/radarr/20.2.1/templates/NOTES.txt +++ /dev/null @@ -1 +0,0 @@ -{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/radarr/20.2.1/templates/common.yaml b/stable/radarr/20.2.1/templates/common.yaml deleted file mode 100644 index 3c93f57861..0000000000 --- a/stable/radarr/20.2.1/templates/common.yaml +++ /dev/null @@ -1,11 +0,0 @@ -{{/* Make sure all variables are set properly */}} -{{- include "tc.v1.common.loader.init" . -}} - -{{/* Disable [exportarr] if requested */}} -{{- if not .Values.metrics.main.enabled -}} - {{- $_ := set .Values.workload.exportarr "enabled" false -}} - {{- $_ := set .Values.service.metrics "enabled" false -}} -{{- end -}} - -{{/* Render the templates */}} -{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/radarr/20.2.1/values.yaml b/stable/radarr/20.2.1/values.yaml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/stable/radarr/21.7.10/.helmignore b/stable/radarr/21.7.10/.helmignore deleted file mode 100644 index 77ca5567b2..0000000000 --- a/stable/radarr/21.7.10/.helmignore +++ /dev/null @@ -1,30 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ -# OWNERS file for Kubernetes -OWNERS -# helm-docs templates -*.gotmpl -# docs folder -/docs -# icon -icon.png diff --git a/stable/radarr/21.7.10/CHANGELOG.md b/stable/radarr/21.7.10/CHANGELOG.md deleted file mode 100644 index 941abb8a21..0000000000 --- a/stable/radarr/21.7.10/CHANGELOG.md +++ /dev/null @@ -1,3 +0,0 @@ -*for the complete changelog, please refer to the website* - -**Important:** \ No newline at end of file diff --git a/stable/radarr/21.7.10/Chart.yaml b/stable/radarr/21.7.10/Chart.yaml deleted file mode 100644 index 33058bf24a..0000000000 --- a/stable/radarr/21.7.10/Chart.yaml +++ /dev/null @@ -1,38 +0,0 @@ -annotations: - max_scale_version: 24.04.0 - min_scale_version: 23.10.0 - 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: 5.4.6.8723 -dependencies: - - name: common - version: 20.4.1 - repository: oci://tccr.io/truecharts - condition: "" - alias: "" - tags: [] - import-values: [] -deprecated: false -description: A fork of Sonarr to work with movies à la Couchpotato -home: https://truecharts.org/charts/stable/radarr -icon: https://truecharts.org/img/hotlink-ok/chart-icons/radarr.webp -keywords: - - radarr - - torrent - - usenet -kubeVersion: ">=1.24.0-0" -maintainers: - - name: TrueCharts - email: info@truecharts.org - url: https://truecharts.org -name: radarr -sources: - - https://github.com/Radarr/Radarr - - https://github.com/truecharts/charts/tree/master/charts/stable/radarr - - https://ghcr.io/onedr0p/exportarr - - https://ghcr.io/onedr0p/radarr -type: application -version: 21.7.10 diff --git a/stable/radarr/21.7.10/README.md b/stable/radarr/21.7.10/README.md deleted file mode 100644 index 2514b538f5..0000000000 --- a/stable/radarr/21.7.10/README.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -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/radarr) - -**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/guides/scale-intro). - -## Configuration Options - -To view the chart specific options, please view Values.yaml included in the chart. - -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/ - -## 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/radarr - -## 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/radarr/21.7.10/app-changelog.md b/stable/radarr/21.7.10/app-changelog.md deleted file mode 100644 index aafd9e6917..0000000000 --- a/stable/radarr/21.7.10/app-changelog.md +++ /dev/null @@ -1,67 +0,0 @@ - - -## [radarr-21.7.10](https://github.com/truecharts/charts/compare/radarr-21.4.0...radarr-21.7.10) (2024-04-26) - -### Chore - - - -- bump charts to ensure new icons are released - -- update groups html ([#21121](https://github.com/truecharts/charts/issues/21121)) - -- bump charts to release new docs to fix broken links - -- bump everything to regenerate readme's and site index - -- bump everything to release new doc pages - -- update container image common to v20.3.3[@3876ba5](https://github.com/3876ba5) by renovate ([#20478](https://github.com/truecharts/charts/issues/20478)) - -- update container image common to v20.3.2[@0722ebb](https://github.com/0722ebb) by renovate ([#20334](https://github.com/truecharts/charts/issues/20334)) - -- update container image ghcr.io/onedr0p/radarr to 5.4.6.8723[@cee5d4a](https://github.com/cee5d4a) by renovate ([#20767](https://github.com/truecharts/charts/issues/20767)) - -- update container image ghcr.io/onedr0p/radarr to v5.4.6.8723[@b480add](https://github.com/b480add) by renovate ([#20705](https://github.com/truecharts/charts/issues/20705)) - -- update container image common to v20.3.6[@27edfed](https://github.com/27edfed) by renovate ([#20599](https://github.com/truecharts/charts/issues/20599)) - -- update container image common to v20.3.5[@aedd88a](https://github.com/aedd88a) by renovate ([#20535](https://github.com/truecharts/charts/issues/20535)) - -- update container image common to v20.3.4[@d7e1b23](https://github.com/d7e1b23) by renovate ([#20527](https://github.com/truecharts/charts/issues/20527)) - -- update container image common to v20.3.11[@dae6129](https://github.com/dae6129) by renovate ([#20875](https://github.com/truecharts/charts/issues/20875)) - -- update container image ghcr.io/onedr0p/radarr to 5.3.6.8612[@4dcf3bb](https://github.com/4dcf3bb) by renovate ([#20427](https://github.com/truecharts/charts/issues/20427)) - -- update container image common to v20.3.7[@8cf9fc9](https://github.com/8cf9fc9) by renovate ([#20819](https://github.com/truecharts/charts/issues/20819)) - -- update container image ghcr.io/onedr0p/exportarr to v2.0.1[@727e7bc](https://github.com/727e7bc) by renovate ([#20284](https://github.com/truecharts/charts/issues/20284)) - -- update container image ghcr.io/onedr0p/radarr to 5.3.6.8612[@e9586ce](https://github.com/e9586ce) by renovate ([#20067](https://github.com/truecharts/charts/issues/20067)) - -- update container image common to v20.2.10[@6f99c97](https://github.com/6f99c97) by renovate ([#19876](https://github.com/truecharts/charts/issues/19876)) - -- update container image common to v20.2.9[@10fd6c5](https://github.com/10fd6c5) by renovate ([#19817](https://github.com/truecharts/charts/issues/19817)) - -- update container image common to v20.2.4[@f245f5c](https://github.com/f245f5c) by renovate ([#19731](https://github.com/truecharts/charts/issues/19731)) - -- update container image common to v20.2.3[@06e462e](https://github.com/06e462e) by renovate ([#19673](https://github.com/truecharts/charts/issues/19673)) - -- update container image common to v20.2.2[@f7d0b92](https://github.com/f7d0b92) by renovate ([#19432](https://github.com/truecharts/charts/issues/19432)) - -- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) - -- update container image ghcr.io/onedr0p/radarr to 5.3.6.8612[@431f4d8](https://github.com/431f4d8) by renovate ([#19257](https://github.com/truecharts/charts/issues/19257)) - -### Chore - - - -- rework SCALE catagories/groups to match helm and remove deprecated charts ([#21111](https://github.com/truecharts/charts/issues/21111)) - -### Fix - - - -- replace serviceexpert with externalinterfaces/networking-group in the SCALE GUI ([#21154](https://github.com/truecharts/charts/issues/21154)) \ No newline at end of file diff --git a/stable/radarr/21.7.10/app-readme.md b/stable/radarr/21.7.10/app-readme.md deleted file mode 100644 index 94d7185029..0000000000 --- a/stable/radarr/21.7.10/app-readme.md +++ /dev/null @@ -1,8 +0,0 @@ -A fork of Sonarr to work with movies à la Couchpotato - -This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/radarr](https://truecharts.org/charts/stable/radarr) - ---- - -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/radarr/21.7.10/charts/common-20.3.11.tgz b/stable/radarr/21.7.10/charts/common-20.3.11.tgz deleted file mode 100644 index 010f5b5a245d342f6f0d2e0ef95338a45ead19b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99404 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%0AZSzDiWTe))Y`J0OOCXlO`z1O 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 P00960fC|;b09p(Hd4E&t diff --git a/stable/radarr/21.7.10/icon-small.webp b/stable/radarr/21.7.10/icon-small.webp deleted file mode 100644 index ff16f4b0ee1a3a54a5addfb5f515a70eb40c4b0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 764 zcmVce1Z;?bU!W`D`Q`m=z^c19S>}R z&l$Wuj3*8@cgQUrFPPpAP_pronX(^e<3+RWkW0qPCftfS0-6i20bzI(c_XApVuR6$ z>Ika3C~kxjEb8$nVrRwaQU(_R8rP&gnM0ssKe2>_h|Dj)zL00ICsC9nc?$_!xk1Q-pl z8;*S7I*R=OI!C;)DP#Zxv|r-0F7E>j6v+H({X6UjPhmDIU%V#l8$>$8{P=&XFqKA z+dP3`_TD#IFMY^T{?h^g=0A3{Yswcdf7WP)((QvLY?#H_OHhi0IA0Dxq zeE`3xFp#EPU&H(cG-3RHzZ}9CQNiul22bNY(~aSR>8*dF46t|17H9hEU9eA8L*w6b zcJ$r1KlVCbxmUFKHAC1a)Ph%x1m%w27!+)1Ko|JCXm-qUn`>C(M0glEww{_4E9KX74lI9z}J(pjY1&G+Rpa1}*v15Ax diff --git a/stable/radarr/21.7.10/icon.webp b/stable/radarr/21.7.10/icon.webp deleted file mode 100644 index ead7b8c06c4670b3164e33a4364e80fe070d9b31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5224 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 - 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: 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: 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/radarr/21.7.10/templates/NOTES.txt b/stable/radarr/21.7.10/templates/NOTES.txt deleted file mode 100644 index efcb74cb77..0000000000 --- a/stable/radarr/21.7.10/templates/NOTES.txt +++ /dev/null @@ -1 +0,0 @@ -{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/radarr/21.7.10/templates/common.yaml b/stable/radarr/21.7.10/templates/common.yaml deleted file mode 100644 index 3c93f57861..0000000000 --- a/stable/radarr/21.7.10/templates/common.yaml +++ /dev/null @@ -1,11 +0,0 @@ -{{/* Make sure all variables are set properly */}} -{{- include "tc.v1.common.loader.init" . -}} - -{{/* Disable [exportarr] if requested */}} -{{- if not .Values.metrics.main.enabled -}} - {{- $_ := set .Values.workload.exportarr "enabled" false -}} - {{- $_ := set .Values.service.metrics "enabled" false -}} -{{- end -}} - -{{/* Render the templates */}} -{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/radarr/21.7.10/values.yaml b/stable/radarr/21.7.10/values.yaml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/stable/radarr/21.7.11/.helmignore b/stable/radarr/21.7.11/.helmignore deleted file mode 100644 index 77ca5567b2..0000000000 --- a/stable/radarr/21.7.11/.helmignore +++ /dev/null @@ -1,30 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ -# OWNERS file for Kubernetes -OWNERS -# helm-docs templates -*.gotmpl -# docs folder -/docs -# icon -icon.png diff --git a/stable/radarr/21.7.11/CHANGELOG.md b/stable/radarr/21.7.11/CHANGELOG.md deleted file mode 100644 index 941abb8a21..0000000000 --- a/stable/radarr/21.7.11/CHANGELOG.md +++ /dev/null @@ -1,3 +0,0 @@ -*for the complete changelog, please refer to the website* - -**Important:** \ No newline at end of file diff --git a/stable/radarr/21.7.11/Chart.yaml b/stable/radarr/21.7.11/Chart.yaml deleted file mode 100644 index d9daedd849..0000000000 --- a/stable/radarr/21.7.11/Chart.yaml +++ /dev/null @@ -1,38 +0,0 @@ -annotations: - max_scale_version: 24.04.0 - min_scale_version: 23.10.0 - 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: 5.4.6.8723 -dependencies: - - name: common - version: 20.4.1 - repository: oci://tccr.io/truecharts - condition: "" - alias: "" - tags: [] - import-values: [] -deprecated: false -description: A fork of Sonarr to work with movies à la Couchpotato -home: https://truecharts.org/charts/stable/radarr -icon: https://truecharts.org/img/hotlink-ok/chart-icons/radarr.webp -keywords: - - radarr - - torrent - - usenet -kubeVersion: ">=1.24.0-0" -maintainers: - - name: TrueCharts - email: info@truecharts.org - url: https://truecharts.org -name: radarr -sources: - - https://github.com/Radarr/Radarr - - https://github.com/truecharts/charts/tree/master/charts/stable/radarr - - https://ghcr.io/onedr0p/exportarr - - https://ghcr.io/onedr0p/radarr -type: application -version: 21.7.11 diff --git a/stable/radarr/21.7.11/README.md b/stable/radarr/21.7.11/README.md deleted file mode 100644 index 2514b538f5..0000000000 --- a/stable/radarr/21.7.11/README.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -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/radarr) - -**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/guides/scale-intro). - -## Configuration Options - -To view the chart specific options, please view Values.yaml included in the chart. - -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/ - -## 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/radarr - -## 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/radarr/21.7.11/app-changelog.md b/stable/radarr/21.7.11/app-changelog.md deleted file mode 100644 index 773fcc3855..0000000000 --- a/stable/radarr/21.7.11/app-changelog.md +++ /dev/null @@ -1,69 +0,0 @@ - - -## [radarr-21.7.11](https://github.com/truecharts/charts/compare/radarr-21.4.0...radarr-21.7.11) (2024-04-29) - -### Chore - - - -- bump charts to ensure new icons are released - -- bump everything to release new doc pages - -- update groups html ([#21121](https://github.com/truecharts/charts/issues/21121)) - -- bump charts to release new docs to fix broken links - -- bump everything to regenerate readme's and site index - -- update container image common to v20.3.4[@d7e1b23](https://github.com/d7e1b23) by renovate ([#20527](https://github.com/truecharts/charts/issues/20527)) - -- update container image ghcr.io/onedr0p/radarr to 5.3.6.8612[@4dcf3bb](https://github.com/4dcf3bb) by renovate ([#20427](https://github.com/truecharts/charts/issues/20427)) - -- update container image common to v20.3.7[@8cf9fc9](https://github.com/8cf9fc9) by renovate ([#20819](https://github.com/truecharts/charts/issues/20819)) - -- update container image ghcr.io/onedr0p/radarr to 5.4.6.8723[@cee5d4a](https://github.com/cee5d4a) by renovate ([#20767](https://github.com/truecharts/charts/issues/20767)) - -- update container image ghcr.io/onedr0p/radarr to v5.4.6.8723[@b480add](https://github.com/b480add) by renovate ([#20705](https://github.com/truecharts/charts/issues/20705)) - -- update container image common to v20.3.6[@27edfed](https://github.com/27edfed) by renovate ([#20599](https://github.com/truecharts/charts/issues/20599)) - -- update container image common to v20.3.5[@aedd88a](https://github.com/aedd88a) by renovate ([#20535](https://github.com/truecharts/charts/issues/20535)) - -- update container image common to v20.3.12[@3303278](https://github.com/3303278) by renovate ([#21384](https://github.com/truecharts/charts/issues/21384)) - -- update container image common to v20.3.3[@3876ba5](https://github.com/3876ba5) by renovate ([#20478](https://github.com/truecharts/charts/issues/20478)) - -- update container image common to v20.3.11[@dae6129](https://github.com/dae6129) by renovate ([#20875](https://github.com/truecharts/charts/issues/20875)) - -- update container image common to v20.3.2[@0722ebb](https://github.com/0722ebb) by renovate ([#20334](https://github.com/truecharts/charts/issues/20334)) - -- update container image ghcr.io/onedr0p/exportarr to v2.0.1[@727e7bc](https://github.com/727e7bc) by renovate ([#20284](https://github.com/truecharts/charts/issues/20284)) - -- update container image ghcr.io/onedr0p/radarr to 5.3.6.8612[@e9586ce](https://github.com/e9586ce) by renovate ([#20067](https://github.com/truecharts/charts/issues/20067)) - -- update container image common to v20.2.10[@6f99c97](https://github.com/6f99c97) by renovate ([#19876](https://github.com/truecharts/charts/issues/19876)) - -- update container image common to v20.2.9[@10fd6c5](https://github.com/10fd6c5) by renovate ([#19817](https://github.com/truecharts/charts/issues/19817)) - -- update container image common to v20.2.4[@f245f5c](https://github.com/f245f5c) by renovate ([#19731](https://github.com/truecharts/charts/issues/19731)) - -- update container image common to v20.2.3[@06e462e](https://github.com/06e462e) by renovate ([#19673](https://github.com/truecharts/charts/issues/19673)) - -- update container image common to v20.2.2[@f7d0b92](https://github.com/f7d0b92) by renovate ([#19432](https://github.com/truecharts/charts/issues/19432)) - -- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) - -- update container image ghcr.io/onedr0p/radarr to 5.3.6.8612[@431f4d8](https://github.com/431f4d8) by renovate ([#19257](https://github.com/truecharts/charts/issues/19257)) - -### Chore - - - -- rework SCALE catagories/groups to match helm and remove deprecated charts ([#21111](https://github.com/truecharts/charts/issues/21111)) - -### Fix - - - -- replace serviceexpert with externalinterfaces/networking-group in the SCALE GUI ([#21154](https://github.com/truecharts/charts/issues/21154)) \ No newline at end of file diff --git a/stable/radarr/21.7.11/app-readme.md b/stable/radarr/21.7.11/app-readme.md deleted file mode 100644 index 94d7185029..0000000000 --- a/stable/radarr/21.7.11/app-readme.md +++ /dev/null @@ -1,8 +0,0 @@ -A fork of Sonarr to work with movies à la Couchpotato - -This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/radarr](https://truecharts.org/charts/stable/radarr) - ---- - -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/radarr/21.7.11/charts/common-20.3.12.tgz b/stable/radarr/21.7.11/charts/common-20.3.12.tgz deleted file mode 100644 index 621bd9e5a5277eda78f0f106b46b6afdc6f56acd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99407 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
          iZ#x$K}*@0J4scA@_XsWr>MiG1UB+r_n|MJ)K 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 S{{H{~0RR7!&lutWS_}Y48_RhB diff --git a/stable/radarr/21.7.11/icon-small.webp b/stable/radarr/21.7.11/icon-small.webp deleted file mode 100644 index ff16f4b0ee1a3a54a5addfb5f515a70eb40c4b0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 764 zcmVce1Z;?bU!W`D`Q`m=z^c19S>}R z&l$Wuj3*8@cgQUrFPPpAP_pronX(^e<3+RWkW0qPCftfS0-6i20bzI(c_XApVuR6$ z>Ika3C~kxjEb8$nVrRwaQU(_R8rP&gnM0ssKe2>_h|Dj)zL00ICsC9nc?$_!xk1Q-pl z8;*S7I*R=OI!C;)DP#Zxv|r-0F7E>j6v+H({X6UjPhmDIU%V#l8$>$8{P=&XFqKA z+dP3`_TD#IFMY^T{?h^g=0A3{Yswcdf7WP)((QvLY?#H_OHhi0IA0Dxq zeE`3xFp#EPU&H(cG-3RHzZ}9CQNiul22bNY(~aSR>8*dF46t|17H9hEU9eA8L*w6b zcJ$r1KlVCbxmUFKHAC1a)Ph%x1m%w27!+)1Ko|JCXm-qUn`>C(M0glEww{_4E9KX74lI9z}J(pjY1&G+Rpa1}*v15Ax diff --git a/stable/radarr/21.7.11/icon.webp b/stable/radarr/21.7.11/icon.webp deleted file mode 100644 index ead7b8c06c4670b3164e33a4364e80fe070d9b31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5224 zcmV-u6qoB#Nk&Fs6aWBMMM6+kP&il$0000G0001$005N$06|PpNY4ZS00E$d{r}-s z`UiE&oF3b@ZI#bvk8#Ch?cKZL*tTukwyhf3XOdMqRXUm9B1vcF|NsB4_97x6Ns=2k zs`Bj1jidkqcmScPsaBmHQ*E}bFYSMcqFC(pmH5}MFSpukQ+w2@WgGK(& z*o^b17mSIE<_n{F~jP{AUfVJD-B) zKHF(+$o3~4=RR^tKtaj%Xif)asb$#-RNZN*%^ISBCUri3CkDIAQd(%zD!fc70woCasEr2s(Y3mKrmVpL0uJHVxPTB!}8wpZ{;#V(yH0)GK+ z{UuOMo?v)J<&T9jH)IUgE2rUA4{)pJYD2{YZ&9&4xp0f(h%2!ixVAh|A$2bS=U%R> zEV!G^`9~StvxAk;BLlcMqnDz6+rvMe9lFZtBZDk+{-q3ZpGt|?2Pn8dqB4^0IABkz zgqp_z2~X6lq7E z5K@{v9Z+(*6(_8#0c3<&eH&2nb_PylI&s4J7f$>o;)M8r2C&+_u{!B8a3TY%Cn$`b zHf4a-SUs6z6~$l`@wIz}5wF@|l}V^^3?q)$z$rtO9*R^p53kH;_$hoi6^>L!9jn_1 ztZr&ByVW9AWR76TO1x#tsm8N+>pQ@`Q^tzm7QE}K5_5R5p_1d#V5C#W7Q#uQ#U2vou?!` zowHj(G1Y`qM{_t*-QU=E$`fK8762&QYiG>@TwDd#P1tRswQ8n%xe_6;);mP|bDVB!!toygoozSyznsDI)( zH!fC3*t5=P%Kv8H=sJW|J1>0f@=)2VU5^)bW_v1T)6e$3)}GhX&1s zT2gZCmsZsbgbM?ze6r!P-Klz0uW;HgZ%n8XK)AAc^0;NEFXgKki+1VsvT@1P36F-? zs@H$I?eha41ed=lzD2@^1E1Tb_petgoKTbi09H^qAZiZ)0I)s)odGJA0G0qgbt;cX zq@tlAI)IQ4iE0RPyYK=YdH4MXVs+v3-`>Ayy{c;O*Svsq?;Kvvzpd+&{0FF?)Skc} ztQ{c#ay>wP*?!J@)OsQQ@9F{lNBx&r$Dl`+zwZCSAMNMvZ?tEq2mk&8-!^}M`X%zi z{P%}GR(Q_Zdu@I`sY>1M>>3-^N z7uK@N#%>qwtlmH9i_oL)5yZNOlKh&w4gbfB2?p;$o=F(S0|y*I42vdU%m*eI zkOK|d_s|sHH10>QmhByS5YVL5hnAj<23U%fy7u&|ZvNwGRAJL_U__eJ&~O?d#U2k; z-eMu%_lVkIN5WU=(KZ|CmcRzQOjv!w!X;W*iML0y@D`xR7%h!`RyXz6dLY^r9of4qL+2O5-?Qo8^C8e&4o@q=$o{d+CGHUy;wZcSS&4@5d@i-#I?wKR6tksneH6f`4 z*~HSYXv?F)kN-}GG-PPHI>Rlm6x^L}|HmJL*P3^2#?y*hqUqqLx49`R=liPIs=J3? zz4Qn%m8RQbdlUx_v{Vp^&Hf*1Ls09NJSN`Shp)=a?tfZ<|2V(uHa4jMt( z$)oeqaRUw_o**MUQEQ5cua$>)hi$KiwPmhcMV!3t&Rx3|ML;C8ZI`0`p^Ax7n2f@& ztlj88kp6$i$VvgtL86A=#iB67md{h}E0rP~xoBXeS2~rMga-D5%51>&pPLtBkfAUHNWw?mY4qeu!%4Yt`5vsM+ zYPc%kQ+Zza*629WwbH@};zm09nfmle8~5aQ9sHUs4#Ug;>ow!Ec^8kfZ85bLLY6*p zl_gwiysA#qhAq>aE;&E=M&+;g8h|u!?|p@nlw18z5tyo*ddi4WlY@iJ`e7Zgm$I&p zD0rPZ*4<8%cLI<-&fVa@W`7A_quIYZ0Ww_W$-_cVdXv`?5rRsBjr(h2oj;` zSdhCxk_H>Q+w8 zS5y-h?1tf&9M{mNXO%SR6qBIMWE#)`|w}U`{TKb5# zSeatq3S+AR<*~<9COj{Gjmqzsv#=x$EtEe%nn#LKr@44D}I30N$ zKLUN|A{tp`ox9%xul`IPyw!C?#yuu527$AwnvDLLBbN&G`&F5NQU-I9&l$0$^ySw_ zhCSkOjDzuP-I2N1_(YQZ)>;%3qyCF~ayYlFQiw0H$LI;Liph(L4r0O^rvT#61hbfJ za_G+jz_n*b!?Xzd9DiO(gVU;ygx05pis&s|-30<|_X@v+b!+!LJ(=CW)EQ+ew4v`a zDfxMu%6YYnK3`k%s=I8#YgG@tSo+IXa&Rh>547gS#Ep~Jf|y4-8GY-;V+U75i|Txd zlSYa$RydMl0Up01i;#+7S>dK;qBIAzwu!CYy5d%6xB|LKu!xnh?$_XG4kU zk9aFl&C25W+mv;n;NfE=fZmKm>CwN;#r0Bx6TC#ys0qg9jJrX-Mv~~#-|{PB3(9uM z^wpQf)Kd)ZE~{Y${Z%r1Escrw&nWW<5qt{JkKy9>^^*U7h3CB8*GBCllQ_BVE)JkzL5q#$VoFM-lfRg%_ ziQ|shKd;7KHdSMR`}+;*7Bo%E=c-!%czP05(_wtRKIBUUfUPSM84J<}>vpVR0X665 z#o!g=gS)SMl0!s?SO%*W`Cfo3K=i)N_d|KNITZD|*DqdoSYOC~!)dRAH3g&gVIF-#*c7>%}3o85On&FdmqIVbZ8eo|c&2)c$S00~P zkoCuaDp@{;bF1IkHg_(`tg^Y}XhebUGklMC*^)4sP7*z%1s9dBY@x}i z=kyU1EO6w!+tT!s7Ct|5qoI1XMQEFbC4Fgwh@wJ+)|0M_sItc7WYnXG1qc|Qt83&R zb}2saA6(34)*g)fQ722xGl>0b1_v_et&CJ8nREbfC;ZH&hk!u>g_n8-m0~YURYRZe zfEC1PEDz~t3^|n#N`B(58Mv_tup?kk1eqMw7+4hKXFg#;pYZWdl;VFbnnFwy-2K#6 zVbd0HG0W{iUoj+-X4I3-1uGY)Z+zz4lk@)pKi^5T}UCsOW81%Jh5E3+F6x*!$2m4Jnv!V9o*fnZ~PW^Fa?h<4a9!F^u67kFR zbo;Z#PPM390eYq_`CCxAlOkk+>d^1^>X$lIqI->007TqUNOHIz#g4E zG6@=?q6zbxh(4ybfBO2CZ!0`%u&xI zEv5!&=|9Wp+8|pI)uB@d78(?|_|+1+*tLW{^l~*M>#x~i$Hh|3^Mpgl{S7FZVk}HU zcszY-Mjf90*kqXo;u+4twetpLJ|>Q3Y@w7+zn%Q^MIAGZcEmC|l{D?|o6TO?9?2mY z7)IL}#g8VGO9u;I1?RF1pR5if_Z>YZm6h4laqxm`nI5?mO@-JqhzQu=h`7fh?mT}9 zR=T^c41nyFR3NmcPWums+Xu7D#*+VnkL%qS@H^u9>cnH> zjNmeqWIyCZsB-Ll`OcJbcqV~;IAHSL}l^*tgsr29Iq6YtWc-u8i-+P3Hii z(D~Nenna~{JyZVKq)0f!_ZMrOwB41NP0gJzwU#xu9Bx@ktWU6p4*=o$%{p--Ic5m#{hP%&8(LSQSxy_IN zRDTw_kES5;fEb5`Ch4@vC;Z`H8Gm|~-#+{EV3mfvPfED8WD}^=+n+uFi%c%Xt7L - 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: 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: 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/radarr/21.7.11/templates/NOTES.txt b/stable/radarr/21.7.11/templates/NOTES.txt deleted file mode 100644 index efcb74cb77..0000000000 --- a/stable/radarr/21.7.11/templates/NOTES.txt +++ /dev/null @@ -1 +0,0 @@ -{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/radarr/21.7.11/templates/common.yaml b/stable/radarr/21.7.11/templates/common.yaml deleted file mode 100644 index 3c93f57861..0000000000 --- a/stable/radarr/21.7.11/templates/common.yaml +++ /dev/null @@ -1,11 +0,0 @@ -{{/* Make sure all variables are set properly */}} -{{- include "tc.v1.common.loader.init" . -}} - -{{/* Disable [exportarr] if requested */}} -{{- if not .Values.metrics.main.enabled -}} - {{- $_ := set .Values.workload.exportarr "enabled" false -}} - {{- $_ := set .Values.service.metrics "enabled" false -}} -{{- end -}} - -{{/* Render the templates */}} -{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/radarr/21.7.11/values.yaml b/stable/radarr/21.7.11/values.yaml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/stable/radarr/22.2.3/.helmignore b/stable/radarr/22.2.3/.helmignore deleted file mode 100644 index feb7464da6..0000000000 --- a/stable/radarr/22.2.3/.helmignore +++ /dev/null @@ -1,32 +0,0 @@ -# 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/radarr/22.2.3/CHANGELOG.md b/stable/radarr/22.2.3/CHANGELOG.md deleted file mode 100644 index 941abb8a21..0000000000 --- a/stable/radarr/22.2.3/CHANGELOG.md +++ /dev/null @@ -1,3 +0,0 @@ -*for the complete changelog, please refer to the website* - -**Important:** \ No newline at end of file diff --git a/stable/radarr/22.2.3/Chart.yaml b/stable/radarr/22.2.3/Chart.yaml deleted file mode 100644 index e4cba5f927..0000000000 --- a/stable/radarr/22.2.3/Chart.yaml +++ /dev/null @@ -1,36 +0,0 @@ -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: 5.6.0.8846 -dependencies: - - name: common - version: 23.0.11 - repository: oci://tccr.io/truecharts - condition: "" - alias: "" - tags: [] - import-values: [] -deprecated: false -description: A fork of Sonarr to work with movies à la Couchpotato -home: https://truecharts.org/charts/stable/radarr -icon: https://truecharts.org/img/hotlink-ok/chart-icons/radarr.webp -keywords: - - radarr - - torrent - - usenet -kubeVersion: '>=1.24.0-0' -maintainers: - - name: TrueCharts - email: info@truecharts.org - url: https://truecharts.org -name: radarr -sources: - - https://ghcr.io/onedr0p/exportarr - - https://ghcr.io/onedr0p/radarr - - https://github.com/Radarr/Radarr - - https://github.com/truecharts/charts/tree/master/charts/stable/radarr -type: application -version: 22.2.3 diff --git a/stable/radarr/22.2.3/README.md b/stable/radarr/22.2.3/README.md deleted file mode 100644 index ecc5ca8e01..0000000000 --- a/stable/radarr/22.2.3/README.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -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/radarr) - -**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/radarr - -## 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/radarr/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/radarr/22.2.3/app-readme.md b/stable/radarr/22.2.3/app-readme.md deleted file mode 100644 index 94d7185029..0000000000 --- a/stable/radarr/22.2.3/app-readme.md +++ /dev/null @@ -1,8 +0,0 @@ -A fork of Sonarr to work with movies à la Couchpotato - -This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/radarr](https://truecharts.org/charts/stable/radarr) - ---- - -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/radarr/22.2.3/charts/common-23.0.9.tgz b/stable/radarr/22.2.3/charts/common-23.0.9.tgz deleted file mode 100644 index 12f30c4288409c1eca57b9cf3d9ebcabf6be3aee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96899 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 z 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 diff --git a/stable/radarr/22.2.3/icon.webp b/stable/radarr/22.2.3/icon.webp deleted file mode 100644 index ead7b8c06c4670b3164e33a4364e80fe070d9b31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5224 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 - 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/radarr/22.2.3/templates/NOTES.txt b/stable/radarr/22.2.3/templates/NOTES.txt deleted file mode 100644 index efcb74cb77..0000000000 --- a/stable/radarr/22.2.3/templates/NOTES.txt +++ /dev/null @@ -1 +0,0 @@ -{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/radarr/22.2.3/templates/common.yaml b/stable/radarr/22.2.3/templates/common.yaml deleted file mode 100644 index 3c93f57861..0000000000 --- a/stable/radarr/22.2.3/templates/common.yaml +++ /dev/null @@ -1,11 +0,0 @@ -{{/* Make sure all variables are set properly */}} -{{- include "tc.v1.common.loader.init" . -}} - -{{/* Disable [exportarr] if requested */}} -{{- if not .Values.metrics.main.enabled -}} - {{- $_ := set .Values.workload.exportarr "enabled" false -}} - {{- $_ := set .Values.service.metrics "enabled" false -}} -{{- end -}} - -{{/* Render the templates */}} -{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/radarr/22.2.3/values.yaml b/stable/radarr/22.2.3/values.yaml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/stable/radarr/23.2.0/Chart.yaml b/stable/radarr/23.2.0/Chart.yaml index 0e1490fc6d..8d777afd5f 100644 --- a/stable/radarr/23.2.0/Chart.yaml +++ b/stable/radarr/23.2.0/Chart.yaml @@ -33,4 +33,4 @@ sources: - https://github.com/Radarr/Radarr - https://github.com/truecharts/charts/tree/master/charts/stable/radarr type: application -version: 22.2.4 +version: 23.2.0 diff --git a/stable/radarr/app_versions.json b/stable/radarr/app_versions.json index e59a3aa25b..072937a0bb 100644 --- a/stable/radarr/app_versions.json +++ b/stable/radarr/app_versions.json @@ -3,13 +3,13 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/radarr/23.2.0", - "last_update": "2024-07-14 12:35:14", + "location": "/app/catalog/stable/radarr/23.2.0", + "last_update": "2024-09-20 02:39:05", "required_features": [ - "definitions/timezone", - "normalize/interfaceConfiguration", "definitions/certificate", - "definitions/interface" + "normalize/interfaceConfiguration", + "definitions/interface", + "definitions/timezone" ], "human_version": "5.7.0.8882_23.2.0", "version": "23.2.0", @@ -25,7 +25,7 @@ "dependencies": [ { "name": "common", - "version": "23.0.10", + "version": "23.0.11", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -5370,13 +5370,13 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/radarr/22.2.4", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/stable/radarr/22.2.4", + "last_update": "2024-09-20 02:39:05", "required_features": [ - "definitions/timezone", - "normalize/interfaceConfiguration", "definitions/certificate", - "definitions/interface" + "normalize/interfaceConfiguration", + "definitions/interface", + "definitions/timezone" ], "human_version": "5.6.0.8846_22.2.4", "version": "22.2.4", @@ -5392,7 +5392,7 @@ "dependencies": [ { "name": "common", - "version": "23.0.10", + "version": "23.0.11", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -10732,35686 +10732,5 @@ "app_readme": "

          A fork of Sonarr to work with movies \u00e0 la Couchpotato

          \n

          This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/radarr

          \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/radarr

          \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/radarr/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:

          " - }, - "22.2.3": { - "healthy": true, - "supported": true, - "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/radarr/22.2.3", - "last_update": "2024-05-29 12:35:14", - "required_features": [ - "definitions/timezone", - "normalize/interfaceConfiguration", - "definitions/certificate", - "definitions/interface" - ], - "human_version": "5.6.0.8846_22.2.3", - "version": "22.2.3", - "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": "5.6.0.8846", - "dependencies": [ - { - "name": "common", - "version": "23.0.9", - "repository": "oci://tccr.io/truecharts", - "condition": "", - "alias": "", - "tags": [], - "import-values": [] - } - ], - "deprecated": false, - "description": "A fork of Sonarr to work with movies \u00e0 la Couchpotato", - "home": "https://truecharts.org/charts/stable/radarr", - "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/radarr.webp", - "keywords": [ - "radarr", - "torrent", - "usenet" - ], - "kubeVersion": ">=1.24.0-0", - "maintainers": [ - { - "name": "TrueCharts", - "email": "info@truecharts.org", - "url": "https://truecharts.org" - } - ], - "name": "radarr", - "sources": [ - "https://ghcr.io/onedr0p/exportarr", - "https://ghcr.io/onedr0p/radarr", - "https://github.com/Radarr/Radarr", - "https://github.com/truecharts/charts/tree/master/charts/stable/radarr" - ], - "type": "application", - "version": "22.2.3" - }, - "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": "RADARR__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": 7878, - "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": "

          A fork of Sonarr to work with movies \u00e0 la Couchpotato

          \n

          This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/radarr

          \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/radarr

          \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/radarr/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:

          " - }, - "21.7.11": { - "healthy": true, - "supported": true, - "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/radarr/21.7.11", - "last_update": "2024-05-29 12:35:14", - "required_features": [ - "definitions/timezone", - "normalize/interfaceConfiguration", - "definitions/certificate", - "definitions/interface" - ], - "human_version": "5.4.6.8723_21.7.11", - "version": "21.7.11", - "chart_metadata": { - "annotations": { - "max_scale_version": "24.04.0", - "min_scale_version": "23.10.0", - "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": "5.4.6.8723", - "dependencies": [ - { - "name": "common", - "version": "20.3.12", - "repository": "oci://tccr.io/truecharts", - "condition": "", - "alias": "", - "tags": [], - "import-values": [] - } - ], - "deprecated": false, - "description": "A fork of Sonarr to work with movies \u00e0 la Couchpotato", - "home": "https://truecharts.org/charts/stable/radarr", - "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/radarr.webp", - "keywords": [ - "radarr", - "torrent", - "usenet" - ], - "kubeVersion": ">=1.24.0-0", - "maintainers": [ - { - "name": "TrueCharts", - "email": "info@truecharts.org", - "url": "https://truecharts.org" - } - ], - "name": "radarr", - "sources": [ - "https://github.com/Radarr/Radarr", - "https://github.com/truecharts/charts/tree/master/charts/stable/radarr", - "https://ghcr.io/onedr0p/exportarr", - "https://ghcr.io/onedr0p/radarr" - ], - "type": "application", - "version": "21.7.11" - }, - "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": "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": "RADARR__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": 7878, - "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": "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": "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": "

          A fork of Sonarr to work with movies \u00e0 la Couchpotato

          \n

          This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/radarr

          \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

          Configuration Options

          \n

          To view the chart specific options, please view Values.yaml included in the chart.

          \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

          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/radarr

          \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:

          " - }, - "21.7.10": { - "healthy": true, - "supported": true, - "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/radarr/21.7.10", - "last_update": "2024-05-29 12:35:14", - "required_features": [ - "definitions/timezone", - "normalize/interfaceConfiguration", - "definitions/certificate", - "definitions/interface" - ], - "human_version": "5.4.6.8723_21.7.10", - "version": "21.7.10", - "chart_metadata": { - "annotations": { - "max_scale_version": "24.04.0", - "min_scale_version": "23.10.0", - "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": "5.4.6.8723", - "dependencies": [ - { - "name": "common", - "version": "20.3.11", - "repository": "oci://tccr.io/truecharts", - "condition": "", - "alias": "", - "tags": [], - "import-values": [] - } - ], - "deprecated": false, - "description": "A fork of Sonarr to work with movies \u00e0 la Couchpotato", - "home": "https://truecharts.org/charts/stable/radarr", - "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/radarr.webp", - "keywords": [ - "radarr", - "torrent", - "usenet" - ], - "kubeVersion": ">=1.24.0-0", - "maintainers": [ - { - "name": "TrueCharts", - "email": "info@truecharts.org", - "url": "https://truecharts.org" - } - ], - "name": "radarr", - "sources": [ - "https://github.com/Radarr/Radarr", - "https://github.com/truecharts/charts/tree/master/charts/stable/radarr", - "https://ghcr.io/onedr0p/exportarr", - "https://ghcr.io/onedr0p/radarr" - ], - "type": "application", - "version": "21.7.10" - }, - "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": "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": "RADARR__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": 7878, - "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": "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": "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": "

          A fork of Sonarr to work with movies \u00e0 la Couchpotato

          \n

          This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/radarr

          \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

          Configuration Options

          \n

          To view the chart specific options, please view Values.yaml included in the chart.

          \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

          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/radarr

          \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.2.1": { - "healthy": true, - "supported": true, - "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/radarr/20.2.1", - "last_update": "2024-05-29 12:35:14", - "required_features": [ - "definitions/timezone", - "normalize/interfaceConfiguration", - "definitions/certificate", - "definitions/interface" - ], - "human_version": "5.3.6.8612_20.2.1", - "version": "20.2.1", - "chart_metadata": { - "annotations": { - "max_scale_version": "24.04.0", - "min_scale_version": "23.10.0", - "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": "5.3.6.8612", - "dependencies": [ - { - "name": "common", - "version": "18.1.2", - "repository": "oci://tccr.io/truecharts", - "condition": "", - "alias": "", - "tags": [], - "import-values": [] - } - ], - "deprecated": false, - "description": "A fork of Sonarr to work with movies \u00e0 la Couchpotato", - "home": "https://truecharts.org/charts/stable/radarr", - "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/radarr.png", - "keywords": [ - "radarr", - "torrent", - "usenet" - ], - "kubeVersion": ">=1.24.0-0", - "maintainers": [ - { - "name": "TrueCharts", - "email": "info@truecharts.org", - "url": "https://truecharts.org" - } - ], - "name": "radarr", - "sources": [ - "https://github.com/Radarr/Radarr", - "https://github.com/truecharts/charts/tree/master/charts/stable/radarr", - "https://ghcr.io/onedr0p/radarr", - "https://ghcr.io/onedr0p/exportarr" - ], - "type": "application", - "version": "20.2.1" - }, - "app_metadata": null, - "schema": { - "groups": [ - { - "name": "Container Image", - "description": "Image to be used for container" - }, - { - "name": "General Settings", - "description": "General Deployment Settings" - }, - { - "name": "Workload Settings", - "description": "Workload Settings" - }, - { - "name": "App Configuration", - "description": "App Specific Config Options" - }, - { - "name": "Networking and Services", - "description": "Configure Network and Services for Container" - }, - { - "name": "Storage and Persistence", - "description": "Persist and Share Data that is Separate from the Container" - }, - { - "name": "Ingress", - "description": "Ingress Configuration" - }, - { - "name": "Security and Permissions", - "description": "Configure Security Context and Permissions" - }, - { - "name": "Resources and Devices", - "description": "Specify Resources/Devices to be Allocated to Workload" - }, - { - "name": "Middlewares", - "description": "Traefik Middlewares" - }, - { - "name": "Metrics", - "description": "Metrics" - }, - { - "name": "Addons", - "description": "Addon Configuration" - }, - { - "name": "Backup Configuration", - "description": "Configure Velero Backup Schedule" - }, - { - "name": "Advanced", - "description": "Advanced Configuration" - }, - { - "name": "Postgresql", - "description": "Postgresql" - }, - { - "name": "Documentation", - "description": "Documentation" - } - ], - "portals": { - "open": { - "protocols": [ - "$kubernetes-resource_configmap_tcportal-open_protocol" - ], - "host": [ - "$kubernetes-resource_configmap_tcportal-open_host" - ], - "ports": [ - "$kubernetes-resource_configmap_tcportal-open_port" - ] - } - }, - "questions": [ - { - "variable": "global", - "group": "General Settings", - "label": "Global Settings", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "stopAll", - "label": "Stop All", - "description": "Stops All Running pods and hibernates cnpg", - "schema": { - "type": "boolean", - "default": false - } - } - ] - } - }, - { - "variable": "workload", - "group": "Workload Settings", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Type (Advanced)", - "schema": { - "type": "string", - "default": "Deployment", - "enum": [ - { - "value": "Deployment", - "description": "Deployment" - }, - { - "value": "DaemonSet", - "description": "DaemonSet" - } - ] - } - }, - { - "variable": "replicas", - "label": "Replicas (Advanced)", - "description": "Set the number of Replicas", - "schema": { - "type": "int", - "show_if": [ - [ - "type", - "!=", - "DaemonSet" - ] - ], - "default": 1 - } - }, - { - "variable": "podSpec", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "containers", - "label": "Containers", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "Main Container", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "env", - "group": "App Configuration", - "label": "Image Environment", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "RADARR__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 Settings", - "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 Settings", - "label": "Global Pod Options (Advanced)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "expertPodOpts", - "label": "Expert - Pod Options", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hostNetwork", - "label": "Host Networking", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "dnsConfig", - "label": "DNS Configuration", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "options", - "label": "Options", - "schema": { - "type": "list", - "default": [ - { - "name": "ndots", - "value": "1" - } - ], - "items": [ - { - "variable": "optionsEntry", - "label": "Option Entry", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true - } - }, - { - "variable": "value", - "label": "Value", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "nameservers", - "label": "Nameservers", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "nsEntry", - "label": "Nameserver Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - }, - { - "variable": "searches", - "label": "Searches", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "searchEntry", - "label": "Search Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "imagePullSecretList", - "group": "General Settings", - "label": "Image Pull Secrets", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "pullsecretentry", - "label": "Pull Secret", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "data", - "label": "Data", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "registry", - "label": "Registry", - "schema": { - "type": "string", - "required": true, - "default": "https://index.docker.io/v1/" - } - }, - { - "variable": "username", - "label": "Username", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "password", - "label": "Password", - "schema": { - "type": "string", - "required": true, - "private": true, - "default": "" - } - }, - { - "variable": "email", - "label": "Email", - "schema": { - "type": "string", - "required": true, - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "service", - "group": "Networking and Services", - "label": "Configure Service(s)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "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": 7878, - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "serviceexpert", - "group": "Networking and Services", - "label": "Show Expert Config", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "scaleExternalInterface", - "description": "Add External Interfaces", - "label": "Add external Interfaces", - "group": "Networking", - "schema": { - "type": "list", - "items": [ - { - "variable": "interfaceConfiguration", - "description": "Interface Configuration", - "label": "Interface Configuration", - "schema": { - "additional_attrs": true, - "type": "dict", - "$ref": [ - "normalize/interfaceConfiguration" - ], - "attrs": [ - { - "variable": "hostInterface", - "description": "Please Specify Host Interface", - "label": "Host Interface", - "schema": { - "type": "string", - "required": true, - "$ref": [ - "definitions/interface" - ], - "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": "Networking and Services", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "serviceListEntry", - "label": "Custom Service", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the service", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "LoadBalancer", - "description": "LoadBalancer (Expose Ports)" - }, - { - "value": "ClusterIP", - "description": "ClusterIP (Do Not Expose Ports)" - }, - { - "value": "Simple", - "description": "Deprecated CHANGE THIS" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "advancedsvcset", - "label": "Show Advanced Service Settings", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "externalIPs", - "label": "External IP's", - "description": "External IP's", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "externalIP", - "label": "External IP", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "ipFamilyPolicy", - "label": "IP Family Policy", - "description": "Specify the IP Policy", - "schema": { - "type": "string", - "default": "SingleStack", - "enum": [ - { - "value": "SingleStack", - "description": "SingleStack" - }, - { - "value": "PreferDualStack", - "description": "PreferDualStack" - }, - { - "value": "RequireDualStack", - "description": "RequireDualStack" - } - ] - } - }, - { - "variable": "ipFamilies", - "label": "IP Families", - "description": "(Advanced) The IP Families that should be used", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ipFamily", - "label": "IP Family", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "portsList", - "label": "Additional Service Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsListEntry", - "label": "Custom ports", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Port", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Port Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "protocol", - "label": "Port Type", - "schema": { - "type": "string", - "default": "tcp", - "enum": [ - { - "value": "http", - "description": "HTTP" - }, - { - "value": "https", - "description": "HTTPS" - }, - { - "value": "tcp", - "description": "TCP" - }, - { - "value": "udp", - "description": "UDP" - } - ] - } - }, - { - "variable": "targetPort", - "label": "Target Port", - "description": "This port exposes the container port on the service", - "schema": { - "type": "int", - "required": true - } - }, - { - "variable": "port", - "label": "Container Port", - "schema": { - "type": "int", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "persistence", - "label": "Integrated Persistent Storage", - "description": "Integrated Persistent Storage", - "group": "Storage and 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": "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": "Storage and Persistence", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "persistenceListEntry", - "label": "Custom Storage", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the storage", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "type", - "label": "Type of Storage", - "description": "Sets the persistence type, Anything other than PVC could break rollback!", - "schema": { - "type": "string", - "default": "hostPath", - "enum": [ - { - "value": "pvc", - "description": "PVC" - }, - { - "value": "hostPath", - "description": "Host Path" - }, - { - "value": "emptyDir", - "description": "emptyDir" - }, - { - "value": "nfs", - "description": "NFS Share" - } - ] - } - }, - { - "variable": "server", - "label": "NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "path", - "label": "Path on NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "iscsi", - "label": "iSCSI Options", - "schema": { - "show_if": [ - [ - "type", - "=", - "iscsi" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "targetPortal", - "label": "targetPortal", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "iqn", - "label": "iqn", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "lun", - "label": "lun", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "authSession", - "label": "authSession", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - }, - { - "variable": "authDiscovery", - "label": "authDiscovery", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - }, - { - "variable": "autoPermissions", - "label": "Automatic Permissions Configuration", - "description": "Automatically set permissions", - "schema": { - "show_if": [ - [ - "type", - "!=", - "pvc" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "chown", - "label": "Run CHOWN", - "description": "It will run CHOWN on the path with the given fsGroup\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": "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": "Security and Permissions", - "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 and Devices", - "label": "Resource Limits", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "limits", - "label": "Advanced Limit Resource Consumption", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "4000m", - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "8Gi", - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - }, - { - "variable": "gpu.intel.com/i915", - "label": "Add Intel i915 GPUs", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "nvidia.com/gpu", - "label": "Add NVIDIA GPUs (Experimental)", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "amd.com/gpu", - "label": "Add AMD GPUs", - "schema": { - "type": "int", - "default": 0 - } - } - ] - } - }, - { - "variable": "requests", - "label": "Minimum Resources Required (request)", - "schema": { - "additional_attrs": true, - "type": "dict", - "hidden": true, - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "10m", - "hidden": true, - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "50Mi", - "hidden": true, - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - } - ] - } - } - ] - } - }, - { - "variable": "deviceList", - "label": "Mount USB Devices", - "group": "Resources and Devices", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "deviceListEntry", - "label": "Device", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Storage", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "type", - "label": "(Advanced) Type of Storage", - "description": "Sets the persistence type", - "schema": { - "type": "string", - "default": "device", - "hidden": true - } - }, - { - "variable": "readOnly", - "label": "readOnly", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "hostPath", - "label": "Host Device Path", - "description": "Path to the device on the host system", - "schema": { - "type": "path" - } - }, - { - "variable": "mountPath", - "label": "Container Device Path", - "description": "Path inside the container the device is mounted", - "schema": { - "type": "string", - "default": "/dev/ttyACM0" - } - } - ] - } - } - ] - } - }, - { - "variable": "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": "Advanced", - "label": "(Advanced) Network Policy", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "netPolicyEntry", - "label": "Network Policy Entry", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "policyType", - "label": "Policy Type", - "schema": { - "type": "string", - "default": "", - "enum": [ - { - "value": "", - "description": "Default" - }, - { - "value": "ingress", - "description": "Ingress" - }, - { - "value": "egress", - "description": "Egress" - }, - { - "value": "ingress-egress", - "description": "Ingress and Egress" - } - ] - } - }, - { - "variable": "egress", - "label": "Egress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "egressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "to", - "label": "To", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "toEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ingressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "from", - "label": "From", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "fromEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "addons", - "group": "Addons", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "Codeserver", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "service", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "NodePort", - "description": "Deprecated CHANGE THIS" - }, - { - "value": "ClusterIP", - "description": "ClusterIP" - }, - { - "value": "LoadBalancer", - "description": "LoadBalancer" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "ports", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int", - "default": 36107 - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable Ingress", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hosts", - "label": "Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "hostEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "host", - "label": "HostName", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "paths", - "label": "Paths", - "schema": { - "type": "list", - "default": [ - { - "path": "/", - "pathType": "Prefix" - } - ], - "items": [ - { - "variable": "pathEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "path", - "label": "Path", - "schema": { - "type": "string", - "required": true, - "default": "/" - } - }, - { - "variable": "pathType", - "label": "Path Type", - "schema": { - "type": "string", - "required": true, - "default": "Prefix" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "integrations", - "label": "Integrations", - "description": "Connect ingress with other charts", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "traefik", - "label": "Traefik", - "description": "Connect ingress with Traefik", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "allowCors", - "label": "Allow Cross Origin Requests (advanced)", - "schema": { - "type": "boolean", - "default": false, - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - }, - { - "variable": "entrypoints", - "label": "Entrypoints", - "schema": { - "type": "list", - "default": [ - "websecure" - ], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "entrypoint", - "label": "Entrypoint", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "middlewares", - "label": "Middlewares", - "schema": { - "type": "list", - "default": [], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "middleware", - "label": "Middleware", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "name", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "namespace", - "label": "namespace (optional)", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "certManager", - "label": "certManager", - "description": "Connect ingress with certManager", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "certificateIssuer", - "label": "certificateIssuer", - "description": "defaults to chartname", - "schema": { - "type": "string", - "default": "", - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "advanced", - "label": "Show Advanced Settings", - "description": "Advanced settings are not covered by TrueCharts Support", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "ingressClassName", - "label": "(Advanced/Optional) IngressClass Name", - "schema": { - "type": "string", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": "" - } - }, - { - "variable": "tls", - "label": "TLS-Settings", - "schema": { - "type": "list", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": [], - "items": [ - { - "variable": "tlsEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "hosts", - "label": "Certificate Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "host", - "label": "Host", - "schema": { - "type": "string", - "default": "", - "required": true - } - } - ] - } - }, - { - "variable": "certificateIssuer", - "label": "Use Cert-Manager clusterIssuer", - "description": "add the name of your cert-manager clusterIssuer here for automatic tls certificates.", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "clusterCertificate", - "label": "Cluster Certificate (Advanced)", - "description": "Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.", - "schema": { - "type": "string", - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "default": "" - } - }, - { - "variable": "secretName", - "label": "Use Custom Certificate Secret (Advanced)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "scaleCert", - "label": "Use TrueNAS SCALE Certificate (Deprecated)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "int", - "$ref": [ - "definitions/certificate" - ], - "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": "

          A fork of Sonarr to work with movies \u00e0 la Couchpotato

          \n

          This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/radarr

          \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 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

          radarr-19.1.12 (2024-02-03)

          \n

          Chore

          \n
            \n
          • update container image common to v17.2.30@19ad5ec by renovate (#17804)
          • \n
          \n

          radarr-19.1.11 (2024-01-29)

          \n

          Chore

          \n
            \n
          • update container image ghcr.io/onedr0p/exportarr to v1.6.1@60cf3d4 by renovate (#17725)
          • \n
          \n

          radarr-19.1.10 (2024-01-26)

          \n

          Chore

          \n
            \n
          • update container image common to v17.2.29@d7c41a3 by renovate (#17545)
          • \n
          \n

          radarr-19.1.9 (2024-01-21)

          \n

          Chore

          \n
            \n
          • update container image common to v17.2.28@918b4c5 by renovate (#17478)
          • \n
          \n

          radarr-19.1.8 (2024-01-21)

          \n

          Chore

          \n
            \n
          • update container image common to v17.2.26@24c98f7 by renovate (#17409)
          • \n
          \n

          radarr-19.1.7 (2024-01-21)

          \n

          Chore

          \n
            \n
          • update metadata in chart.yaml (#17457)
          • \n
          \n

          radarr-19.1.6 (2024-01-09)

          \n

          Chore

          \n
            \n
          • update container image common to v17.2.22@e7c9056 by renovate (#16986)
          • \n
          \n

          radarr-19.1.5 (2024-01-02)

          \n

          Chore

          \n
            \n
          • force bump to ensure up-to-date catalogs
          • \n
          \n

          radarr-19.1.4 (2024-01-01)

          \n

          Chore

          " - }, - "20.2.0": { - "healthy": true, - "supported": true, - "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/radarr/20.2.0", - "last_update": "2024-05-29 12:35:14", - "required_features": [ - "definitions/timezone", - "normalize/interfaceConfiguration", - "definitions/certificate", - "definitions/interface" - ], - "human_version": "5.3.6.8612_20.2.0", - "version": "20.2.0", - "chart_metadata": { - "annotations": { - "max_scale_version": "24.04.0", - "min_scale_version": "23.10.0", - "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": "5.3.6.8612", - "dependencies": [ - { - "name": "common", - "version": "18.1.2", - "repository": "oci://tccr.io/truecharts", - "condition": "", - "alias": "", - "tags": [], - "import-values": [] - } - ], - "deprecated": false, - "description": "A fork of Sonarr to work with movies \u00e0 la Couchpotato", - "home": "https://truecharts.org/charts/stable/radarr", - "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/radarr.png", - "keywords": [ - "radarr", - "torrent", - "usenet" - ], - "kubeVersion": ">=1.24.0-0", - "maintainers": [ - { - "name": "TrueCharts", - "email": "info@truecharts.org", - "url": "https://truecharts.org" - } - ], - "name": "radarr", - "sources": [ - "https://github.com/Radarr/Radarr", - "https://github.com/truecharts/charts/tree/master/charts/stable/radarr", - "https://ghcr.io/onedr0p/exportarr", - "https://ghcr.io/onedr0p/radarr" - ], - "type": "application", - "version": "20.2.0" - }, - "app_metadata": null, - "schema": { - "groups": [ - { - "name": "Container Image", - "description": "Image to be used for container" - }, - { - "name": "General Settings", - "description": "General Deployment Settings" - }, - { - "name": "Workload Settings", - "description": "Workload Settings" - }, - { - "name": "App Configuration", - "description": "App Specific Config Options" - }, - { - "name": "Networking and Services", - "description": "Configure Network and Services for Container" - }, - { - "name": "Storage and Persistence", - "description": "Persist and Share Data that is Separate from the Container" - }, - { - "name": "Ingress", - "description": "Ingress Configuration" - }, - { - "name": "Security and Permissions", - "description": "Configure Security Context and Permissions" - }, - { - "name": "Resources and Devices", - "description": "Specify Resources/Devices to be Allocated to Workload" - }, - { - "name": "Middlewares", - "description": "Traefik Middlewares" - }, - { - "name": "Metrics", - "description": "Metrics" - }, - { - "name": "Addons", - "description": "Addon Configuration" - }, - { - "name": "Backup Configuration", - "description": "Configure Velero Backup Schedule" - }, - { - "name": "Advanced", - "description": "Advanced Configuration" - }, - { - "name": "Postgresql", - "description": "Postgresql" - }, - { - "name": "Documentation", - "description": "Documentation" - } - ], - "portals": { - "open": { - "protocols": [ - "$kubernetes-resource_configmap_tcportal-open_protocol" - ], - "host": [ - "$kubernetes-resource_configmap_tcportal-open_host" - ], - "ports": [ - "$kubernetes-resource_configmap_tcportal-open_port" - ] - } - }, - "questions": [ - { - "variable": "global", - "group": "General Settings", - "label": "Global Settings", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "stopAll", - "label": "Stop All", - "description": "Stops All Running pods and hibernates cnpg", - "schema": { - "type": "boolean", - "default": false - } - } - ] - } - }, - { - "variable": "workload", - "group": "Workload Settings", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Type (Advanced)", - "schema": { - "type": "string", - "default": "Deployment", - "enum": [ - { - "value": "Deployment", - "description": "Deployment" - }, - { - "value": "DaemonSet", - "description": "DaemonSet" - } - ] - } - }, - { - "variable": "replicas", - "label": "Replicas (Advanced)", - "description": "Set the number of Replicas", - "schema": { - "type": "int", - "show_if": [ - [ - "type", - "!=", - "DaemonSet" - ] - ], - "default": 1 - } - }, - { - "variable": "podSpec", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "containers", - "label": "Containers", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "Main Container", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "env", - "group": "App Configuration", - "label": "Image Environment", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "RADARR__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 Settings", - "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 Settings", - "label": "Global Pod Options (Advanced)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "expertPodOpts", - "label": "Expert - Pod Options", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hostNetwork", - "label": "Host Networking", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "dnsConfig", - "label": "DNS Configuration", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "options", - "label": "Options", - "schema": { - "type": "list", - "default": [ - { - "name": "ndots", - "value": "1" - } - ], - "items": [ - { - "variable": "optionsEntry", - "label": "Option Entry", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true - } - }, - { - "variable": "value", - "label": "Value", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "nameservers", - "label": "Nameservers", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "nsEntry", - "label": "Nameserver Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - }, - { - "variable": "searches", - "label": "Searches", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "searchEntry", - "label": "Search Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "imagePullSecretList", - "group": "General Settings", - "label": "Image Pull Secrets", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "pullsecretentry", - "label": "Pull Secret", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "data", - "label": "Data", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "registry", - "label": "Registry", - "schema": { - "type": "string", - "required": true, - "default": "https://index.docker.io/v1/" - } - }, - { - "variable": "username", - "label": "Username", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "password", - "label": "Password", - "schema": { - "type": "string", - "required": true, - "private": true, - "default": "" - } - }, - { - "variable": "email", - "label": "Email", - "schema": { - "type": "string", - "required": true, - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "service", - "group": "Networking and Services", - "label": "Configure Service(s)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "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": 7878, - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "serviceexpert", - "group": "Networking and Services", - "label": "Show Expert Config", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "scaleExternalInterface", - "description": "Add External Interfaces", - "label": "Add external Interfaces", - "group": "Networking", - "schema": { - "type": "list", - "items": [ - { - "variable": "interfaceConfiguration", - "description": "Interface Configuration", - "label": "Interface Configuration", - "schema": { - "additional_attrs": true, - "type": "dict", - "$ref": [ - "normalize/interfaceConfiguration" - ], - "attrs": [ - { - "variable": "hostInterface", - "description": "Please Specify Host Interface", - "label": "Host Interface", - "schema": { - "type": "string", - "required": true, - "$ref": [ - "definitions/interface" - ], - "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": "Networking and Services", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "serviceListEntry", - "label": "Custom Service", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the service", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "LoadBalancer", - "description": "LoadBalancer (Expose Ports)" - }, - { - "value": "ClusterIP", - "description": "ClusterIP (Do Not Expose Ports)" - }, - { - "value": "Simple", - "description": "Deprecated CHANGE THIS" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "advancedsvcset", - "label": "Show Advanced Service Settings", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "externalIPs", - "label": "External IP's", - "description": "External IP's", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "externalIP", - "label": "External IP", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "ipFamilyPolicy", - "label": "IP Family Policy", - "description": "Specify the IP Policy", - "schema": { - "type": "string", - "default": "SingleStack", - "enum": [ - { - "value": "SingleStack", - "description": "SingleStack" - }, - { - "value": "PreferDualStack", - "description": "PreferDualStack" - }, - { - "value": "RequireDualStack", - "description": "RequireDualStack" - } - ] - } - }, - { - "variable": "ipFamilies", - "label": "IP Families", - "description": "(Advanced) The IP Families that should be used", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ipFamily", - "label": "IP Family", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "portsList", - "label": "Additional Service Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsListEntry", - "label": "Custom ports", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Port", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Port Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "protocol", - "label": "Port Type", - "schema": { - "type": "string", - "default": "tcp", - "enum": [ - { - "value": "http", - "description": "HTTP" - }, - { - "value": "https", - "description": "HTTPS" - }, - { - "value": "tcp", - "description": "TCP" - }, - { - "value": "udp", - "description": "UDP" - } - ] - } - }, - { - "variable": "targetPort", - "label": "Target Port", - "description": "This port exposes the container port on the service", - "schema": { - "type": "int", - "required": true - } - }, - { - "variable": "port", - "label": "Container Port", - "schema": { - "type": "int", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "persistence", - "label": "Integrated Persistent Storage", - "description": "Integrated Persistent Storage", - "group": "Storage and 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": "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": "Storage and Persistence", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "persistenceListEntry", - "label": "Custom Storage", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the storage", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "type", - "label": "Type of Storage", - "description": "Sets the persistence type, Anything other than PVC could break rollback!", - "schema": { - "type": "string", - "default": "hostPath", - "enum": [ - { - "value": "pvc", - "description": "PVC" - }, - { - "value": "hostPath", - "description": "Host Path" - }, - { - "value": "emptyDir", - "description": "emptyDir" - }, - { - "value": "nfs", - "description": "NFS Share" - } - ] - } - }, - { - "variable": "server", - "label": "NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "path", - "label": "Path on NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "iscsi", - "label": "iSCSI Options", - "schema": { - "show_if": [ - [ - "type", - "=", - "iscsi" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "targetPortal", - "label": "targetPortal", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "iqn", - "label": "iqn", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "lun", - "label": "lun", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "authSession", - "label": "authSession", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - }, - { - "variable": "authDiscovery", - "label": "authDiscovery", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - }, - { - "variable": "autoPermissions", - "label": "Automatic Permissions Configuration", - "description": "Automatically set permissions", - "schema": { - "show_if": [ - [ - "type", - "!=", - "pvc" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "chown", - "label": "Run CHOWN", - "description": "It will run CHOWN on the path with the given fsGroup\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": "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": "Security and Permissions", - "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 and Devices", - "label": "Resource Limits", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "limits", - "label": "Advanced Limit Resource Consumption", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "4000m", - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "8Gi", - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - }, - { - "variable": "gpu.intel.com/i915", - "label": "Add Intel i915 GPUs", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "nvidia.com/gpu", - "label": "Add NVIDIA GPUs (Experimental)", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "amd.com/gpu", - "label": "Add AMD GPUs", - "schema": { - "type": "int", - "default": 0 - } - } - ] - } - }, - { - "variable": "requests", - "label": "Minimum Resources Required (request)", - "schema": { - "additional_attrs": true, - "type": "dict", - "hidden": true, - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "10m", - "hidden": true, - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "50Mi", - "hidden": true, - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - } - ] - } - } - ] - } - }, - { - "variable": "deviceList", - "label": "Mount USB Devices", - "group": "Resources and Devices", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "deviceListEntry", - "label": "Device", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Storage", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "type", - "label": "(Advanced) Type of Storage", - "description": "Sets the persistence type", - "schema": { - "type": "string", - "default": "device", - "hidden": true - } - }, - { - "variable": "readOnly", - "label": "readOnly", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "hostPath", - "label": "Host Device Path", - "description": "Path to the device on the host system", - "schema": { - "type": "path" - } - }, - { - "variable": "mountPath", - "label": "Container Device Path", - "description": "Path inside the container the device is mounted", - "schema": { - "type": "string", - "default": "/dev/ttyACM0" - } - } - ] - } - } - ] - } - }, - { - "variable": "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": "Advanced", - "label": "(Advanced) Network Policy", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "netPolicyEntry", - "label": "Network Policy Entry", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "policyType", - "label": "Policy Type", - "schema": { - "type": "string", - "default": "", - "enum": [ - { - "value": "", - "description": "Default" - }, - { - "value": "ingress", - "description": "Ingress" - }, - { - "value": "egress", - "description": "Egress" - }, - { - "value": "ingress-egress", - "description": "Ingress and Egress" - } - ] - } - }, - { - "variable": "egress", - "label": "Egress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "egressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "to", - "label": "To", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "toEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ingressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "from", - "label": "From", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "fromEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "addons", - "group": "Addons", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "Codeserver", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "service", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "NodePort", - "description": "Deprecated CHANGE THIS" - }, - { - "value": "ClusterIP", - "description": "ClusterIP" - }, - { - "value": "LoadBalancer", - "description": "LoadBalancer" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "ports", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int", - "default": 36107 - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable Ingress", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hosts", - "label": "Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "hostEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "host", - "label": "HostName", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "paths", - "label": "Paths", - "schema": { - "type": "list", - "default": [ - { - "path": "/", - "pathType": "Prefix" - } - ], - "items": [ - { - "variable": "pathEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "path", - "label": "Path", - "schema": { - "type": "string", - "required": true, - "default": "/" - } - }, - { - "variable": "pathType", - "label": "Path Type", - "schema": { - "type": "string", - "required": true, - "default": "Prefix" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "integrations", - "label": "Integrations", - "description": "Connect ingress with other charts", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "traefik", - "label": "Traefik", - "description": "Connect ingress with Traefik", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "allowCors", - "label": "Allow Cross Origin Requests (advanced)", - "schema": { - "type": "boolean", - "default": false, - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - }, - { - "variable": "entrypoints", - "label": "Entrypoints", - "schema": { - "type": "list", - "default": [ - "websecure" - ], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "entrypoint", - "label": "Entrypoint", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "middlewares", - "label": "Middlewares", - "schema": { - "type": "list", - "default": [], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "middleware", - "label": "Middleware", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "name", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "namespace", - "label": "namespace (optional)", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "certManager", - "label": "certManager", - "description": "Connect ingress with certManager", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "certificateIssuer", - "label": "certificateIssuer", - "description": "defaults to chartname", - "schema": { - "type": "string", - "default": "", - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "advanced", - "label": "Show Advanced Settings", - "description": "Advanced settings are not covered by TrueCharts Support", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "ingressClassName", - "label": "(Advanced/Optional) IngressClass Name", - "schema": { - "type": "string", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": "" - } - }, - { - "variable": "tls", - "label": "TLS-Settings", - "schema": { - "type": "list", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": [], - "items": [ - { - "variable": "tlsEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "hosts", - "label": "Certificate Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "host", - "label": "Host", - "schema": { - "type": "string", - "default": "", - "required": true - } - } - ] - } - }, - { - "variable": "certificateIssuer", - "label": "Use Cert-Manager clusterIssuer", - "description": "add the name of your cert-manager clusterIssuer here for automatic tls certificates.", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "clusterCertificate", - "label": "Cluster Certificate (Advanced)", - "description": "Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.", - "schema": { - "type": "string", - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "default": "" - } - }, - { - "variable": "secretName", - "label": "Use Custom Certificate Secret (Advanced)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "scaleCert", - "label": "Use TrueNAS SCALE Certificate (Deprecated)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "int", - "$ref": [ - "definitions/certificate" - ], - "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": "

          A fork of Sonarr to work with movies \u00e0 la Couchpotato

          \n

          This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/radarr

          \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 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

          radarr-19.1.12 (2024-02-03)

          \n

          Chore

          \n
            \n
          • update container image common to v17.2.30@19ad5ec by renovate (#17804)
          • \n
          \n

          radarr-19.1.11 (2024-01-29)

          \n

          Chore

          \n
            \n
          • update container image ghcr.io/onedr0p/exportarr to v1.6.1@60cf3d4 by renovate (#17725)
          • \n
          \n

          radarr-19.1.10 (2024-01-26)

          \n

          Chore

          \n
            \n
          • update container image common to v17.2.29@d7c41a3 by renovate (#17545)
          • \n
          \n

          radarr-19.1.9 (2024-01-21)

          \n

          Chore

          \n
            \n
          • update container image common to v17.2.28@918b4c5 by renovate (#17478)
          • \n
          \n

          radarr-19.1.8 (2024-01-21)

          \n

          Chore

          \n
            \n
          • update container image common to v17.2.26@24c98f7 by renovate (#17409)
          • \n
          \n

          radarr-19.1.7 (2024-01-21)

          \n

          Chore

          \n
            \n
          • update metadata in chart.yaml (#17457)
          • \n
          \n

          radarr-19.1.6 (2024-01-09)

          \n

          Chore

          \n
            \n
          • update container image common to v17.2.22@e7c9056 by renovate (#16986)
          • \n
          \n

          radarr-19.1.5 (2024-01-02)

          \n

          Chore

          \n
            \n
          • force bump to ensure up-to-date catalogs
          • \n
          \n

          radarr-19.1.4 (2024-01-01)

          \n

          Chore

          " - }, - "19.4.0": { - "healthy": true, - "supported": true, - "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/radarr/19.4.0", - "last_update": "2024-05-29 12:35:14", - "required_features": [ - "definitions/timezone", - "definitions/gpuConfiguration", - "definitions/interface", - "normalize/interfaceConfiguration", - "definitions/certificate" - ], - "human_version": "5.3.6.8612_19.4.0", - "version": "19.4.0", - "chart_metadata": { - "annotations": { - "max_scale_version": "24.04.0", - "min_scale_version": "23.10.0", - "truecharts.org/category": "media", - "truecharts.org/max_helm_version": "3.14", - "truecharts.org/min_helm_version": "3.12", - "truecharts.org/train": "stable" - }, - "apiVersion": "v2", - "appVersion": "5.3.6.8612", - "dependencies": [ - { - "name": "common", - "version": "17.5.0", - "repository": "oci://tccr.io/truecharts", - "condition": "", - "alias": "", - "tags": [], - "import-values": [] - } - ], - "deprecated": false, - "description": "A fork of Sonarr to work with movies \u00e0 la Couchpotato", - "home": "https://truecharts.org/charts/stable/radarr", - "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/radarr.png", - "keywords": [ - "radarr", - "torrent", - "usenet" - ], - "kubeVersion": ">=1.24.0-0", - "maintainers": [ - { - "name": "TrueCharts", - "email": "info@truecharts.org", - "url": "https://truecharts.org" - } - ], - "name": "radarr", - "sources": [ - "https://github.com/Radarr/Radarr", - "https://github.com/truecharts/charts/tree/master/charts/stable/radarr", - "https://ghcr.io/onedr0p/radarr", - "https://ghcr.io/onedr0p/exportarr" - ], - "type": "application", - "version": "19.4.0" - }, - "app_metadata": null, - "schema": { - "groups": [ - { - "name": "Container Image", - "description": "Image to be used for container" - }, - { - "name": "General Settings", - "description": "General Deployment Settings" - }, - { - "name": "Workload Settings", - "description": "Workload Settings" - }, - { - "name": "App Configuration", - "description": "App Specific Config Options" - }, - { - "name": "Networking and Services", - "description": "Configure Network and Services for Container" - }, - { - "name": "Storage and Persistence", - "description": "Persist and Share Data that is Separate from the Container" - }, - { - "name": "Ingress", - "description": "Ingress Configuration" - }, - { - "name": "Security and Permissions", - "description": "Configure Security Context and Permissions" - }, - { - "name": "Resources and Devices", - "description": "Specify Resources/Devices to be Allocated to Workload" - }, - { - "name": "Middlewares", - "description": "Traefik Middlewares" - }, - { - "name": "Metrics", - "description": "Metrics" - }, - { - "name": "Addons", - "description": "Addon Configuration" - }, - { - "name": "Backup Configuration", - "description": "Configure Velero Backup Schedule" - }, - { - "name": "Advanced", - "description": "Advanced Configuration" - }, - { - "name": "Postgresql", - "description": "Postgresql" - }, - { - "name": "Documentation", - "description": "Documentation" - } - ], - "portals": { - "open": { - "protocols": [ - "$kubernetes-resource_configmap_tcportal-open_protocol" - ], - "host": [ - "$kubernetes-resource_configmap_tcportal-open_host" - ], - "ports": [ - "$kubernetes-resource_configmap_tcportal-open_port" - ] - } - }, - "questions": [ - { - "variable": "global", - "group": "General Settings", - "label": "Global Settings", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "stopAll", - "label": "Stop All", - "description": "Stops All Running pods and hibernates cnpg", - "schema": { - "type": "boolean", - "default": false - } - } - ] - } - }, - { - "variable": "workload", - "group": "Workload Settings", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Type (Advanced)", - "schema": { - "type": "string", - "default": "Deployment", - "enum": [ - { - "value": "Deployment", - "description": "Deployment" - }, - { - "value": "DaemonSet", - "description": "DaemonSet" - } - ] - } - }, - { - "variable": "replicas", - "label": "Replicas (Advanced)", - "description": "Set the number of Replicas", - "schema": { - "type": "int", - "show_if": [ - [ - "type", - "!=", - "DaemonSet" - ] - ], - "default": 1 - } - }, - { - "variable": "podSpec", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "containers", - "label": "Containers", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "Main Container", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "env", - "group": "App Configuration", - "label": "Image Environment", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "RADARR__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 Settings", - "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 Settings", - "label": "Global Pod Options (Advanced)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "expertPodOpts", - "label": "Expert - Pod Options", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hostNetwork", - "label": "Host Networking", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "dnsConfig", - "label": "DNS Configuration", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "options", - "label": "Options", - "schema": { - "type": "list", - "default": [ - { - "name": "ndots", - "value": "1" - } - ], - "items": [ - { - "variable": "optionsEntry", - "label": "Option Entry", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true - } - }, - { - "variable": "value", - "label": "Value", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "nameservers", - "label": "Nameservers", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "nsEntry", - "label": "Nameserver Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - }, - { - "variable": "searches", - "label": "Searches", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "searchEntry", - "label": "Search Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "imagePullSecretList", - "group": "General Settings", - "label": "Image Pull Secrets", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "pullsecretentry", - "label": "Pull Secret", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "data", - "label": "Data", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "registry", - "label": "Registry", - "schema": { - "type": "string", - "required": true, - "default": "https://index.docker.io/v1/" - } - }, - { - "variable": "username", - "label": "Username", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "password", - "label": "Password", - "schema": { - "type": "string", - "required": true, - "private": true, - "default": "" - } - }, - { - "variable": "email", - "label": "Email", - "schema": { - "type": "string", - "required": true, - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "service", - "group": "Networking and Services", - "label": "Configure Service(s)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "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": 7878, - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "serviceexpert", - "group": "Networking and Services", - "label": "Show Expert Config", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "scaleExternalInterface", - "description": "Add External Interfaces", - "label": "Add external Interfaces", - "group": "Networking", - "schema": { - "type": "list", - "items": [ - { - "variable": "interfaceConfiguration", - "description": "Interface Configuration", - "label": "Interface Configuration", - "schema": { - "additional_attrs": true, - "type": "dict", - "$ref": [ - "normalize/interfaceConfiguration" - ], - "attrs": [ - { - "variable": "hostInterface", - "description": "Please Specify Host Interface", - "label": "Host Interface", - "schema": { - "type": "string", - "required": true, - "$ref": [ - "definitions/interface" - ], - "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": "Networking and Services", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "serviceListEntry", - "label": "Custom Service", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the service", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "LoadBalancer", - "description": "LoadBalancer (Expose Ports)" - }, - { - "value": "ClusterIP", - "description": "ClusterIP (Do Not Expose Ports)" - }, - { - "value": "Simple", - "description": "Deprecated CHANGE THIS" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "advancedsvcset", - "label": "Show Advanced Service Settings", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "externalIPs", - "label": "External IP's", - "description": "External IP's", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "externalIP", - "label": "External IP", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "ipFamilyPolicy", - "label": "IP Family Policy", - "description": "Specify the IP Policy", - "schema": { - "type": "string", - "default": "SingleStack", - "enum": [ - { - "value": "SingleStack", - "description": "SingleStack" - }, - { - "value": "PreferDualStack", - "description": "PreferDualStack" - }, - { - "value": "RequireDualStack", - "description": "RequireDualStack" - } - ] - } - }, - { - "variable": "ipFamilies", - "label": "IP Families", - "description": "(Advanced) The IP Families that should be used", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ipFamily", - "label": "IP Family", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "portsList", - "label": "Additional Service Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsListEntry", - "label": "Custom ports", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Port", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Port Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "protocol", - "label": "Port Type", - "schema": { - "type": "string", - "default": "tcp", - "enum": [ - { - "value": "http", - "description": "HTTP" - }, - { - "value": "https", - "description": "HTTPS" - }, - { - "value": "tcp", - "description": "TCP" - }, - { - "value": "udp", - "description": "UDP" - } - ] - } - }, - { - "variable": "targetPort", - "label": "Target Port", - "description": "This port exposes the container port on the service", - "schema": { - "type": "int", - "required": true - } - }, - { - "variable": "port", - "label": "Container Port", - "schema": { - "type": "int", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "persistence", - "label": "Integrated Persistent Storage", - "description": "Integrated Persistent Storage", - "group": "Storage and 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": "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": "Storage and Persistence", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "persistenceListEntry", - "label": "Custom Storage", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the storage", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "type", - "label": "Type of Storage", - "description": "Sets the persistence type, Anything other than PVC could break rollback!", - "schema": { - "type": "string", - "default": "hostPath", - "enum": [ - { - "value": "pvc", - "description": "PVC" - }, - { - "value": "hostPath", - "description": "Host Path" - }, - { - "value": "emptyDir", - "description": "emptyDir" - }, - { - "value": "nfs", - "description": "NFS Share" - } - ] - } - }, - { - "variable": "server", - "label": "NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "path", - "label": "Path on NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "iscsi", - "label": "iSCSI Options", - "schema": { - "show_if": [ - [ - "type", - "=", - "iscsi" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "targetPortal", - "label": "targetPortal", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "iqn", - "label": "iqn", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "lun", - "label": "lun", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "authSession", - "label": "authSession", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - }, - { - "variable": "authDiscovery", - "label": "authDiscovery", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - }, - { - "variable": "autoPermissions", - "label": "Automatic Permissions Configuration", - "description": "Automatically set permissions", - "schema": { - "show_if": [ - [ - "type", - "!=", - "pvc" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "chown", - "label": "Run CHOWN", - "description": "It will run CHOWN on the path with the given fsGroup\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": "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": "Security and Permissions", - "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 and Devices", - "label": "Resource Limits", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "limits", - "label": "Advanced Limit Resource Consumption", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "4000m", - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "8Gi", - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - }, - { - "variable": "intel.com/i915", - "label": "Add Intel i915 GPUs", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "nvidia.com/gpu", - "label": "Add NVIDIA GPUs (Experimental)", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "amd.com/gpu", - "label": "Add AMD GPUs", - "schema": { - "type": "int", - "default": 0 - } - } - ] - } - }, - { - "variable": "requests", - "label": "Minimum Resources Required (request)", - "schema": { - "additional_attrs": true, - "type": "dict", - "hidden": true, - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "10m", - "hidden": true, - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "50Mi", - "hidden": true, - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - } - ] - } - } - ] - } - }, - { - "variable": "deviceList", - "label": "Mount USB Devices", - "group": "Resources and Devices", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "deviceListEntry", - "label": "Device", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Storage", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "type", - "label": "(Advanced) Type of Storage", - "description": "Sets the persistence type", - "schema": { - "type": "string", - "default": "device", - "hidden": true - } - }, - { - "variable": "readOnly", - "label": "readOnly", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "hostPath", - "label": "Host Device Path", - "description": "Path to the device on the host system", - "schema": { - "type": "path" - } - }, - { - "variable": "mountPath", - "label": "Container Device Path", - "description": "Path inside the container the device is mounted", - "schema": { - "type": "string", - "default": "/dev/ttyACM0" - } - } - ] - } - } - ] - } - }, - { - "variable": "scaleGPU", - "label": "GPU Configuration", - "group": "Resources and Devices", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "scaleGPUEntry", - "label": "GPU", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "gpu", - "label": "Select GPU", - "schema": { - "additional_attrs": true, - "type": "dict", - "$ref": [ - "definitions/gpuConfiguration" - ], - "attrs": [] - } - }, - { - "variable": "workaround", - "label": "Workaround", - "schema": { - "type": "string", - "default": "workaround", - "hidden": 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": "Advanced", - "label": "(Advanced) Network Policy", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "netPolicyEntry", - "label": "Network Policy Entry", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "policyType", - "label": "Policy Type", - "schema": { - "type": "string", - "default": "", - "enum": [ - { - "value": "", - "description": "Default" - }, - { - "value": "ingress", - "description": "Ingress" - }, - { - "value": "egress", - "description": "Egress" - }, - { - "value": "ingress-egress", - "description": "Ingress and Egress" - } - ] - } - }, - { - "variable": "egress", - "label": "Egress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "egressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "to", - "label": "To", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "toEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ingressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "from", - "label": "From", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "fromEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "addons", - "group": "Addons", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "Codeserver", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "service", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "NodePort", - "description": "Deprecated CHANGE THIS" - }, - { - "value": "ClusterIP", - "description": "ClusterIP" - }, - { - "value": "LoadBalancer", - "description": "LoadBalancer" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "ports", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int", - "default": 36107 - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable Ingress", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hosts", - "label": "Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "hostEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "host", - "label": "HostName", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "paths", - "label": "Paths", - "schema": { - "type": "list", - "default": [ - { - "path": "/", - "pathType": "Prefix" - } - ], - "items": [ - { - "variable": "pathEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "path", - "label": "Path", - "schema": { - "type": "string", - "required": true, - "default": "/" - } - }, - { - "variable": "pathType", - "label": "Path Type", - "schema": { - "type": "string", - "required": true, - "default": "Prefix" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "integrations", - "label": "Integrations", - "description": "Connect ingress with other charts", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "traefik", - "label": "Traefik", - "description": "Connect ingress with Traefik", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "allowCors", - "label": "Allow Cross Origin Requests (advanced)", - "schema": { - "type": "boolean", - "default": false, - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - }, - { - "variable": "entrypoints", - "label": "Entrypoints", - "schema": { - "type": "list", - "default": [ - "websecure" - ], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "entrypoint", - "label": "Entrypoint", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "middlewares", - "label": "Middlewares", - "schema": { - "type": "list", - "default": [], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "middleware", - "label": "Middleware", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "name", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "namespace", - "label": "namespace (optional)", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "certManager", - "label": "certManager", - "description": "Connect ingress with certManager", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "certificateIssuer", - "label": "certificateIssuer", - "description": "defaults to chartname", - "schema": { - "type": "string", - "default": "", - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "advanced", - "label": "Show Advanced Settings", - "description": "Advanced settings are not covered by TrueCharts Support", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "ingressClassName", - "label": "(Advanced/Optional) IngressClass Name", - "schema": { - "type": "string", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": "" - } - }, - { - "variable": "tls", - "label": "TLS-Settings", - "schema": { - "type": "list", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": [], - "items": [ - { - "variable": "tlsEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "hosts", - "label": "Certificate Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "host", - "label": "Host", - "schema": { - "type": "string", - "default": "", - "required": true - } - } - ] - } - }, - { - "variable": "certificateIssuer", - "label": "Use Cert-Manager clusterIssuer", - "description": "add the name of your cert-manager clusterIssuer here for automatic tls certificates.", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "clusterCertificate", - "label": "Cluster Certificate (Advanced)", - "description": "Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.", - "schema": { - "type": "string", - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "default": "" - } - }, - { - "variable": "secretName", - "label": "Use Custom Certificate Secret (Advanced)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "scaleCert", - "label": "Use TrueNAS SCALE Certificate (Deprecated)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "int", - "$ref": [ - "definitions/certificate" - ], - "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": "

          A fork of Sonarr to work with movies \u00e0 la Couchpotato

          \n

          This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/radarr

          \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 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

          radarr-19.1.12 (2024-02-03)

          \n

          Chore

          \n
            \n
          • update container image common to v17.2.30@19ad5ec by renovate (#17804)
          • \n
          \n

          radarr-19.1.11 (2024-01-29)

          \n

          Chore

          \n
            \n
          • update container image ghcr.io/onedr0p/exportarr to v1.6.1@60cf3d4 by renovate (#17725)
          • \n
          \n

          radarr-19.1.10 (2024-01-26)

          \n

          Chore

          \n
            \n
          • update container image common to v17.2.29@d7c41a3 by renovate (#17545)
          • \n
          \n

          radarr-19.1.9 (2024-01-21)

          \n

          Chore

          \n
            \n
          • update container image common to v17.2.28@918b4c5 by renovate (#17478)
          • \n
          \n

          radarr-19.1.8 (2024-01-21)

          \n

          Chore

          \n
            \n
          • update container image common to v17.2.26@24c98f7 by renovate (#17409)
          • \n
          \n

          radarr-19.1.7 (2024-01-21)

          \n

          Chore

          \n
            \n
          • update metadata in chart.yaml (#17457)
          • \n
          \n

          radarr-19.1.6 (2024-01-09)

          \n

          Chore

          \n
            \n
          • update container image common to v17.2.22@e7c9056 by renovate (#16986)
          • \n
          \n

          radarr-19.1.5 (2024-01-02)

          \n

          Chore

          \n
            \n
          • force bump to ensure up-to-date catalogs
          • \n
          \n

          radarr-19.1.4 (2024-01-01)

          \n

          Chore

          \n
            \n
          • \n

            increase common version for oci fixes

            \n
          • \n
          • \n

            remove non-existent template refs (#16738)

            \n
          • \n
          " - }, - "19.3.0": { - "healthy": true, - "supported": true, - "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/radarr/19.3.0", - "last_update": "2024-05-29 12:35:14", - "required_features": [ - "definitions/timezone", - "definitions/gpuConfiguration", - "definitions/interface", - "normalize/interfaceConfiguration", - "definitions/certificate" - ], - "human_version": "5.3.6.8612_19.3.0", - "version": "19.3.0", - "chart_metadata": { - "annotations": { - "max_scale_version": "24.04.0", - "min_scale_version": "23.10.0", - "truecharts.org/category": "media", - "truecharts.org/max_helm_version": "3.14", - "truecharts.org/min_helm_version": "3.12", - "truecharts.org/train": "stable" - }, - "apiVersion": "v2", - "appVersion": "5.3.6.8612", - "dependencies": [ - { - "name": "common", - "version": "17.4.2", - "repository": "oci://tccr.io/truecharts", - "condition": "", - "alias": "", - "tags": [], - "import-values": [] - } - ], - "deprecated": false, - "description": "A fork of Sonarr to work with movies \u00e0 la Couchpotato", - "home": "https://truecharts.org/charts/stable/radarr", - "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/radarr.png", - "keywords": [ - "radarr", - "torrent", - "usenet" - ], - "kubeVersion": ">=1.24.0-0", - "maintainers": [ - { - "name": "TrueCharts", - "email": "info@truecharts.org", - "url": "https://truecharts.org" - } - ], - "name": "radarr", - "sources": [ - "https://github.com/Radarr/Radarr", - "https://github.com/truecharts/charts/tree/master/charts/stable/radarr", - "https://ghcr.io/onedr0p/radarr", - "https://ghcr.io/onedr0p/exportarr" - ], - "type": "application", - "version": "19.3.0" - }, - "app_metadata": null, - "schema": { - "groups": [ - { - "name": "Container Image", - "description": "Image to be used for container" - }, - { - "name": "General Settings", - "description": "General Deployment Settings" - }, - { - "name": "Workload Settings", - "description": "Workload Settings" - }, - { - "name": "App Configuration", - "description": "App Specific Config Options" - }, - { - "name": "Networking and Services", - "description": "Configure Network and Services for Container" - }, - { - "name": "Storage and Persistence", - "description": "Persist and Share Data that is Separate from the Container" - }, - { - "name": "Ingress", - "description": "Ingress Configuration" - }, - { - "name": "Security and Permissions", - "description": "Configure Security Context and Permissions" - }, - { - "name": "Resources and Devices", - "description": "Specify Resources/Devices to be Allocated to Workload" - }, - { - "name": "Middlewares", - "description": "Traefik Middlewares" - }, - { - "name": "Metrics", - "description": "Metrics" - }, - { - "name": "Addons", - "description": "Addon Configuration" - }, - { - "name": "Backup Configuration", - "description": "Configure Velero Backup Schedule" - }, - { - "name": "Advanced", - "description": "Advanced Configuration" - }, - { - "name": "Postgresql", - "description": "Postgresql" - }, - { - "name": "Documentation", - "description": "Documentation" - } - ], - "portals": { - "open": { - "protocols": [ - "$kubernetes-resource_configmap_tcportal-open_protocol" - ], - "host": [ - "$kubernetes-resource_configmap_tcportal-open_host" - ], - "ports": [ - "$kubernetes-resource_configmap_tcportal-open_port" - ] - } - }, - "questions": [ - { - "variable": "global", - "group": "General Settings", - "label": "Global Settings", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "stopAll", - "label": "Stop All", - "description": "Stops All Running pods and hibernates cnpg", - "schema": { - "type": "boolean", - "default": false - } - } - ] - } - }, - { - "variable": "workload", - "group": "Workload Settings", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Type (Advanced)", - "schema": { - "type": "string", - "default": "Deployment", - "enum": [ - { - "value": "Deployment", - "description": "Deployment" - }, - { - "value": "DaemonSet", - "description": "DaemonSet" - } - ] - } - }, - { - "variable": "replicas", - "label": "Replicas (Advanced)", - "description": "Set the number of Replicas", - "schema": { - "type": "int", - "show_if": [ - [ - "type", - "!=", - "DaemonSet" - ] - ], - "default": 1 - } - }, - { - "variable": "podSpec", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "containers", - "label": "Containers", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "Main Container", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "env", - "group": "App Configuration", - "label": "Image Environment", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "RADARR__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 Settings", - "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 Settings", - "label": "Global Pod Options (Advanced)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "expertPodOpts", - "label": "Expert - Pod Options", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hostNetwork", - "label": "Host Networking", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "dnsConfig", - "label": "DNS Configuration", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "options", - "label": "Options", - "schema": { - "type": "list", - "default": [ - { - "name": "ndots", - "value": "1" - } - ], - "items": [ - { - "variable": "optionsEntry", - "label": "Option Entry", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true - } - }, - { - "variable": "value", - "label": "Value", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "nameservers", - "label": "Nameservers", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "nsEntry", - "label": "Nameserver Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - }, - { - "variable": "searches", - "label": "Searches", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "searchEntry", - "label": "Search Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "imagePullSecretList", - "group": "General Settings", - "label": "Image Pull Secrets", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "pullsecretentry", - "label": "Pull Secret", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "data", - "label": "Data", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "registry", - "label": "Registry", - "schema": { - "type": "string", - "required": true, - "default": "https://index.docker.io/v1/" - } - }, - { - "variable": "username", - "label": "Username", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "password", - "label": "Password", - "schema": { - "type": "string", - "required": true, - "private": true, - "default": "" - } - }, - { - "variable": "email", - "label": "Email", - "schema": { - "type": "string", - "required": true, - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "service", - "group": "Networking and Services", - "label": "Configure Service(s)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "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": 7878, - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "serviceexpert", - "group": "Networking and Services", - "label": "Show Expert Config", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "scaleExternalInterface", - "description": "Add External Interfaces", - "label": "Add external Interfaces", - "group": "Networking", - "schema": { - "type": "list", - "items": [ - { - "variable": "interfaceConfiguration", - "description": "Interface Configuration", - "label": "Interface Configuration", - "schema": { - "additional_attrs": true, - "type": "dict", - "$ref": [ - "normalize/interfaceConfiguration" - ], - "attrs": [ - { - "variable": "hostInterface", - "description": "Please Specify Host Interface", - "label": "Host Interface", - "schema": { - "type": "string", - "required": true, - "$ref": [ - "definitions/interface" - ], - "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": "Networking and Services", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "serviceListEntry", - "label": "Custom Service", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the service", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "LoadBalancer", - "description": "LoadBalancer (Expose Ports)" - }, - { - "value": "ClusterIP", - "description": "ClusterIP (Do Not Expose Ports)" - }, - { - "value": "Simple", - "description": "Deprecated CHANGE THIS" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "advancedsvcset", - "label": "Show Advanced Service Settings", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "externalIPs", - "label": "External IP's", - "description": "External IP's", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "externalIP", - "label": "External IP", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "ipFamilyPolicy", - "label": "IP Family Policy", - "description": "Specify the IP Policy", - "schema": { - "type": "string", - "default": "SingleStack", - "enum": [ - { - "value": "SingleStack", - "description": "SingleStack" - }, - { - "value": "PreferDualStack", - "description": "PreferDualStack" - }, - { - "value": "RequireDualStack", - "description": "RequireDualStack" - } - ] - } - }, - { - "variable": "ipFamilies", - "label": "IP Families", - "description": "(Advanced) The IP Families that should be used", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ipFamily", - "label": "IP Family", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "portsList", - "label": "Additional Service Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsListEntry", - "label": "Custom ports", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Port", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Port Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "protocol", - "label": "Port Type", - "schema": { - "type": "string", - "default": "tcp", - "enum": [ - { - "value": "http", - "description": "HTTP" - }, - { - "value": "https", - "description": "HTTPS" - }, - { - "value": "tcp", - "description": "TCP" - }, - { - "value": "udp", - "description": "UDP" - } - ] - } - }, - { - "variable": "targetPort", - "label": "Target Port", - "description": "This port exposes the container port on the service", - "schema": { - "type": "int", - "required": true - } - }, - { - "variable": "port", - "label": "Container Port", - "schema": { - "type": "int", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "persistence", - "label": "Integrated Persistent Storage", - "description": "Integrated Persistent Storage", - "group": "Storage and 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": "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": "Storage and Persistence", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "persistenceListEntry", - "label": "Custom Storage", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the storage", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "type", - "label": "Type of Storage", - "description": "Sets the persistence type, Anything other than PVC could break rollback!", - "schema": { - "type": "string", - "default": "hostPath", - "enum": [ - { - "value": "pvc", - "description": "PVC" - }, - { - "value": "hostPath", - "description": "Host Path" - }, - { - "value": "emptyDir", - "description": "emptyDir" - }, - { - "value": "nfs", - "description": "NFS Share" - } - ] - } - }, - { - "variable": "server", - "label": "NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "path", - "label": "Path on NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "iscsi", - "label": "iSCSI Options", - "schema": { - "show_if": [ - [ - "type", - "=", - "iscsi" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "targetPortal", - "label": "targetPortal", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "iqn", - "label": "iqn", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "lun", - "label": "lun", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "authSession", - "label": "authSession", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - }, - { - "variable": "authDiscovery", - "label": "authDiscovery", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - }, - { - "variable": "autoPermissions", - "label": "Automatic Permissions Configuration", - "description": "Automatically set permissions", - "schema": { - "show_if": [ - [ - "type", - "!=", - "pvc" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "chown", - "label": "Run CHOWN", - "description": "It will run CHOWN on the path with the given fsGroup\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": "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": "Security and Permissions", - "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 and Devices", - "label": "Resource Limits", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "limits", - "label": "Advanced Limit Resource Consumption", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "4000m", - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "8Gi", - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - }, - { - "variable": "intel.com/i915", - "label": "Add Intel i915 GPUs", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "nvidia.com/gpu", - "label": "Add NVIDIA GPUs (Experimental)", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "amd.com/gpu", - "label": "Add AMD GPUs", - "schema": { - "type": "int", - "default": 0 - } - } - ] - } - }, - { - "variable": "requests", - "label": "Minimum Resources Required (request)", - "schema": { - "additional_attrs": true, - "type": "dict", - "hidden": true, - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "10m", - "hidden": true, - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "50Mi", - "hidden": true, - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - } - ] - } - } - ] - } - }, - { - "variable": "deviceList", - "label": "Mount USB Devices", - "group": "Resources and Devices", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "deviceListEntry", - "label": "Device", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Storage", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "type", - "label": "(Advanced) Type of Storage", - "description": "Sets the persistence type", - "schema": { - "type": "string", - "default": "device", - "hidden": true - } - }, - { - "variable": "readOnly", - "label": "readOnly", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "hostPath", - "label": "Host Device Path", - "description": "Path to the device on the host system", - "schema": { - "type": "path" - } - }, - { - "variable": "mountPath", - "label": "Container Device Path", - "description": "Path inside the container the device is mounted", - "schema": { - "type": "string", - "default": "/dev/ttyACM0" - } - } - ] - } - } - ] - } - }, - { - "variable": "scaleGPU", - "label": "GPU Configuration", - "group": "Resources and Devices", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "scaleGPUEntry", - "label": "GPU", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "gpu", - "label": "Select GPU", - "schema": { - "additional_attrs": true, - "type": "dict", - "$ref": [ - "definitions/gpuConfiguration" - ], - "attrs": [] - } - }, - { - "variable": "workaround", - "label": "Workaround", - "schema": { - "type": "string", - "default": "workaround", - "hidden": 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": "Advanced", - "label": "(Advanced) Network Policy", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "netPolicyEntry", - "label": "Network Policy Entry", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "policyType", - "label": "Policy Type", - "schema": { - "type": "string", - "default": "", - "enum": [ - { - "value": "", - "description": "Default" - }, - { - "value": "ingress", - "description": "Ingress" - }, - { - "value": "egress", - "description": "Egress" - }, - { - "value": "ingress-egress", - "description": "Ingress and Egress" - } - ] - } - }, - { - "variable": "egress", - "label": "Egress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "egressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "to", - "label": "To", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "toEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ingressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "from", - "label": "From", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "fromEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "addons", - "group": "Addons", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "Codeserver", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "service", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "NodePort", - "description": "Deprecated CHANGE THIS" - }, - { - "value": "ClusterIP", - "description": "ClusterIP" - }, - { - "value": "LoadBalancer", - "description": "LoadBalancer" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "ports", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int", - "default": 36107 - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable Ingress", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hosts", - "label": "Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "hostEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "host", - "label": "HostName", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "paths", - "label": "Paths", - "schema": { - "type": "list", - "default": [ - { - "path": "/", - "pathType": "Prefix" - } - ], - "items": [ - { - "variable": "pathEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "path", - "label": "Path", - "schema": { - "type": "string", - "required": true, - "default": "/" - } - }, - { - "variable": "pathType", - "label": "Path Type", - "schema": { - "type": "string", - "required": true, - "default": "Prefix" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "integrations", - "label": "Integrations", - "description": "Connect ingress with other charts", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "traefik", - "label": "Traefik", - "description": "Connect ingress with Traefik", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "allowCors", - "label": "Allow Cross Origin Requests (advanced)", - "schema": { - "type": "boolean", - "default": false, - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - }, - { - "variable": "entrypoints", - "label": "Entrypoints", - "schema": { - "type": "list", - "default": [ - "websecure" - ], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "entrypoint", - "label": "Entrypoint", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "middlewares", - "label": "Middlewares", - "schema": { - "type": "list", - "default": [], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "middleware", - "label": "Middleware", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "name", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "namespace", - "label": "namespace (optional)", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "certManager", - "label": "certManager", - "description": "Connect ingress with certManager", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "certificateIssuer", - "label": "certificateIssuer", - "description": "defaults to chartname", - "schema": { - "type": "string", - "default": "", - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "advanced", - "label": "Show Advanced Settings", - "description": "Advanced settings are not covered by TrueCharts Support", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "ingressClassName", - "label": "(Advanced/Optional) IngressClass Name", - "schema": { - "type": "string", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": "" - } - }, - { - "variable": "tls", - "label": "TLS-Settings", - "schema": { - "type": "list", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": [], - "items": [ - { - "variable": "tlsEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "hosts", - "label": "Certificate Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "host", - "label": "Host", - "schema": { - "type": "string", - "default": "", - "required": true - } - } - ] - } - }, - { - "variable": "certificateIssuer", - "label": "Use Cert-Manager clusterIssuer", - "description": "add the name of your cert-manager clusterIssuer here for automatic tls certificates.", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "clusterCertificate", - "label": "Cluster Certificate (Advanced)", - "description": "Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.", - "schema": { - "type": "string", - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "default": "" - } - }, - { - "variable": "secretName", - "label": "Use Custom Certificate Secret (Advanced)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "scaleCert", - "label": "Use TrueNAS SCALE Certificate (Deprecated)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "int", - "$ref": [ - "definitions/certificate" - ], - "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": "

          A fork of Sonarr to work with movies \u00e0 la Couchpotato

          \n

          This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/radarr

          \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 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

          radarr-19.1.12 (2024-02-03)

          \n

          Chore

          \n
            \n
          • update container image common to v17.2.30@19ad5ec by renovate (#17804)
          • \n
          \n

          radarr-19.1.11 (2024-01-29)

          \n

          Chore

          \n
            \n
          • update container image ghcr.io/onedr0p/exportarr to v1.6.1@60cf3d4 by renovate (#17725)
          • \n
          \n

          radarr-19.1.10 (2024-01-26)

          \n

          Chore

          \n
            \n
          • update container image common to v17.2.29@d7c41a3 by renovate (#17545)
          • \n
          \n

          radarr-19.1.9 (2024-01-21)

          \n

          Chore

          \n
            \n
          • update container image common to v17.2.28@918b4c5 by renovate (#17478)
          • \n
          \n

          radarr-19.1.8 (2024-01-21)

          \n

          Chore

          \n
            \n
          • update container image common to v17.2.26@24c98f7 by renovate (#17409)
          • \n
          \n

          radarr-19.1.7 (2024-01-21)

          \n

          Chore

          \n
            \n
          • update metadata in chart.yaml (#17457)
          • \n
          \n

          radarr-19.1.6 (2024-01-09)

          \n

          Chore

          \n
            \n
          • update container image common to v17.2.22@e7c9056 by renovate (#16986)
          • \n
          \n

          radarr-19.1.5 (2024-01-02)

          \n

          Chore

          \n
            \n
          • force bump to ensure up-to-date catalogs
          • \n
          \n

          radarr-19.1.4 (2024-01-01)

          \n

          Chore

          \n
            \n
          • \n

            increase common version for oci fixes

            \n
          • \n
          • \n

            remove non-existent template refs (#16738)

            \n
          • \n
          " } } \ No newline at end of file diff --git a/stable/readarr/19.2.0/.helmignore b/stable/readarr/19.2.0/.helmignore deleted file mode 100644 index 77ca5567b2..0000000000 --- a/stable/readarr/19.2.0/.helmignore +++ /dev/null @@ -1,30 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ -# OWNERS file for Kubernetes -OWNERS -# helm-docs templates -*.gotmpl -# docs folder -/docs -# icon -icon.png diff --git a/stable/readarr/19.2.0/CHANGELOG.md b/stable/readarr/19.2.0/CHANGELOG.md deleted file mode 100644 index 1ae67fc5b8..0000000000 --- a/stable/readarr/19.2.0/CHANGELOG.md +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: Changelog ---- - - -*for the complete changelog, please refer to the website* - -**Important:** - - - -## [readarr-19.1.18](https://github.com/truecharts/charts/compare/readarr-19.1.17...readarr-19.1.18) (2024-02-05) - -### Chore - - - -- update container image ghcr.io/onedr0p/readarr-develop to 0.3.18.2411[@a1d9eb2](https://github.com/a1d9eb2) by renovate ([#17957](https://github.com/truecharts/charts/issues/17957)) - - -## [readarr-19.1.17](https://github.com/truecharts/charts/compare/readarr-19.1.16...readarr-19.1.17) (2024-02-05) - -### Chore - - - -- update container image ghcr.io/onedr0p/readarr-develop to v0.3.18.2411[@fa1fe2d](https://github.com/fa1fe2d) by renovate ([#17916](https://github.com/truecharts/charts/issues/17916)) - - -## [readarr-19.1.16](https://github.com/truecharts/charts/compare/readarr-19.1.15...readarr-19.1.16) (2024-02-03) - -### Chore - - - -- update container image common to v17.2.30[@19ad5ec](https://github.com/19ad5ec) by renovate ([#17804](https://github.com/truecharts/charts/issues/17804)) - - -## [readarr-19.1.15](https://github.com/truecharts/charts/compare/readarr-19.1.14...readarr-19.1.15) (2024-01-29) - -### Chore - - - -- update container image ghcr.io/onedr0p/exportarr to v1.6.1[@60cf3d4](https://github.com/60cf3d4) by renovate ([#17725](https://github.com/truecharts/charts/issues/17725)) - - -## [readarr-19.1.14](https://github.com/truecharts/charts/compare/readarr-19.1.13...readarr-19.1.14) (2024-01-29) - -### Chore - - - -- update container image ghcr.io/onedr0p/readarr-develop to v0.3.17.2409[@3d8be41](https://github.com/3d8be41) by renovate ([#17675](https://github.com/truecharts/charts/issues/17675)) - - -## [readarr-19.1.13](https://github.com/truecharts/charts/compare/readarr-19.1.12...readarr-19.1.13) (2024-01-26) - -### Chore - - - -- update container image common to v17.2.29[@d7c41a3](https://github.com/d7c41a3) by renovate ([#17545](https://github.com/truecharts/charts/issues/17545)) - - -## [readarr-19.1.12](https://github.com/truecharts/charts/compare/readarr-19.1.11...readarr-19.1.12) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.28[@918b4c5](https://github.com/918b4c5) by renovate ([#17478](https://github.com/truecharts/charts/issues/17478)) - - -## [readarr-19.1.11](https://github.com/truecharts/charts/compare/readarr-19.1.10...readarr-19.1.11) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.26[@24c98f7](https://github.com/24c98f7) by renovate ([#17409](https://github.com/truecharts/charts/issues/17409)) - - -## [readarr-19.1.10](https://github.com/truecharts/charts/compare/readarr-19.1.9...readarr-19.1.10) (2024-01-21) - -### Chore - - - -- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) - - -## [readarr-19.1.9](https://github.com/truecharts/charts/compare/readarr-19.1.8...readarr-19.1.9) (2024-01-21) - -### Chore - - - -- update container image ghcr.io/onedr0p/readarr-develop to v0.3.15.2376[@ac03108](https://github.com/ac03108) by renovate ([#17422](https://github.com/truecharts/charts/issues/17422)) diff --git a/stable/readarr/19.2.0/Chart.yaml b/stable/readarr/19.2.0/Chart.yaml deleted file mode 100644 index a1da5909be..0000000000 --- a/stable/readarr/19.2.0/Chart.yaml +++ /dev/null @@ -1,41 +0,0 @@ -annotations: - max_scale_version: 24.04.0 - min_scale_version: 23.10.0 - truecharts.org/category: media - truecharts.org/max_helm_version: "3.14" - truecharts.org/min_helm_version: "3.12" - truecharts.org/train: stable -apiVersion: v2 -appVersion: 0.3.18.2411 -dependencies: - - name: common - version: 17.5.1 - repository: oci://tccr.io/truecharts - condition: "" - alias: "" - tags: [] - import-values: [] -deprecated: false -description: A fork of Radarr to work with Books & AudioBooks -home: https://truecharts.org/charts/stable/readarr -icon: https://truecharts.org/img/hotlink-ok/chart-icons/readarr.png -keywords: - - readarr - - torrent - - usenet - - AudioBooks - - ebooks -kubeVersion: ">=1.24.0-0" -maintainers: - - name: TrueCharts - email: info@truecharts.org - url: https://truecharts.org -name: readarr -sources: - - https://readarr.com - - https://github.com/Readarr/Readarr - - https://github.com/truecharts/charts/tree/master/charts/stable/readarr - - https://ghcr.io/onedr0p/readarr-develop - - https://ghcr.io/onedr0p/exportarr -type: application -version: 19.2.0 diff --git a/stable/readarr/19.2.0/README.md b/stable/readarr/19.2.0/README.md deleted file mode 100644 index 7fa53aa4e9..0000000000 --- a/stable/readarr/19.2.0/README.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: README ---- - -## General Info - -TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. -However only installations using the TrueNAS SCALE Apps system are supported. - -For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/readarr) - -**This chart is not maintained by the upstream project and any issues with the chart should be raised [here](https://github.com/truecharts/charts/issues/new/choose)** - -## Support - -- Please check our [quick-start guides for TrueNAS SCALE](https://truecharts.org/manual/SCALE/guides/scale-intro). -- See the [Website](https://truecharts.org) -- Check our [Discord](https://discord.gg/tVsPTHWTtr) -- Open a [issue](https://github.com/truecharts/charts/issues/new/choose) - ---- - -## Sponsor TrueCharts - -TrueCharts can only exist due to the incredible effort of our staff. -Please consider making a [donation](https://truecharts.org/sponsor) or contributing back to the project any way you can! - -_All Rights Reserved - The TrueCharts Project_ diff --git a/stable/readarr/19.2.0/app-readme.md b/stable/readarr/19.2.0/app-readme.md deleted file mode 100644 index 3bc4be21cf..0000000000 --- a/stable/readarr/19.2.0/app-readme.md +++ /dev/null @@ -1,8 +0,0 @@ -A fork of Radarr to work with Books & AudioBooks - -This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/readarr](https://truecharts.org/charts/stable/readarr) - ---- - -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/readarr/19.2.0/charts/common-17.4.2.tgz b/stable/readarr/19.2.0/charts/common-17.4.2.tgz deleted file mode 100644 index 31f3a104561f859f297067776ab86a1503525be4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100097 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 l8bLay74+E3;;+DksJU3 diff --git a/stable/readarr/19.2.0/ix_values.yaml b/stable/readarr/19.2.0/ix_values.yaml deleted file mode 100644 index a29594bbf9..0000000000 --- a/stable/readarr/19.2.0/ix_values.yaml +++ /dev/null @@ -1,109 +0,0 @@ -image: - repository: ghcr.io/onedr0p/readarr-develop - pullPolicy: IfNotPresent - tag: 0.3.18.2411@sha256:a1d9eb2001d499322e00876106a675c36b6f750cd253843595bb8e022a54f37a -exportarrImage: - repository: ghcr.io/onedr0p/exportarr - pullPolicy: IfNotPresent - tag: v1.6.1@sha256:60cf3d44aa0b7dea2a65160b2e2e373c1ae38cd6b12a45fe81b8afa45ac31c22 -securityContext: - container: - readOnlyRootFilesystem: false -service: - main: - ports: - main: - port: 8787 - metrics: - enabled: true - type: ClusterIP - targetSelector: exportarr - ports: - metrics: - enabled: true - port: 8788 - targetSelector: exportarr -workload: - main: - podSpec: - containers: - main: - probes: - liveness: - enabled: true - type: http - path: /ping - readiness: - enabled: true - type: http - path: /ping - startup: - enabled: true - type: http - path: /ping - env: - READARR__PORT: "{{ .Values.service.main.ports.main.port }}" - READARR__AUTHENTICATION_METHOD: "None" - exportarr: - enabled: true - type: Deployment - strategy: RollingUpdate - replicas: 1 - podSpec: - containers: - exportarr: - primary: true - enabled: true - imageSelector: exportarrImage - args: - - readarr - 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 - CONFIG: "/config/config.xml" -persistence: - config: - enabled: true - targetSelector: - main: - main: - mountPath: /config - exportarr: - exportarr: - mountPath: /config - readOnly: true -metrics: - main: - enabled: true - type: "servicemonitor" - endpoints: - - port: metrics - path: /metrics - targetSelector: metrics - prometheusRule: - enabled: false -portal: - open: - enabled: true -updated: true diff --git a/stable/readarr/19.2.0/questions.yaml b/stable/readarr/19.2.0/questions.yaml deleted file mode 100755 index 6338ec2511..0000000000 --- a/stable/readarr/19.2.0/questions.yaml +++ /dev/null @@ -1,2927 +0,0 @@ -groups: - - name: Container Image - description: Image to be used for container - - name: General Settings - description: General Deployment Settings - - name: Workload Settings - description: Workload Settings - - name: App Configuration - description: App Specific Config Options - - name: Networking and Services - description: Configure Network and Services for Container - - name: Storage and Persistence - description: Persist and Share Data that is Separate from the Container - - name: Ingress - description: Ingress Configuration - - name: Security and Permissions - description: Configure Security Context and Permissions - - name: Resources and Devices - description: "Specify Resources/Devices to be Allocated to Workload" - - name: Middlewares - description: Traefik Middlewares - - name: Metrics - description: Metrics - - name: Addons - description: Addon Configuration - - name: Backup Configuration - description: Configure Velero Backup Schedule - - name: Advanced - description: Advanced Configuration - - name: Postgresql - description: Postgresql - - name: Documentation - description: Documentation - -portals: - open: - protocols: - - "$kubernetes-resource_configmap_tcportal-open_protocol" - host: - - "$kubernetes-resource_configmap_tcportal-open_host" - ports: - - "$kubernetes-resource_configmap_tcportal-open_port" - -questions: - - variable: global - group: General Settings - label: "Global Settings" - schema: - additional_attrs: true - type: dict - attrs: - - variable: stopAll - label: Stop All - description: "Stops All Running pods and hibernates cnpg" - schema: - type: boolean - default: false - - - variable: workload - group: "Workload Settings" - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: main - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: type - label: Type (Advanced) - schema: - type: string - default: Deployment - enum: - - value: Deployment - description: Deployment - - value: DaemonSet - description: DaemonSet - - - variable: replicas - label: Replicas (Advanced) - description: Set the number of Replicas - schema: - type: int - show_if: [["type", "!=", "DaemonSet"]] - default: 1 - - - variable: podSpec - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: containers - label: Containers - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: Main Container - schema: - additional_attrs: true - type: dict - attrs: - - - variable: env - group: App Configuration - label: Image Environment - schema: - additional_attrs: true - type: dict - attrs: - - variable: READARR__AUTHENTICATION_METHOD - label: Auth Method - description: Sets the auth method. - schema: - type: string - default: "" - enum: - - value: "" - description: In-App Setting - - value: None - description: 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 Settings" - schema: - type: string - default: "Etc/UTC" - $ref: - - "definitions/timezone" - - - variable: podOptions - group: "General Settings" - label: "Global Pod Options (Advanced)" - schema: - additional_attrs: true - type: dict - attrs: - - variable: expertPodOpts - label: "Expert - Pod Options" - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hostNetwork - label: "Host Networking" - schema: - type: boolean - default: false - - variable: dnsConfig - label: "DNS Configuration" - schema: - type: dict - additional_attrs: true - attrs: - - variable: options - label: "Options" - schema: - type: list - default: [{"name": "ndots", "value": "1"}] - items: - - variable: optionsEntry - label: "Option Entry" - schema: - type: dict - additional_attrs: true - attrs: - - variable: name - label: "Name" - schema: - type: string - required: true - - variable: value - label: "Value" - schema: - type: string - - variable: nameservers - label: "Nameservers" - schema: - type: list - default: [] - items: - - variable: nsEntry - label: "Nameserver Entry" - schema: - type: string - required: true - - variable: searches - label: "Searches" - schema: - type: list - default: [] - items: - - variable: searchEntry - label: "Search Entry" - schema: - type: string - required: true - - - variable: imagePullSecretList - group: "General Settings" - label: "Image Pull Secrets" - schema: - type: list - default: [] - items: - - variable: pullsecretentry - label: "Pull Secret" - schema: - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: true - - variable: data - label: Data - schema: - type: dict - additional_attrs: true - attrs: - - variable: registry - label: "Registry" - schema: - type: string - required: true - default: "https://index.docker.io/v1/" - - variable: username - label: "Username" - schema: - type: string - required: true - default: "" - - variable: password - label: "Password" - schema: - type: string - required: true - private: true - default: "" - - variable: email - label: "Email" - schema: - type: string - required: true - default: "" - - - variable: service - group: Networking and Services - label: Configure Service(s) - schema: - additional_attrs: true - type: dict - attrs: - - - variable: 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: 8787 - required: true - - variable: serviceexpert - group: Networking and Services - label: Show Expert Config - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - - variable: scaleExternalInterface - description: Add External Interfaces - label: Add external Interfaces - group: Networking - schema: - type: list - items: - - variable: interfaceConfiguration - description: Interface Configuration - label: Interface Configuration - schema: - additional_attrs: true - type: dict - $ref: - - "normalize/interfaceConfiguration" - attrs: - - variable: hostInterface - description: Please Specify Host Interface - label: Host Interface - schema: - type: string - required: true - $ref: - - "definitions/interface" - - variable: ipam - description: Define how IP Address will be managed - label: IP Address Management - schema: - additional_attrs: true - type: dict - required: true - attrs: - - variable: type - description: Specify type for IPAM - label: IPAM Type - schema: - type: string - required: true - enum: - - value: dhcp - description: Use DHCP - - value: static - description: Use Static IP - - variable: staticIPConfigurations - label: Static IP Addresses - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticIP - label: Static IP - schema: - type: ipaddr - cidr: true - - variable: staticRoutes - label: Static Routes - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticRouteConfiguration - label: Static Route Configuration - schema: - additional_attrs: true - type: dict - attrs: - - variable: destination - label: Destination - schema: - type: ipaddr - cidr: true - required: true - - variable: gateway - label: Gateway - schema: - type: ipaddr - cidr: false - required: true - - - variable: serviceList - label: Add Manual Custom Services - group: Networking and Services - schema: - type: list - default: [] - items: - - variable: serviceListEntry - label: Custom Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the service - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: LoadBalancer - description: LoadBalancer (Expose Ports) - - value: ClusterIP - description: ClusterIP (Do Not Expose Ports) - - value: Simple - description: Deprecated CHANGE THIS - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: advancedsvcset - label: Show Advanced Service Settings - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: externalIPs - label: "External IP's" - description: "External IP's" - schema: - type: list - default: [] - items: - - variable: externalIP - label: External IP - schema: - type: string - - variable: ipFamilyPolicy - label: IP Family Policy - description: Specify the IP Policy - schema: - type: string - default: SingleStack - enum: - - value: SingleStack - description: SingleStack - - value: PreferDualStack - description: PreferDualStack - - value: RequireDualStack - description: RequireDualStack - - variable: ipFamilies - label: IP Families - description: (Advanced) The IP Families that should be used - schema: - type: list - default: [] - items: - - variable: ipFamily - label: IP Family - schema: - type: string - - variable: portsList - label: Additional Service Ports - schema: - type: list - default: [] - items: - - variable: portsListEntry - label: Custom ports - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Port - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Port Name - schema: - type: string - default: "" - - variable: protocol - label: Port Type - schema: - type: string - default: tcp - enum: - - value: http - description: HTTP - - value: https - description: HTTPS - - value: tcp - description: TCP - - value: udp - description: UDP - - variable: targetPort - label: Target Port - description: This port exposes the container port on the service - schema: - type: int - required: true - - variable: port - label: Container Port - schema: - type: int - required: true - - - variable: persistence - label: Integrated Persistent Storage - description: Integrated Persistent Storage - group: Storage and 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: 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: Storage and Persistence - schema: - type: list - default: [] - items: - - variable: persistenceListEntry - label: Custom Storage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the storage - schema: - type: boolean - default: true - hidden: true - - variable: type - label: Type of Storage - description: Sets the persistence type, Anything other than PVC could break rollback! - schema: - type: string - default: hostPath - enum: - - value: pvc - description: PVC - - value: hostPath - description: Host Path - - value: emptyDir - description: emptyDir - - value: nfs - description: NFS Share - - variable: server - label: NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: path - label: Path on NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: iscsi - label: iSCSI Options - schema: - show_if: [["type", "=", "iscsi"]] - type: dict - additional_attrs: true - attrs: - - variable: targetPortal - label: targetPortal - schema: - type: string - required: true - default: "" - - variable: iqn - label: iqn - schema: - type: string - required: true - default: "" - - variable: lun - label: lun - schema: - type: int - default: 0 - - variable: authSession - label: authSession - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: authDiscovery - label: authDiscovery - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: autoPermissions - label: Automatic Permissions Configuration - description: Automatically set permissions - schema: - show_if: [["type", "!=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: chown - label: Run CHOWN - description: | - It will run CHOWN on the path with the given fsGroup - schema: - type: boolean - default: false - - variable: chmod - label: Run CHMOD - description: | - It will run CHMOD on the path with the given value
          - Format should be 3 digits, e.g. 770 - schema: - type: string - valid_chars: '[0-9]{3}' - default: "" - - variable: recursive - label: Recursive - description: | - It will run CHOWN and CHMOD recursively - schema: - type: boolean - default: false - - variable: readOnly - label: Read Only - schema: - type: boolean - default: false - - variable: hostPath - label: Host Path - description: Path inside the container the storage is mounted - schema: - show_if: [["type", "=", "hostPath"]] - type: hostpath - - variable: mountPath - label: Mount Path - description: Path inside the container the storage is mounted - schema: - type: string - default: "" - required: true - valid_chars: '^\/([a-zA-Z0-9._-]+(\s?[a-zA-Z0-9._-]+|\/?))+$' - - variable: medium - label: EmptyDir Medium - schema: - show_if: [["type", "=", "emptyDir"]] - type: string - default: "" - enum: - - value: "" - description: Default - - value: Memory - description: Memory - - variable: size - label: Size Quotum of Storage - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: 256Gi - - variable: storageClass - label: 'storageClass (Advanced)' - description: 'sets the storageClass to something other than iX default. Only for advanced usecases!' - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: "" - - variable: static - label: 'Static Fixed PVC Bindings (Experimental)' - description: Link a PVC to a specific storage location - schema: - show_if: [["type", "=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: mode - label: mode - description: | - disabled: use normal dynamic PVCs - smb: connect to an SMB share - nfs: connect to an NFS share - schema: - type: string - default: "disabled" - enum: - - value: "disabled" - description: disabled - - value: smb - description: smb - - value: nfs - description: nfs - - variable: server - label: Server - description: server to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "myserver" - - variable: share - label: Share - description: share to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "/myshare" - - variable: user - label: User - description: connecting user - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "myuser" - - variable: domain - label: Domain - description: user domain - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: password - label: Password - description: connecting password - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: volumeSnapshots - label: 'Volume Snapshots (Experimental)' - description: Add an entry to the list to force creation of a volumeSnapshot of this PVC - schema: - show_if: [["type", "=", "pvc"]] - type: list - default: [] - items: - - variable: volumeSnapshotEntry - label: Custom volumeSnapshot - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - description: 'WARNING: renaming this, means deletion of the snapshot with the old name!' - schema: - type: string - default: "mysnapshot" - required: true - - variable: volumeSnapshotClassName - label: 'volumeSnapshot Class Name (Advanced)' - description: For use with PVCs using a non-default storageClass - schema: - type: string - default: "" - - - variable: ingress - label: "" - group: Ingress - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: Main Ingress - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name (Optional) - description: Defaults to chart name - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description (Optional) - description: Defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: icon - label: Icon (Optional) - description: Defaults to chart icon - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - variable: widget - label: Widget Settings - schema: - type: dict - additional_attrs: true - show_if: [["enabled", "=", true]] - attrs: - - variable: enabled - label: Enable Widget - description: When disabled all widget annotations are skipped. - schema: - type: boolean - default: true - - variable: custom - label: Options - schema: - type: dict - additional_attrs: true - attrs: - - variable: key - label: API-key (key) - schema: - type: string - default: "" - - variable: customkv - label: Custom Options - schema: - type: list - default: [] - items: - - variable: option - label: Option - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - default: "" - required: true - - variable: value - label: Value - schema: - type: string - default: "" - required: true - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - - variable: ingressList - label: Add Manual Custom Ingresses - group: Ingress - schema: - type: list - default: [] - items: - - variable: ingressListEntry - label: Custom Ingress - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: ingressClassName - label: IngressClass Name - schema: - type: string - default: "" - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: overrideService - label: Linked Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Service Name - schema: - type: string - default: "" - - variable: port - label: Service Port - schema: - type: int - - variable: tls - label: TLS-Settings - schema: - type: list - default: [] - show_if: [["certificateIssuer", "=", ""]] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your Cert-Manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: Use Custom Secret (Advanced) - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: "Allow Cross Origin Requests" - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: namespace - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description - description: defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - - variable: securityContext - group: Security and Permissions - label: Security Context - schema: - additional_attrs: true - type: dict - attrs: - - variable: container - label: Container - schema: - additional_attrs: true - type: dict - attrs: - # Settings from questions.yaml get appended here on a per-app basis - - - variable: runAsUser - label: "runAsUser" - description: "The UserID of the user running the application" - schema: - type: int - default: 568 - - variable: runAsGroup - label: "runAsGroup" - description: "The groupID 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 and Devices - label: "Resource Limits" - schema: - additional_attrs: true - type: dict - attrs: - - variable: limits - label: Advanced Limit Resource Consumption - schema: - additional_attrs: true - type: dict - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 4000m - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: RAM - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 8Gi - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: 'intel.com/i915' - label: Add Intel i915 GPUs - schema: - type: int - default: 0 - - variable: 'nvidia.com/gpu' - label: Add NVIDIA GPUs (Experimental) - schema: - type: int - default: 0 - - variable: 'amd.com/gpu' - label: Add AMD GPUs - schema: - type: int - default: 0 - - variable: requests - label: "Minimum Resources Required (request)" - schema: - additional_attrs: true - type: dict - hidden: true - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 10m - hidden: true - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: "RAM" - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 50Mi - hidden: true - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: deviceList - label: Mount USB Devices - group: Resources and Devices - schema: - type: list - default: [] - items: - - variable: deviceListEntry - label: Device - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Storage - schema: - type: boolean - default: true - - variable: type - label: (Advanced) Type of Storage - description: Sets the persistence type - schema: - type: string - default: device - hidden: true - - variable: readOnly - label: readOnly - schema: - type: boolean - default: false - - variable: hostPath - label: Host Device Path - description: Path to the device on the host system - schema: - type: path - - variable: mountPath - label: Container Device Path - description: Path inside the container the device is mounted - schema: - type: string - default: "/dev/ttyACM0" - - variable: scaleGPU - label: GPU Configuration - group: Resources and Devices - schema: - type: list - default: [] - items: - - variable: scaleGPUEntry - label: GPU - schema: - additional_attrs: true - type: dict - attrs: - # Specify GPU configuration - - variable: gpu - label: Select GPU - schema: - additional_attrs: true - type: dict - $ref: - - "definitions/gpuConfiguration" - attrs: [] - - variable: workaround - label: "Workaround" - schema: - type: string - default: workaround - hidden: true - - - variable: metrics - group: Metrics - label: Prometheus Metrics - schema: - additional_attrs: true - type: dict - attrs: - - variable: main - label: Main Metrics - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - description: Enable Prometheus Metrics - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - - variable: prometheusRule - label: PrometheusRule - description: Enable and configure Prometheus Rules for the App. - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - description: Enable Prometheus Metrics - schema: - type: boolean - default: false - # TODO: Rule List section - -# - variable: horizontalPodAutoscaler -# group: Advanced -# label: (Advanced) Horizontal Pod Autoscaler -# schema: -# type: list -# default: [] -# items: -# - variable: hpaEntry -# label: HPA Entry -# schema: -# additional_attrs: true -# type: dict -# attrs: -# - variable: name -# label: Name -# schema: -# type: string -# required: true -# default: "" -# - variable: enabled -# label: Enabled -# schema: -# type: boolean -# default: false -# show_subquestions_if: true -# subquestions: -# - variable: target -# label: Target -# description: Deployment name, Defaults to Main Deployment -# schema: -# type: string -# default: "" -# - variable: minReplicas -# label: Minimum Replicas -# schema: -# type: int -# default: 1 -# - variable: maxReplicas -# label: Maximum Replicas -# schema: -# type: int -# default: 5 -# - variable: targetCPUUtilizationPercentage -# label: Target CPU Utilization Percentage -# schema: -# type: int -# default: 80 -# - variable: targetMemoryUtilizationPercentage -# label: Target Memory Utilization Percentage -# schema: -# type: int -# default: 80 - - variable: networkPolicy - group: Advanced - label: (Advanced) Network Policy - schema: - type: list - default: [] - items: - - variable: netPolicyEntry - label: Network Policy Entry - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - default: "" - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: policyType - label: Policy Type - schema: - type: string - default: "" - enum: - - value: "" - description: Default - - value: ingress - description: Ingress - - value: egress - description: Egress - - value: ingress-egress - description: Ingress and Egress - - variable: egress - label: Egress - schema: - type: list - default: [] - items: - - variable: egressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: to - label: To - schema: - type: list - default: [] - items: - - variable: toEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - variable: ingress - label: Ingress - schema: - type: list - default: [] - items: - - variable: ingressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: from - label: From - schema: - type: list - default: [] - items: - - variable: fromEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - - variable: addons - group: Addons - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: codeserver - label: Codeserver - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: service - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: NodePort - description: Deprecated CHANGE THIS - - value: ClusterIP - description: ClusterIP - - value: LoadBalancer - description: LoadBalancer - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: ports - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: codeserver - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - default: 36107 - - variable: ingress - label: "Ingress" - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - variable: scaleCert - label: 'Use TrueNAS SCALE Certificate (Deprecated)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: int - $ref: - - "definitions/certificate" - - variable: envList - label: Codeserver Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: netshoot - label: Netshoot - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: envList - label: Netshoot Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: vpn - label: VPN - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Type - schema: - type: string - default: disabled - enum: - - value: disabled - description: disabled - - value: gluetun - description: Gluetun - - value: tailscale - description: Tailscale - - value: openvpn - description: OpenVPN (Deprecated) - - value: wireguard - description: Wireguard (Deprecated) - - variable: openvpn - label: OpenVPN Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "openvpn"]] - attrs: - - variable: username - label: Authentication Username (Optional) - description: Authentication Username, Optional - schema: - type: string - default: "" - - variable: password - label: Authentication Password - description: Authentication Credentials - schema: - type: string - show_if: [["username", "!=", ""]] - default: "" - required: true - - variable: tailscale - label: Tailscale Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "tailscale"]] - attrs: - - variable: authkey - label: Authentication Key - description: Provide an auth key to automatically authenticate the node as your user account. - schema: - type: string - private: true - default: "" - - variable: auth_once - label: Auth Once - description: Only attempt to log in if not already logged in. - schema: - type: boolean - default: true - - variable: accept_dns - label: Accept DNS - description: Accept DNS configuration from the admin console. - schema: - type: boolean - default: false - - variable: userspace - label: Userspace - description: Userspace Networking mode allows running Tailscale where you do not have access to create a VPN tunnel device. - schema: - type: boolean - default: false - - variable: routes - label: Routes - description: Expose physical subnet routes to your entire Tailscale network. - schema: - type: string - default: "" - - variable: dest_ip - label: Destination IP - description: Tells the DNAT mechanism which Destination IP to set in the IP header, and where to send packets that are matched. - schema: - type: string - default: "" - - variable: sock5_server - label: Sock5 Server - description: The address on which to listen for SOCKS5 proxying into the tailscale net. - schema: - type: string - default: "" - - variable: outbound_http_proxy_listen - label: Outbound HTTP Proxy Listen - description: The address on which to listen for HTTP proxying into the tailscale net. - schema: - type: string - default: "" - - variable: extra_args - label: Extra Args - description: Extra Args - schema: - type: string - default: "" - - variable: daemon_extra_args - label: Tailscale Daemon Extra Args - description: Tailscale Daemon Extra Args - schema: - type: string - default: "" - - variable: killSwitch - label: Enable Killswitch - schema: - type: boolean - show_if: [["type", "!=", "disabled"]] - default: true - - variable: excludedNetworks_IPv4 - label: Killswitch Excluded IPv4 networks - description: List of Killswitch Excluded IPv4 Addresses - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv4 - label: IPv4 Network - schema: - type: string - required: true - - variable: excludedNetworks_IPv6 - label: Killswitch Excluded IPv6 networks - description: "List of Killswitch Excluded IPv6 Addresses" - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv6 - label: IPv6 Network - schema: - type: string - required: true - - variable: configFile - label: VPN Config File Location - schema: - type: string - show_if: [["type", "!=", "disabled"]] - default: "" - - - variable: envList - label: VPN Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - max_length: 10240 - - - variable: docs - group: Documentation - label: Please read the documentation at https://truecharts.org - description: Please read the documentation at -
          https://truecharts.org - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDocs - label: I have checked the documentation - schema: - type: boolean - default: true - - variable: donateNag - group: Documentation - label: Please consider supporting TrueCharts, see https://truecharts.org/sponsor - description: Please consider supporting TrueCharts, see -
          https://truecharts.org/sponsor - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDonate - label: I have considered donating - schema: - type: boolean - default: true - hidden: true - diff --git a/stable/readarr/19.2.0/templates/NOTES.txt b/stable/readarr/19.2.0/templates/NOTES.txt deleted file mode 100644 index efcb74cb77..0000000000 --- a/stable/readarr/19.2.0/templates/NOTES.txt +++ /dev/null @@ -1 +0,0 @@ -{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/readarr/19.2.0/templates/common.yaml b/stable/readarr/19.2.0/templates/common.yaml deleted file mode 100644 index 3c93f57861..0000000000 --- a/stable/readarr/19.2.0/templates/common.yaml +++ /dev/null @@ -1,11 +0,0 @@ -{{/* Make sure all variables are set properly */}} -{{- include "tc.v1.common.loader.init" . -}} - -{{/* Disable [exportarr] if requested */}} -{{- if not .Values.metrics.main.enabled -}} - {{- $_ := set .Values.workload.exportarr "enabled" false -}} - {{- $_ := set .Values.service.metrics "enabled" false -}} -{{- end -}} - -{{/* Render the templates */}} -{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/readarr/19.2.0/values.yaml b/stable/readarr/19.2.0/values.yaml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/stable/readarr/19.3.0/.helmignore b/stable/readarr/19.3.0/.helmignore deleted file mode 100644 index 77ca5567b2..0000000000 --- a/stable/readarr/19.3.0/.helmignore +++ /dev/null @@ -1,30 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ -# OWNERS file for Kubernetes -OWNERS -# helm-docs templates -*.gotmpl -# docs folder -/docs -# icon -icon.png diff --git a/stable/readarr/19.3.0/CHANGELOG.md b/stable/readarr/19.3.0/CHANGELOG.md deleted file mode 100644 index 9c43e2c0c7..0000000000 --- a/stable/readarr/19.3.0/CHANGELOG.md +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: Changelog ---- - - -*for the complete changelog, please refer to the website* - -**Important:** - - - - -## [readarr-19.1.18](https://github.com/truecharts/charts/compare/readarr-19.1.17...readarr-19.1.18) (2024-02-05) - -### Chore - - - -- update container image ghcr.io/onedr0p/readarr-develop to 0.3.18.2411[@a1d9eb2](https://github.com/a1d9eb2) by renovate ([#17957](https://github.com/truecharts/charts/issues/17957)) - - -## [readarr-19.1.17](https://github.com/truecharts/charts/compare/readarr-19.1.16...readarr-19.1.17) (2024-02-05) - -### Chore - - - -- update container image ghcr.io/onedr0p/readarr-develop to v0.3.18.2411[@fa1fe2d](https://github.com/fa1fe2d) by renovate ([#17916](https://github.com/truecharts/charts/issues/17916)) - - -## [readarr-19.1.16](https://github.com/truecharts/charts/compare/readarr-19.1.15...readarr-19.1.16) (2024-02-03) - -### Chore - - - -- update container image common to v17.2.30[@19ad5ec](https://github.com/19ad5ec) by renovate ([#17804](https://github.com/truecharts/charts/issues/17804)) - - -## [readarr-19.1.15](https://github.com/truecharts/charts/compare/readarr-19.1.14...readarr-19.1.15) (2024-01-29) - -### Chore - - - -- update container image ghcr.io/onedr0p/exportarr to v1.6.1[@60cf3d4](https://github.com/60cf3d4) by renovate ([#17725](https://github.com/truecharts/charts/issues/17725)) - - -## [readarr-19.1.14](https://github.com/truecharts/charts/compare/readarr-19.1.13...readarr-19.1.14) (2024-01-29) - -### Chore - - - -- update container image ghcr.io/onedr0p/readarr-develop to v0.3.17.2409[@3d8be41](https://github.com/3d8be41) by renovate ([#17675](https://github.com/truecharts/charts/issues/17675)) - - -## [readarr-19.1.13](https://github.com/truecharts/charts/compare/readarr-19.1.12...readarr-19.1.13) (2024-01-26) - -### Chore - - - -- update container image common to v17.2.29[@d7c41a3](https://github.com/d7c41a3) by renovate ([#17545](https://github.com/truecharts/charts/issues/17545)) - - -## [readarr-19.1.12](https://github.com/truecharts/charts/compare/readarr-19.1.11...readarr-19.1.12) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.28[@918b4c5](https://github.com/918b4c5) by renovate ([#17478](https://github.com/truecharts/charts/issues/17478)) - - -## [readarr-19.1.11](https://github.com/truecharts/charts/compare/readarr-19.1.10...readarr-19.1.11) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.26[@24c98f7](https://github.com/24c98f7) by renovate ([#17409](https://github.com/truecharts/charts/issues/17409)) - - -## [readarr-19.1.10](https://github.com/truecharts/charts/compare/readarr-19.1.9...readarr-19.1.10) (2024-01-21) - -### Chore - - - -- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) - - -## [readarr-19.1.9](https://github.com/truecharts/charts/compare/readarr-19.1.8...readarr-19.1.9) (2024-01-21) - -### Chore - - - -- update container image ghcr.io/onedr0p/readarr-develop to v0.3.15.2376[@ac03108](https://github.com/ac03108) by renovate ([#17422](https://github.com/truecharts/charts/issues/17422)) \ No newline at end of file diff --git a/stable/readarr/19.3.0/Chart.yaml b/stable/readarr/19.3.0/Chart.yaml deleted file mode 100644 index d28a75278e..0000000000 --- a/stable/readarr/19.3.0/Chart.yaml +++ /dev/null @@ -1,41 +0,0 @@ -annotations: - max_scale_version: 24.04.0 - min_scale_version: 23.10.0 - truecharts.org/category: media - truecharts.org/max_helm_version: "3.14" - truecharts.org/min_helm_version: "3.12" - truecharts.org/train: stable -apiVersion: v2 -appVersion: 0.3.18.2411 -dependencies: - - name: common - version: 17.5.1 - repository: oci://tccr.io/truecharts - condition: "" - alias: "" - tags: [] - import-values: [] -deprecated: false -description: A fork of Radarr to work with Books & AudioBooks -home: https://truecharts.org/charts/stable/readarr -icon: https://truecharts.org/img/hotlink-ok/chart-icons/readarr.png -keywords: - - readarr - - torrent - - usenet - - AudioBooks - - ebooks -kubeVersion: ">=1.24.0-0" -maintainers: - - name: TrueCharts - email: info@truecharts.org - url: https://truecharts.org -name: readarr -sources: - - https://readarr.com - - https://github.com/Readarr/Readarr - - https://github.com/truecharts/charts/tree/master/charts/stable/readarr - - https://ghcr.io/onedr0p/exportarr - - https://ghcr.io/onedr0p/readarr-develop -type: application -version: 19.3.0 diff --git a/stable/readarr/19.3.0/README.md b/stable/readarr/19.3.0/README.md deleted file mode 100644 index 7fa53aa4e9..0000000000 --- a/stable/readarr/19.3.0/README.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: README ---- - -## General Info - -TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. -However only installations using the TrueNAS SCALE Apps system are supported. - -For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/readarr) - -**This chart is not maintained by the upstream project and any issues with the chart should be raised [here](https://github.com/truecharts/charts/issues/new/choose)** - -## Support - -- Please check our [quick-start guides for TrueNAS SCALE](https://truecharts.org/manual/SCALE/guides/scale-intro). -- See the [Website](https://truecharts.org) -- Check our [Discord](https://discord.gg/tVsPTHWTtr) -- Open a [issue](https://github.com/truecharts/charts/issues/new/choose) - ---- - -## Sponsor TrueCharts - -TrueCharts can only exist due to the incredible effort of our staff. -Please consider making a [donation](https://truecharts.org/sponsor) or contributing back to the project any way you can! - -_All Rights Reserved - The TrueCharts Project_ diff --git a/stable/readarr/19.3.0/app-readme.md b/stable/readarr/19.3.0/app-readme.md deleted file mode 100644 index 3bc4be21cf..0000000000 --- a/stable/readarr/19.3.0/app-readme.md +++ /dev/null @@ -1,8 +0,0 @@ -A fork of Radarr to work with Books & AudioBooks - -This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/readarr](https://truecharts.org/charts/stable/readarr) - ---- - -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/readarr/19.3.0/charts/common-17.5.0.tgz b/stable/readarr/19.3.0/charts/common-17.5.0.tgz deleted file mode 100644 index 3a5534883aaac1a331bf10ad166cff7fe5d2dd75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100452 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 z 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 Wm9Bh-<^K-=0RR7ge;?HVjtl_2wPFzf diff --git a/stable/readarr/19.3.0/ix_values.yaml b/stable/readarr/19.3.0/ix_values.yaml deleted file mode 100644 index a29594bbf9..0000000000 --- a/stable/readarr/19.3.0/ix_values.yaml +++ /dev/null @@ -1,109 +0,0 @@ -image: - repository: ghcr.io/onedr0p/readarr-develop - pullPolicy: IfNotPresent - tag: 0.3.18.2411@sha256:a1d9eb2001d499322e00876106a675c36b6f750cd253843595bb8e022a54f37a -exportarrImage: - repository: ghcr.io/onedr0p/exportarr - pullPolicy: IfNotPresent - tag: v1.6.1@sha256:60cf3d44aa0b7dea2a65160b2e2e373c1ae38cd6b12a45fe81b8afa45ac31c22 -securityContext: - container: - readOnlyRootFilesystem: false -service: - main: - ports: - main: - port: 8787 - metrics: - enabled: true - type: ClusterIP - targetSelector: exportarr - ports: - metrics: - enabled: true - port: 8788 - targetSelector: exportarr -workload: - main: - podSpec: - containers: - main: - probes: - liveness: - enabled: true - type: http - path: /ping - readiness: - enabled: true - type: http - path: /ping - startup: - enabled: true - type: http - path: /ping - env: - READARR__PORT: "{{ .Values.service.main.ports.main.port }}" - READARR__AUTHENTICATION_METHOD: "None" - exportarr: - enabled: true - type: Deployment - strategy: RollingUpdate - replicas: 1 - podSpec: - containers: - exportarr: - primary: true - enabled: true - imageSelector: exportarrImage - args: - - readarr - 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 - CONFIG: "/config/config.xml" -persistence: - config: - enabled: true - targetSelector: - main: - main: - mountPath: /config - exportarr: - exportarr: - mountPath: /config - readOnly: true -metrics: - main: - enabled: true - type: "servicemonitor" - endpoints: - - port: metrics - path: /metrics - targetSelector: metrics - prometheusRule: - enabled: false -portal: - open: - enabled: true -updated: true diff --git a/stable/readarr/19.3.0/questions.yaml b/stable/readarr/19.3.0/questions.yaml deleted file mode 100755 index 6338ec2511..0000000000 --- a/stable/readarr/19.3.0/questions.yaml +++ /dev/null @@ -1,2927 +0,0 @@ -groups: - - name: Container Image - description: Image to be used for container - - name: General Settings - description: General Deployment Settings - - name: Workload Settings - description: Workload Settings - - name: App Configuration - description: App Specific Config Options - - name: Networking and Services - description: Configure Network and Services for Container - - name: Storage and Persistence - description: Persist and Share Data that is Separate from the Container - - name: Ingress - description: Ingress Configuration - - name: Security and Permissions - description: Configure Security Context and Permissions - - name: Resources and Devices - description: "Specify Resources/Devices to be Allocated to Workload" - - name: Middlewares - description: Traefik Middlewares - - name: Metrics - description: Metrics - - name: Addons - description: Addon Configuration - - name: Backup Configuration - description: Configure Velero Backup Schedule - - name: Advanced - description: Advanced Configuration - - name: Postgresql - description: Postgresql - - name: Documentation - description: Documentation - -portals: - open: - protocols: - - "$kubernetes-resource_configmap_tcportal-open_protocol" - host: - - "$kubernetes-resource_configmap_tcportal-open_host" - ports: - - "$kubernetes-resource_configmap_tcportal-open_port" - -questions: - - variable: global - group: General Settings - label: "Global Settings" - schema: - additional_attrs: true - type: dict - attrs: - - variable: stopAll - label: Stop All - description: "Stops All Running pods and hibernates cnpg" - schema: - type: boolean - default: false - - - variable: workload - group: "Workload Settings" - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: main - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: type - label: Type (Advanced) - schema: - type: string - default: Deployment - enum: - - value: Deployment - description: Deployment - - value: DaemonSet - description: DaemonSet - - - variable: replicas - label: Replicas (Advanced) - description: Set the number of Replicas - schema: - type: int - show_if: [["type", "!=", "DaemonSet"]] - default: 1 - - - variable: podSpec - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: containers - label: Containers - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: Main Container - schema: - additional_attrs: true - type: dict - attrs: - - - variable: env - group: App Configuration - label: Image Environment - schema: - additional_attrs: true - type: dict - attrs: - - variable: READARR__AUTHENTICATION_METHOD - label: Auth Method - description: Sets the auth method. - schema: - type: string - default: "" - enum: - - value: "" - description: In-App Setting - - value: None - description: 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 Settings" - schema: - type: string - default: "Etc/UTC" - $ref: - - "definitions/timezone" - - - variable: podOptions - group: "General Settings" - label: "Global Pod Options (Advanced)" - schema: - additional_attrs: true - type: dict - attrs: - - variable: expertPodOpts - label: "Expert - Pod Options" - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hostNetwork - label: "Host Networking" - schema: - type: boolean - default: false - - variable: dnsConfig - label: "DNS Configuration" - schema: - type: dict - additional_attrs: true - attrs: - - variable: options - label: "Options" - schema: - type: list - default: [{"name": "ndots", "value": "1"}] - items: - - variable: optionsEntry - label: "Option Entry" - schema: - type: dict - additional_attrs: true - attrs: - - variable: name - label: "Name" - schema: - type: string - required: true - - variable: value - label: "Value" - schema: - type: string - - variable: nameservers - label: "Nameservers" - schema: - type: list - default: [] - items: - - variable: nsEntry - label: "Nameserver Entry" - schema: - type: string - required: true - - variable: searches - label: "Searches" - schema: - type: list - default: [] - items: - - variable: searchEntry - label: "Search Entry" - schema: - type: string - required: true - - - variable: imagePullSecretList - group: "General Settings" - label: "Image Pull Secrets" - schema: - type: list - default: [] - items: - - variable: pullsecretentry - label: "Pull Secret" - schema: - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: true - - variable: data - label: Data - schema: - type: dict - additional_attrs: true - attrs: - - variable: registry - label: "Registry" - schema: - type: string - required: true - default: "https://index.docker.io/v1/" - - variable: username - label: "Username" - schema: - type: string - required: true - default: "" - - variable: password - label: "Password" - schema: - type: string - required: true - private: true - default: "" - - variable: email - label: "Email" - schema: - type: string - required: true - default: "" - - - variable: service - group: Networking and Services - label: Configure Service(s) - schema: - additional_attrs: true - type: dict - attrs: - - - variable: 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: 8787 - required: true - - variable: serviceexpert - group: Networking and Services - label: Show Expert Config - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - - variable: scaleExternalInterface - description: Add External Interfaces - label: Add external Interfaces - group: Networking - schema: - type: list - items: - - variable: interfaceConfiguration - description: Interface Configuration - label: Interface Configuration - schema: - additional_attrs: true - type: dict - $ref: - - "normalize/interfaceConfiguration" - attrs: - - variable: hostInterface - description: Please Specify Host Interface - label: Host Interface - schema: - type: string - required: true - $ref: - - "definitions/interface" - - variable: ipam - description: Define how IP Address will be managed - label: IP Address Management - schema: - additional_attrs: true - type: dict - required: true - attrs: - - variable: type - description: Specify type for IPAM - label: IPAM Type - schema: - type: string - required: true - enum: - - value: dhcp - description: Use DHCP - - value: static - description: Use Static IP - - variable: staticIPConfigurations - label: Static IP Addresses - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticIP - label: Static IP - schema: - type: ipaddr - cidr: true - - variable: staticRoutes - label: Static Routes - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticRouteConfiguration - label: Static Route Configuration - schema: - additional_attrs: true - type: dict - attrs: - - variable: destination - label: Destination - schema: - type: ipaddr - cidr: true - required: true - - variable: gateway - label: Gateway - schema: - type: ipaddr - cidr: false - required: true - - - variable: serviceList - label: Add Manual Custom Services - group: Networking and Services - schema: - type: list - default: [] - items: - - variable: serviceListEntry - label: Custom Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the service - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: LoadBalancer - description: LoadBalancer (Expose Ports) - - value: ClusterIP - description: ClusterIP (Do Not Expose Ports) - - value: Simple - description: Deprecated CHANGE THIS - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: advancedsvcset - label: Show Advanced Service Settings - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: externalIPs - label: "External IP's" - description: "External IP's" - schema: - type: list - default: [] - items: - - variable: externalIP - label: External IP - schema: - type: string - - variable: ipFamilyPolicy - label: IP Family Policy - description: Specify the IP Policy - schema: - type: string - default: SingleStack - enum: - - value: SingleStack - description: SingleStack - - value: PreferDualStack - description: PreferDualStack - - value: RequireDualStack - description: RequireDualStack - - variable: ipFamilies - label: IP Families - description: (Advanced) The IP Families that should be used - schema: - type: list - default: [] - items: - - variable: ipFamily - label: IP Family - schema: - type: string - - variable: portsList - label: Additional Service Ports - schema: - type: list - default: [] - items: - - variable: portsListEntry - label: Custom ports - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Port - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Port Name - schema: - type: string - default: "" - - variable: protocol - label: Port Type - schema: - type: string - default: tcp - enum: - - value: http - description: HTTP - - value: https - description: HTTPS - - value: tcp - description: TCP - - value: udp - description: UDP - - variable: targetPort - label: Target Port - description: This port exposes the container port on the service - schema: - type: int - required: true - - variable: port - label: Container Port - schema: - type: int - required: true - - - variable: persistence - label: Integrated Persistent Storage - description: Integrated Persistent Storage - group: Storage and 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: 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: Storage and Persistence - schema: - type: list - default: [] - items: - - variable: persistenceListEntry - label: Custom Storage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the storage - schema: - type: boolean - default: true - hidden: true - - variable: type - label: Type of Storage - description: Sets the persistence type, Anything other than PVC could break rollback! - schema: - type: string - default: hostPath - enum: - - value: pvc - description: PVC - - value: hostPath - description: Host Path - - value: emptyDir - description: emptyDir - - value: nfs - description: NFS Share - - variable: server - label: NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: path - label: Path on NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: iscsi - label: iSCSI Options - schema: - show_if: [["type", "=", "iscsi"]] - type: dict - additional_attrs: true - attrs: - - variable: targetPortal - label: targetPortal - schema: - type: string - required: true - default: "" - - variable: iqn - label: iqn - schema: - type: string - required: true - default: "" - - variable: lun - label: lun - schema: - type: int - default: 0 - - variable: authSession - label: authSession - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: authDiscovery - label: authDiscovery - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: autoPermissions - label: Automatic Permissions Configuration - description: Automatically set permissions - schema: - show_if: [["type", "!=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: chown - label: Run CHOWN - description: | - It will run CHOWN on the path with the given fsGroup - schema: - type: boolean - default: false - - variable: chmod - label: Run CHMOD - description: | - It will run CHMOD on the path with the given value
          - Format should be 3 digits, e.g. 770 - schema: - type: string - valid_chars: '[0-9]{3}' - default: "" - - variable: recursive - label: Recursive - description: | - It will run CHOWN and CHMOD recursively - schema: - type: boolean - default: false - - variable: readOnly - label: Read Only - schema: - type: boolean - default: false - - variable: hostPath - label: Host Path - description: Path inside the container the storage is mounted - schema: - show_if: [["type", "=", "hostPath"]] - type: hostpath - - variable: mountPath - label: Mount Path - description: Path inside the container the storage is mounted - schema: - type: string - default: "" - required: true - valid_chars: '^\/([a-zA-Z0-9._-]+(\s?[a-zA-Z0-9._-]+|\/?))+$' - - variable: medium - label: EmptyDir Medium - schema: - show_if: [["type", "=", "emptyDir"]] - type: string - default: "" - enum: - - value: "" - description: Default - - value: Memory - description: Memory - - variable: size - label: Size Quotum of Storage - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: 256Gi - - variable: storageClass - label: 'storageClass (Advanced)' - description: 'sets the storageClass to something other than iX default. Only for advanced usecases!' - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: "" - - variable: static - label: 'Static Fixed PVC Bindings (Experimental)' - description: Link a PVC to a specific storage location - schema: - show_if: [["type", "=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: mode - label: mode - description: | - disabled: use normal dynamic PVCs - smb: connect to an SMB share - nfs: connect to an NFS share - schema: - type: string - default: "disabled" - enum: - - value: "disabled" - description: disabled - - value: smb - description: smb - - value: nfs - description: nfs - - variable: server - label: Server - description: server to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "myserver" - - variable: share - label: Share - description: share to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "/myshare" - - variable: user - label: User - description: connecting user - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "myuser" - - variable: domain - label: Domain - description: user domain - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: password - label: Password - description: connecting password - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: volumeSnapshots - label: 'Volume Snapshots (Experimental)' - description: Add an entry to the list to force creation of a volumeSnapshot of this PVC - schema: - show_if: [["type", "=", "pvc"]] - type: list - default: [] - items: - - variable: volumeSnapshotEntry - label: Custom volumeSnapshot - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - description: 'WARNING: renaming this, means deletion of the snapshot with the old name!' - schema: - type: string - default: "mysnapshot" - required: true - - variable: volumeSnapshotClassName - label: 'volumeSnapshot Class Name (Advanced)' - description: For use with PVCs using a non-default storageClass - schema: - type: string - default: "" - - - variable: ingress - label: "" - group: Ingress - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: Main Ingress - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name (Optional) - description: Defaults to chart name - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description (Optional) - description: Defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: icon - label: Icon (Optional) - description: Defaults to chart icon - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - variable: widget - label: Widget Settings - schema: - type: dict - additional_attrs: true - show_if: [["enabled", "=", true]] - attrs: - - variable: enabled - label: Enable Widget - description: When disabled all widget annotations are skipped. - schema: - type: boolean - default: true - - variable: custom - label: Options - schema: - type: dict - additional_attrs: true - attrs: - - variable: key - label: API-key (key) - schema: - type: string - default: "" - - variable: customkv - label: Custom Options - schema: - type: list - default: [] - items: - - variable: option - label: Option - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - default: "" - required: true - - variable: value - label: Value - schema: - type: string - default: "" - required: true - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - - variable: ingressList - label: Add Manual Custom Ingresses - group: Ingress - schema: - type: list - default: [] - items: - - variable: ingressListEntry - label: Custom Ingress - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: ingressClassName - label: IngressClass Name - schema: - type: string - default: "" - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: overrideService - label: Linked Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Service Name - schema: - type: string - default: "" - - variable: port - label: Service Port - schema: - type: int - - variable: tls - label: TLS-Settings - schema: - type: list - default: [] - show_if: [["certificateIssuer", "=", ""]] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your Cert-Manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: Use Custom Secret (Advanced) - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: "Allow Cross Origin Requests" - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: namespace - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description - description: defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - - variable: securityContext - group: Security and Permissions - label: Security Context - schema: - additional_attrs: true - type: dict - attrs: - - variable: container - label: Container - schema: - additional_attrs: true - type: dict - attrs: - # Settings from questions.yaml get appended here on a per-app basis - - - variable: runAsUser - label: "runAsUser" - description: "The UserID of the user running the application" - schema: - type: int - default: 568 - - variable: runAsGroup - label: "runAsGroup" - description: "The groupID 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 and Devices - label: "Resource Limits" - schema: - additional_attrs: true - type: dict - attrs: - - variable: limits - label: Advanced Limit Resource Consumption - schema: - additional_attrs: true - type: dict - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 4000m - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: RAM - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 8Gi - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: 'intel.com/i915' - label: Add Intel i915 GPUs - schema: - type: int - default: 0 - - variable: 'nvidia.com/gpu' - label: Add NVIDIA GPUs (Experimental) - schema: - type: int - default: 0 - - variable: 'amd.com/gpu' - label: Add AMD GPUs - schema: - type: int - default: 0 - - variable: requests - label: "Minimum Resources Required (request)" - schema: - additional_attrs: true - type: dict - hidden: true - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 10m - hidden: true - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: "RAM" - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 50Mi - hidden: true - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: deviceList - label: Mount USB Devices - group: Resources and Devices - schema: - type: list - default: [] - items: - - variable: deviceListEntry - label: Device - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Storage - schema: - type: boolean - default: true - - variable: type - label: (Advanced) Type of Storage - description: Sets the persistence type - schema: - type: string - default: device - hidden: true - - variable: readOnly - label: readOnly - schema: - type: boolean - default: false - - variable: hostPath - label: Host Device Path - description: Path to the device on the host system - schema: - type: path - - variable: mountPath - label: Container Device Path - description: Path inside the container the device is mounted - schema: - type: string - default: "/dev/ttyACM0" - - variable: scaleGPU - label: GPU Configuration - group: Resources and Devices - schema: - type: list - default: [] - items: - - variable: scaleGPUEntry - label: GPU - schema: - additional_attrs: true - type: dict - attrs: - # Specify GPU configuration - - variable: gpu - label: Select GPU - schema: - additional_attrs: true - type: dict - $ref: - - "definitions/gpuConfiguration" - attrs: [] - - variable: workaround - label: "Workaround" - schema: - type: string - default: workaround - hidden: true - - - variable: metrics - group: Metrics - label: Prometheus Metrics - schema: - additional_attrs: true - type: dict - attrs: - - variable: main - label: Main Metrics - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - description: Enable Prometheus Metrics - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - - variable: prometheusRule - label: PrometheusRule - description: Enable and configure Prometheus Rules for the App. - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - description: Enable Prometheus Metrics - schema: - type: boolean - default: false - # TODO: Rule List section - -# - variable: horizontalPodAutoscaler -# group: Advanced -# label: (Advanced) Horizontal Pod Autoscaler -# schema: -# type: list -# default: [] -# items: -# - variable: hpaEntry -# label: HPA Entry -# schema: -# additional_attrs: true -# type: dict -# attrs: -# - variable: name -# label: Name -# schema: -# type: string -# required: true -# default: "" -# - variable: enabled -# label: Enabled -# schema: -# type: boolean -# default: false -# show_subquestions_if: true -# subquestions: -# - variable: target -# label: Target -# description: Deployment name, Defaults to Main Deployment -# schema: -# type: string -# default: "" -# - variable: minReplicas -# label: Minimum Replicas -# schema: -# type: int -# default: 1 -# - variable: maxReplicas -# label: Maximum Replicas -# schema: -# type: int -# default: 5 -# - variable: targetCPUUtilizationPercentage -# label: Target CPU Utilization Percentage -# schema: -# type: int -# default: 80 -# - variable: targetMemoryUtilizationPercentage -# label: Target Memory Utilization Percentage -# schema: -# type: int -# default: 80 - - variable: networkPolicy - group: Advanced - label: (Advanced) Network Policy - schema: - type: list - default: [] - items: - - variable: netPolicyEntry - label: Network Policy Entry - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - default: "" - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: policyType - label: Policy Type - schema: - type: string - default: "" - enum: - - value: "" - description: Default - - value: ingress - description: Ingress - - value: egress - description: Egress - - value: ingress-egress - description: Ingress and Egress - - variable: egress - label: Egress - schema: - type: list - default: [] - items: - - variable: egressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: to - label: To - schema: - type: list - default: [] - items: - - variable: toEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - variable: ingress - label: Ingress - schema: - type: list - default: [] - items: - - variable: ingressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: from - label: From - schema: - type: list - default: [] - items: - - variable: fromEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - - variable: addons - group: Addons - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: codeserver - label: Codeserver - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: service - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: NodePort - description: Deprecated CHANGE THIS - - value: ClusterIP - description: ClusterIP - - value: LoadBalancer - description: LoadBalancer - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: ports - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: codeserver - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - default: 36107 - - variable: ingress - label: "Ingress" - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - variable: scaleCert - label: 'Use TrueNAS SCALE Certificate (Deprecated)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: int - $ref: - - "definitions/certificate" - - variable: envList - label: Codeserver Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: netshoot - label: Netshoot - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: envList - label: Netshoot Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: vpn - label: VPN - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Type - schema: - type: string - default: disabled - enum: - - value: disabled - description: disabled - - value: gluetun - description: Gluetun - - value: tailscale - description: Tailscale - - value: openvpn - description: OpenVPN (Deprecated) - - value: wireguard - description: Wireguard (Deprecated) - - variable: openvpn - label: OpenVPN Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "openvpn"]] - attrs: - - variable: username - label: Authentication Username (Optional) - description: Authentication Username, Optional - schema: - type: string - default: "" - - variable: password - label: Authentication Password - description: Authentication Credentials - schema: - type: string - show_if: [["username", "!=", ""]] - default: "" - required: true - - variable: tailscale - label: Tailscale Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "tailscale"]] - attrs: - - variable: authkey - label: Authentication Key - description: Provide an auth key to automatically authenticate the node as your user account. - schema: - type: string - private: true - default: "" - - variable: auth_once - label: Auth Once - description: Only attempt to log in if not already logged in. - schema: - type: boolean - default: true - - variable: accept_dns - label: Accept DNS - description: Accept DNS configuration from the admin console. - schema: - type: boolean - default: false - - variable: userspace - label: Userspace - description: Userspace Networking mode allows running Tailscale where you do not have access to create a VPN tunnel device. - schema: - type: boolean - default: false - - variable: routes - label: Routes - description: Expose physical subnet routes to your entire Tailscale network. - schema: - type: string - default: "" - - variable: dest_ip - label: Destination IP - description: Tells the DNAT mechanism which Destination IP to set in the IP header, and where to send packets that are matched. - schema: - type: string - default: "" - - variable: sock5_server - label: Sock5 Server - description: The address on which to listen for SOCKS5 proxying into the tailscale net. - schema: - type: string - default: "" - - variable: outbound_http_proxy_listen - label: Outbound HTTP Proxy Listen - description: The address on which to listen for HTTP proxying into the tailscale net. - schema: - type: string - default: "" - - variable: extra_args - label: Extra Args - description: Extra Args - schema: - type: string - default: "" - - variable: daemon_extra_args - label: Tailscale Daemon Extra Args - description: Tailscale Daemon Extra Args - schema: - type: string - default: "" - - variable: killSwitch - label: Enable Killswitch - schema: - type: boolean - show_if: [["type", "!=", "disabled"]] - default: true - - variable: excludedNetworks_IPv4 - label: Killswitch Excluded IPv4 networks - description: List of Killswitch Excluded IPv4 Addresses - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv4 - label: IPv4 Network - schema: - type: string - required: true - - variable: excludedNetworks_IPv6 - label: Killswitch Excluded IPv6 networks - description: "List of Killswitch Excluded IPv6 Addresses" - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv6 - label: IPv6 Network - schema: - type: string - required: true - - variable: configFile - label: VPN Config File Location - schema: - type: string - show_if: [["type", "!=", "disabled"]] - default: "" - - - variable: envList - label: VPN Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - max_length: 10240 - - - variable: docs - group: Documentation - label: Please read the documentation at https://truecharts.org - description: Please read the documentation at -
          https://truecharts.org - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDocs - label: I have checked the documentation - schema: - type: boolean - default: true - - variable: donateNag - group: Documentation - label: Please consider supporting TrueCharts, see https://truecharts.org/sponsor - description: Please consider supporting TrueCharts, see -
          https://truecharts.org/sponsor - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDonate - label: I have considered donating - schema: - type: boolean - default: true - hidden: true - diff --git a/stable/readarr/19.3.0/templates/NOTES.txt b/stable/readarr/19.3.0/templates/NOTES.txt deleted file mode 100644 index efcb74cb77..0000000000 --- a/stable/readarr/19.3.0/templates/NOTES.txt +++ /dev/null @@ -1 +0,0 @@ -{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/readarr/19.3.0/templates/common.yaml b/stable/readarr/19.3.0/templates/common.yaml deleted file mode 100644 index 3c93f57861..0000000000 --- a/stable/readarr/19.3.0/templates/common.yaml +++ /dev/null @@ -1,11 +0,0 @@ -{{/* Make sure all variables are set properly */}} -{{- include "tc.v1.common.loader.init" . -}} - -{{/* Disable [exportarr] if requested */}} -{{- if not .Values.metrics.main.enabled -}} - {{- $_ := set .Values.workload.exportarr "enabled" false -}} - {{- $_ := set .Values.service.metrics "enabled" false -}} -{{- end -}} - -{{/* Render the templates */}} -{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/readarr/19.3.0/values.yaml b/stable/readarr/19.3.0/values.yaml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/stable/readarr/20.1.3/.helmignore b/stable/readarr/20.1.3/.helmignore deleted file mode 100644 index 77ca5567b2..0000000000 --- a/stable/readarr/20.1.3/.helmignore +++ /dev/null @@ -1,30 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ -# OWNERS file for Kubernetes -OWNERS -# helm-docs templates -*.gotmpl -# docs folder -/docs -# icon -icon.png diff --git a/stable/readarr/20.1.3/CHANGELOG.md b/stable/readarr/20.1.3/CHANGELOG.md deleted file mode 100644 index 3307bc1f6b..0000000000 --- a/stable/readarr/20.1.3/CHANGELOG.md +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: Changelog ---- - - -*for the complete changelog, please refer to the website* - -**Important:** - - - - - - - - - -## [readarr-19.1.18](https://github.com/truecharts/charts/compare/readarr-19.1.17...readarr-19.1.18) (2024-02-05) - -### Chore - - - -- update container image ghcr.io/onedr0p/readarr-develop to 0.3.18.2411[@a1d9eb2](https://github.com/a1d9eb2) by renovate ([#17957](https://github.com/truecharts/charts/issues/17957)) - - -## [readarr-19.1.17](https://github.com/truecharts/charts/compare/readarr-19.1.16...readarr-19.1.17) (2024-02-05) - -### Chore - - - -- update container image ghcr.io/onedr0p/readarr-develop to v0.3.18.2411[@fa1fe2d](https://github.com/fa1fe2d) by renovate ([#17916](https://github.com/truecharts/charts/issues/17916)) - - -## [readarr-19.1.16](https://github.com/truecharts/charts/compare/readarr-19.1.15...readarr-19.1.16) (2024-02-03) - -### Chore - - - -- update container image common to v17.2.30[@19ad5ec](https://github.com/19ad5ec) by renovate ([#17804](https://github.com/truecharts/charts/issues/17804)) - - -## [readarr-19.1.15](https://github.com/truecharts/charts/compare/readarr-19.1.14...readarr-19.1.15) (2024-01-29) - -### Chore - - - -- update container image ghcr.io/onedr0p/exportarr to v1.6.1[@60cf3d4](https://github.com/60cf3d4) by renovate ([#17725](https://github.com/truecharts/charts/issues/17725)) - - -## [readarr-19.1.14](https://github.com/truecharts/charts/compare/readarr-19.1.13...readarr-19.1.14) (2024-01-29) - -### Chore - - - -- update container image ghcr.io/onedr0p/readarr-develop to v0.3.17.2409[@3d8be41](https://github.com/3d8be41) by renovate ([#17675](https://github.com/truecharts/charts/issues/17675)) - - -## [readarr-19.1.13](https://github.com/truecharts/charts/compare/readarr-19.1.12...readarr-19.1.13) (2024-01-26) - -### Chore - - - -- update container image common to v17.2.29[@d7c41a3](https://github.com/d7c41a3) by renovate ([#17545](https://github.com/truecharts/charts/issues/17545)) - - -## [readarr-19.1.12](https://github.com/truecharts/charts/compare/readarr-19.1.11...readarr-19.1.12) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.28[@918b4c5](https://github.com/918b4c5) by renovate ([#17478](https://github.com/truecharts/charts/issues/17478)) - - -## [readarr-19.1.11](https://github.com/truecharts/charts/compare/readarr-19.1.10...readarr-19.1.11) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.26[@24c98f7](https://github.com/24c98f7) by renovate ([#17409](https://github.com/truecharts/charts/issues/17409)) - - -## [readarr-19.1.10](https://github.com/truecharts/charts/compare/readarr-19.1.9...readarr-19.1.10) (2024-01-21) - -### Chore - - - -- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) - - -## [readarr-19.1.9](https://github.com/truecharts/charts/compare/readarr-19.1.8...readarr-19.1.9) (2024-01-21) diff --git a/stable/readarr/20.1.3/Chart.yaml b/stable/readarr/20.1.3/Chart.yaml deleted file mode 100644 index d49a4587be..0000000000 --- a/stable/readarr/20.1.3/Chart.yaml +++ /dev/null @@ -1,41 +0,0 @@ -annotations: - max_scale_version: 24.04.0 - min_scale_version: 23.10.0 - 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: 0.3.18.2411 -dependencies: - - name: common - version: 18.2.1 - repository: oci://tccr.io/truecharts - condition: "" - alias: "" - tags: [] - import-values: [] -deprecated: false -description: A fork of Radarr to work with Books & AudioBooks -home: https://truecharts.org/charts/stable/readarr -icon: https://truecharts.org/img/hotlink-ok/chart-icons/readarr.png -keywords: - - readarr - - torrent - - usenet - - AudioBooks - - ebooks -kubeVersion: ">=1.24.0-0" -maintainers: - - name: TrueCharts - email: info@truecharts.org - url: https://truecharts.org -name: readarr -sources: - - https://readarr.com - - https://github.com/Readarr/Readarr - - https://github.com/truecharts/charts/tree/master/charts/stable/readarr - - https://ghcr.io/onedr0p/exportarr - - https://ghcr.io/onedr0p/readarr-develop -type: application -version: 20.1.3 diff --git a/stable/readarr/20.1.3/README.md b/stable/readarr/20.1.3/README.md deleted file mode 100644 index 7fa53aa4e9..0000000000 --- a/stable/readarr/20.1.3/README.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: README ---- - -## General Info - -TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. -However only installations using the TrueNAS SCALE Apps system are supported. - -For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/readarr) - -**This chart is not maintained by the upstream project and any issues with the chart should be raised [here](https://github.com/truecharts/charts/issues/new/choose)** - -## Support - -- Please check our [quick-start guides for TrueNAS SCALE](https://truecharts.org/manual/SCALE/guides/scale-intro). -- See the [Website](https://truecharts.org) -- Check our [Discord](https://discord.gg/tVsPTHWTtr) -- Open a [issue](https://github.com/truecharts/charts/issues/new/choose) - ---- - -## Sponsor TrueCharts - -TrueCharts can only exist due to the incredible effort of our staff. -Please consider making a [donation](https://truecharts.org/sponsor) or contributing back to the project any way you can! - -_All Rights Reserved - The TrueCharts Project_ diff --git a/stable/readarr/20.1.3/app-readme.md b/stable/readarr/20.1.3/app-readme.md deleted file mode 100644 index 3bc4be21cf..0000000000 --- a/stable/readarr/20.1.3/app-readme.md +++ /dev/null @@ -1,8 +0,0 @@ -A fork of Radarr to work with Books & AudioBooks - -This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/readarr](https://truecharts.org/charts/stable/readarr) - ---- - -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/readarr/20.1.3/charts/common-18.0.3.tgz b/stable/readarr/20.1.3/charts/common-18.0.3.tgz deleted file mode 100644 index 94e930e88c129164c3a20cff45fa9f4fb8916035..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98756 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 - 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: 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: Storage and Persistence - schema: - type: list - default: [] - items: - - variable: persistenceListEntry - label: Custom Storage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the storage - schema: - type: boolean - default: true - hidden: true - - variable: type - label: Type of Storage - description: Sets the persistence type, Anything other than PVC could break rollback! - schema: - type: string - default: hostPath - enum: - - value: pvc - description: PVC - - value: hostPath - description: Host Path - - value: emptyDir - description: emptyDir - - value: nfs - description: NFS Share - - variable: server - label: NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: path - label: Path on NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: iscsi - label: iSCSI Options - schema: - show_if: [["type", "=", "iscsi"]] - type: dict - additional_attrs: true - attrs: - - variable: targetPortal - label: targetPortal - schema: - type: string - required: true - default: "" - - variable: iqn - label: iqn - schema: - type: string - required: true - default: "" - - variable: lun - label: lun - schema: - type: int - default: 0 - - variable: authSession - label: authSession - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: authDiscovery - label: authDiscovery - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: autoPermissions - label: Automatic Permissions Configuration - description: Automatically set permissions - schema: - show_if: [["type", "!=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: chown - label: Run CHOWN - description: | - It will run CHOWN on the path with the given fsGroup - schema: - type: boolean - default: false - - variable: chmod - label: Run CHMOD - description: | - It will run CHMOD on the path with the given value
          - Format should be 3 digits, e.g. 770 - schema: - type: string - valid_chars: '[0-9]{3}' - default: "" - - variable: recursive - label: Recursive - description: | - It will run CHOWN and CHMOD recursively - schema: - type: boolean - default: false - - variable: readOnly - label: Read Only - schema: - type: boolean - default: false - - variable: hostPath - label: Host Path - description: Path inside the container the storage is mounted - schema: - show_if: [["type", "=", "hostPath"]] - type: hostpath - - variable: mountPath - label: Mount Path - description: Path inside the container the storage is mounted - schema: - type: string - default: "" - required: true - valid_chars: '^\/([a-zA-Z0-9._-]+(\s?[a-zA-Z0-9._-]+|\/?))+$' - - variable: medium - label: EmptyDir Medium - schema: - show_if: [["type", "=", "emptyDir"]] - type: string - default: "" - enum: - - value: "" - description: Default - - value: Memory - description: Memory - - variable: size - label: Size Quotum of Storage - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: 256Gi - - variable: storageClass - label: 'storageClass (Advanced)' - description: 'sets the storageClass to something other than iX default. Only for advanced usecases!' - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: "" - - variable: static - label: 'Static Fixed PVC Bindings (Experimental)' - description: Link a PVC to a specific storage location - schema: - show_if: [["type", "=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: mode - label: mode - description: | - disabled: use normal dynamic PVCs - smb: connect to an SMB share - nfs: connect to an NFS share - schema: - type: string - default: "disabled" - enum: - - value: "disabled" - description: disabled - - value: smb - description: smb - - value: nfs - description: nfs - - variable: server - label: Server - description: server to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "myserver" - - variable: share - label: Share - description: share to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "/myshare" - - variable: user - label: User - description: connecting user - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "myuser" - - variable: domain - label: Domain - description: user domain - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: password - label: Password - description: connecting password - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: volumeSnapshots - label: 'Volume Snapshots (Experimental)' - description: Add an entry to the list to force creation of a volumeSnapshot of this PVC - schema: - show_if: [["type", "=", "pvc"]] - type: list - default: [] - items: - - variable: volumeSnapshotEntry - label: Custom volumeSnapshot - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - description: 'WARNING: renaming this, means deletion of the snapshot with the old name!' - schema: - type: string - default: "mysnapshot" - required: true - - variable: volumeSnapshotClassName - label: 'volumeSnapshot Class Name (Advanced)' - description: For use with PVCs using a non-default storageClass - schema: - type: string - default: "" - - - variable: ingress - label: "" - group: Ingress - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: Main Ingress - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name (Optional) - description: Defaults to chart name - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description (Optional) - description: Defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: icon - label: Icon (Optional) - description: Defaults to chart icon - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - variable: widget - label: Widget Settings - schema: - type: dict - additional_attrs: true - show_if: [["enabled", "=", true]] - attrs: - - variable: enabled - label: Enable Widget - description: When disabled all widget annotations are skipped. - schema: - type: boolean - default: true - - variable: custom - label: Options - schema: - type: dict - additional_attrs: true - attrs: - - variable: key - label: API-key (key) - schema: - type: string - default: "" - - variable: customkv - label: Custom Options - schema: - type: list - default: [] - items: - - variable: option - label: Option - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - default: "" - required: true - - variable: value - label: Value - schema: - type: string - default: "" - required: true - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - - variable: ingressList - label: Add Manual Custom Ingresses - group: Ingress - schema: - type: list - default: [] - items: - - variable: ingressListEntry - label: Custom Ingress - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: ingressClassName - label: IngressClass Name - schema: - type: string - default: "" - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: overrideService - label: Linked Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Service Name - schema: - type: string - default: "" - - variable: port - label: Service Port - schema: - type: int - - variable: tls - label: TLS-Settings - schema: - type: list - default: [] - show_if: [["certificateIssuer", "=", ""]] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your Cert-Manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: Use Custom Secret (Advanced) - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: "Allow Cross Origin Requests" - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: namespace - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description - description: defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - - variable: securityContext - group: Security and Permissions - label: Security Context - schema: - additional_attrs: true - type: dict - attrs: - - variable: container - label: Container - schema: - additional_attrs: true - type: dict - attrs: - # Settings from questions.yaml get appended here on a per-app basis - - - variable: runAsUser - label: "runAsUser" - description: "The UserID of the user running the application" - schema: - type: int - default: 568 - - variable: runAsGroup - label: "runAsGroup" - description: "The groupID 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 and Devices - label: "Resource Limits" - schema: - additional_attrs: true - type: dict - attrs: - - variable: limits - label: Advanced Limit Resource Consumption - schema: - additional_attrs: true - type: dict - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 4000m - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: RAM - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 8Gi - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: 'gpu.intel.com/i915' - label: Add Intel i915 GPUs - schema: - type: int - default: 0 - - variable: 'nvidia.com/gpu' - label: Add NVIDIA GPUs (Experimental) - schema: - type: int - default: 0 - - variable: 'amd.com/gpu' - label: Add AMD GPUs - schema: - type: int - default: 0 - - variable: requests - label: "Minimum Resources Required (request)" - schema: - additional_attrs: true - type: dict - hidden: true - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 10m - hidden: true - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: "RAM" - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 50Mi - hidden: true - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: deviceList - label: Mount USB Devices - group: Resources and Devices - schema: - type: list - default: [] - items: - - variable: deviceListEntry - label: Device - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Storage - schema: - type: boolean - default: true - - variable: type - label: (Advanced) Type of Storage - description: Sets the persistence type - schema: - type: string - default: device - hidden: true - - variable: readOnly - label: readOnly - schema: - type: boolean - default: false - - variable: hostPath - label: Host Device Path - description: Path to the device on the host system - schema: - type: path - - variable: mountPath - label: Container Device Path - description: Path inside the container the device is mounted - schema: - type: string - default: "/dev/ttyACM0" - - - variable: metrics - group: Metrics - label: Prometheus Metrics - schema: - additional_attrs: true - type: dict - attrs: - - variable: main - label: Main Metrics - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - description: Enable Prometheus Metrics - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - - variable: prometheusRule - label: PrometheusRule - description: Enable and configure Prometheus Rules for the App. - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - description: Enable Prometheus Metrics - schema: - type: boolean - default: false - # TODO: Rule List section - -# - variable: horizontalPodAutoscaler -# group: Advanced -# label: (Advanced) Horizontal Pod Autoscaler -# schema: -# type: list -# default: [] -# items: -# - variable: hpaEntry -# label: HPA Entry -# schema: -# additional_attrs: true -# type: dict -# attrs: -# - variable: name -# label: Name -# schema: -# type: string -# required: true -# default: "" -# - variable: enabled -# label: Enabled -# schema: -# type: boolean -# default: false -# show_subquestions_if: true -# subquestions: -# - variable: target -# label: Target -# description: Deployment name, Defaults to Main Deployment -# schema: -# type: string -# default: "" -# - variable: minReplicas -# label: Minimum Replicas -# schema: -# type: int -# default: 1 -# - variable: maxReplicas -# label: Maximum Replicas -# schema: -# type: int -# default: 5 -# - variable: targetCPUUtilizationPercentage -# label: Target CPU Utilization Percentage -# schema: -# type: int -# default: 80 -# - variable: targetMemoryUtilizationPercentage -# label: Target Memory Utilization Percentage -# schema: -# type: int -# default: 80 - - variable: networkPolicy - group: Advanced - label: (Advanced) Network Policy - schema: - type: list - default: [] - items: - - variable: netPolicyEntry - label: Network Policy Entry - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - default: "" - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: policyType - label: Policy Type - schema: - type: string - default: "" - enum: - - value: "" - description: Default - - value: ingress - description: Ingress - - value: egress - description: Egress - - value: ingress-egress - description: Ingress and Egress - - variable: egress - label: Egress - schema: - type: list - default: [] - items: - - variable: egressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: to - label: To - schema: - type: list - default: [] - items: - - variable: toEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - variable: ingress - label: Ingress - schema: - type: list - default: [] - items: - - variable: ingressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: from - label: From - schema: - type: list - default: [] - items: - - variable: fromEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - - variable: addons - group: Addons - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: codeserver - label: Codeserver - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: service - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: NodePort - description: Deprecated CHANGE THIS - - value: ClusterIP - description: ClusterIP - - value: LoadBalancer - description: LoadBalancer - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: ports - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: codeserver - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - default: 36107 - - variable: ingress - label: "Ingress" - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - variable: scaleCert - label: 'Use TrueNAS SCALE Certificate (Deprecated)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: int - $ref: - - "definitions/certificate" - - variable: envList - label: Codeserver Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: netshoot - label: Netshoot - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: envList - label: Netshoot Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: vpn - label: VPN - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Type - schema: - type: string - default: disabled - enum: - - value: disabled - description: disabled - - value: gluetun - description: Gluetun - - value: tailscale - description: Tailscale - - value: openvpn - description: OpenVPN (Deprecated) - - value: wireguard - description: Wireguard (Deprecated) - - variable: openvpn - label: OpenVPN Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "openvpn"]] - attrs: - - variable: username - label: Authentication Username (Optional) - description: Authentication Username, Optional - schema: - type: string - default: "" - - variable: password - label: Authentication Password - description: Authentication Credentials - schema: - type: string - show_if: [["username", "!=", ""]] - default: "" - required: true - - variable: tailscale - label: Tailscale Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "tailscale"]] - attrs: - - variable: authkey - label: Authentication Key - description: Provide an auth key to automatically authenticate the node as your user account. - schema: - type: string - private: true - default: "" - - variable: auth_once - label: Auth Once - description: Only attempt to log in if not already logged in. - schema: - type: boolean - default: true - - variable: accept_dns - label: Accept DNS - description: Accept DNS configuration from the admin console. - schema: - type: boolean - default: false - - variable: userspace - label: Userspace - description: Userspace Networking mode allows running Tailscale where you do not have access to create a VPN tunnel device. - schema: - type: boolean - default: false - - variable: routes - label: Routes - description: Expose physical subnet routes to your entire Tailscale network. - schema: - type: string - default: "" - - variable: dest_ip - label: Destination IP - description: Tells the DNAT mechanism which Destination IP to set in the IP header, and where to send packets that are matched. - schema: - type: string - default: "" - - variable: sock5_server - label: Sock5 Server - description: The address on which to listen for SOCKS5 proxying into the tailscale net. - schema: - type: string - default: "" - - variable: outbound_http_proxy_listen - label: Outbound HTTP Proxy Listen - description: The address on which to listen for HTTP proxying into the tailscale net. - schema: - type: string - default: "" - - variable: extra_args - label: Extra Args - description: Extra Args - schema: - type: string - default: "" - - variable: daemon_extra_args - label: Tailscale Daemon Extra Args - description: Tailscale Daemon Extra Args - schema: - type: string - default: "" - - variable: killSwitch - label: Enable Killswitch - schema: - type: boolean - show_if: [["type", "!=", "disabled"]] - default: true - - variable: excludedNetworks_IPv4 - label: Killswitch Excluded IPv4 networks - description: List of Killswitch Excluded IPv4 Addresses - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv4 - label: IPv4 Network - schema: - type: string - required: true - - variable: excludedNetworks_IPv6 - label: Killswitch Excluded IPv6 networks - description: "List of Killswitch Excluded IPv6 Addresses" - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv6 - label: IPv6 Network - schema: - type: string - required: true - - variable: configFile - label: VPN Config File Location - schema: - type: string - show_if: [["type", "!=", "disabled"]] - default: "" - - - variable: envList - label: VPN Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - max_length: 10240 - - - variable: docs - group: Documentation - label: Please read the documentation at https://truecharts.org - description: Please read the documentation at -
          https://truecharts.org - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDocs - label: I have checked the documentation - schema: - type: boolean - default: true - - variable: donateNag - group: Documentation - label: Please consider supporting TrueCharts, see https://truecharts.org/sponsor - description: Please consider supporting TrueCharts, see -
          https://truecharts.org/sponsor - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDonate - label: I have considered donating - schema: - type: boolean - default: true - hidden: true - diff --git a/stable/readarr/20.1.3/templates/NOTES.txt b/stable/readarr/20.1.3/templates/NOTES.txt deleted file mode 100644 index efcb74cb77..0000000000 --- a/stable/readarr/20.1.3/templates/NOTES.txt +++ /dev/null @@ -1 +0,0 @@ -{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/readarr/20.1.3/templates/common.yaml b/stable/readarr/20.1.3/templates/common.yaml deleted file mode 100644 index 3c93f57861..0000000000 --- a/stable/readarr/20.1.3/templates/common.yaml +++ /dev/null @@ -1,11 +0,0 @@ -{{/* Make sure all variables are set properly */}} -{{- include "tc.v1.common.loader.init" . -}} - -{{/* Disable [exportarr] if requested */}} -{{- if not .Values.metrics.main.enabled -}} - {{- $_ := set .Values.workload.exportarr "enabled" false -}} - {{- $_ := set .Values.service.metrics "enabled" false -}} -{{- end -}} - -{{/* Render the templates */}} -{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/readarr/20.1.3/values.yaml b/stable/readarr/20.1.3/values.yaml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/stable/readarr/20.2.0/.helmignore b/stable/readarr/20.2.0/.helmignore deleted file mode 100644 index 77ca5567b2..0000000000 --- a/stable/readarr/20.2.0/.helmignore +++ /dev/null @@ -1,30 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ -# OWNERS file for Kubernetes -OWNERS -# helm-docs templates -*.gotmpl -# docs folder -/docs -# icon -icon.png diff --git a/stable/readarr/20.2.0/CHANGELOG.md b/stable/readarr/20.2.0/CHANGELOG.md deleted file mode 100644 index e89a63bd38..0000000000 --- a/stable/readarr/20.2.0/CHANGELOG.md +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: Changelog ---- - - -*for the complete changelog, please refer to the website* - -**Important:** - - - - - - - - - - -## [readarr-19.1.18](https://github.com/truecharts/charts/compare/readarr-19.1.17...readarr-19.1.18) (2024-02-05) - -### Chore - - - -- update container image ghcr.io/onedr0p/readarr-develop to 0.3.18.2411[@a1d9eb2](https://github.com/a1d9eb2) by renovate ([#17957](https://github.com/truecharts/charts/issues/17957)) - - -## [readarr-19.1.17](https://github.com/truecharts/charts/compare/readarr-19.1.16...readarr-19.1.17) (2024-02-05) - -### Chore - - - -- update container image ghcr.io/onedr0p/readarr-develop to v0.3.18.2411[@fa1fe2d](https://github.com/fa1fe2d) by renovate ([#17916](https://github.com/truecharts/charts/issues/17916)) - - -## [readarr-19.1.16](https://github.com/truecharts/charts/compare/readarr-19.1.15...readarr-19.1.16) (2024-02-03) - -### Chore - - - -- update container image common to v17.2.30[@19ad5ec](https://github.com/19ad5ec) by renovate ([#17804](https://github.com/truecharts/charts/issues/17804)) - - -## [readarr-19.1.15](https://github.com/truecharts/charts/compare/readarr-19.1.14...readarr-19.1.15) (2024-01-29) - -### Chore - - - -- update container image ghcr.io/onedr0p/exportarr to v1.6.1[@60cf3d4](https://github.com/60cf3d4) by renovate ([#17725](https://github.com/truecharts/charts/issues/17725)) - - -## [readarr-19.1.14](https://github.com/truecharts/charts/compare/readarr-19.1.13...readarr-19.1.14) (2024-01-29) - -### Chore - - - -- update container image ghcr.io/onedr0p/readarr-develop to v0.3.17.2409[@3d8be41](https://github.com/3d8be41) by renovate ([#17675](https://github.com/truecharts/charts/issues/17675)) - - -## [readarr-19.1.13](https://github.com/truecharts/charts/compare/readarr-19.1.12...readarr-19.1.13) (2024-01-26) - -### Chore - - - -- update container image common to v17.2.29[@d7c41a3](https://github.com/d7c41a3) by renovate ([#17545](https://github.com/truecharts/charts/issues/17545)) - - -## [readarr-19.1.12](https://github.com/truecharts/charts/compare/readarr-19.1.11...readarr-19.1.12) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.28[@918b4c5](https://github.com/918b4c5) by renovate ([#17478](https://github.com/truecharts/charts/issues/17478)) - - -## [readarr-19.1.11](https://github.com/truecharts/charts/compare/readarr-19.1.10...readarr-19.1.11) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.26[@24c98f7](https://github.com/24c98f7) by renovate ([#17409](https://github.com/truecharts/charts/issues/17409)) - - -## [readarr-19.1.10](https://github.com/truecharts/charts/compare/readarr-19.1.9...readarr-19.1.10) (2024-01-21) - -### Chore - - - -- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) - - -## [readarr-19.1.9](https://github.com/truecharts/charts/compare/readarr-19.1.8...readarr-19.1.9) (2024-01-21) \ No newline at end of file diff --git a/stable/readarr/20.2.0/Chart.yaml b/stable/readarr/20.2.0/Chart.yaml deleted file mode 100644 index b77dd48034..0000000000 --- a/stable/readarr/20.2.0/Chart.yaml +++ /dev/null @@ -1,41 +0,0 @@ -annotations: - max_scale_version: 24.04.0 - min_scale_version: 23.10.0 - 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: 0.3.18.2411 -dependencies: - - name: common - version: 18.2.1 - repository: oci://tccr.io/truecharts - condition: "" - alias: "" - tags: [] - import-values: [] -deprecated: false -description: A fork of Radarr to work with Books & AudioBooks -home: https://truecharts.org/charts/stable/readarr -icon: https://truecharts.org/img/hotlink-ok/chart-icons/readarr.png -keywords: - - readarr - - torrent - - usenet - - AudioBooks - - ebooks -kubeVersion: ">=1.24.0-0" -maintainers: - - name: TrueCharts - email: info@truecharts.org - url: https://truecharts.org -name: readarr -sources: - - https://readarr.com - - https://github.com/Readarr/Readarr - - https://github.com/truecharts/charts/tree/master/charts/stable/readarr - - https://ghcr.io/onedr0p/readarr-develop - - https://ghcr.io/onedr0p/exportarr -type: application -version: 20.2.0 diff --git a/stable/readarr/20.2.0/README.md b/stable/readarr/20.2.0/README.md deleted file mode 100644 index 7fa53aa4e9..0000000000 --- a/stable/readarr/20.2.0/README.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: README ---- - -## General Info - -TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. -However only installations using the TrueNAS SCALE Apps system are supported. - -For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/readarr) - -**This chart is not maintained by the upstream project and any issues with the chart should be raised [here](https://github.com/truecharts/charts/issues/new/choose)** - -## Support - -- Please check our [quick-start guides for TrueNAS SCALE](https://truecharts.org/manual/SCALE/guides/scale-intro). -- See the [Website](https://truecharts.org) -- Check our [Discord](https://discord.gg/tVsPTHWTtr) -- Open a [issue](https://github.com/truecharts/charts/issues/new/choose) - ---- - -## Sponsor TrueCharts - -TrueCharts can only exist due to the incredible effort of our staff. -Please consider making a [donation](https://truecharts.org/sponsor) or contributing back to the project any way you can! - -_All Rights Reserved - The TrueCharts Project_ diff --git a/stable/readarr/20.2.0/app-readme.md b/stable/readarr/20.2.0/app-readme.md deleted file mode 100644 index 3bc4be21cf..0000000000 --- a/stable/readarr/20.2.0/app-readme.md +++ /dev/null @@ -1,8 +0,0 @@ -A fork of Radarr to work with Books & AudioBooks - -This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/readarr](https://truecharts.org/charts/stable/readarr) - ---- - -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/readarr/20.2.0/charts/common-18.1.2.tgz b/stable/readarr/20.2.0/charts/common-18.1.2.tgz deleted file mode 100644 index afb1de8120d9e1088c1711607a6c323d4dae355b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99288 zcmV)PK()UgiwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PMZ}avL|YIGVrt6eucNYvqa*zbSE#w|=suIQm7FbVS+Nz5CnJ zf-@kAqv2pOz))r!SKZgRuXms17Cr}<50a87*-kj;Y%I}&EckBoPovRj^g12!Z==!3{@ZM}8{aiM-Cn=b?Y6s(?;6ckr{DSxG@b#M+>=lS zcrgGtWM~qLf;Arnc#h&l zzI=c^6jC$*Z{82jYt4GIs7QE62jKS#007iL2xn*jXc9#vX5t+HNgNEol(C2o_V;~E zJretMkIeRQIL8d_vk&y@=BHn7SX_Y-{(xeNNjL!WRs}|p`58clD69C0dNGcec=uxx zdi*aC;86_Y1sIbU+{6hI^Pg6xgkz(do?wAAZ<)mj@dq(Q(rWH6?62`Zr|_DIN3$OP16zu)UL8vSm!a)%c8B=+f`QUhsYm72!1CSFu( zKs9rhjF9Q-U;qBPS#NdfjauWcl^Mh#gE&O70ET7|2Ymd-m;63fTF%dfDG|7 z6=ZRR0b4|9pwX+$H7?DAdb8fDeCc_;eb##v|DVGkLG+n6fTjGu+3dG_tt|iVclulY z{}Rs*sMWyRfQ(=Ot_W0Q7y#`6dj2{0ag%LILL&@{a-d^m%y&Yopcz<0Otz$bto+WQG74{SWdO1wH{GVR{<@Y>KJkZUVpn zRI3#LW{ANc7!AZWBicLieJWp{zp-%wi~x$_Irb10rJ?T+TANjj$G{a$^hHw-h3P=omOy%Efioh6uL_U~d-w)6|jCqL=z#srP zoWzJy)sG!;3_~zNfXq=GCjs(7gkoJt6hWeeA33~tDL4m-qbLe6qE>UfUyo{SoNY(R z09rEerVxj<5v15tUpUyyNKURjFj@c~jbRcnaF2rkuy_F&v5Hm$Lhh2NDyU>;1Q zCVKpZ`YPt`I~?L!G6Ny;(G_1#f-ms(gTo8;ZU7D&jfSovC#9I%j6`5YC<77kDS)95 zxWFUD5r9K4NPHYlfEPv+QQIeoinS}hAwU@n{Td8Nhy;uZ5I~QDU;xH2pr}$A^HmJJ zyAw$aYFO0?8siWF$ZN!Kf{p`7=>?o2z@|_UZG=F=$-yN*K4Y&w9MekaRK5CeEDifraMNVpVw zc9p}6OJtOx&`YsPU&+eR+{;$GMtrnX$D_F?e{0%j3SWIV21EQCl12Gn1JGM0Cdb(iC4}1bzHpn!j;^lWU!N<691;Kc?BrVg zqI1vuswjcUOJd9xKmn*w^}+%u3La}N40H*>n9)aOIAO}D%lV-xQvvDUa)QK3ctqb* z6c0eRcaXk%8R5cVSu5M5A)W|nv%_RFgn&vAez=#+XefKq$cEQqgW z_1U-IQsjAL7G1?;j02>nt<+PmlaNnE#UI2c4@Pi=1I%!`Aw%CEfPej4{qkdCW%fN!gj zM{t~-i0Z}h6owO|SNvtj=jA(0XOMYQIjfQ=3eXIN35%De1QsPyD%DJ@h>1j75lwBZpPvSfG0V-k+> zMACz#9kRvq&?k%U}KP zYxcF^gd_=>)@nVE|GFV}$l~V=#WNg=w%^9kLszaS(QBv~`pPFB-RILNAkg2xK0P{l zcUqtMyA}P8(|g9nRZElgt-U3R@eImsU%ipLLrPrn(jWZ-F|+Fte;6T8&x@43rMpAg ztbFo~D>*5Lf|9PdbYkX>{OMF9BSh^6@&fFtrqljbKYarA57OqRw23?~~s-d@@2)x#IIz)n-oU7W=kU&8_aPrcP>G;57c-6OL)`Uq!H zfCkE*R_B6Ioi1pz{&De}t{EiZ02nmJR9dRgN7ey5m)TZ$x6VR_;;|3}HNVOi6t)XS zlq|y$YaSkUYK^WyEJpqmvH=&}n)%8wVbdX^;(SxT1DvTwx<@y+#M?y*%XVD7Q}{8y}U2LOK&!Ws5z z(cD`FDVlrBAT3#{RwFeZGB^~<-Sf2vK&}-4?r_M*>Pqi8>;nlBA(rEr82~lp=p&{K zhm)%h$KsRzUGsS9wGr3VL>p=#J*&M3cT59}=FdA|0L%q(F47fn^+6y_8D!Y2g=6~M z7|52)@Xd(NwaqcrFSxXU`1082=*eGZ97P)nbMd#0Je`fc2=a6`dIIudS`#6y$xrf! z`IZRtqG2%ReF2}ciQy%bk=Ylahiuy58Iw8Y`-tgA-FlUhAjWf3LjEw{cEGU!366(n ze7_Sr8wmlIuXP!|*Mm==rY5!W03}x(I z%F5Jb^uVf7#<&;pIXP|l^t*y2GZ9qMq?CWC^l>o6W5IM}oto1b`Obj( ziOf)G=Y|M@8HweY?+-r+qn6XVAASIkfmi&40Q>p#ZUulbA-v>80FAqOD`l&{TqZ^nki)*ZLBxS zkeVL93l>o22v=2q_fr2N;iIT*p7L-FhnlO@E7n1OWfCNaCE;12i-PCHbxij8zx%47 z@kVIZ+x>b&dn5Ewvww&>$ZPi+p5Jdmg!^$$C+;~zA7 zEw9r(XmuN~x6J>c5+X*Ygs{~}>XHV_M!nfevFsuUn}@yD$m=zlqh_Py9gKQC)oeCA2>WA*pf~EkPTy}fx~<-5+-fexl0h7ZjcGNSrl{rH(QDS5#<`=} zM5uMxK4|m~TL)dQ+vs->VWZjd+MTY~hhE!*-CnN^yFI_*!RC0}YQx4s8;*K@W8`YOmF29t**r`!gg$CCdR^2!L_UO_ zaqqCv_B*`}Lj6Xs(QP)HuyfEp>~z~bAB_$><92h@>or@wPQTIVb`O?fNWB;`Z@L;q zRZ!z7gG9{oIcSYWqt1AIaM*lDy5{r2bp zqUP9xOFmcl*souiNz-2VSSq74c#7E1< zdWP@N7{+kAzxY)n+^Kh3>6}E!@A{3t-x~K|Z{!~wv_`1gZ62b-0}r-5zwLYNgXUqQ z(LHE2{Da2mpbb%P-1htZ4(hcJE0u^)#)CE)DIq(kgSw-` zak~$@e#1NP4;y~J)A3QO?Kcm){YL+=ao8P?M%}L8I_z|ici8j~+O1A=+-tP^%lY^W z#u)mehhnU%6(ihh9dr*y2hBsiW?TJc&p+rKbQPICa|bfj4V3rG+PIUP495j^A3CCX0zF8d;Y<}xa&6$ z{c*e78jbs-ZnxhUHxF9fagQ^BCT#gW@|vrtOTr0x1a)P#VuTM{y#v&0AGZ2l2af#1 zk>6-H(YV)w2e8eTI%;;?y{0#Ak9*DjVWZb*9gbmV)El?DUcb3~A5zXgDEx4B0jL)7 zJX=Gq?12BJk5+`#gTM#{Q0 z;CLMz9zK#-C3T_nw@yEc zS}?vtK7drCP%m-RP#spVFtvd|;lZc7T2~Ilza}`&b{u_-VCYMoRN5-DPOmYUV;|X( zX)<(8sirfy;A5?!%eI{0wsJsrfY%ae`Jgu|?9CcpVHlQl#Wd9>ZQ|&0x|R)4@U!tT z1b=_stTzuUmP%_`n$wsj9X-Qmt)3-H;S~;s`ke{P-YL|Zcf|jUrfii~vs(PuGO$^T zlB??Jg0v^M_+oit?|_=3)lYOI)QLzv zARY{?GCAxb$fhZF9E4R`d>mLWfWhzzvS}Txi&|=&*w4I`X75QzV!mRf?aT`M27iAI zn)PO<)+m4`ohGhgG{zr`z+NgNiewUc*i*~7nQt7J6L}`f%Nf9@=adKpGmU5?%`kP} zvOh1yB80P2RB~{{nbJd`3s<#up{Mqv%$9OZ|879Vg*gYDFNC9M3V(}s( z!pYfkh^!SBT@myORP-(1rYI-B#m)KHP{d3*;lh1$KFnhqlZb*5pC%?M+6RK9xjaDNTBrGdT!$*T;#NKrQ^?72Qd~JCU=ougGT$aL8fIBj z*t6P@c}=Y1_t>8xHgIU;0?3d~xhGePYVZZDJu$b2;+9~R7t#lB1i11-hx6b=7QG0)>LvG}`^$|_Vt z5v-lekdi*!d7cLI+Np&WTF8s7E4i>^I(8r9B^5iL3#Sh_elg<5~Dr$=uW#lBrt{{LrU3z9!p>l zEWka9?}V=Q25~ewAyhyq4EF^S@kFE;*PX-}Z^GLU$9N=R95nWjImS~7DH4i65(a!$ zFGvFJVJK!glPVfyAjb5rvIGA0uNaO0{qI*M^N=KY4Mw<5@r2gz4n*vbkz43KjgYs$ zqYBnT8D53Mi7NV+)_C58K{SP}-BJZq5cvV>rzpQv`P7<>C@I_#)wd5Yz`l;J0(>Cf zUSAzw^J078r<FAXNlf*nEc4u!rD^$SLPNI>r;wDM)}&snDyQsoI$n;H9dE zwJDQr8F&cI#PDjf@RfXXPVP~BrSMUOr2=LIR@qzm$rY!C&}Y38z8_*@crk(uIoV-k z-X$N+VCYwzv@wz>ZYG({(jY|EeT8yKhUix&aW`A`8^|Cpa5rM zmF0v3|6pDIrr`2>S{#MyByNSj~;TSuF z(DR@SSzW1aF9aXO8mvt9rdqeXpht;!hgc!e)LSc*9|0D+J@}GVCy&;VW8ImDD((dYL1V=8-Kd$!-?4En7;5QSTZg{88-Lp|>!! zn38)imTy_G(2c8hRYfV^%5l@W&*{a<8ivUUcUzLp6=6j>bVc^sTJM_FyF=f3H8U5 zsrZleP1rm9@x&izKJ7S5NTDDIFw^Ca?_W3~^OQkzHsmAW`Nxscs@uMfwg6*{0$*-h!aFz1mt-^6 z4!grQ*@+b!x&r`h|43pFajA6376EcTy^jOy_uY*Cj2379zy>E38JVyqeSb4W;OxW< zO)@eviKZ!^sN$QN{!qI7@9~M_LvtGSK8H_Smt%2wtsH zh5#&k6oH@G7GAQ_I>eeQ5%Tj?yG2S_ZlAC7tR z;!I+AhohVG;RmsesG|k7G`MKCr$$cro>1%~&2_0Xy`%_?130OJA4#m)v#NAVW;1c_ zfbWoIq>9E;%pIY<%=>^$XzH~MeP5cu0yqJ+nnt|F`&nZFt;sDg#iX!ngUU{stoXr+ zKzh2cI4^|vIBC%hq)Wxc;x;UKF)JSaZu41L8)&du0a3q~ma~ztP%?Oja)L}wD6QA) zC8!mKu9b^*8NF~VSufkGRWjZmY@;kDZ5@DDS{T_s^5-!0?C86VY@f@U_}ceW@zUN? z#S0i=mA`Xfm&$FG;{B4XQm&}X)XeK%58pG-#@d~a*Mf^b%D`@>^K5~_`2dWGHjX%V zT9lU3Z4W@T0UF>3{(m|kIicwCK1A`gId3@&B|$R$ZwH*oyv2TMLEY1vw(T`TtTQvr zC$7@5e+tn!2ooP<(qmjjC7`A z`-AHwCjG9I-P!3snISes3B69z9H@o92osge^3!L_1%MBrJV$VxHg@ES=G>hxSLd5N z<*;2gtQwqJDl5Md(&S;v97C}pWFYt3_h;rLmCRAhb^56mzw<4o=W*G#cffgZtFp5o zp&F`bSk+8nD!QaC){I|qAtjP^F5z$u68D8C{FoxsR}TKGAYT0Qh|{V z?vc;}v=ox!l+6*%MQL;VuY%8!udF+=4dHoJPBWm7h~B|F;a(8d#v}>tHm5N5Yh#E5 zeR9J8z6?*}nDYu33N+IQePl7Tpzys{1SO9Zt4hcCQWsKlY)60+awsRA5DlgIQ&=aV zz6B#CJm!>1LSIJJ>q|0}ugEHB`i_edXxfo)O=v0iDg&67SQn-jki-um!*f)NCS`El zQftFTF{{m_!(%CAtBmDo!zEOC`Hq^7iV<+pVUA)L@G-8Dkk)xoYCMRwAc=fs0v0p+ z4lT;#4505TAI%jl8yB4qR~M@JIyhr%G|fS08@Hm(`6`NR4--4egEz*v-g<$Ph?W5N zfC_xx)8RLJz=W@G{$t1TN*^g1(8O2sFQy=j(+GRy10O{(@OCJ)9qV-jRG>-=fZ@vQrsQT{WuBhbgE97Rk_rOg7e^n zO{F49^udH?!<<&GmjF!IR4Bj3pI`?Z@m0X7=fPOyJ6Bqh2>%F?%wZfSAy)wsiei0z z4^X+Al-H!?7Ry_?C1Lih=b?z*`eDY;Rl1g0DEWx8TWmW$P~zQnZ%ytg{aSF;TNqEA z+K@|mw}szG!bW@%-}3Rejbid~aT|!_Iu1oRRV^>0u{{+vrF5sV9(M-9is-vlvrDZA zXQ+=|Yf1TNtB4?RHduqZ28K8Tk-NIit|f1_A<1NF4Qa+>)yl+GwR(6I1YizhEPct0 znj@{V`kYd_3Tm5O6l(fq62;5KBu>NJd>mubHyJKwWuqVCiN4-SZsT)H?%e?<8SPh$ zuu-1PDC^4;$qb=zZr)e4?bkx(v5^OfM&(>s>`2(UW$q+k8E5o(N?QYUX4_Jz zNhGVJAOUdvl%&?709V$A>y!I151GGR4%>C@Qw}=#H{^>Ube5hZg)zpa7B*?)6JuAm zsPrQaP-f<@+Ykx(j+$x8nP7aLWGB{5X4LG=D#A4b`G6uJm>`wOXvZBCzCl`))J%LN zO}YNSl&sTfrZ9gKBR(WtY*OGAAw+k|ND-POkJ^CAXMRc)ZPAcZUlr9Uw;YgC?Ut8K zajbDDi7P}N?eZ^-oS>Q}+^EXy%4m9&k$&T__~#E-7e)SB#+gs(@e;h1d(09wLSOTB zQR)r{!SEh4Z))vy=%X|qsoN3g?b+45V-|VQ*PimY%FA;4O4GbFXJrpjQl03(ykUt? z8@e$mFQsG7otVo7VIHCM9uwuDAn)zS*(@yC5%F2O;5-q>B;@?mV%2;UZ1{#XXrBKR z9&b&PN3nXV{_}Ethgepto;mvq5rFYTplG5=k4^F^sq}+djc@THpKZ;@LPv*ImO+PI zMX_wep}qzredpC(it)s9imlbS2xxwWBt%w!GYD8;sw!vRetk}Pi&eYNf+;|2Zds?6 z4r?fmXw4`n%6%FL3fLFPaly+(>)E|#>M~s*L#ajF0iL5!9^S$zk{~kHVZpE?I5lbH za7>vsFQtL@9WN!FFeP3mSR`51+jBPJGF^bs9FC{@N0u|xvlc^3DrdP1=hT$9H)VYR z8;P0Fb>bPcVwIe%{CRd!-Zofrbw(yfzx6>_T$`b%g3!;q8 zbw~i{EMUua0$t`=wgCe?zXynvb(?uATnZB>KA!E0L#5yu#i*tQG!olBbJDpCMJV)9 z=wU>`&L**{cwsbo)Nu)y)DkAompKr9c^8|A>b+JKGt-eT1kJUNFRtDSOW_DoR0qbVU$9RTBk%+G zk4^#gYw(}UOH8dd49}1-C-|fPSZ1oUwnjp)STY7z=A&|V+S5C*p+X2nGzRsiXok|( z0yKf%LN_ljT^4@gGNGZ^C{tG(b?dtvG;;;KgrU(=`-PY;95+L9n>MrbW>0~JxCK^R z0{b6OGn)!8RR_o7IFpJoB{4`MU;MPS3NZ$%r}Y$Sj6^C%4pIYwK)p1C5hwknz!Xtz zm~uvNphFS$PeF=37$r=dzlzfjrw!#@wP*XtBHpDrh9H{U@(Co1$UdkH>jt={@QIpi z+6hCv)-!MbsxVULRVsbD`CVkJF~Bsgd0UkFlJ27Gt#q50lf+aoO7bN_g88a{!yd|R!%&8+Hf(C&mEl#_$qUK?`wG@uj-w4 zgV!&BXmS9mt#0ovuC9UAJq$LC)IAJ_>*7_b$%Ge@v2ofrxbR_bFPPeL-j39)G$Q8m zL>XkJ4eJKJb-AK>_YSeC)a_+{X2BYxNeq3I3*ket_WOn)CNe3tWHd65hcDub;g~NF zzJn{=8+4}n)|3hrv@ zQz80Zz>>WhSYXl~4_OQunk>GGJ`VskeO5Q5A|Jd;LYhQeE#cyjVfBInGZ-c?0I$*l zsd@TTioN2@-NluvPFq4gup1dzt*a_(=hnm^e0sycP7dTg`JQW{`so;2&D)I|moU{k z{Y`7pDCRm-Nz-Csrt`(c+g@BMR$clRXzDVe54RkG=pD3ZcIg>3aB8G8>_+6jQ4IL6 zARrSEpg9WmiqoM>`^EsEI41EPxQ8*<1NP*hn4#Pr@X;ul>;V?1$43E~oO8$nxzHU9 zvZhqY;f{~gS$-hK+H$~7dEOAIo7(AMf8RX=Rt~_a5oce?m-{fnwa^4Gj1aa0nRp(7As+?4kxP51T+k-kMoWcat2g_5ns4gN z@m4i4Wg>50QLD~X#@dmLgs8r>8|kTS9->TfRM-_yUNx~N9mbHjPg$I^7a-y984UO! zGhS{K!0=9`?ouaKdWAS-87+)m3JU^Wygxs$rz4~8venqhtLU|xj4tGiv~EYq-NXMr z2PRwd<|dk!>Wd~>st#CF>-hlY27hR z>~EAT2CT%@h=u$|#t_4)#Az}7@AGVWq~q(;qnlH3`j4B_i{aVj1vvW=TwLCO(|?=| zZ-!tl41|9xfOVAScYiooVaff-kchqgTdLP8@m0=5+bu@A%(b&Z}K6u=-GBbl3wlnZ24K7~PJ7 zJIYbs1^Zm0$i4l)GDTwq{apb|^b!1ceff?nW#X16a?2UREfcn;zq$RlJXO<|d@3lM zvLAp@%(&DHs^>>BHyJA%qL%AfipTfHVbu%y|yNAKUBu59#}4?37)2CPBf z0oo#xItpTS)-fd%Nh=X&AE~0O(|GFp2vxH?Dch2+=LWJAaZ_#6SPhIBXC_KmcHJMq zf28Kj)p7-hE8w;+ueEUTP6ax>x;neL)<t_JHX|6%VCb3zvRFCr9Yevg2Id$-E*&GN@^BcwWi04*@SdV^5@Z7AveKxGg-xfN zAkZ=A-WP&EN@C!dxfr;o|8iB=$Cc7f$ zyBZKZR`RF08{M=Z86_Bsfi9l%Y5*@>Pn(@gf=d(cWW0#9*-X2lJ6UVewK8m{TQF_c z|4T;R{Jjom@HY~|ds_F%%=l3$SnB2yumjE!SAxXVx10j0hqZ2g*fzBujCv$;sg|Nm z+k^f6|B@l?fB!FD`0pv3_$`So;o`sC7}dYm|4SW)akBos?vWVP?{Vmpds+_>+y5_% z>RHfl37G_F04B7oc^^@xuC%|hZ=SJY-T-Y2H!Cr}XnPO9--Loa5x}**shv(+6%l3U z_fa_u>{sfdoBi~SJm~+~apeO_1#sUA3`ZcElZI+CRs0vPdP7wkHIOJwSH%PGW&4;Kz9xdSWty4>|cgBqbRiP3v$C4LOZvfbor z@`fa#S9nkt5fa$vbhVncD41Yg6>1bsMhc3&K^6MKrC%;&EryB;*O%@P@it`I8!E5J zw_AJI8IN<4r=eJZpq3gkgCB2YI*VJ*AqJq@Y&05GtAyf@w;aD)a|oqNtUh>5Z8657 z!_GheLmwn@K)H4kB_h^W-DIdDw0L0+N`SdWKBlR|$70PZU&K8|yz2!Cg*kHaKqXQ3 zeQ_;^$cjt#=wUwIAz?@*i+X>3KGaE2Qa4b(fu6kK%1Vm3SR{CisGHM0hlsj~)^uC5 zq(V7HQA6D(^>BKqiiH%(xeBYoqD$5FNd}*pWQqjx%BM$=KvrCn1hVkgNdhmx-rbZW z!gt|;R7mTtM~Jli*GUUXg81Q7;I#_-&p#X!kxaj-eoF7Vql8WQ3f0L1s-dvu<>DE~kJh+WUqtWPfI^W4;t&Qxz-FC0{U9;1b7u9wf-!)pzR=@cjXgo`gGfzSpjK6C< zxvgyHzLDqCr~Mx)`oaKd+Y~_`8Q*6TR?d{)JC+Ggz&^m@N`AG{lnvBOB=;5#;r*^- zMJhk+fBszg^r@!ONrEc#>hoq@&c(WDu5L%`)Ku~BU3Yyjc+IzX9Hu4k*xUgx;n2E0 zdEM&rg7G52uOA4-z8gJr&3wMT;%TP&{U5+l#Myq%>D-B5(2)oMfj$L-gbMkz*xtlc2fqtTwzy*CXN& zBjlxMQ8!*Ihe_r(dI5I|>6J8w=-Af5Yh^r3E6EG*zo&EWLL3nCza;kJ8hh0d9Vp@8 ztp{%K8oVkdbAU(ngyBGsaTUDsv6pJZ_EU`sVaM!a6?_k>auegqUDd*cJr3G^!pGABnJD6zk~TYB30L=3329P1Wt{?yh^yKOO`0Yf6ABSK6wXEByIxq^i44 zs!JD+iq0q?p-a2+*3_s}U5XdcJB5*567ITm8+h0V>3ExUM@R?G6poPkxXuXac8h51 zfGOTEWEI{gN|PBttWtH~VU_DK z%amQ39u%_6(oxGX%={8w&P11Rl(XVdEuEsPIZDN>mvh7bjo>}s#ivjvPM6o=uyjpi zn#;~Mm;1QLr(0M3W-hKziwr#YM$U@~Xg=Qs0&J_CmdEmU1Wq$|1CWM(fHGsG@Wo>0+hyzenml*2oH5}l+ z1fbJZsFha~%v@b#V-qINrGzj=6#?(|!1r@OzO=)4rk8WOXGINv{#=oH98!?w&GVAH zMorABBGBSvwN~S^x61!~(&VqImP!GnnG?Y8#!IBSU(NRROLOPvf6DfM9XtQz&42a& z-|Y3X`+uX`?r-=1mw29W|JPG!`R=bW((rAg2KGld+!rYfYoO+de`tVE1aLUUA!du! z!h*e>6z%Kge5`N_mS3~GrS6H^D_>^E1Hgk39N_>ntYhP$@28n_E>3T5k51m5T{v&9 zkA7LUS!V6pW{|#-z0&0Lc+yU}j0(@cQI@v8);_t}{b@D-H`qOv{jcQz&1N^t|2vJ& zmjA!R^VOdJ>1p@C)4%eC{iP1winhV8^~fzH`qBfpty%34^OW)bc@zrKUnc8+Jn#Q* zHUDpP8!earH~XDVd&~b{;xY2S$}T&`6Cw4fEWbwZmzhY{W8L#eUu86dQIX8=Lk0(> zb_-rzHD6C6DRd=KolXbf_nKj8oP~xs^tt@k$;w4*!S>00D53Me9t8i7!}OM}f0c9p z_=y&P73;s<$m##h##aA-na8YuHP#!_{rNgm5SOd}8C6@=5sJ3a^-CPPcpKUXaK($t z#cbOJcuhuxlx45ymRZk616^uOu(YqI85Y*G96Z=kVA~tIy@RLN4)pJLKVMv)m|w$x z4sYLGp1eOltw`$v04Ep2+n-NQuWm1n-klCluRok#4?vZKRsQYrhW|YtSC@n7^<+RndCY_CYJre(+WS{M`LjF@1%RIOI*YCD-^50hfdzt4Miybor%=4jHS-!kX~<4rtp&l_&PyBBQuE^*%|Os%pCc4rUQ{a? z*JB@j+ymcB8Hm%-v?2!Q`ttqF>FuXa;!Y1)8Z^@*xf0o{xW6mq?WN-O;5DdL^U);_ zR4UdL=l@nH&d+;Bpm%z@f}{^4fFODA2{bQ|9=Edkv&!mg87h~`e=@NDX~zFG?EmdX zM*eH|`n~P>?~6P}{?m6*>KoWhcHu{v|7G=Z+rPLERvZ$zM)&;OSNJS3#(!xNe$&s= z^>1!6eVPWiV*Piz{jC2-v)yWK*Z)gAX8qq}Z>`;c259EbgLJ^Esiyqx{&;$z>-3n= zcwb!KCEOnksYZmbB8_ng8B&6q+m;owsg~JnG_s1O{c7#A2NkX0lJ7x&kP5=8!wrY( zkJg7PVx|uf13$lib9y^GJ-$A@5jnO+(m^V+%c(1)JY?M`uG5!@3;8s5@-`$Ue5PXP z-QjRjul#~V2&lQx)cvk6v;8XrFt~>cTDc3!z0Q^lqe#Y)CL*1#xKK>4LtnUERX7g% z4p|-DtrFh}L0I@^1qjLuPGFG4NG()#UUM_NwR)}+&fN@ehnL4c^WXb(81KhPSajRC zU#G;oQ{``tZccAc&aPFJ0FSIHqR+A**VS(?FOE;8xV?0`nrpyaIs9gL`+j(OJ-j+v z3rafavrvwXk58{|Zci?T>mXxpAJ1zAr80V2z5M2IgN`{-`RV57>h|jT@*n@aJwF@X zoL82&2w+){RRo%00z@D5AZ*I@7o($K%t=$0UGjiCy)n|%NY$Cng z-869ekDKeG+oS8ZnlOcm>%$0?y-MCRc5`%gK0H1;KRtPlcGWHY=|ty??&s5g7LjeM za<8v)Ye#U$i1Gke@ZxsAKFwvR{4Xz@eQy1~+wS$V{(p_uHvacT9wYzDu?Da7#VTB4 z;Y&+-%k5^A0DwbzTa~^KZhfsl%_;@h^6wr&imo7=F3BB{gQDwHL0wqxUClyXm1%qt zE5y2$WFDz&>}e%`Wr>tMRb-${Z(42i`~7MKGc-$ek(I8CHF?>I@L#Oxh+O%r;D})j zZ$$-Axhxux`nSbt@^@Q*DvQ;Wdy3;et{EI>byB{bN1+z9#ZA>RB{k=KX5dya+!b?8 z4%FtSnuNRInI-@kLWo_|rbA{XssSeP5*t^cMc&TJC`MIGX{lu_o1k3x5i>|)Q^1-#mb;=f&tu$uVq@+bbO+!X!ZYdy{!FX+*4~o4^bhnz0&~8e~DWRfL zMgLLOJ&76DP@SORc@&DcVO?Ebie2U9suh?pa)sg<7O9clJibc(^`_)LG{58(t14TwQBJFSO9__( zekk2E_yQ0ssJ8zDI1OnMBX!XlFiM7fyYUR-5Jbe6H>Bb*NJ5T|om(QG=tB6uTG=j2 zy#Q8ayDx6xq51BMJD+DuZXyjU(}dMqb+)oR?=||>(ijR)#IzJ(4fWb7I!dBdzb~3# z%QAI5AX`U0Uun%89YR1VZ2VJE%HLEKt6EC+S|r^60sMIOk9Vi(^@kJ8rpbsCugFVa zA5)qjx_{6-I9QV8+AKWcUy92LDX5Ao{<)g%dNznl`l?0w;U6}*g^oyH=kVHt^q4_b z@eI$jN(y3nzD_beewA1@k7psFf&Ygi;tF}y1RMK$3 zKS(v}$>AE5s)wf~r@`mFxH?M^=av)$SH|G&udjPaj^jBcg(uc`It zi~*HLJ^6edtDIzE5Rm(;7|(HlCg_xN5p}ffpr0M4#%j^3P~4sYKa9shiKaWVkaaLgW%bp(K) z&(6<>zntA1|1?l{b(F^Yb+YM5{13g(XPO4$^0?swCKv9fu5uLhoraI=K6cPO49@XE$ql}Nq& zI1anZ?y)nN!yq^pwJl6jqrvWOHmYMCnDQuo87TtYr2J!-?`bifsa~sDU!Kym&}YV; z^Gj%D7kebZj#3aWN;T-TYyHa5&t?bf5b^V86WuP9&L{w{l!#$d&KLa7>aQbxD7)7U z=efLl`~#+7ieh<%y6*!BLUa!T&K8U={#YTUbpMY@_&;Q{3HP6s@gMzmHve<4)o5(@ z|Ce~=E+3Qdf0NNhc7Hix}WadviIM_&Mi^h?f|twO26CNefvfCZ5knO@Ze=S zjF9(;`OeXGw|xGjELI=Y+3PiZ)?5?%Jg<0dI1tO94XmIIwiFRxxAZ8QKL<`!9bBx7 z*v%qBRZxwHU)8TJ4B9GMn&0znr4FKt!Uef|#_2dhf08HzfwE-Bg z--Hn$9fGYDU~2{Vnymn4rf$suTQk7c46ro=Y|Q{$Gr-miuzkMfr%eAxp&t>v3GIK4 z_^(dx{=ar_tN*{qqq0`X!QO=SuP4sS>Hbuv3=+!!p1ed!B&;kp0;mK-%3`plAt3FP zrCdEroRuC5`YkBu8riLCzE#a%Ry9vX6ft$n0rdSCQHs{oip|bu>TOW?;mt=RW)H5EK}%{m2~g}0uSKw`^XhxI3#!r_2H5A{<)$Uml1dEt zKfNlb{`lV~7uDTtnzWEGxyStkX{MnR=58i`n#dSpZgO#FX$_oyjF88W5B_C=`?os& zA)$z{|JPsWzxTi>VPHa-_*Dh3{)gZYRQEvDZQI6bca6l)SsBj9)FX2gFY0#(w2sMs zPN)-@e@lWLkkkBY6z{AYhN{8pT{1#(h!_&oSInRm=IoP#zFR@@&mbsTOIj{7oAZ4B zTv4*xdQut{vd{)awU)eSNI`!X8s^sqQQ4aA{&Y{7{68fz{*8nT23N#CN*ED&NuTHb z|4t*9|FhHF-v9X`kIMgP3HL&ZMif8_AQ%M+67rYG&X!IJk-#3BX`y6jDrIgMBjCjd zGUQhhDy~%*iH`V80|6ezFkY-mBPylsX#^dUn@kda!T0adM82F=O8r0xL-lbI1X2d5 z+o1UCjR2ZPP{T=qTHod6H$vuDndznx%%n!1Li#gWfI6tk8xLhc_iik);nwZ%22d(7 z>(*XdS)Yp~Shok~MygW~v=rwSJ91?aUDlR8+>XJ}2d`A`G;UQ+#LGE~W9)O;QbVy{ zyIO}P@oOtRV@;%I)L)jsu%v;k#9pq&TFFv5mFsCOuDyQ#tOWa?in(Noh_8_?5baIY z!ZbfvD#V$OlYoq1P*Ua^iOh=i3-fiQ(4G$bQ-$^ClM-KEsLssujR@1vNuTEupKF#6 zl$h5yg8N>hvC1D@;9|(%%cUW1M3>W6a_ygS=v%~mRkHLXuk}dCV#2ji>2XpA=8QaD zPY!r{Em+%xs5HajHHrf4LF&}B-dok1suKKITq%8TRcfnBh{f2m=!?f0Jddy5zh^kW zzlo8!La~QJ1}8{&uLk7xme+`qB=(SE?y>rrIt55Ncu`{B$Oew)D25YcHBvyWRaj&l zU<$kP4$Vls*ko^J0^(yjv<5Dp{!DpY*L}+5e;iJ@p8Nv&-!p`W--O|y&f7Q&f@%)+axzqzSJS91xkzZ`va#k= z-9s^Z2SYenZhQ{MowmtFsp%k?3dIY^J;XqdCqLDaKWetY64gjK=t5b+;6fBEullcXe)_eQh&Z z)qRW0x=%!6mah*$n9N2fc46?cE{r1EgUuo2UIzi++wmBCkfAe56BP6PPm1+E!1Dh2 z`zZ;GFtf*119?Q@3Nzv&97q02rBYjjSgTN7-S?$J;DY>8!v4p-)eB1A>~5B>v3%1S z3ux^xet}QJD-K#j5i%>JM8HjlqqhDcEug%w7H{NgyLv#>ghU z24;7JgIz&6mZcmEX!aZ=rJf_M1N-8}x>YC_>1BOW-ce5ZoO@KJN35Qop3B>K@Bo*$ z93+&X_&7yi&897sYvL~7xb_#W%B$`dz|BkdxqzhHOt#xDo20pohq=omJCT=dG^;tv zpV%%~X8+sN-4EZbasNZNlg_S;C1QPJTh7DIs^qwl(LW zis1_Vuib8E?*DDII@|cqmwAM)_io8xZ$dF#HkrQcEy2rrzWn0gRW;YSOL!HG;_HQ1 z)mnAq@Y4DZzJz%B*gn_2#L%B%%Kwbf1XHGv&mI>q>*=?kB`dtQn(|gteo;;NUd}tJ zwPj_ASFf|DFS@krEL<*asY$K7W_}y^`Q8?YSOr7>O$c0H*;6L}DJPsG#-KNyp^%;M zEdW18{9Bp-tJlxQ|Fv4Zt^eAKmAU#x846= z;t}!xZ=5K9YhRMXug==nir824CK45^&k}I&Ow9*|-aB zr@|Ks(a#S`K3G3rX8o{zM{JM~9udm#P%0nPUo3g#(JqiZzDxjr(Nx)n@|VzO8`SSg z9TD+|)&(P<+z@Z;YYIX5n=`_DTvTvZ(4?qk?VRewY`gFa^$SUuY#`(sV00|w74bP7 zJx--*2l%*5Q4pb+)(uQiU2g*qP*ZoyP%*oe^)B@i(6yfNqL;{WKFB9GM@5}@*frXZUI@OTY1EtWa zEd!~s+XE@|Wr9bZR1&%bF8|Khf(y#k03%tC{W>EVIe`i;J%+rOZbWD_%6~D4)p7JD zAl_a1m%4}jI4gf~psxXo6DuQyDxZ24@QPv+cR`glgg$yGa)MUmn9U3?!SFMxQaj{F9%frtT$7oaLp6Zh5!h@q-!!LA<7y&)f$HM=Xy zW=qFgc|2SQ$VBN3|$gHfuSIoX+Brx|m2 z(L1!Tyx7J2k_jnKAL}!Cht5KF8D9_*Rju}REjX^C;%JIGjaasEu$FRD^eaPQ%BQ#I zI{S;$sw$n0ss%;sGvenAV5PH3&C@!ajgE(Bo4VY{>1%qxRt?8=b0~*n`dlbKn{rsH z{}KNL(>M|9;7#IB(BrQHU!nhXdi|XK*X?Zc|GdZ})VqlIz8UP180?LxfcZJ}Wp%=$ zNxf7_EUB=L)>u-tIHa?r@Ty48qG}Hg;4B=a=L!grQehegaFuWTTk!wCB0fm*28wFi zFwH-T`txll4tkML=VTyf*e{Ubyo53`JGVWF!87KfDQUSN>qoxZy%mCM{&2O(_wRpG z5-#i216}`~&MGo8{EKENDs(>FEuwj$GEj5@!wiQ5&A z<+6%q^A)d;0{r+sgjpn^aXNgO~DS`o;F0P1wI>#b6uC0TYe>a%bm$dpE zhe4(Ce~d|t*+Phc&wKxWyWPy@|Lk|R_y4@iBjtZJ*kbHABKg|@zp%`2qq0KU&lX)v z&UY)VCvv;w+1PQ4DkP&!)Dc3~1!?W`5(i4=*u-t&b$PwjCl1t`B0mX=Zu_{hdC)hZ z7AS<}658qmTYca~^#Nff&MgaRthTPVlp7SU5XA`1qKp*c9;>(oGWSdHZ|CG5#d_ik zsmoyi5~Rx$xaxwa7vm_s%+YGp`ewIxL4f^bg6Al#K1)pWpXn);|K{FH<$v!q+MRs< z_ig<5i#&z?KgR*Yv&}dG73EKUQ7@q5Rc=7X>-zzTq9x8XAC7bWGyu#6IWG!Plix({ zdK~(I5xai1y1Rxi(D7Q%K-R&p!dt!pQrwqbNOkb)Xhc!S)^-E(p1}_&b?$kBE07Uu zM}!1x_yDC~9_R-2E&B0@rTtCF(pg6UAW+{5)qfbF8jtO@_uOtq--Zak-W>(n;eZQi z^znBT5!{#pu*(0xo4fzL+v#roKVIY!lKu6YqvK78`+U-TS$SVf z+ob}(F0qcpugj{7?|#8PvV?I}0AQ*MfP3sCKw=OQ;lCkoQkDJUe`ev*M081uR7I9*Gm9? zIhmEOBU?Z<;dxtW^_!PgzYY1(+}*rffD|iQl-;1{xH-1*28TWlCyINRUtf}m7zKYx zmbUG3-!AtTUhX77*J#X(!wA2PNfIqtcNGAhyj!nWUPhu>j|Hi_#*aLYBw>+r@MC$= zdaWyD|IF%hss2Y2_N1V1>sg`y^&9P8R{!fanp^$vB_5Ig_r})p0AG}d0!RS_BPTO3 z*9foq#84T5sk}@d#t3*Zf(-c;&NtQhgq&I+z@r$(i~3sWgT=I~8gI9P48Ed-DX=na z@2BFVy(tt>nyR~W^yHe+DLL=7nyuUU-PLHMwW<@7(e6C zx2eFlCHt)Zr<vSqegT!0J#JtLQcg^@VrZ$p2+2;i?bM1RoVkiq}qAuCl6NUr5 zG1XP=f*nFh3kEY)11KUt5nZ|Q7!~I@5Lkil@ z&y|8gE8*v6j|=3A#LQ4E150LRS$mv$>D*}3xu>~Fj#SP};PlO^KNHB%JzVIV(~g51 z45BG)IYSa6du>$TUSA!{6|kH8madNcx0~bgPv^t3Pw!7mt#nw&5C`Cu9>xp800hEM z5J>JR7VWFQ(A}y9Yu6dK&!1C8&uXt!VKXzfNCW#K8MbXEzs;drHrEr>Y{iWI${==sr*(}t^&EInv!OX z#pu@r$H-4twn0noteB={xX|~PIS~9iUA|_S?gGoMqFYHLYe4tp9JX(duvQKQHkJ{dFh?dlMc2 za@u@Z9{@FVmwExDW!CWnNK3Otq*~;E<-ZrFcSygl%IKg^S^--VHD0ngwBT_r&< zv^u|5D?ah=P%N+4`yZ+=z;v6;wO0Cxf1n?oK{@PwE#ctSo2HyJSgIC-Ey}l zpD%Xu>AL%Ky8Q%cei^6aDw#ettmGDP=%H@A)7~g~fuw4Fc zwj2GN{NHM9{eNHNQS!e$)Yymupe#BspaDp)S%o|2D0}ie`W^=X7$J~Qj5JXxX!(*ymY@8JNQu!%={!%_hH}Li*Fq z&DBsJp=DDRexOC=<>{{u5hJJRS?{1{2W6@w^(*27HHSu!uVoS{ zC0X6w@=9gSha-wYsYGM8tJ}^^#4nu+Ok2B^xSg5R8cTb;EkfAqO^R+wEJWtCy9FzA znfpjY{JK?k?Y!xvDj&ZSK-;!9-u_?a0>28$N-BM zX;d^HZa(`YFHnGZ6WMO7t9r!p%LD*h80}_$x#gtaqm)0tGvbBDI$z6M69rtQF=NF)_alJB(s3Ux^{cy0j_( ztONg%`3{Y+=H@)K$0Uuj!= z%B&WM2M&N2#r=Z#!lB_&c!#F)i{k9+ERVn&IRL&0?vI?}$f~|^ydT6=9Cz6#Afp&c z!G($ISo~dWGE41@Rw*jF8L~eWTx#M78?MVtnGM^mQ)tcZy)?$t={d+=KA*uMZ-Y3xI2ao1+6@5lc||eWz756%ZnFiS#koD0A6O_M4=xM95PXF zGt04&nG8d9=pBH^rod2lE%%>d#t?>V9^_$uJFa2(_yFLGTiN`trQKP-V zbD;9b-WPQUbLR32$FOYK^&G@uq88Sat z3Ye@#Of~oo8OHSF{%Qc`qNzM>-Gn$+y8koC z&^QU`2AsfG?Ek$^r<>jXo6T+f|BF0w|5t-O+>8^rkD`DqX6S|XeNj~YmR{G4lzD%o z{akl{O_#yOovX_k*FA~v0s?)z`42F_zTiBDsLKeM-N0cK(KPRpMTl==3s2GAZr|JO z`zy@ITeM<_kI&5OI>WBG-|q|963b3gGxj7Edzfw<0)LC&SjN27YdIqRP#l~TuIZ)c z&Fh~!Kjl<={Z=C4uR92Z^JCNaJpatdae#E_UyOV5CvX-{o&g+y40g7=j+v}$a#THI zmvGiK2Jk_XcO?hjXoKctDr6`gLl0dM|7mCS51rlX;~Hg9Tedx=L;VFdDgNX(DzNTc zRj>561y*hkX6q8Gc@xJ7J+S_PqRM1HPcNsq(W>av&liiJuDkF5Ne(*7_5bwNn5P;5 zR_OojUMrjbuixx%?|*ucN9y>(pLhnNjadHW%=rqg{phS3b5%-XQGEAq8p5pXGX3r25wSQ+4V3CMP3W_e(^cC#l z{pwrTKYy-B`BLSle@Fa+%U81{>~5dUX2{1nnEcBKoMrOgT$!80$uDR$CFJhdjyZam zM7T=+Yj<0&{MTyr+uQS>7kLDe`H&rKH^6KILSb$?IW2ryF>yI=%LT{Pb=MIkS3@bz zE3~@as(eE$AUrq^(W-HNF8>th&oJeG#%O{mi;J%t$<1?zseKD4VG8f^ganm*P+rZEFw$OEb>#h9Yr&RtEg6lAZ5uK9f_5W>m8ae-; zZf|Sr-=M~Fa`RU>$ddIY;@TrM)Bqv5XA9H7#U&P&Swb1Ct zc&^TuzfkbM9!`3Ur%&O5{He#jG}iA)KIi|JF)m{um)}h5XlTwwf9Fui5UkxANah zJW{r^64n3z?7e$;+c=Uae*ey=z~Rr?v2r8%ZO?c%cdpxUr@funUfaps*{s)xCLxJq zieLy(jylPA{~bIDfZ#(9%SlE&r#lu26bc2PP*o^YEkN!w!sI`tyr<9GS~<@u*hapy zsx%q=^x`FJUxPqcN~N+0OJC!aCKi!%46~>|39?$xaQ0bGj=)it{DWmK^w{}qGVp*$ zXIu9j|K_=Kr&`qu=}()fKZ321q6~Zjdx!Qh z?+{_4rGk{Q+}f~8d^7H-i2NqM!wK(%9}iF#k>ThNoE*QtI^yzu^anfy+k5-$S0=hG z1>2+e!Jpt~07Mw)FuR0(4oYzYTUge3)G4cC`T5Bll`EUM|bOg8d_s;A?gSxZ8%RIi`n zsnY+Fbg*%I=Lh$B`q=SbcDJ^-?fgFnJDV&0Zy8UM>XD>_9-jt!p#24ypf_HCGk+8% z10yXBZ;BoC9lioGZTRzXmw)K8%;2`rqQB4pw28FBl}RS;E8kVkA35Qd+BKkF43hyF zdSH8Rr_-tl#kU>sTWAnx7jM8Xd;mHI_1+1%2K~_8Ki?`TqEUs=hinj|J3rT`1>zMbwr}%`)?Zf#bX^(U{qx8a3fgH6RWzyrCJEIJ=v_N-M>7I*5KsSX z)1|VHk6|*9gh~-6gAC$NF=sfo!5~I?c;=I647(R^Doh4t7=_h<_ol*Npe^pFwG|jE zy`(71PKkK;CG}0bKWlN)Wv-zg)rznf+ks;l8B&;s%@^MpJ9Y)DdAr6pE=AT-c+e%kYj>IS_zh!vee#Hp2F-shM6Op#afhH zWQfXq?j|yrV|el5*i|*nV2u3mZFHCURTw<@@fD>s701P7tIWVU4hSo&RmXGGO|xj^ zXOs77=o5HFGM~V~gpE#~U`mp4gkk7aR(S`>5QTg=A0iSA(b!tQF&eyuW5|L9cu~?v zo~c~=_YmMbgWw)cFo2&aZSG(nWl-j4^n-v>-cKd~=XboEBkQM3g=$Q7V{$8_tvg?z z;y#wH<4z0XYHp+^ZMzn=^0PN8benc9%EGfYC;1g!z041)O|#`n^EXe|%q$pa^{S9~ zB)f+|!ChMlKvP07bZ+yLhUucM6QZFSII=r4!*g}4&YGZgvE)i7ktwz$)0tGgE@GUx zrh`gFYVsbGnMajkUxah#Ak}wRy1^!{1f&wVH!y*jZ{X$#SQ474iuhJs)9V^yx;G93 zy1R(GxoKJxdroy*qQFcosqM-Duin;A5lv{R9|%>jnZ#j#qBsiv%OzQ=_cqbotPZDoZ>=zuGAvoh#Mac$%%J^n$3(E6KQ8%x&yCq1<& zj1`r~7JM2WGJ&c7aKePKW+kJ_398JqSrxO&sNuM3+xX z&UbYOAr5i=Cpih3=IFyI5OB)c5(NX{l%{!kx1e3F#pPm09U(CDH6=t{UQ7wT?3+@R z#PuenIn^jcYG+d1$gx*&TvdshtKtrDg7o$sAr7G8mXO@|Rg_9Qj-|B<+!BWSlDWHg z0N|mY!SGgmzK!K~2fA@|$5suUN_6GCPohs+(Dp7Lo9J#@G!35Ml+idcg@koz%U=Sn zl#&ij`Kk5l3s6G*D1liogZwJ~EMeH?bgzE} z>q)$UF8ByM>IDGaM|WjG)#+duhsDO1M?3`Q?bLt~U6~b{qf;#pz)jyP2TH~F0-<7a zeS)KI{Rn<@31)UqhsU?F^VL*gWY?DZ(;L>+x?g}@-B^Juv%1Ty-ee*#ulIjJ3;EQS z1DXufbgwR_PSW;qZiXJ*p*#s>!}Pl|N;=_%NfO3_D za}~a{LKNg9m~e`1Z1uMGHUg9+FrdGgY#b$njsH&})-`fnbdktGB$#!D;as9?#MJ_g zc5^s+$+9x#&}BV`6Vraq%FSj&Uukkb_fxC?;a~{EJci*fb6o^)(*Jf#@xM0r_Ez^l zmh!aG|I{@29xj42Wd60UgI~$lUoMYyPRuN;^ag~6rZ$9fq zW&0+9g!#%{uP49Pn9(0iWiD{5@X(a1wM_ju8)Z~=n>Gd9D(Vy^9$%riHjc;F?5|9L zl1jOoF<~uHw3qp0ERF z?)<}o=eCMFCDil?!!tMCQwp9=kN1W6VJc;hxzjyAI&12)C~a^(Nm+1+00 zf6I6p^uH8^!cE7}`ucespUrr2zh@q>Nca+50b47^ELeZ?Q z_0G$Cj+;&T_nw&W_5~-=aJ!pLr9Nqz4hJMvBxh+`(ic^H_i<9x2YwP3f}+5b>8R&p zm}OB&r9%lte{EeLF^9lVwwZoy6{vx@NLjL1oC?Y2aZh&{Lm5PvLNr9kiwun*8NwWQ z&r_KBbmqF{$m$^Ge(K*vaYQ0xp7n~#9$2FwM5em6jkM{uAA?0Y3zO znp){r=+tBZj$;@QlpPwbw1REOkGdewGJp_7Nm44;VHC6Q(wqr(R%TioIeCbm4IsG^ z&^!g-d~bl^O~delhtQCt1=efW*$~Dl%y3V^WYy*7Ger`FP8BL@gVf$>UaO+k$S1+@ zZ7Fhci)keZE|+s9&exL^a=z@zSKQy&#+FXHsvyGrOb>!C<3Rib9#7-;c83n#e1K zp@KdurNLAhSoV~1l0Z5;UxGFE^+UnhdFdjtOv4K4makwjW^ia+-r}BDT2nn%NWZov zK*&DeQVFS304K)55tJ3`C3d%j-P^#QRtvz(fkbbqzaqf7eQWH$NgI9V$2#J zidQ<3e)bXhQMHdI`5(h<90hQ$Gk_-fe|KlIB>!)%{J)m+G|2yA_#gEQz-(hm`QNPk z-O2wZdTr!?v&Iw2|BfLk%m0o-%RU=0QFsdR-^8Fw{J%1|XodLipyziZ{yXRKO8l>& z&r1CNmpwBOD}A1G0|8=TX9oga>HI*vf66liv23c&5j4yj&l2G31Ywq^LjE7a7-mRj z02Cp7-lBl5|7o>=Ci(wh)5`y`y}h$_u#*3m@i4b-;hxJ!IToY5h)nQ&8ugs;pEfnT z6Q%kj@s(BDq>Hbt+>|)pU9prxzA1-%{YZ4b*QD}Jd{u8O_wf(xZG||ms@Q4aEavtj zq?LD%;wq>7DyRHYc#NkR8b_hyT7vvwg`YGWu`@`aN4|&`TKu-Ww|lyQU&dGK@te-h zu`M^nZfA>T*x#k|2zNNr!mh&7pU9x$QNnKUQSG490qY5*vgQ?G(FfPY9pHJIIBtbB zHA~JK-Lyrgh5R;2f(w{MGMKFWmJ_ozC5xMjzh>}L4wFEPg5!e=G@o!Rvaa(AfALAb z7;p*w@b6hf(Pwo(pZyZua{zM(p{)cS z_{T6K5&-|D)6N9CI8CKN{+Cxh=86HQ*(fakG2*^H;D0QMpRM|$RxjTd4Q{xwQM zHkP~@ZH(91(ugp47{Uy4Z2b&UDaI!-><9oyNeFTbK}3L$8KeS4A7#co0R*8Qt7pWG z(MIbPSTAAy74)MFla6DsmUzu~QF@u28ndfn8o5?F(Ml)!-fq#-bzTZQR-gJR$I!ep zi%%2I=LE9V1xh$n7j?+#L<>RxrN{zlq$mN!FFyvW}hM(hfgg)hyEg9xa@ghOw#S3r;0oyp4emyDVI~d$!0pkwF z=mGFG&Gy*@_*DO=yKb663=`4=$9a~)gv67VqB5^0K%gX^2nZGcI*|pCm*8O-1w;CF zgfNLG0Q-F?AP~g%Z$C!KfK!0t$@|1NYjd}DxRDu$kX9zu9`GubOfesu*OW`?6b<$4 z*}R(NCfGXKm3fslCf_j^tF{;YE1q?(p7PUR{~4n=AHl1{Pw^0u84rM)&VM(z4(#*a zy}i}_ucbUp=jNk~#V9|*0kFG)r?m~aajLfzRo7`_H>$4PWJRi|Ijc>nYB;{zV_-MJ zi?TO-a5A|c;UJh}4kYT}?dmLeW%qb8y9YPmUJILO!MA{1xaz1_s!OY*F@)C_+h01+_YkJx~(EnOj$zAY~t*VscZ9c z3qrU;=d{LIz%{Sfo3oHk;Ub=iB0lFxHYOBmQNcBVKoRgZBiD$_ymWEs_4vrrWvSno z)(X%+I}TDseIT`a%+zzwY{;zPz~mKJXUV$scSVwkuOLc@qgiVJG;C1DjSdAT=*8%v z1J+|Ax-45^ushrrKeJe+u$~TJ; z=vs!vZO%DQmqeYQCS9(1Z(7TK4JT*KU0IaqCJOP>9acd6X|j#5*c7cSPi5z{FTmf2Q4GNY1osJg;8RdZf&C1PfH@2=K@7>CFx!hF z0^sK~j)I8969(}LDPcMA6OgGKDQxM5Q3eC%=tdBCgyNTk;m{vPD9`BB_SFiY@aUXC zIk9k1^5VLWaXx|=csYhrWb`_g_qo1z%3=0YC(U?HN@6t>fCSkX6hiAuN;{5+zJO_o z97oB3YnMVwRa&NkeiUOw;U|!5Xv_tWSu#g?OrkWFl_Q9mzu`*|QTi+65lSFHT!&TD zytv9{l0t~6DUWc?q}0%*Cn-SPl4_Eo&@oNT?=>=c<+^34*cBLeC)T9I<{YCV&t?}& zoH|wOX&}i`sVB@PEGY{G5CN^C1Wq{yjWR$a!{#(9Eg-+0*3zv%R%nivO^R z|F)c`$*0Ab1%`OTmJs)N)E1b!0Ck!Ww!VIY@rW^rI|yJzhU~nUyrloz-vuZG{TTUV zf48S7^1Ybdn9$>~Q7;>X5SsYN6&Mmca zEBDjy>nZX7IJ(=oCBdx`<$5mnpGN+_zkOiy|DEmC{ja4wx=_SCd(t#RX~vRi7uRN( zh+HH(1@%rZZ4#&!e1NH4z;lLfXYpKYCh=?voXx=N)8Jhb*nLU3n>nMVqIq>rswLrm z2FU};?k`Xr1(PW-Pk6nQ)vHHb6s3sY{~62RKl32{8_J?T=r$N%pztUs2nRmZ?)`fo z{C06PMK^}2Uyr;mphwAIW4v8Pdui+6$^QeGk*Lpnz&CCS{q~XUzq^}zcK*lB{jJsc z|56@q)-A@HO5cV#V>Y|5HiNWqk<+S!&WVw}UQ>}Kz=h>`F7#2>)S=wTO}d``LfGC@ffj#4rKA4?!_ylPK)2TDVP37#Jf z2Bt;R>b4w?S&D!XDxJEU2Q6?CmRRX1dmD;blNFa=VLuTl! zrJ*GB&}EaJlD04**@Rt!Fo|4YB44AWD2B}Oa9GS`3qM_r91@ZqZftnGa;Mgi-UfLa zWjY#^9-89+QM6ea84CrMHPC@QehT#Q9QYTS`QfAEEsYr;52wLay(r(DEtQ^0bE|8zJ$b2{|1$0=+xFo0tK?%PDy;KEe++?7Kn#6M05kLV!AFkCOZ`T)wx}w7 zpj+J5c5I3j8(|F%i$DOC6j-mU-SMiX-pV@juk*O&e=0_8+_KX#VF)5oJhLIF$^Nsq zTgv~qxxbSCm-1BWv+UltuGJc1?-0f#sXJ4__E=Yce=9!rWTA51W0Wx0Iq(1M^#0P@ z^(+~%cg%$OBP-RR5?)48!c$L%@UyG1N3tBUnT&fV8*GfCN)mI=+*qzl7TTCjVZuU>SxewKp%pR z-4`QUnx5sF1)#hCa#@?o!(W@6$o%hY(z6IXpYM z0$0aJZ%@GamDi>(6$iZLji|-o$BG7V1PDTLuN8Jb$DUco|9RHd`E39HtA+pHmhJzy zwZC()I{#hD!_7NV!|3Npz`181WncgknE5OaJDUnXT1>Pn!^DcJ#`s8st=i5D%yR;3 z+)r?G<^dwk9a)5;JPE-5jtEwCmG_xW*Y%{K*KPIXILh3^^Wa(JFV>y#lBsea>-moh zUawR<4$X{FYV3Lm&&BI1;XZavtmM78OLrr)J}*?c8S&4H8i-F}GS?t{3e8A$MbCP) zXEmX+DsoYGfFmRBSCGLprhj?=+XLRMH%q^TEfr#Y{j~0>ZE&ADi93+^ny6|0e(L{;l&u z{@wZ8n#VEkfb|&C{}TCIwBM<-=do$3yI?Zn^uW6uOJfT~jN;5}5PkyuI34;)K7v^k z@TnX480zjBr-V7CNSnu>x_|1i>)^C^%p^!yENJk2T-3rn(GP{Ti)7`gaLiIda04}G zm=s?rocNf>7r2`gW^5kDZpt~s{;pUaeBo=XRs1a_^f{;eQ}1M}XO^c{{zGIL^553x z?v^e8?XLVkmh-gXEOZ)}+IhnkJA^(9McJFCQjlYUMpIVmBSf^8N=&$+YZB3dg|nj& zm13VQ0A9#Q7rkja|F&sNcCfZFUTFTtBw=bB}{3K|8`gM|5Bc2{vY0Hq1IUxLpl?t*b3xIPtpOu$V~re;X$VY)ZShA7~4!e^)Y@x znHj=A=jN}1KOHjuWahrh6iA($zD7A^jNWsPa!-f@Kjqgp4p?39mXmpW?%fjpz9PQbzh5AMWk$Y;Q1(Sx;*BhtMbf zosSIzV1h7?r)%qP7{?CP~7+bPP(ZwM2+d969ej;EgrS5~gC_s{Syuk=+G=S zbQGa|*NQ0e$ReF`uP)CW!2|3lkqE^w>+#gKm*w5QEui*zSPlkfmF%KrQ74QvBF?ZG3Y+W z-ExEKs&&V_k3UBbv$zQ4!KQ*Imy0K6hNtGpLOaJAp0;xvFTmfS3IQ<631#8zYDhqG zKL+a*d`DgpXW?e44#OkDrxRNp&=NWFJx-9IvU7SNd(lspC#u~0yz)*~S%DDrexjaSrOj21YQt7l_!<^f=nqTvY|XzaNv6+Sjcmd>yNgYq(_5A=+dCvO$7q>C%z^1z@^oSqb~=P<>&Nh4zJ!$=EYBlo@)L=URC& ziwYF&uMRZrB4t$V5+=I#R}*EI)6x{M;igcFTx_fjPAkC?`Fq*K%9zmj)ad`5W4?nVi-Nh10UPxH&7IwyQvBb& zRs6T5Jk2Y8Bqji#4#ic~HU2^xTzlHjiq&0Q1%D=^1kp8J%ID0QjnGB`Q7mh#g)l`? zLRh6PZS8=m+i zg2gaXp83jA_;- z->v=9{r}BX{_o{HEhK$0{(L?xFvO{ORhomht^A_V-pEgKKmLXPYIAhVD~gDM{D*Ei zZc$gIH5Ro+lH}I)%`CqHh;Q9yde(eplnsKYUK>iGUEtjM26>urt;spssWclr^_*Wl z#na6HA3grdW-0&6_U7Ks){6fx<7wvq4%V{(FQ9@ym%aYIy_riF;fhCY*H*d@O@<(<51QM?X<}1ieKx?c*P~KH3y#D#4YVxT6p-bJbz3xG>$@; z(Z3lPy7Kf>;o{B>$+~AA#7lG5`^&fNQoKRY5MmM~jQd{r+{eW%a9?^QQdTnZc~VEV zyc6{{U)i2}tU^yOV$`)!s;F-lGhp05&I z%e}7-lq$n!2|<}ZfJZ@qawF$s`Bog;Ct13Jf1q5QXyX(HQGWtHKF54 zr5g{db83GDfj@$A;A7aK{am|mj8dfG?+o8Q2l55HN5))bG+r3)2E@f<@0i63MHzL9 zU5jO*J$nyP5~2qdWOL&==5A1~DOVmx7k$>(`P-B>TqH~NHoT5?TX4fGg-X-x_wO&? zazmcJR=<6FX7!Diu{-<#EB3W$9R~y`Ng%t)&aHy{T%kBP)L6S9=RKSp zg5&eEvyg=T3e6{>y>b<;aX4Fvp(`xNx!Le$#5C@Jf zF5aFVA2Ipn`10iS$=UVk(c7z)N$g+vnM(e{J2M>tG|7M4rSspd&HdH+?^2%msp|CjSjBme39@cgnK zhj*yoH+5~qJRLOW4*YM%IeNfmf&gTYP~L?So_36L7zaqJ9IspwZ#k=a@Z&?Vi3Dhr zW)R~DC5K?}N0f^9FbT3rO4#e8ldJ8$efB~6EzeLDfPbPpT!}yZsBNX&K)YongwiTM zO7&e1)5Z(%Di@E z9^JA%B~x~^z-PPvn%+Te_&-9JWPW-nCHn=R|7`7SZ`*Q?p&F?+B713JcX$Y%p@a(*?fp6uwCRDb z;8Tu>QVq&DuADmOecJJVVr&2>p9#zoKNhp6aX)C}|91Sx?Y-Tt)%pKY9+Us~Gc*Fw z9A3P%U7=^StnU&FO0zjN`?QI{FB^0IUCU6N8bx6RsuI)-u4zi@&9Zuvw64afB(DDe z0=p6%bdi03wG+(!OvC@Lh@XUhjFKr`z#91f?!mro|JmN(-CyzlWjwR+YpmwM!Y_la zMM*@$J4ZOWwG?4;nndL4KiM%^9AW2Yxmh(7J1QJ0DoRrRb3BB>JozmnTQpC*b7&U7ws?ot~e8(_g{a`87ECf2UX1S3qn1uU_rho)dW%z%#;6fVgP+ zuikX!ZwX3Kj0Tg|75n)ge@rmRSPY!$n~Mf8yB$Cjpb%zd5`X*ljL)?1%X(r=dvO?P ztOV7Gaz1Hu0l_3dp@{mytm*8R>wuu!8fJ{>j6Fs%3+>CQ8Lt)solS5ZHjj`r599|w zzJh}hOvqLAhX8KAtA`);E0+!{9 z?%~9<;8ZU$O^z&U1Vt_rOIl=96&d(+%7|-b>(>T6AEw0QwE1JD4RtffY2Vmfcm&DT$%#Npkpr z0*8K5A_i^zykF7k0y-ZhROb$$9aTE&gP4GIy(YIRj+q zCty?WddR%sYT8~v&qpYmduvwqUH4@HE3C6PVh7>%upuVlaqZ`6 z)LMjMGeJo&>q09r`gP$cV>Y^7VedGZzgm*dpNisixC1`acB6oC& ziqW(VXsQ9Sq0TZ`5`{W!?Vj2Ww%X{m8<8}NMt(MVpN3T8CYev*U{WzW;&WuOo;-!w zIKnWba!jKAoMlv;=#-kDdzhTf%ra&=POba%xP$nPo#s^xA^&KM-$O)#A>Ag}hQZQF z&p&j$9kbEJjv5C#(;g$yY1xZ~4_C=9K9h~ZCZ;_`QZDOtf$pBw&8Vs!*)kY2nXTfolOy_^ItzD*BAhPDC8A0{lputbSi2gk z7?1Q1v)m56bZ|?xV&$dUR@AcH87g^C#bj`G`lAJOVeH0&+Zd;(t+SnzZ8!PZIoa}* zGeLuAO^Vs3xKrqqx6VqFg04dMJvbIjyUw@XwM%lpJVPnq+X9`Q8SKNX%QUXLvZPcu zL#>vLwpwkD<*1M!O_($32oiy6RI7GCop2c(z|Z1N!Qm_5{m;j(?q6;`Zg&52^WtOp zFuGY|Q-YuA9iudYA@{h-Q%o}Gj|x|wG9@o5@OM55hGs)8E;!6fSPLAZFgvgU3=u)& zg1+bIe{*YVdu9J$#?x&7m*cPJe~}DtF;1Bk zUNpcHO}6l!QDvJF>WKt2B1wfS(30BNq?j>=y>_^(4UgKwug_nfAAwR?{x9Z%3dbL0kZ5UO?M&X42^>q& z)%85ucEol)RG4S_xmv;1&Gg?!Ap2$*zn}cWQJ*sC=DI4Xx&wj?)LsduWXYUr5Gpof zS5oz7#tFeXI}C9Vt7Ck#hr_YSHkysyxhKvq?Gkodl67*5gbeTExP{$4Ru^C+%(MW4 zz()q`#ubjw3L#f9;T-2F4r=`lCmq*&IpEG+V>(j(4ks=$Sq&|OO4V`-J5DMsii$}- zMVC<$Pt>MZ)%}-X*%K3rCDNEvfQZy&nk0SQGgxR7Xe*87Um-J3?}9k#bukG9ZJDcVq3>co8?gU zIkwp#V|*WNTHfd^kRQ(~GCKpetM+j9>Z#O)vd7cng)2epozLO9oQntrwC3@+k_$ z90gr)hU9V2gO9-=8pEW_o(pLZ%Hv(d(kv&2*OuMG*xeEvQ-D?a~U$*Me0*z zdX5cAryQNHG8CUoYQz53F=7{W)@MLON{?kEthNf@k4pDH!9=772nStu0MQfmJjW_g zkIN-QOiK;9-cK$*wc7v7>uf4ruu=cpxBY*2Hdp??%Xy~Q|6Sa6Q5HZq$6dM!u-J|) z8=$-dv;Zq$QykW*?`2h40!uVqnF3dj{j}o$Gv3cIQ0VIH7n<-=0VI{eLUdd9S?Z?Af(>SypV%Un02B#%N|^h@N*%P>Ezg94xpF38se;f>9n8z^We1DFMz)kYs-tL~g{`Xh*|K&W*>t7DLH6QTe z4gk!6pR64rYgG6N*{C#M9+Z}Oe)UXmgWWZ258$nT2V-o3h}p~bK#r0G5ynYvNPh9f zy4?8AzlXpF0ZJ#7r;s588er4RoWO^3V?ZdMdktZFOlz-|Mn^Pp6ow40BCj|FaHW|k zx@R`#vC6{Gq7S9%U|Mg{vBtOYR;GbM2TXI>QZ*${Zd%^Dw3_^31=lI~|IAWg1OMOI z+_%qvw|90|^50UP7W}_vF;06C&=HNv5roOoJFgTwDr=xx7^Z~9U5YdpNPC;O0WcxO zS!0bxte*`@ex|_9iKhg!09;*{2^GF_vpJ``_a*GZ3?_j){;Mpai_i&=q>EwP_iAFD zR^F{E=;lJhZn(u|yE^iIbhXinz%yLa(~xf8;ko0@>H`~%Mlg(KiG^JtsbI`YdIe}2 zdQTNf+lBN(>4|fk!X%u7ngYVSv=m^LKuL-4qVJQgo*(OR%YQ7D@C*P=Y35~hE!tIq9ZIp1OtUQ)VSR5nDsuL50RnMo>g7trWbM84tHerL zt;J!F+Ra9O>Xq89^+a$Xz?)TD5gp+OC4M&1ccXE|Zp2z#`5QdxQ^o&@A0;r`xb?FE zp6l?xP5y5?|I^mN*4EyN|1aYa`M*h?B^c1b=4mqLWBz>d^e8xoL9J#B`1b9YD970| z{XzLMfuD(D(?dTaJ$s4lvGkvuclsF2Yr~F}y zf}$UO#sXKGjj*@X?bu3(>&;3ndDN$g|I_b&5tOF-bH)Fc@fiGH4E6%I z00Hr**acKy7Q7KSShbM?MGT6;R~_HoY_^7#yMX9iS1|SlRI2xp73cl|o+kbelkvRb ze-r=TKiISUKeqM{_E+-%QXYf<*uHGBfd-`U<{+ew1O-;ix!rft9R`d{P@$MwpCmxbo|R z4EE{b9{S_f$F{6x{f&ViMj1JZ)1lw#w8`?r{KblCtbcQ=^bI606C~;bd0aW>z|<6w zKM(E6itheNo8&o_c&YM~){M=j*V~lCp;?`&c<>xEXg7AM>`F4a@F`^qix+77;jNq*>#%Cs{PQ%KQE3Gw|ek z`3hq6pk1!CK!jquar_Yd}M`|tkN z>i+Lio|67gM|)vL01E79F$D0wEZ7)Osh{bZg03cLd$qvHVMAcAEmy`Op1EAo3V6r* zpd-=X(O9LeQ8=2PqOGhs)HAmuVksnf33)f#i^N(BSZ?TRZQW8-fk zs~z&nv82VEiXt61mo7Jx>cpt1X>-m-O9G5G*`=bx&IM|;qes<^nlz(cbxkQi!Txk= zQK1wuCSfZ^Q>aB6F|AN@MhR}OD;d+Q#&|yrj^b2=M0;)(s&I7EN4Y|!5_rARyv1Dj z>2cr~k_Dfe1w#?|YZ~;fv_KXXZcQ48z-4BYL#h*6+_-}G5Cq`o2op~s+t{nJ>QrN8 zc58G`VQMz7Q9s8OJuYm~t<6e0Gg_=ZRW%fvBEil@*`$_Mx|>t>&ZizbrDAjsVLgUB`e$ zsnT(vu?G}9Uk#PP@fUY6IPcET#Q*!zXBeK$=LAyE|F<^xwoCl~V0)GSVJVNn|9_=} zy*MurId^`F9iZsULbrg87vN}&q7Woe3{n&&1ZLRCaW9-B$~Rbnr*Ntak?bsOM=-Zz zpeN%fjQnFi#oR<#s34Nq*fDD%O1lZ&muAr0D6HR2RY?}v*hPD;sdWS zs!)vLLe66!uK&vx1{DFX|4WNts*Do-}S%+>q|f4zE>p**Fs zbLwNd57C*&wxAS+I*VVscvGfe8Blrd@W4(-X-bh0@5HRU_kef(Uz7uQbVBJIpj~A) z%%VQ~dqxnqS0~qHFy>ZcyCxJi%vNhOgIq(vy`hiaT)dx2$rz;h^(3W?l;cF3+8Cs{ z*Xh`%S{-x4tHHe+v3YAxe1&tT=36h0MiH@s5SA=^4YkXDd<-G(yiw{bSRWAK9>)^O zZ+z^Cz%m6T_cz4eLGUs)cg_2B%3fMW~-$sHsaTpryou(>3)3l z%jw(G>(i4fzEn{rlgr!rq09||Zfz38o7q6TxjcV=aXUX4 zCj`e9PA3^cGIJt{hAwH-Q4H|}6F4f*wKJ5^A~O)+YXA1~ z10@IAeM%!>p~h-f!17%M_O{CERv}hYnBADwud`UY+xPM`+5e)EKY&*-h5TuS=*W&ebHQy$q%ZM+9Y#WEibIstSBGcsDa*MEt>GP$B+cRvgkijxSIg1(Pas zvl?ozDC+_5w10-kMFufUNNw^>S|NhEmD8;19mNm+1XDc%j3CS0YS`=Igbp|wExFZ9|n_Pj_mI(;y)i8*!%z1>ilmx zkFo!&!CuU!ufY8j8@|??MQ`>)gzj~wmuB#aP}Rdr5hho}&xpb5Se8<~0{jdE4|qdD zQt=P=O6gj4k)Rl9hrNuV^OFA~_GlK^sbnBC*)1(Dx-#1(Uxm{R_(;LD;H^4G6)m%W zTioN7yIaxAo{?aBI;R>Pcb0A1zT;kvfk{Cf6+X=K6O*UEo{E^FWg8_IUD*l}!(ZG? zE=>5PZi(4y_o`Jyxqu%za|kW12--X@yt<3k+!5DK!B>z(NeB}Hw(V{Tf91-N63fuJ z{$}eTh4BWuoaY{`llD!83hVO^ZSGh-*3%^ar6?ow1^{h}|FgZnWBY&Y?5yO!r96iG z#|C?W(cc)npF;Q(Jz22eCo^8bY#asf%pbv*>Q^Com3<~y0aFK0QOGSk&~edU9&5;& z5e6blYp>U{e0uv920c;IlwLSIGK3j}<^!eVYQcEi@Q9xcATi8Q+Ag{A0vshF^N?T% zdZJ6E5I;h;s0FPHyp%pF%YV0YmBgT5#fhy$goAcC1xc9%6%>iEy6Zy)F446#i$==4 zYW2)Q{6Z969NN`a#|s>E(59pyrfn+7`I7&sO;~eOI9DkhkE_Myp0_2EHcVa>t?Vqi&Yn^=dv}Qt6MSBcvQ^f8roJw-*8Nj%DLTgejA;3&ho06?wsa} z?UQv^&RJBO92Fxd_7gf-?g?1N)v6voD(WoK}D}UWV$r+h8{2B9~R< z6>rfhE7)aF)Y{ktOP+^CihgcQEUT_=rPD%WEWHDBeNY636f;#)!5L zIab*2s_dW7j$0UQ8Jx58YvA|$RLs`M{}T9E6%k!#Bf-#-KrwInlyL9(A&gVZg>ywd zo*iBvSgLj88Qoe?zb{1gr&gJMs;5!^=bQ3}dD1{N`F~Jl-_HNMzsmo#lt<=&lKyMI z_&5p{mj+6z&-N^u<@N;I0;W>h%dNK7&>OUTCW<>xv+mb#n6!<~LU z5$cJp`Y_;c5I|$YZUGbXa+uJ>60U_6!m8!#OjWrQ20hJBv1=rkKJA;5uGE@JrUBid z&sMDLK562)ZZ{|?Mh+c8cg~g0CPf`j)bKiBeXTUyrQj2MszNt1{GifKcV}uY>x_Pbc>6TAG*WRbxR?0G$dTaZ5^st!*JgH%U) z`+u7Ee{=`uJOF6A|GmAnYuo>KSN@;Nc?|pi1sm)|ZTS?|&td!*U0Jl-2ZKv>e%&+@ zM`M^kj6LAdEh-X!(^*RL)N})30In@x5W}h>O)Y~g4Lou3-f=nk8Fn}}3+lPH%L#&4 ztV=>^21wTl&@}}O<``k+Ig^OF(w((&i4d&J70TCuSYwPZ?cWmnm*Ve|*i{g+`eL<$ zqLX8W?r{vJa`MpID}FS@FIHE{S=e;+c&m( zSnfZr&N+Q$mg_9T=~MX02nIieClEWUQC%vVd8h3G3DPSR+&^U>_!cowCpd(s!hgwL zWpm)~;00|3s_SS3QSNlAs6|sPRL|h_6}UERgO<8w3y?q}xj;d(rr$rPJX!Q;QDUVn zRkAY0FJ1B^a)b`~ozd42rpG9qxZ|rVU0zx^9D$gxCTo;e=sDy+(Q35TzWmk00r(Za7NNiuMGxYT2J@6}tyk75g)-Voq?Y zg87jaH>ST;+V}>3@VnDL!_#E{E5f8a*8Q)oty28Q?ai%&RsN5qJcjsoDF=HolAD@4 zKZVq$^=8qAKn1!ak5vYDs*$wJGD@^4Uc05J;(Hx1*RDNPh_12Y47i}|nilAZHIczj zIm84XJ_8^~^Ft9{T|$$edqJ9W*Q5~~p=?rFj(-OF0oGb66x6qG&-h=5&rDm8T~aj5 zW!eiL<0u(`&6nI0hWq!hX%~@~U<7^Ud6XxtZgGw#yVY|i&aQ1=b!R>lG@{jFVF%P& zN27>12lGLh z1IRe6JMoK{Z2z;q`QQKD`?%Hp%gtBz|Bsv9zudg&tkbvj&#$Aub=JyBT;wbT-v4OT z)<2$HT)%nu`%Uz>uaLd^-<`j$na3|M%TV?X52{hq&|ANV{U`ya34sHqUBE#PY;|6O z^@x-O>pX2H3^}Vf*|^xa-gvX|ZsT{^)*A}h zDiv*9L>t%9#+zv4U9|Cgq{>FLu!(Y%fV&A@LZZy(_AV`S@;OBbOk@wXc6Q-@$2??G z)5t!nve-oVj3w|19H30krz=^xr{#wJJ7n$^evA?D!;mVAln;4;`+M}k0|XC#LbxQr zogSFOq3z&OoI7dTp+sT^rCB>2E7lqh3sHvZJn0aGAnG*3AZ6EfnNc06>BX9Tm3Q9m zSUoB?FonOb%TQvEyc*w*Tf{lmXN^sV(pjG_0;rmnfwt`^ScrU(nFvfQjw=aO#^{4g zN}y*!=W&zy?j>z!u4L$CThS%urSDipi4$e60+DrsuGp;stNo5U^-vqri9Jv3bZ~TM z>!UbE5471n%0@oH?m#NcsKoDE^XzDn{|f9aoGbk9t6Z(hZ>EznYBt;yg^nP#3%2`; z0Jf}z{M)ekTD;c^X$m}l6l%W)Y2J$x0%P_r`pedy9c^b#Z$(Xg-i&NTmZ=M9Ge~oX z|KlTu&gGYFh?{{92v~Po!AnB!8tJI;uVofMd-a&1U(4>DwUT-ZchC~USQ|U9&(RXJ zYLt|+r8thZYH6;Td-PDxV=cn-8Y#zgZXP-J*v-j9^fmAmDDFEQd#NMOl9^27TAn+m zv#~_$;yD+r$FWGO272z1dTM*#v`>@$*ACD>ixs%R{(G>$YsdfE+TGe&*?*Vu81~;n zg1ZvK4rJntg;++c$@Ej0g-d-}sBzf5VxkgAc!L<-`LPEO&%tAuOTMFYCv?oTpw--f zR~6A(7JiRm<}OLUsA4SWy1N|Dmq80UgKC#6xnpmC`}WMIipfP5jiVS2;0X@=m>J1R zAgT(o15x=pELAH$v9nni1Zb3AWT+p-%$JS|Or=U@G47hE3+6m9Ms0ELEeia2h%oVZ z)mZ+PjW;x!@_&JSlpXk~e;36Oi6FC{e^D_&f?`e;MS6Z1au|LX9@^4tVGDzw-f<;RdX~csN0`7w1qIUHR0jsq3Yj`NEF88Q^Q`lt)k)TyJq~SDT|h)?Wvio_ zJEc99UFL6*c3lJFbxO(t%itmjz?DARGAVsYZNvqu4BPuvQ^rPq#>x0`%N1I3NvuD%|>QGZg&}`5oYy0nfZmjS|5V? zUP=tk$1uyHP&jC6rXok{rSP&=6DBv(P<4AEXa#yTG%D_OV|IxA0Kq643<)imryMC3 z#X?xd{XT&i7}3TYcc`tS1}ScO;%_EW+UE^p)4Z?Y?L1|0J8X`*v3l|Tn)WysZkr#Y zgxr`un`{TB>`u3}^Zr?wPUp|Lu+&N><%^K>8qqyno$yMVYdK?88z_zG-73WS;%ssV z6QF&dB3PEgm!MK*U~H8gQd&3gD-f;%)CPHr-L@c4(G{<3JDUf?8HcvH8ehkot;_SZ zt}3)Wp416b(_^bEo?H1`1go(w;*IT7u>~*^3felTdn``EHtb4;wCxUE>Wm4dbTzcv z5G*uc{YdRHPe?R^;+}+OXxZNTBtQv=TAQ|_L33B_PM^V|UDw;+6%=SRU|gSJWJ+6w zW16=xQaGmkOeB&3tyuz4B4)h8^v0WOZtIqWnP;{RWQuuB;3z#e^jV>nsHl@(b!1f) znx!I!sd;@JW#p1^(w25go}aBO!HP(U3|4DHrP;mbXic_Z{vD zWobx-Q2pR1ggG1DMM(&J9>VS4U$I)uS?TQL`u3O8v)8v*Czl^ik58;U-w(rMk*vGU z9#$u7dU_M5AC6Bv3D({YWNT(BLGjYFF|C^9HCwDXwLL!!6)x4HJ_GpUc6UGqe^Vw-d8SeVXmP z6}rXF->!E}F$ktu6Ls4~4Z_nb3pOL{gdg=)u1>C5Zq+I4yqUJnujhY1JGq>$&g-M& z+w%`6mzSrnD^~czmw1Il&8m7~hDw@uMBvCJ4V!H@i^e!+racC4;cH5hlWBk44sB{> zFcjK3gR|@{5)v`m`Q1ml`zn1ct`Cp5{Ud+*<2JojiEHwJF=;J}1`i0gtf*AV)c;SyFjeLVokk?kIi}IqX$>qzhS1bV3hJb9yFn9kM)tH~wA@yK z0^IU*{lr zPZA%}^#s~>b{-4wiueTf^Y{u9%dv-H{2C=hT_R+wUCo;f46^`|jd8#(%hCyl*@Sb1 zXE#xG=BM%s02JRs)N=Q$VuCwdlhi`_0o|`^T&;MQx@EVhf-jgxyW+jO`U0G#1h>!$ zt~FbL*?2*vU^*Y{tEiS}svvo6@@cAs`qWcjDwGQ+IGo=(fr3!{1~S_MiPB9vpW*lb+Y z^FbeF4}KN`9Q$|(K5jIkx|S9cwfD9&lu+gFH-yPGQo5H1ykDX)${-8k>Br@uaK64y z%Hy_fDuFcvY~$A8l~qr#0@m~g?!+-3oF+j(Dfdpfg_IgD zcfd-Urm7?=cbb}yR*7Qav0}0ftCV~Vj2?5dN{OMcGUA7wHOQSGMc}m}l)NsWFL%Gjeg<~d76+%F8M2A`r3Z)i>wbaL_Pc3qVeapd1afMJ3mOHxP`14jZN$BM83 zGG(P+pD`wv=xXVL_Qnfv1qldpOwb6h6@wDyr;);J6k*J~(;exYY}L!Huvmb+jtgm8 z=t66)WLR#lQyE&JqT{U>o!pi;*h{?ed|c*eQ=G$AX2Yc~Ok(NtLI!D{iqe+gwjw+@ z5oB~FTXs;pVHu*V))|7CjT%ABCJdS|iulnV>9%}RB@i~^QY+x{iCdXU{)-iHy2_`~ z#j-7`eg*e%QgX^#lcQG1K-^!Y5ndH8RYzFn2%60{ono~cv7R3En-5ya6QYuUh4Ytz zSc?O#!fDH(KGs&~@0=L(c71_68p{V2o4VZn377AtlN_f0qTxdOS?TU499B6Y(sw2iEO{ZVEm3PZb)LBV6hq04~-eW~|hwg~{saVx7#jRIH zO8v~tRMphr8t3JvE~QaO!1NQqnH1Ak4T$WG3z#EHK-=@bhVx&R#h@EUeHcuF7yS14cDTcna3rrW)l}dRZ1(+L_(}Z^HhI#yJgJJTXZ{MEL zQY=I}uUbS&X){YirI~VqmoixGu6&ZFd1mGRgDhPf|KHmw@&B!Z75`txWAJ}EsE@+` z>(U$kM4Nz~Lh}2yFlcJezaYqTXSV5)t$2n zbSqMPyNyULhpW_Zv1&OiVldjdSIsb7s0MLD*3KuB)Fj$JlT4oOs2T0Kzd=4we@dfkApth({|C1HcXxk#CI2nuG4KD%L0uUEW|slAZvI@B01_-r3VbX> zfTI1%8qo4_^8XN~bU7qJ1o6gg5J$oN5ak%2CjaCP6VqJ;ZQ%dA`}?;3zrDM^;{Qu| zM0l-howI`hOkl=h%llOL4Vj-M#t$gt=k+kbc?L0v2oSDJ82CYkFa~+b(yVU4Fyc|q z6gO^Qruv-g6;rM!Z!s$QGwK6*6HzN>I`!GU;$uIH=y%gQocUZN!kt|*#pk$NfDJMj zVh{8#VGMl?d$yl@c$a2y9HE?F*F@+(Pk}ey;sMMV-bP)V`T^7%cEUn&I1Myrj%9;j6SEr zyWgmit52wL_xaeKLt4w`JqwhPGJwNBZ*A{*3bSIV>4 zS?BQi`2Rj1Grv{G3M>A6k734UuOxEON^LzV1KjyWOy;$JhIfIE4E=o=40#{82d&-% zNq=$u5u*`Q9&HHdtAawdHy3geGni~_=0T5=o?TgxLohEe+26SVvdO*9r~j-}L!&f? zEQ<+S5i^3J6PAKt6WM?v6sHW*EtPpzGJXoykI`rZ6T;IKr?Ed_`z(qf6|)1BWmHGu znNUfT3_5&|LJ4{1v4qd&8D9d&THe>#{bzY!C@~)U+XUDj&Y8P)?f!jUM>Q z?w0+-AH^D65$TOBBybLPUAf?pW~W_3Uf+w2=S9yTAL zW5nok%2)P!+Ke}nJ|n6Og?9@YHvw%ma(v_jIUa57P%=P^8#@kdHFjd`I5{3`>?*Al zvksrGL;mC=*m?{#x%ZKV5u-R;&;U|UKmE|P95_mgg$~(T25}yf>NJaLT_)+krn}>k zunu$Dtl|7t5vw}ql26jXTr+0vN0>70S9_8U7BgwuDWXo1wOdlodDdQ@$mv-$@&{1f z>pKLj(s3NYgq+eZ&#dU#iod4QC~b(Tw$h zH+0FqhA@0dc^qwzGSY%!`bo$g3+bnkA0>qk#5(S%i2&Ha%XCfCt%R4L?e=;-a1}$y zOon}wfvrutu(TEc!1O!V+7vJPk(?0;Z~El?*O|DrQdFno*P_~rV>6DOL5%V&;Ds~z zDTkPdib0wmg00OF`@tvhA=uk|7d-JAxSA z<~>0ob$Nb%y|k^N7CUKb$PgmM9`Weg0pr#JkI@8wiv4gDC7_!#KdkQ1Tl=C9;5QF+ zQ|+BWzi%GntcuzG+rKRWBqlz|@m~eZ5DAvDy(mT^ttL}45?*b^NS4S*&d=VQFN=}z z;cdZ41X8b$u8)2>x;i-o-j^>W1E2U;9hraowggE}U)sN&zdL!g!Q(Qh^rult+*}+OoAh zF50i$hXGtI*rhDkileg4_#}o-6~^~ zO3r!E?UF2l_|+EZc5xboFazG&7mFI-yuTKD5pU&~cHlSK0nh~rQreOxWp7jZp(Mnb zkS!LLxvm@#{UCrT>qLN(ghyD$-b|~Hn>ttP?)zMKSLbgpm$FOJY0$hyGIWm5FHf$_ z&5@bj>Hm&V1~JhFyq6?+4br1(e>&1Sw&@@so^N6nl*_68FyL1I(q%? z^z8Qi)yd`A(YuohAj$`>RB>6lK{Y9vDP1W9i)UcM?omy6ZtR#qY+Eom>kINM2Hh^Z zjL_}om~%S^?Z0`4<_As4mmj!7aQNrH{CQ`Cc6>vAVDsmjx50D?<_@W`Pua^W6lb8` zOyOdnCJWV>XfclEzJ8x5_oLawDRvSu9YaqMCW8#F%-_pk?Ne$Cmag#Si*@alosu2C zGEdFau?jzVO45NkI1`^5naP(gyrK*%Uvs03-RYv};9ftEV-c)fL!tm=xL>nVBIZl1 zz8iOCIgYO(;WwZz{|-`wVwk-I1Y(A@dIkKkAH{r>Cr-VI1G^R#L#e-^gnLJtXnyi*YK9(MohJG=cQ9Te-Xez~0(=ezf1THC+#OJ63kt#5p3*O7mmi(&Glqxz1P z-K`eDjAN5WzGt?W4wT`w=|lUQYr|GI*Nk)2`fF=DJDdBSf~=L7cW?Ca_)}bU3r#L| z@o$U!XI2f@&9gj<6NGVGi^JbAjz=hjufhmZM)JrwId8+^PcaXvVwp>bYT3^MQ@fBjY<;KB z1*5o)I3JwZt_@Z}n(fY@1x>%~rB}u!Sq3@U=ZND9P5> zjivnk+-S7-(DHRg=dQ?$sRd@x;TTIfZM?)7+i>8J;%!KX*lVH2r^XZ+EYx|L-B%;?Bz57I2Bz1xmHcAaE~+fdL6P3)MZ*Q0k%=&TcKbX7PuvWx$b)$MYA}Gu~nSJ z*e>3n2MfFwrU&cr6dh;QgPqXk)Pqf!v+2PO7&Ga?4mdOF!4;5Z)PqfEGX=e|VDQ;3 zAhcJ1OF&4B1rR#>X94n^#@?~Hy+c!V@$XtqRYla{G*>T`g38IL-cyoRDxWpFYNMVz zui7a_Z~sRaoxGOBEr2{d5wg#m2r>yL#nWq7z5`mnv8WIem8=Qt% zz3#%tby1p&22J#RR;|T=G*jTuGK5)TewLxkrdzn-%%)kmdqx*Ig{3CT^sw?QcB&^& zD$|=RtRj?VIgDmmem5w^zbRVHc+#{m;hYb{{Gz$JfiFie*EaBsXMak*~Fit03QddZ~k|A|SGl}XY0JBKy1`t8&>1Asj z%6BOa8_P%}U6iBMB={~|Y-QA%UureBo#hCv1t)(hnbj%(!6Zykl#q>EKMXU7F~oC( ze{anHx4U;xivPa3y^{Zy@h~QGBE}nZfg136a{tNs(^JqKDgR^=x2nv4oXagD)1N4b zVK$Be$R*MGYtF6?Sl%-;C-bw6m0Ef{_?giCIzGKHmSLn!@$LX^CX@Cy3xlFoL+zk1DvOHV}l_G@+^Z1i6?ZEVRI#p?o0!!nS8La zKYA}jl13kVPDhl&=bEo(hy0Jkd8P$M*d=zVm~7 z5#@pkwv3vx8^!J*N>G+9D**}lCEs+^Z@PEzK?sXILQ{?zCK}?z&jygtxv8CX>IL-7 zvK$hf)=Y^3T4k%PsPEVXDJV0xd4bj|uwG6>+p*~B2!Ags(+A;v#KqJ4Ez)!vR|F5R~pUGw$xANz#f^)Qgom_*1BZn#F@h%K8`63)}Gjd6mFM{qMle|Gv4k zx3d2&<#F==g(-oYYyQZZpwWYsI=E5?SL)zO9sIGkeB*KN|5D&d2+aCEl>x?n9EB`g z>ca2;?{4qd@&C5z=hgndghy~jKHfkLIQXE(doDS^o=Cl79w~vKcK5H_)d>Ou90X+O z6PdLNv&~+%P1&sI6whXnXS98k^jgUQwLO?Y%VXhJwOyKTM>0k-ST}VsDt&l0SrBYZtEy3SLH-Fy*So*LgMH+FL#M@LNQoRUV6$SMNEf8@m)rY8K<&>35MaL(llN}4j^Ec3gH7_Ls+9WHfQmmcfJ z*uq<+3NA^#f*8G!1+(TGWm$Tjvez208xSR~5wDiNo#+jG0w4Uz{HO^))1$SLvA^rb zDgU#y4HtPFb1(FbTOJjj@A(VA|GmApTe|Amub4hf zLO(YTdX_O|1{2^jz;py&MYjRkxV2FN>iW}K1!yoF7WbY95hmH>O1Unpgz3sHKPN-F z=iTk^!X!W;mt{prKv+m7Gu#LD2yh!d_ZjE?{NKxN4hZ`SIY$k78Mw{m`LP zdU~9!H8QC}{ddUv?j)k>-kQUzgSt9kmMO(L>6s*4E_U4uIOH> zUjad^%wzlPFY;-(|IcInYxe)x-!H}g++FSe%XyZv|IcCcdj>%4-@zF3ot*z&xt9ar zCkY~4QRFqW7d6!$Pga=ITxe_DrLB=`Lz31Diuy_?xfwuX3YNL|7O2=jBSRX(K?P&w{ z5#JOf(8hvUxlC}&SBu^JKN(~YaM|FLDP%i6?W(@` z#BamO42A2}nB*jidqrun+Z7^mgYQcZcmj9&Pf;!K;}~Wh@J{)Fc;NqM@6DUr#<9iG z-{1KZC|;+ol^e^J*E_D~n&)gnra9KI67Wd1I#t|$27Z|pV2pE8fN+AsTUw7<;mkvND$Q~{h55Z>@IgOQEHmnB znV$%H#9+m=K zU!buU+h4fsRSem$Qms~at39X=%3_7dJ_8;}YN*?}_>Qfz9eT=9PSKC$l(T-So_hXo zUhpm|0yOad!<}8n|C<(H^Zyk*n%aX18_AeUs*={Gd1=7MgC~|`yOs1{E~5UeC?&*# z2{PuPle!>~L~dtLA)QzXNM>GE^^MF!$vOiks*CkSiyBdF@==N!+t0v15SYL@0_Cxh zo3^A$d=Ex|o^CMVsjO|btROo9n>F2iqm2;ojTr;JqU_l`f0W}magRV&Te3^51&!y_ za&e=!bI)u_j1^}szQ*(u76(yV!1SO+S1$U3NfA`Q>@rSi9ot6Y<3(+8uUX)eW7Mk% z{wycc75?UQvLKO}jYTXKv?0Ao&%TnH1N(JLx`Oa4Lc5TFJWXEE=gjyrj z+}CA9-$!S%%rE= zUvcjD-1?ThwbKo7Tl+5nYdlY^#LvJV=Whqu7|s7Cy*)3mhl0p zR7Z<~j<;%+mLf)pjgifpLT_kfj(V{{GocfGfgz7sfN1yn@FOOO%03%LDX*fRgN=E^ zIJfMx8j&EVdJ)3Y4bsyKW)u@ zxp$|Dy?qu#Lf$&pd^k*e7I{u3ORO~{N7_bEgj=LYvy95xZI5<#FAPm|9^*G1EaEdUae=m+ut=vcBd%*3Yope<#Dh29 zv9_jYyR9e}@2=URWMXe&7ef+_lcARAv@`lx7}muYa^Cy1h1@bS0{V4fwI z!D8ZfziP7vS?#7pShbl&=ZoTl_uYCg%ih{?=(sG>g#`CEU32GD9IA8~%spRF$D0 z6jWwki!gU>+SF(}x^~(?DEL}PDy*!cg&g5k$lk~p0xx4onsDnup$~m_gDwIk?ls~@ zsTyr!;88Aj$2Y^ZPTM?0&F!sTX|3NkoR0x4K#U+M*nD!I0Gt5J@JI{bG8_)=8wnAz zV`x{ZK-aM1qM;)Vv%6!>HaaSrkf`7+{X#;U?c_4qPM8yfu5gYVv0qv#EJ>#Q;EI?t zuZ0;!VGDb$j}xlr)@-7%B)xhz!KFPvY7~$4lgfIep`^&~nft5{d(||~l=rI0TWevj zC8B-ME+O_+E%5fD-vhwiMhL6}yj~FO0pRu`Vat2RjS%ICpo3UZ6pfEJ;W z1T4@wAv1Q96~;4Cp!}@-WSPuwq**~OxxXT7bIZNIPcu%LbQoNuvdhPUmG*?)lHHsz z>lKloNWEoUbVLargPQ_usy3L$X#hrDDHAi$(PSP$o(L-Hq#q3z1LK1Lros$Fqw_q(Pd-C&(}(64&h*wWLK>ABokcst$oj?oN0vf~q;n@HEfP9S+% z-UFAPy%F>TKx}PFOA`5Rt9O$iVBRrXdT`ONUA}`6NrO=k7wY8ju*ZtzYpo55&X`Ih zpRlY^j`(<*M0!^h7T+>T%LEeUsw!&)qI@s_n;X`uu}Q=BGw_P;P%M+%F(bJg!RTJI zkdQ4q7TEM`r!A>wiSM104x-G=*EiB}3V^EHKZVKYvd&_b> zhXvZYMfY2|D7KZQF%GF1aT?#jdlLA>PKR(Wx{x%~wq8;FEg8n(+GDu#s1J<*W)*$A zjV~0NzqZA$S7;qzZ6ATZ9zyS}+nV>U{^`K~C+QSr@CJ1@1#7VX8XY-Zll zc{-DAxeEGc{<7s-GOh}3xrY|{N&V#)0Ln`lcHC6ef;$}DAou#m&r6;ugwVa+{K(>3vtPNjig|=8UPQMvDA7?bIu#)rbktd%1@;~8S0j~2O+D+z^{aHV zXsqXE$l&CH)H|+BQ2|-VJ?6WT!4NHwsK%p{9XK;Z@n{5Fq_Z@9N`_<}vcQXcoD8`X z>V|Jmg&NlEwe@5Tgw`CmmM$`&|3$T z+{>03>G!wH%_3CIn>?LmtwfL7&RH`uMrB3M6=AVUqKoj&#My@3Vd3orU~_1AEY+`R zX=JU3CWToxyq#U6JV6B_L!55ogcL9d(aBTtJWHctjK?Uv4`T#y0yZ<0Phog0 zQyi$7h%AjN%(F|_v`8(qceeCt$4|+i0UUYB7l2{K<=zqq&(dg%s6Y!PxHe(eCBNlo zx#aP3)fc+en?njYzD>TeZ11yN24-aqHzi|wV%_~%;zl?lMLKoBbL{$C)GIrgTkqQr zS*^5+p)=lbE93Fb^-M?Zo^w&r^iJBvc!zpx4@wMn$nI<(aKOV`bPvRsMQ6Q@yY}L( zR~@MLJk(hQ+Wp}Cq&4C5Y9YB1*RZ?wmKP$u-_}-L)x^`UMs3=vzHxGAD}Tkl#%?s) z*8Qpiq+T$h?dY1hudMtac)6W-Fbb~%te)8lDu)X+t)c7&xzi6xv>qc#Hf3pJO?iuC zUX50$s4^O?pZE&pdI$Y)kwY}bw|(b-8}08o@jrLh`M+26bY@v%74)zE6%E%iF<%=2>s$A@j>eT4-#3@)$a+kl5mfbCS89l~dQ1k{zQH<_j&b=TU zgUt;VU+gT+Nn=SqqF1z4+Y(O=TjAXb*K`x7*DwZwTvCpH+5y%L`NZ2$XmM&-E$ZMl zHl`J>Y0`_U#~XJI1OR!SoLkRMU)TqjdlHS3nj7y zo7L7~m&Pub^Mavb?YP@tH`aq}lOcfIZyvw0-@>JDn1Jx_nly&)7j%JuIW@D030fXs3P?huI5q~K8iqFLsFl1cXw zLfOmDGfGsZGgADP;LpY?7+AmB$@pjK^qS@LmfKffKhn1$nq@Jw3?Ux#c)io6>xz1N z>^aKu_&&^|I`uyL9B7DEw7i6ao{7kFkfSX~ z2)^NIb>=X~bo*8qfqMXRUkzEyuJX{Wd(x)1S1-8z3|!DzVi?{+5twCl2o=Xies*-> za6nbJ*i-Wc%3qS*OZkfP4`!Y1XW)$GCj$_WDZ7{AYl|@(=B84}JSTSu+`**qgd}&D zsOfU!emA3;aaRTHQmq_Fcdw;!nonU-G;bL>4LIW1swKQ{b<75VZ!tqqVi^-~gXbvW zLETwUUUv=Cb}MJb?)Id*c-5L@@#Vch75P0VQZU9z1h5Y@rl&Cacc2@mv&19DTiE4} z^zH)iDuP)wJ-)QnV7+Q#iag%G{k5LSln`*YtI`u0-~>!(ae=cKl_(=a@bU{~Ik<@L z0by?Q_u!-Yeif8}+UjHPyg2x?Y|hB!-of(n5PLQ1FTo5sipDOwmhbOtR-KVkT|)f6I$XCQq1iUT%VB^9z4(mKe}Z z*lQu~`8pd^z4od(+lYWVNp2+qdi(FrLYglYmCz%!F6Mo6p3Vy9QJ@4;{VLZl9k-sw z{@~NlYrt1Oi&YCS&9y^+nuqAa>&r3}hIZnsJs$Kmwjw58vy}(AnRE4Qov-BY;f^XpS zEG-Z%?iwMpJoD}Q=Bm-5zb$FdY{J28mA&QXC@;b0jzOnc_B(%D4>tGxj<&Av&CX<8 zK3-`-q~^Ra|1dgHTRGiBuue|#U{3@6M_+hY>GPyO`51<15oxf2{_pSZ*zrI14)@ma zKUVUHaA7aSJOee+4MJg-Mwb~1d*KSsBD+W42K(5U=5U}Q+#>0+MM zvNCCemT7{P<-eq65+^t1U74trrBN5Q)i}1k&FC=gXo{Qq%TzVml z(Mub8?NBbRd$sWXr*TYiNKgSF*Oya-v7Q{WgP~o~(is}VFm>?8Cq57ptd}uCHf(9G zKuaPziTtO?by^QD%UdWesO|g>Wnf_4IZ-Y}ySSqo?PHjUh&ssZh_2H);>s2=Mj8F9 z-4OLrxLNd;1Gz!R#cQ*h66Z`#N-Of`hZ=yX#lr zvaRS|!vBg24cpiEfMhW)3Q1G&D_MOLf7udJ(-xJdwsr=d3whqm@dkams7;*6-Urs&a<5AD)#F)|{6i(OypCbcrIL9kuGFQ0hk2TY{y+u=a+jOC z+A2aSd-e>UgFBHixE$wmieIkuU^GEzU?()^Y%d0)G>Gb>i#%=~Ei=gafaYCa3(D2Y(+75Sl|eKpPMwQqy<)li40)&5^n1>Cs*cSrX9 z&)(iT{?|&Ls{J2xm2l^+uj^=g+4Zs10-771zh3Y4WuJ!qUs~xs-2Kn){_c)_|8q3j zS?~W#H) z`ZDYGtE&}=U4M&R^~JHU!^mM0ol@@bb~XhEx)sEqd5_mU&HMl1?Z5VpT>G!1wfw)5 zr{4an=dHh}?Uz=y#o?iwlZFggtmn&=VTolSrfkr>M5Vu2j1areD>Lbx2&}C z`u~A>fmz-a^Z1Cez7;Ql_jUpT`MoAV#D)qjsR8i8Pn}n}T zAqLysfB*i(2*Ansf`DMn2b`yY{&U6LGQ_`y{%7aN(f{o3t?hqT@(BGeon->LuK{#&hV6|U;iR5o}Q03fh+=B1l8O?R0(JEow zwA|3fYg%q-A2x0)EjAWZ0&pa`Q}lqCIYEHB9fd!P`D1XQg!sfgDF%VKev+NTV z-vKGj!%NfcA^0#sEII9cI+G%RFkF;+@4Ga=jZ@gk%-bGY*JG+o^)u9dI)#+6srFOS zWyz4V`Wt4kuV1y~Bf=L+FE03yQ%fDIdh&l#2x)eM@~3WCpW=Fa8t8u+mwt&eU=#g6 zIB@9yXtehKS;@m=2#NUyWitL=D1Q4aZ)FB0ao5MyPGy1PCqNuZj~NLUryJ?Y!>p*M zFdIGry6GY>s|)$Q3KUjeQg`&xigYkwE?$@s$w1;Hm0jVFCezfl}IIY^UBlJP=$WBaN`k$rI z_9r+i(l_ZWDTG__X&BO9AJSXYkr_16|3gpy_tEZ}{;%RO>_6$0Pb;Q;8HPXw@4B|V zdc4Yj_N8|xC)$<1okN{}aKWFucQP`sS<)0K;JQ9m_acpkEoA@ZLG^uCrFt_%bSht< z1Q!^__}{2Z_Ze^_o&cm-$<@nCA1i3OWdM|=(YuTre$)-rx*;l|be&3Dwpiovq=Mix z{auzu|4G`7O?PbMx0(wNs$)|%w|8Z;Kgutvn*IypxutJ^8tMPx&d9$1IXv1sTGRhk zJO=$glT*Gdu~%#7(NcD81bvfnJcT#t-Sxj170=V@|By5Rn>8vFwGmm(OO@ZTbDmm5 zNZlw-@iZE0!o2oTRQV=4>n%*T}zwG(j7`14s(>H1Q%(3ue~hb zjn=@$ERHYI7>7LEO<62cA9(4axOadlihC{91!uafFexIOIK|mpe+6~v)C#}!B}{6w z6;y5`p6GeNyA=%`D_%AP-#~(s2qgvBcb#*)0t)k+7P{OfC}}H;fT%Cx;S>=<=NlFi zF`?zhH{~}Tny7oT`bu#dE*DsR)2)!ItXG!DY-tGdP%9uy^P-0(z?yk5Am?d3n<93e zT^>}ev91ueLTH{|qh&Cv0kXRgwsJ($SspG0gus<*suiL*X+_~I$Hl#HIXLcsI;(0w zIMiU&lWVY+$7v2ok>)tL0VtXOCjle{n7f}`Q)vZ-w)fB$-J+*GQ4ftq3Q>A{Th?rR;j(NW=ZwR zTF2p7KmVuQ`TsJ5cT1@On(RN14qX5Lo%Q*DB@aL2%c)+<(8D-3i$(MJ&;M#5J*xrQ z34$yF+wbl*Y8OtinU7*h})BPk@o-N2WM4aS196EB)C} zN^BTe)2wlO%WK9>76ff-TfsBEkqcY4bHR}ow22&8)rMi{WqROfZqR2kA(Xt^pxe}v z_n-4!e|-<6ROuvn@&XaUIGj-u7rnatHBV=m|H8m2X0NG*m7@M#tZI0~y`2^oyDbE~ zYW^QB?C)zo4gCLLf5-O!J2=>1^Z%7RhW`J>+e;wSTri0Mk4?C&NDx&-@O=zYK$JXy z%VEYbe0&0evv@`dl)u6`Da_C+9QDU1r3zrdYhG`l673!~N{E01W)2;7$ohT`iQZGF!f13*r=jE4-#~o(rMZ@hxhr)Z>JnxgAp>uq7tQ;Az?E<(2|(~RO_1$p zYdQwW*_Qp)nX#1?Y-({!`!x{&`r}jLCfd?svX;Gwjw?;`wx5B2&;=#n6Oprv6wo2D ztRT1Oo-kj59DSbQyiDN#Rm=OzYjZr5amH$t4F`;fNTl%G-PE~JnJQA%D8D?+ zv}>huqlnQAHI%4#0vqbLM3iWpkK))0eC=t^!R1ZC<2VfmV6Qy}!8Fa8mv#a^?p^7K z)H=Je%_>DlJ`}PSTHRwO_O`fT+me2BL&K?{)r5F(qwrXVn8U>ob7&w&_S6|Gvf`>x zB9|JgAbwQ#O?y`t`V0nsLU!QLIvUQY)KGq6KaV|w@VG zy~fGy!pFfz|Bu5%TmO5ozmEU1lE*mzxl_LE;m>XH(Vhi;L+Sfy=$U|(oBFyiSdz5| z$XZKZPx;l@_bxb+RxQ;W9x4j|oE)c`{?lXCX^bI3%jyA}?*DcU_ni1IYx=*M$Dsf8 z5DUbdFH8Bg<@0DszA=X0y*UJ)od7QV>-e;BSZ)pC<%8?J zyY~5SZU4EV$EE-BcDV;0PtpKjC z*T5WT8-GsbP*49a&R_f(`G0R`t^ZreMWU)~D5iT)qD^#5p`|7A6gOaIxN zuQ`BN{13weIF4N|z@4dTJx~6osyif-zdiv)K0|HD^@DI32E@R=r)g8kx<{!RQr$Jh z197B^G1ZmsYcNLD2jE}z^gn@9mic!%7SKfhcXyoo|GhQ+U(Msu|G+8ggZy)s#z##5 z`2Ze*{7YBXAZX=yqN+F)UwEc=Nc_9uZLFP7ttXtb@LQFQ*2MZXJ6=oSKgm-~|5fa? zOBCj)c)0lQyPo*(I|u9huPb>B`hQNR9MCxjeA2;dOp0ZhfwhnxEl+U9(KlOs4dpL=lJTfjsmPS>G zs}Cd5)3CgDeYJ-$vGJ_7%^0ShxQ{=-m{Y_56I`725(BD%{~zt`+wq@9qrG+hmz6x~ z=Ap+RP`;J(c)7lJFuk*Wy%+9w&d>z{a!(304H&o4$h-duXglr8k^;tY+v2nACWjH? z#f_*^EM>IrD=%Rd;FLY7M$GzCl;5Dp9KY`%Y+=cz&us!*Ih`3?U_(kNv}jXQE5Wdx zcm@^GujFffU{^nlbGy!CPsasauUQOm0j^P)P7#$mcsI`(|ApW>O=FvxN(X$|1CONO z@=*;ST_tI9WTPRbudZ#W)M&fBwvzW!#;+sIR&j{d>9zEJe+KbjRjt$!8N zNd;nTs$-d?kIkMBoQ7CqrC?_^$@foF(1OY_@sV^31tEGg0jY{-(02qkbL=B5gps9 zu>A~t5JCz-Y;zF63-hv^%|`&uQNjqDAUG``6(PAPz;l!!Qo6K>MgmUvoF!k^R*qnV z`)Z6zvBfN_ZR$}((=!+#KhhPcaFiPB3+x(-EVXRC+JI4U)e@*!lo(5ds3(Bh@M`OE zLMRWQR@ZtIzt)$2`jx3netJ&Mxg2FQV@p1jLse3k6Gi9Yq82VW-ru;ixZrqAS@Y)_ zZ~IXQS$fd&zNV)kECn)?`hO(AKfl`Lr+KRNKS>&?Ttg3g|9`YMvhV-*N9+6ll|07% z&)YOYKq99Dq(?0G8}uWecu3E6xfW z4@r?`r*W*G5m{JC`-Bs`fM}W~mx%JJ@86#UOgHcalL99LPs+b>D^u??y~4a>;5H5)4-v2c->atobl%MKz{AA<8totK+WCKX z4)@ph|0{V6`hSr|K+ZW3lfEn)XwJy=I5>ebj-Hu;q!bnbx4NaE7-WF!JL$yvwVa;% zSCx@(yEB~)fbBw8Og`7sx13!+|z#vKc$} z)Gv9J@@zPPM+4kg1lr9`lMJD>XKdm;cVmrH>455ML@1uEfieYJ zOb^3>k01xWmTu8K#dq0IFmUYEH{B~CPe5fC@@88beL`#RlBoRF&_SA)#xrc4HJ0}p z(bU_}Y&HY&jp@3*RyDQ5b)~f$0~e*jUj(OZF4go_oT+9px?Mal;g}N<&rP3BU25T~ zyZ@@_)kl2X*{$}aXqJ>+hW7^EB0y$20!hk(Xn~-Z;N*q`EW9}r8Y*Jv(+$ zGhJcYEy=bmF{vAq?s`&jB|88nPoUVe;T*y^PVX*qJjXG*K`%)NW1c14Et<(vk>_Iw zGkA?-Twp|oFpAVJ-ei)lQ$9y9dY8oa@6)t+g=553--F8Hv*eV#O%qytP_`WxV6&ny zT@2tGz)3Lxqd{#^ej!zs-RjGoOVC{^Nm^zZ){T=Uk_Kd!Wigtfq<}G(0t2uarb!5m zf< z8R2gU{@hS-P?rzHI`e&Wt23LB37jL4ChD`ezX>Z0 zx+s+;hE%~B!l^HvxRg`;b{Xy%d`c;|)EV0+o*Y{(2dvkx9=tyl(`kGM?@0iHcZ~PH z!DI@Ha8jRYsbL7MQZU&h*Eg1hQ!>>9Xj9$q-=Bz5?CQY3`#E(TPT?&&Pl|W>+cd41 z^RhX;Q=Xxy0dtmWuAcLK|Ng{%>qIQp0u^@|*svy!vAA#XbPhgVJ@Hj>ha;#KZHE7O z+$ffKhGneJp~vX3X$R3NR{$sAqX6S7sGxUdS3KTzx4u}Nrq0A{)#d)N()Udqwd~Mp${r({Hs|((u zIlD~P)CR90j%WFUBxg28$E2GX}AAbMzf^jk~_uts5WTM5Ar69oE(?tBc= z1YDk-zJ56z4y}v32_%0YS7VC{f}3o{-Q)w_FYRReCYuEVOQ1rZ6=;re z$M!QYDT<67Z*Sk=VlumCtLQMKQXAIoiIC)9dY>>v6bqFgiR8_r`xYxE{gl z{SfZMzZ{PC5C1Y6kM{R=_M+=uv`z9*s~j1BXYuR?CuI9}c8&4`6^ML_aWea|Ju7fb zhS~jpydE8zx5?UC5`(R~oU2+vKbotppSDl6{71qGie@plhI>f;&uDLd-`4*eto?sh z^BD5qrJV9!WItm8JzBxf8b#k6PBs7VDt}`nmZ_?OVs+~NUcoUct+`SAr-uHcoY{MZ zVLD5SWtc$I`G0S;Z=e4U_SX9Ul{_Z>=Ti>EocF^8oMrTQS%GILz4HU8?tjGz-{^yX zK4Y_Ud;)g#x@K@_6Ih?4oK?c0z;uEoAdALkld##QgnF-4(aKc+ZiMRc+lHQUz+npI zdD-f+mpIf`n~g4VVqQ-)@GHvj$vpuuibm$Ut%nLuT{D;kV^nu&u^oasph&Oq(}k|? zYaLV!v5md+O<^`SYIBzZ3ouOyEqrN`4Nh1gA^0ZY@z@|k(#NOdY6yOr72xC3`4zZB zd0DC|?4b@;-F1&Z;#$sI{;84wCNM`Ac^V?F<0Bai7ZU-S&i{vdcKnag?%v^A{#(Uk z%71jqftYikCVgoU(6^EvuN3GXP49xBubb5;j`f0Jx#amltxYQHuhK!+uy{hhrAE}Y zy*lPqS^h`xvTFKYpnQrG=J@+-4nuT-a?Cbhg${Pb5Xl-PRlm9T^w`k%%qhhiBll>xkg{vYh@IQM^hyKDNt zlEdU4cFJafm&^H;^8h11OJpdusx-&Js+J}~8yM!l8qiSG$qbyBruf74HZf73+W$0J~%3E}=)uq2$RpaihWkvqGRaG<| z(SfVq%Xgqa8{sz z{w+;a0uWr}XpD00m9t7&j25wTHq9j~-pc;`GuyCUdEJhYA7qE}ua--dLGMN@DYyDy zU=5L#em6GCNSxw?r)Mh;_X7}&;}p`r1`A=qAukdk5G1qdHOh5t%&$zKox!uznsQC? zI239zYehMyp_G`tyhS2rg?eLOiRjhD+_U%mZ(dn{Uss>+B=))tXiyP^!o4|LWL|jN z4yHNS8oBqcq_2-EGwJ$S#Z!0w%hEW#xxdVE1f#PwAw>>xQV`JfIM`_avv2$V?Cu_| z?LSxY80Ww0DPR6LSkdw$J{(q#sPCg_-Ej(Nmi;ArQg@z$gMFow5L= zIO3N~Fi&Sm1P~_29%JtP zpW&&N|K@2to1$fP|No~={{KVE{%3T!f4I*7wvxw?|9o;J)EMg{NsWl3B&FBd#o`Z0L!dnWaz@zH3$_%_}4%6I+E<>T~B)n;1Id6q1 z)(M6ds@QBt#p0n9!BtaB&14NAu2+DCRafCzk&1_ zYZ%_X5J5?FzEvhxw^s)G41#PP2BK3BZD=883|R{;gF0k-UZHQG$nn%TL^!Lcq=*4a zF$0UqlHiujtN>=2qHQUNWg{zqS4%Iq6v$dTD}cJpf43CSWiu;)IT@2B!DTJ108&gs zf|rC^r7Ov zAMEYe_WwKkqqYCnN*+W1bH=9n4a|fls2@d8EjRvw8X*B)C#8@+mY%gk(m`H3MU;Ae zLoFhbcKA*C zQKOskD>am^N-h5yZB;q{P7XMxsVYbA%kC%EB}K{&a*t7}aeV^3)@+;FQW+S(_ynW56+0&_`(?S)$4%p?Z~OzaVMD zD%&e9Jl~@m^yLjK!U+ie@5i03zg&IY|Gp8ZqP?Jz<&eBalmv{^d27Hw75$1=Tgn8N z#cjLQ0_*}+i#Ai1VUW3n{A6o=r0e-$^Qbi>-(ggJ^BqN{oIZi%B1dEV1q9nc*`7C7Z-r1)0$!wm=SgCc0i-g~ z9n2#@Vn`<7<955DDeK+|%wMpwx;<)9-21ZAY*bFWFfO63F+&o)*)99VutbNF1-BzK z-)6~_Y0ZI#bLS4zT42GM>dHdo2Hh!xf{LyOTz zH@vW_oe=X&+1YZKagzPuoZVjEzst{Z1es5qdKZA;6^@biiT(^gaG8d;EG3XWVFr*M zV`ph^l!Xr-vJo!ND>=2Ca_3lJU_gAOAer^_uRoU< z+bsXdYsm-9|FeJKqY=Ji}aFd068p< zYx4%zXff^@Y+laBWBdh092+mUFSb8y|GNEV`|n^2pqn8W{W^FK>{5990&jo7+rQ%N zH+cK+Se3=J@I?%90?v~H-Jl%c1YF-2RQBLyc6Rq^p_gB>G(kxrU+?Xs!+|X`RP)l3 zlhQGkIy=Eb>3Schah%>!Jjen2IIF@2M^>GPq8W>dr53zFQzn1-7L9$^Q6}bz@e~(i zIAxWab)cfN%>+3eFCu#ICTyYOpTR$a=YThBA&Ck1k`PGoUO+Mci%K41glVn@#SzCo z%HEFk9U;q!5%XWX8}o}#+*DgryrX}=rt`oX&_7j7y$Kljx;DCaluxt#CuP_NlmB)P z*7DyEdkpzc9dmk>|7t8=ADjGF4rQ(STUPa_>C^sr%D?8ptyMc~)y_}wH1mIEJN=OP z{|Hxka*L;f?WF+ zw&Tadl`mN6hF6z%@D%i=*bhMPWlRDPB*mCmC-Du@)^UaI$kp;N79?sJy)I@>$6LCx zkkS;*_AR%<=Fd%?lVWH1m1`&LC@Mz7it*IazE8eoi{}?}=sTKoifB z4zijCPCRP|j##DfEMa$qJ^(B`N5_iMfswT)1XlW|TJqn3i04-$6vA0CxkTJa+heNA zzQ4dEOy?-SuP|nHhoQG>fU18m{8C*cRW@9L<1}4<@-|M#-A;yMy>S6fU-HV9tYK@} zMrJj{FJm>7k)QbKn)z+;FO0;Owrg7opv>y|8~8j+3j`YPf~9rg=cHzIber0Pif6or zpF2-boS}R;g}3NDDcG>lyFM?v{ed*yo>)Y)BF%ME zPvfQ5&oUhe79$GsUoD0peufj6otArtFJFB#S>@D5C`*=m!{mf%Znm`H-(yn8&Rler z!$t3Q^>%bAsWoQZzDMI@Wd~7iV-2Rqdp!EXKh5XAWc) z{(JlCvftC6-$(qho&DG-9{%K)Evi?|luk7nlV*)$R-sGH96f5S8a3;vLd`m;Puq;c zgF%AwIm#EpA+OrdduwH5GA6d3G1GL6yfd$0Cx)O49uLYYo9VxbMDRfV-=m|QgOTI^ zy|>o?t>iK2znbcPxj@f83AHsMuS_wwnQeZ|e~4U92YkrU09=&Nsl~;C%xzN(Nd=_Ey_IP2zi|#TJb* z-FAj@=A6nL_ca2*30ajtg05BI9uqczW1JH^2mQvpjA&{E6^8^<)~aY%2~k{qZPU!2|SZnEf;P9Pw`_zRuYiG zS%g{t0yz1*QlIV)-DuC9PSLRQL1)$$t2SZ{7&xptVlS{O3|iRVZt#Q#=H(WW`brqD zm`I=w2r^6C6lUCURWC`GMWt{pps5k2t;NeDXDoEHOlw~G;q$6#v{GD7Q-L~k5%rt_ zR0^nLjN<4$8V4Yd4hpa2t3kQIguKVZt5Qbt3{Q@qez9Y4EVOx*L|2IgXA5juo1lcn zcfF-iVb+(15?g*PM<&bgKfKPdZAYqFxB@eFRR1U&Z#{ko0|3Z2jt!VNxiLooGyFRR zvb?=xv`oFNxgGTOEc(81r@(_W?|q{Xj?7tcR%gxZ*ky-dniLQxC^tgOb)6}r6*XIS zXA8`lb5N=oihQx~C}abD4nV!I+bWlz{9>(%>hbv&n=u1TEt!*EwRWwA<}?F>2+uJ| zb3-H-@Ax^~-@Pc(7~sbgt6TFoIYHX|*j{i<*rtcrA^2rhfH6xw41pS>kze$b2=0 ziHZw)8OYN_^@UQ|``Vk^Rs9701xp!V1Fl8Y655wb41$Q05)m6k*Gyyj8MKF#!>YaJdi z{_nx=!J!lXcmHTj|5x!C^#77gb-yg2(xlJ)AZDB3vS>zps%oG*OI z*Jy^M!B79$UUv$M!IREYM+Wx=0y9c{#{ohI+cD{Rq3dl}O zzpE);^7Qut6JzxZ%f+LPf)%oSDV%TcKRA2Q4th@jh~YJg2|x1jzty==rK^1c08Em! zV7-d6+6!-mNF5{@KHMS8C^qKv-7hHu*W_;0)_2Pgo+ zX?zFo$!Q#?cY$*>H$s(dnhNki*+IjxuyHe052#}>%@Uwt2j_zgaa8sNp<-rmCH|&3 zIh{is!)xZ%H-%q*OQ3q8Pol7WxaIBgcDDQ`7#hjjFr{f7IwP!<)`}BbjO$^nMh8vC z3r&+mS%h5P6v&TH=T~*>oK75FKG%o`P!IUnY8QW#lw4~#C(yLSc83Ls5hR6SOW9## z>noAYcV%QD&sf$6fCqg1@_&xg92fUzF(hOO!CyR0_y0RPR{qD`(dcMrE&s3Lsh4EM zItb}Hct{zR$JV@Xnes)BD2aTX-l6adw}g{-~#3Z5$XC2 zpx6M<*-<;3pzxMZHbSfMTNA<#zf@9A?gcd?~z7?edra z$XAgCsdQI${G_ZPcUoia0i4!X(pkc6PTE#qdi1_KDQn*7A`9F(2tb!O0Ey=-EG;*J&Cfm<*mfYn`1%23Iwx`ES~m1Adz$3G{XHxGEpp48eo#{6_v}WYVPY(+q-Dp-xU3wn7{So|XrO|)t-O}es|BPzU8u^dR7@1#Q1Z=wh**~)Ve-4lK*8V>$c})GE znDHKUexk*-6zD-o&w`*UoXM{AgQ%d7n>qSC!#RqY#S}#cXaiRPVE+y(=xd@!qFSUA z+5qi@tI_K_hkx9=vl{xp?6tpon&|)0u6_PLTA%+{^lmJu$-|3+ZWLnvvY`v%Kb!^h+^Uz^kvZ4oCZI`oD^YEqv+s-wWjz z@gmwge01~g5Y4xA?kG$9Jv-$077WQVt_4)JhIr0AB2*!hFo-!3(Y(r{DvB4GWm%eA znTS01Yvz%F#lj12XV)lCP=Ux0r`zJ(vn9?wTZJChAJqC;L|XWm3iy4JIIUK#@&r|W z4Q%E%Jz>#pi0aMsT+lc`Dh6l7?d)NGZwK`EdJ~&H)(vLU=XuWJGI(56d{OV32BIeg zXBp3L(S6X$-v5tvtXV%Tp9=oZ2*UO!7)6+SNuQRqwX-bH!2b`9M*Ft^=jdo}&Hq>N z2>#C%Ut7!*G=BXH(58DiS%5V>obqP1R+}T4c^pHbUVlUT#VK4LIzuHFFuO7Bgxb`yH3S5^~c@QN3;mUuTL_ z<;mJKh`fo@YZ!xoO<8>H`V0Ci3`O}Nj3Q|wWX*tf;Qd6APf%e_o9uHqOYj`!1PzPv zHj84v#Rs{CS?U-A53bHY$61`h=oc8nBt-f7Ma?JI?odj9lA>rHqs-C4tp6NX?b%*s zQvAA3i%FZDbvSeETa{|#Z!n2sWc3I(2~KWeG-xonv}$=Q?;5?V%_e+ii?(>@Akjjf z7B-&s*T%Wpg2FYv^ebB^Vof7K`exIPcVn*{Wf$9Q5bK>D0ygDl?>0m3%B%|DU)@9> zQ)Gws?>BKhoqp1Y%vy( zXFxl2tt?-4?U)IWd|qB-%7kHf`+^79Q*K{!7_==eyNME%ZOBSMw)~t+Ug|f%M2Yv7 zM91J|kZ6FjcNWw<;>?AowD!fSlcW*y)llzkf%GK{?+RG|uITBC`m~@cAn`Gs2w95# zXp)NE$~Y;+-xWY=!)^m=S=01rjL4tn zg^0LMN6z1gKE!+3<2NwNG9>c*l@rZNX%qiVhU-*qYHoE}#pkMAkydU&^x1Q{^;S$& z;PoqHw=Bk7nmDY~Uuah=vO0^eExS{iDmyD=-KlztleZdKVhgQ8QKXgh3~Mviho!f> z*dewYB0s%O@XbUfy#Dxfe&uAk*5Rw!naWaI77x4ybs;;EPa`!N8im;XmQ zd;5D%{)eN{TK-?fW61w~8GvvxdN~V_wnqQ}>_dR0!~A_q+YT4xp2hzahw1du^i>At z+#vJt!+mB1b2{TG>CP_#5WLp3d4a~WLGbcRf${{#JUN8=d46HXdvegp(xO&IcH$W; zC0N~&$IL05piMO~n^aeoRvkXPmG*;DDDWgO@EY})h|@>so+0Z`kLLN&b8_^<>Kb91 zbHy5Kx9B}Z2a5?Zo|am#{AMUBB|9l;vL><`QL_$sJwK*w=gK42`ejQgn%mouD;#D~ zrP{%>1iWV&^IFA-g=*E(1EcCt*;CqSQe{iscBR$738-(0`9ke`t~jb>Roh?K-ZXyO zIcLan52{0k$kt%mDl-b&QDQc)J^J+mP#U!*906+D*!m&90CEa6cL4cn%k~J6AL^U} z6jq(+Ot{`XpOJ zkvyoP6n%Ilh@Kw6F`=9UuWy2!kgo0t7PX-iaAhQ?A@6{D2BD`3E*Y7Z30=+U&mf2VklInLR+4qlN}}A6megd?h8mzkh$CejIzE*gO!8>$?AuQpdHo3u@f|2X_4b zy@S2A|NlxJYyWH0+Xn^EntN0mpG-fJM_$NO$cBTI~ zdj+RBZX)@{(?I`s4-R&0`EO@`o&R+uk469G^!7pWWm}Jp%9n6IwAd$m@@1$T!|6pG zS=T&S3mD$&RQ-}UG+xrz0ZXAZM)`{wjO81l<||*-C%4o<5q)(h`{qbH(tFuy35b{A zn|*LfUxHp`aN#i|5e-pRx!L3~SeET~-U;G~SD6l`W3bu4|07;4{o;FW4zefcfCQS*v)u z^8ajh9b+UE@`Jj3n z{T>82L`Sp(@2#!w6my-XvB{aLz#LeoLamdNRt?k`FY1jw77F<1e!9|sf(XHBaylO4 z1Q+d&ferM3Z|Bga|NHy*8S*b4X2}AuJ^0}@*e-Je)#!M4Z$2I`mBA@&|;3Q zX=XT0bWSO(+AtK2nr1s5Lg!4aMJ=C`^;c=hcbF!1do14fxEb)ko>PD}H)h zUn|XvoR+x%uD4hH6fH}X*5LB!D!vTlS{%nIEDq_>5GU&2z%lYy&8Io{ag;sm48Z1% z_WQpN_jh*O+6%5yKDBBRtx1w=ScW6}xC6F00Ipx88n;5+_?ZtmI$67yqK5gZ{%M67?nSaq8(VzZ*73e7u%mHuQa+@QeEl9hcaCQgzm5M1IApm2aTP@w8N!GkK;aBX(cLKD^(7es_C* zp(&<^;2TJA5}~93yRJUJr5{Hx#}R>|5}qB<0fOar!*YEubt&iXdMzA0;-@43FE?ff z0ia3$f3&-2^Z(s-{*To>7XL53?fVq~%60Q7B>)}#zC?gE%l{Lx{Qk@zd*;Cl(*L(` ziu$tu-`zhvbnO4v@qbqHRM3AqzYoI!cyy9S%meiBDt%q`dUE*d-PQU``l5yCm06HF zV_x+@bwk^IvOJyYb)M)gD)*#Hcy$kjHJ@9G&pj$O_ajfXKP`*>sh^JgUk}3H8~;Dr z8#(-cwD$j7$z$<4XPMiYtxEdmA0(f1NqQ|q@|++aB(U-)2aeijV6X@j_I{7p3nZdhU2#p4OXDM5a~ zaGWK+Y9jzk+^xfMKE}t-|BEz-H)#743`0c7n>4C-@NRgT`2UV`|G%?ywC4XSc^JXD z`2CFTayHq3&Gs_KX}ro}JPsEl)_iE@>Lo2C(JaJO_^Cs`e51oh67Pl@4?ronRsP*UXg z&7PBTh3OuYE)WbluMZ^;Z^D3ol+jGqPuHiO|6>vod^Uj{f_;0Q2L8Xdb8uwm|2sH1 zSo8l?JoU$Iz7B?L84SY-%sS+)Xva4rQJaYfCd)CxRxt?RteD6M1v>R|qg>g=hcklm zL^q`q{g+w$86-iHMoLZ08c;O@p4n>X$=>WeXJu@ihRX*bUro89!h-{Q1(0lAjy%3q+T1m-r=slT$5SYLuiqUg1`fWC>|Hx5{AVFI&%eLleJewlsw;?VM_?y46 zimc~SMe&sU$5RscKoQvWePO88Kd`ydx;ib29AD20X%8u9&Escc^=27IiV3Z$$6?W` z{khp&J^d%s>lM)d1N;7eba=GR|FN2f-~Ye)r7!x=SIlFl{}dse>AxKMADaGeuZRIK z6M3WW?d_-Y?Wc2bxM^kygX)3?4;XMbk~Bh>1-wC*D9lmu9*sF9iFA1MgU<_)3<_w~ z-N$>5;o)2P`RC*{4fLP?aTY^DI=OrsPXqnmAMNei_FwD!-xWRD{qH58Y`|t4l=NUp zhF~qBpXxfe9bI=u(6bJ_=303B8KW`hW1vF;FcDx!AWhhiOuk5;X8;6S0mxA?%M${E z;5oRP;BW$_2qpyN=<^Jb0w*^Bf{Wjo!YZ8=Afz2=O~ zN)sUNd2izM8pcEX<&4h68J`^oeP!F=WlWH0l@B7vH#mW@8k}C2>(*EmJO+0NP$G^K z025&L_#D9a4&D>JWg7?^eP#=0SEY%XISH}}tPtQ_bnE4xm+)XQnDd00Zl$yb5JG}f znItVHIJtQO_!d+vMZtf30s?&@TB>LRP~$e+_;P&WW0G0{Q-f%Q(51_3!`qVs?gN{Ohu$XFl|a(W_3+UO9acppxw%I%=zl>-?eB8?OJDX7Cx$RTp5c+UCsM4i_~C^ zP0nJ2^%^Rm(#o~EKko{tQg`bU*$Psh;l$GO+5c>MX3UsL%|g}iKN@XzOtoMEPzh?6+ho?}FF1*83(kK)T)ay2S2!n>DU#WgrJ+5a zPEmwmJ-WHdh_;H88`^Mdl)E)82p7e>)9@m=*Py5cy3GW%<-_&#e@Vwb@if{09qt`C z_WwJ3Yx=*6hwFb(PB1A@5~7}b{<5+~gK-GmPpzWIRAsbP`v71oel!@ww_z(MfC|ui z=6M^%eP&R^Y#s(6n1@9G0>;8#U`i2_F$qAxtcL;+Oj1%@z+w`BfG|CE0D_RE3z@|i|ZL$ezC2gee2&n2Znd)mrr+~C#N1`YCvVo{~M6i>!a-F_U%|Ep{ z1E;b!CyFp(4s8^r(`$wCa7K!B+LR)xqF1e_dX7?sO|7v-IEjagXe};o;TXXJ^5{k0 zQ@pq2&|}TWrMRlWTXiJ@lx!E&o8Hw!bBi5~OKWIo-LBB^3HdutB7M>Q&UpG|0y8p6 z=_Xda7yQ#1mA5*qK6`{(w~MX7ieYzIg`)QwFuScpd+T%i$4eBWut;+&S2LrB)un5* zHCNI&qX~(UkCdmm*zn|Rt^ncd4|I`jEB~Dl{Pxx5gWUh^?K%1XM{D_SMGq72gv^Kf zHw5$ve?QzNWSY*B;$238BD@@X15*C#hnNjMuzE!XZ}2LoL11d9gT+hO^=N@UnYO4+7W1z914QPzNfMDBie?y1v3+UhjjTL6lQTkVKe}#|R z)ta*HXW+xT7w?Y2X&k3_AWh#GW(7t&e`Z!v&D>I0C5|XLcd}+Wq9pItoKX|W+5%d8 zEVq9;$bXk_et8)A?{MVWf9uz#jqy5jW9shOrXyc*~y%_Az4Sk&ZkniV*f2_?k5C{M}qY4q7vAo?nEbu1eV2)J)up!kcm z<^o>>x9DC!g@h;=xPGZDR|Wc94m>FG85J4$TLmGvcV+gr&Y5B!vJ(oE6kZ^dou%2m zR@KO7!4DzKq{~hfq7^6u`O&rmGD&lBs@hQIk-D2}FNW3g&^azuH_Z1A3ufVKSWMnL zEQSjB_Kig8-=oNn$$PD2a5Dd{BPu=kB*)D@G#Cf2nlHG{mHHtY;p|!=&GI6kq%xqw&hL@<#&bezH?7Xu; z0%7Cy^>Oegd}_~s**x6-lq?+gNj?qdzx^Fs|2I0?J6NCp zR`M9GKf7Blc%W}u;40jEQY4amaeloTZOzr`U3zYNA ztuzM&CYTf5pXzj3qDm6W%JZalnv{WohT2c7NY#P!tH@(FDNmR|U>V)e!JtTXq6J#n zdP>jo?T!}XSsaVAgbFRBfnRENxm)Tu&8MI|G#D8imp#kqBQg>Ku>?4}{<-uEtkFCR zqaaJ;>~~k>UV_bTgwxW4&^T^NAy=e#~L z*ytXQ(mB0a7YXSU;>0~;)PNHhU){#4Vn3PDnRq~~swE-)Qf&o8HCS^Wib8^0-xuhM zf_4MOc{=4Lm8Cl!NBdY){E*uhkk)WS!)mSk%!Z5gHf{{B#q;C`S3-E}2cM%Nm_IvukwD+NcCvF?%+D zbbhp^_3XG73t0>7f6%8{{-+1U2bKSK4|nYR4@Y}PJ8SuW6^}>$hqnBGnW3;J`M*Nz z@ObWh%0YCI%q#DCOmVJ@%=XonWJpt4mMwerl$r+ViI!>dxKXxVKD(=?;J^6&Ebyq5 zcG;{WZuP`q647d9bZ|ZyJm5APqZ+b<5-qy<_wP^2Un)t&&`KiVN<&TRz#c;#SKx+i z1G{-Pf?+MtZR9A9Wp#EmqIG;#v0k~XR1v1a5=L3q%z{rYX#I9l@6eI1O<-E!yt9T} z>%o|W;h-)wtF~QAJkrHT(ZVN!A&3<(L&j^J{iG^TFaMtvINtsQXGNN!e7a2PZ}!yl z|Iz4R-^u^EyR*CI|EqX7OHY#mViDP!PWu*}cgzwd67a9|8ZM*AVYl=qoh1cZy`V@_ zHH3|8ND%FnX}PwU+eZm7?J&UwfYPdsk(D9^lQfRFEK#<^>zesXSrfmeAf2P!h(QLE z2;4vx>pMXxLUwDWwZ~N2Pgh%b=qe^wTv~9*pL9Adw3#fa8Aq%A9TOm07!HT(=2aeK zy=|&49c40MI&ahiIrcA2#Xm6582qY^)KnR#!rd6$L#S?}YdvXtk_y27xO zhf=fGz3=|tG$lQq6)7+#42TBGg;WUh@o}27`2+e^g*o#0DzU)ij?a<{o`5^COgrjF zF0hr04D5@H@qg*=X4ju`Cu?KcPVW+wlL^k)aHp`qR7AR$gW}SL>R#C}wI9azGjJM3 zfTUBd(E>TTfq8_J8*n#)1%M$}J#$<$jkIQ!;28J_n!xRP8aCphSEf%45_`JWI@tyh%6l$=?a<7vmkCvYbKO z3g;NWIKv4#r!PeTg2Gvji+kZBeXQ0^K1)u?+cbHfro}Ng8#BNCMo@kXcGSxdX7C!v zxWI@UYnx0&FuXiGgBdY^W8;gWW5b$m3!MG!-9O%1?_QjqeR}u%%lGfkU%a$Fy?XbL zw=ds|m&UP-KQW%-!hk5uX2)Q6XJ==sy_}+HN|CqwD^~bSug!+$C_%(%imzn!1%-P1 z>2wMcXIvpHtT)@mG~1pa7#EZK61fOQcm@5ig*?k1v=^uD7TCVV$u^m2Z?991eBE%p#qI6B8(>y;Fl`hiRUpkhQOo^(4|eVx3ql z#4?0UV)gATpf@%-V#PPCv_$3;cSDZoI+0U+?KqwMovJm_1@n~ zMc@3ASS?Y5E!zNa!P4owVVUYXfQnr7R9`Nx@87L0K_AZTPBu140SmAdg5W6(oQeah z76*@IkOSYpvp;mGo%-P0Hv#)A#zW-|oB{ES&^N3N51_odjzA9jG5EN_|GH|f0>=gA zQXiX!ThUa|VXEILlF=~H^mx&AqDy+T_%zRspWZajbO~*Jo}BOB^^g`(1Q-Qj$*77n z{i}-v{%p@kzD+0(NXBIUOO$`Q!wC#yumu4}&DO6BM!wU<(#pX%K+ghf@zKH9qX@uO z=6hSU3`>0SMaY5h;8DB!_Kt_ctTx8hnElOg@%{U;Gmut$#0HM_Q4O2Wll#_Fxh7lg zow9;&=Txkq&YQTai#;gwh z7fxgAdY!f=N4&(Lpga#)$2qx2@6!A>PGJNB>%b7`F#LQ9-iD_}|I2RG#7)~$D&PkF z@8RB&qyIfz=l@*IW8D9;+?c|{;~#Rpi(Ax|8eo0V1cu$oMUFCQ z%~hE##PGJ%!qPny1EurRG#>#+wuG6z^;t!AqeHRMH=$s zZ!jr}%;=b!iY_skFKF2pJyot?jU&s#j&9gYrZquZlH zqZFBkW~n2il;5UL?lAL4;xzgf<gk~Bh}aApP-<0CQcV%e+GF4i2Q z6Fx4Vp|_`(fMxM4!^DMYgzV+LNUFn@GVk+r&)}qC@BB~DnbPc%g9vz zSv=Qr_TuCwM}$0Q_6UrpDC$_$h)>u#Ma_z4{jM3Wd8pL3X zb5i_G&_o%;QAdFa#Yke7G-*hwi!&&#ofELR$qQ)|g|326%C683XTEc+fg9Go)3v1h zst70i?N*pRIWURn`YzB-E?iEGU&A7YXpC>|MWTgSu)LqOb~i;BUVn>9jv17=zfRLQ z@Ryf2@1A*(z?{_AY+ff6>26`wOOfAaDHawGn^k?4rOE{$>_6_%HPdLTNDg`jcns_% zs5j=SIq(?BD|oHtx>~wqWC}+5cj=a)H{PY$|K9Ponz%Tv_K{y^$%ZH|-oOOjpuGA^ z#iA%hP9bp;$MwXEJuj>q1$Q*x+#D8h2O3JLQJS;rL!S1IyE@R{bO=;Pg9SP#WQIgB zA>o{rUmd#M!^oQDk0dQckUIp}Nw!Go!3zj6$r3DCV6IxeCggxiUcIG^B06g?qgb3< z^j0Yv$iaA^vtqQgl~YPdMYipV74xtWAo+)vzOWWNmO%EXPu!9VZdZw)3vn28Vh`vM zE-syc+f8(x{WLFH$f+P8^N`~)aG-G`aEkBVAyp2F!$QmPO@nTpgO^_llqWD|ql!|* zT?0jEcEBsRrZ-0aay9sSvr$*;k=J#(mJ62A4bQTYC-6ED**`v0F^WS^!+s?AN_J;D z<_sE?>B4Sb4Nw_xR}AnQU=eb@0g~p$X`D@9l_2=AYiE(w<5@Nxa47i+mEAXuj`@oD z28#5u$Z>KrFlBjj9+a7(*@EO|(zKRohXiBu$cP&Et7ym?k1slq!$WNr>R(Cdvx{OL zj_Y*_qhDYQlMv;BZz+_g5{4+3JPl*5iSrBJPBPDq{(AmhrX9XCw~=z*dKdHj0>(R` z+%}Yh4xy4NaOdP-F~j;~x@D?_Py3jvDj9>z083UJ&!%%MNyun$t+TLUZT&b6h_Jse#{gN(cW0vycxS?#0vKVsd zPz=MCxT`R7;(gn?#Y!39vv`cb>u0uxvDX)^0JQg!Hw?Tk61;w&rQL~fEpt%nn**U5 z4wRCZmxNjNTOJ2|#Nw9)cin!jJn=zhv>7!`#iltzBN`_B)_96=UH3Blfm_QTHl4SbE zG>TQaCRU2wzL98yX7>}y9jzjNlN+YD8jFTj{i_u$M>WExyQUR0IB&D0{r265m&f2V z=GT!qg4|LiX9hDU0y!eHxB!p}F_e&<)Yj~mNmz}qnp>2E zHW`MF49+vkH?9thn+c5zl(WK^!W^bkL;w^7_&FO11lMUA1KWj}v5K<&3YKGlRLga= zrYabZ-qvb)kBRU~_ESUuWt8LBm^`HY@6Kp+xMS1*gTsS0{a?k?O#kUJpiAIG`T~bV zcOC$fB&GH3fR&nK^6Sz7g;il;zkPLhJaARKI-QXo=-VJTrID#l_>Cyt+WnQgNj-gu zi0Li5k>SoOdN8woFr1dyYi!;a^9JO+bAzQ^FqogeH||kcBEGphG3!+6f|Nrd$>2e%5wkQhk-}Myus@c(^Ke9v?rxQBi9hahHo4qB9m!#$P_HnpTnJ5;_ ztVA}DRaCX@8~qwL;+&W3C%J(s6F?%Tny4WWd$+|bU}0fe6BgD|ccs4=9u^zP|9^OR za_HuNI_&a4ZKo7Mf*R4YwS(*hqG{V_AV}OKDnA2*v~yU@deY3R`m8ruO@~_AZ^1=t z4o+5g#C7p=nP*c@)vO++`Y~uO@9ro;%zOh~fvDA)gRki%C|mUPB<`xg6f>}xIDBp7 z6KX1~%k2KLy+!sjm@=h}#Q1k0Tr5i&qzS1b{2zU3LjU9Be#7#A!Txi4+|mE7lqU3_ zZ-BP+pYItT{pUY0Gpv~a?jisDJ8D4xd2>!yCEx=6=Xf-w|EkMPF#wIJ-CHFG;7u$J zU`*>1Z~za|)y{hr|a6i3Ba zCn~|Jf^9y@`K`otul530y$CcnfKfvlx(z&jnBYi-?RdmdBx0yOQk)8tyL?jtsTtgE zN+_=nV{qth(>;Jw=>!a8fElxc;<5aRMxG%Egyc~kgNScv@#>x9VKfw%E+#TnC}i!5 zPU|Jy+U27yq>ts;Yy2I>Fl!Eu59clQ77lqT}O+5j!-zTP%Iy00M`dVv1q zQ3c-SwJUW21L}?m&Ll<}tEM`E?pud*^?+T2ZeU{WbnFZu(+zYJLp>;xUS|y)(yL+; z*m8gVqabztw;6dOG0L_ACwzRGV3tjIAj6BObY5(hB!s3Y92C9yeID^^q=yyyjO19) zA{4vRybBIX^(jmD(aT~yS!saU$Ey%Ep#OX!H);PF9u9|H{HG@>(xXDsRTX0y$M;~M zvh#_j#msnVDuVAbrZc$-QEfbnWlRptfDk!Dkf#eWc#Eb&!oyy~F9-K{j$)wSIZ6gI zXv$$qUNtuNKgwP?iVFE(t?9RZ*q1}hpQx=v@eoJw>9vl`A>V3Mt#XKWb(Q*tT0a3@ zBpc4+AgoCNNr?B}WHZ_a@9Zg64{MD+UcI9$A4h4x|0$U*d-E?#o&Gm0>VF3(haLal zMroq|i4D+F`;(i-&y!~zlKM6ou0A&kT@skKORr@rQ4c!Ih=sNvX z-3G}<=5>%Y$xnA5q>=9~gg(8}fc|SSdvo_c2WLh5Uw8krl~Nl2msvVlYn5zMmpv?x zLsS;=XH7bn9?H|JT?&)7nwOrBO65ycTAQxrY=DicTdKdO)VSQ``J|Mt2J~M?zF(RF z)Y<6ETe))?zd`IO8yz1oFnATT=8H3(pUq? zL8+^sA53)Ds0&yFD0E(S{gbt-y#M*ZS&h{%fO5<}n=7DfNR2On@<}MY1}Z++G-9b1 zm)D;1^Atn~vecS!nZ9J?PI_6yt*2opUHQaH1^=h$9*ZdPBtaCWgf1%p)bal#*Z+HX zaCX@Fe{ZGKbM$QW^?oo}86Ia29EEzO0wJT~Vv#$9OXxD=EYNL0FhRkCkUz3dSqw+? z0khP6%l-T-@B;#&e6;=uW09U)P)-s9mA{tlDX~8XD3lB+pHq*xpo18S)50V1oxu&_ z)E5md*`>nM;R+;q&2eH4BClq%GDj4TeKA)-pCmH6!p=Y>Ru~k+24q2n^U;V|VS94i zDG`^qIG!O>{V)`_4CR96W-y*Cn7}*Ti^#Cd*DRt4h6}xLC>($bArV9iK9|{NK;ocs zB())OvkWNDzfVG#%D{UvW6WEaIO#w<>3>S{!ITx1Cq^$z8tm&C-j~`n0M=+~z&XH8 zaC1Z%CUHJF@8t(e^M3x7NK!Fy@sRNL!JRhITYJGi8wCKW=L~@UTbcQd#j^mq3j!d> z6Y_{ii@Y@)kvTFl*=LP}yMQ=zBLrkP0u=I{+Nbh-iGl6Q#6IGmX|OL>!(Qadyg*r- z9q;S&?g?^Dso?)CCCPadZ9M+l!P$xX{_FIld;hzg(!iuEw?U~X*U~3=<$}Ijp7}_@ zwoSGIMj>X8H`41eNtgzh-KHc-iZ*~^$3Bkr{44N1L*rQ_T$lpL5Cai@;51G~px$=^ z``1kZzK;n-mo-@R8)qQUZ5q+Nit{femR|z8Y6!@>`=5j3LjK32!|winE2aMY%WV)) zI|5`tLm7IDS~t8RDXPpMHPHVyvc72f@~!&m;^vi1t1V(22Q=Jmabe^+QGBmTe7%tt zcOpU_X31L|h7o#%R5}(slV3p}CYYb$Sf-(W_#bS5$@BSPAM`I~EG5$$#K?>W=oOzY zoC;yCZ{rP|3?PsqfKxPOdw`;S$QZttcMfw%F-NdSB#JoJ7?uigz$Q?nPP624aWmh~ z7N|)$uTEzA0!lsoU)B0koB#LV_^9~)=j^zn|Jx`n>_2ipIHI7>08~nWpMM3uCE}hJ znARUAFJEIM^}~_SQ1KY&Ib}1ui)^4ngO&9R!%&cC7`@B7ux_(=is_-;V8MnxNHdp0 z8#j5Py4aES96QKOv8|c8s(2B==hc^atsMVC;yK?{i~oy=lu(3NxS_G;|7&p}ah@a` zp8Zol&k4Fu(OBnOZe<7Z&8F3fBPNeg8cb05F45MYbsFa6Ka50HB}TbNC{31QGK<3! zOPq~pF>s^;{f)F|MhnsILlWTtr_lmH_JG2okAb;S-Q&Oogm>|4N}Y5?HI_g2bEPC< z&PmmVlhfo3Tip?g!HdLbY(i#HDD$KJ_4eJBV^Q)7KiRI#41i8AGJW=68Hqg!aEfN7 zY#H^Q)1ZxI2X-=Z5oc9ol_gZ>Fo%KPUYQ?VUW0@ELHN34c1zoAnI*86D7g4nSV=`* zZ3Bb2)DE{Zo<)(cyk(}s9lhm?cvqR>vh9-r5(2&6BJP-%xv{iJL~E|qDouAra0cq1 zrfO~4{@vj6##VHE7P6_XNg6M#p(3Cn8|Wq_`Ge(7GxZm#s_2E!n`IXod@wA50W#Eu zdA|66p7#wz_3G^!3S2fSLj@Cf$aMV{r~if@MR_;`d$$NBP8o{EfTe`W4D|e0Wy>|J z%r^UGKag4d(IJ7@wy-*|ZWrlQo6JY{!% zQ^>!{i@UxiMuWk?!%JhNJ#&mx+GyJIInL)j!$3WPw709c1`}`7z%7}gbb{l1@QC6R zJW>+h51Oxl9K0T8c4-IW5KJL`$h(BhFGb`8$dhT<$C--l1&zwsj^RXFake9mOFd5X_f6HJcz4xDqCD9HI|0rr8%*OlHd+L0dBFhinif5~EzJh7HlT~%PS}21}{OYW= z%XW;V0Er3Q(>oleOwu99q+su=^h#1s376B&zLjj{?Sr3P|GG1*0=x)|h-GBPua^#CUS zL(;VT?-xA)l$P^C__pvrfX@4;99*PQ)dRq2Cn|ff(NQRR(g~(g)oeVf7TRZJPKEL; z1PLW`93pB_bLmbj*A=LR1=-3P3W%X(Xh1(#r^&gH&6Fq);{o}@|&eD*8BG3f7szKw(*(RP`Q z+(nlE)VQy@#ul`e+s$e_7|ntQl&%*c1=NezmnJuTE~Qfb)2!eY1r#kG1FTN|J3A}f z|DGIl@gKKRnus@g8w{A(2er~nQ(;C`N+=p*2|@kSw6}A%#~hbJp|(FDz-APIOz^>Z z7C1ZYxvtkaUb;65HWeq zXRk_NQ0W0Z^UjXSr=1;bf7aPi{iM6wH=pzi63-D$0XyRI7~eMh6wFx!W-%YGyI-43 zxjql(%opd|H4A+_YwuXBFUR0f+fPG*fP}dx35di}kr117sP(tDgsf;ib?G_g!@lVS zC~siZpv_4Z7hYylot3Vb+|8_IrN}EuJ7?CHS8RGGMr0QD)wp!$yQaHG{>r2{D{5Z6 zMr)S*6bZ`}n|p|9Lp<;=gXEnD)P0wcP79`RPscWL7?nz!HW% zFYcSSce&Tg4dj+$s*fkX0ZI^Mn5CScEWsWc4CYBMe&m7zy`r1C`6*g4mg-)@S*r6j zPJ#n)ows0ZG1=TT*wUD6I6F8gy#G4x z?EhOSt?d7%jnVW(*CzTwZnw$j%1WlW){H^kVbzlq_{e@|M}t2z>1h3v{QGB+TLjIX{Tjv}fAm5jV*K6%;3wr+ z{&Noi_{e^dH_yL3pv5mZ{Q9@w)PM#!louzwj+|tps!@;A(Di9B-t+&6MiW9Fp8oTS4Ai^k4rDOc&;=dmq9k~2|c+~O#t&~RR-`oZ^ z=Qnhf`gMaE=1@kF3OWBDA;h45PzQOVmdf$2n7 z<^O)+A*t3h_}>;(^+0Hv^+0Iq>!CC1ZlF}te>#iM3WPfw*=g4jRo7DLP5GAg`1edqt*{7- zN7o*t+s=O_*1|=F?}~=g&+&UV_TyDCJjM7`RoCa;yBvDiG{Tuzs3maR(YKfYYlt#m#w3HhxW|;{QHiFGKOlF;_ zTAwV{nr$*!f|KaBo7kcy1jj|*!!%oXfNAiy71XG; zCTWu-L#@}s$tnq7F9hv`3lViH@O^NArzvp`98KFF0+rlv%mT6?BKl~ zTElRNUXRBpNL}G|2Z_)1w8jKstPhDf{pbIA7r&y5n^|1HM5;>@hE1)tn`oR*@&|nW&jQ+lE^hXC99e#uulVd;H!r(oV@mu%YXC0;b{y$r# zP3Hd_9v>gN_y5DQqwfBH8>Pwpzjf(vTrBF}8+d>1JI<~C+q(=*l@>25S)WRsMT_o6 z1%W@=C1@|7JvRixgvm2sYB-3@t zWiEWqJq-CCdzO+P;WVlMvupYS`p~G_k}CSBg^~TO1|7R{V_d!RCsn9wOq_W(l(Owu%AFP=X~@!%0Z-~@#j4hX$}&i{JOs}FjBcN)wn zMRBmuT>CtV$m1UPhR_iX_W+^b1|<;;&;Y!WZ+%79JW*|+gcTJ2m5kVTn5Bd+-ry-t zC5G{AIzp5WN!9{m9Ah>?A^4Sy1Q?1^h+`Y{AqUH5;(73R7S(~yYc>OaB*3STrZ~QT zghxl$wlg%C|i%uu?D1XySPIXXOZ<-gOz?)~3ZiV*Z(iB-Nu>G~up`wK?*|@rs#el!DNHWzVlWyh9npv3(91F zTnb7^$fRN$qennu#0G7|5oadXEs*E|xDtu}Zm`lD5=A(^mobtBNA=IN!>oLjT*fEk zcHin*=0e{>y(r94G=-t;>fVR5gQ*>MotnQH5|R+H2=xU;b=vf&@Wb~poI@PJQN-al zYjZoJ_o%DE26kmodh^l_Ejda9A@QLe6;Z7miK4CO z3$)g(ztr)6ltg4PMe!;EKpp=-J8|tlhX=zh{?k^9* zLD6`U?>NrqvbyV(kys}kb<)wgrK1}Dzw+JBf7J8;;G|lc-ry*Z4|-f*LwH! zH1|H71(WgE%f%^5DMk#8(3nsJrjS0!+X>9X^@KF|+E)pu^6qDvL`a73Q7oNdibC(z zO0>u?R|GHDw;yamW>E-62+&z9IK1aFCxH}35sEOI%C4sH1D?*No-TdBIb@iMiz;wohS8YNV7VVXf=>S}gMb;yECA62{ zD=`qGIifkV5QH;{qx4)6*GFlj26{eD5&cFj(hG2R_r~`Fi1;RwQxV}Y64z8@44^nC zVz?8?^2J6UP%sno^-MjezL5I{0YbqyVsq_^F^C;E#wZFo>I|iOWyk?Imd>R}bgKGd zdjO}rDT?qt=3Gg+&Yn13Ql zawsDdkSQt*S3v=IIz=IdDT)?qzHpjN)d1XC9l$7=!2Jl#Q6$78%m9g_g&q0xL8+e#6_KIcnolm8PEdSw3!p?^7}q~mO@zW<|QZ24+&f}vn0D3KJdUo=`xr_l;%ySVYa_B}(i z2{X*@Q7+W3}4SkeZwxm2Y>|lcT`s?O!-EUy`+{#{R=nn4v?)~4val!vvRN@CV@PrnWS-sAyzAGiATK>xu|74*c-nUN)RpWiipwQbp--D8fvkt40?4M1-)gh zge@+x24PUm7^iv9MZ8Lb348wZq`}HU9GFnVh25_w}N_#DEa$8SSeV9tu^4#1z;uZOMHV`|UPn|W! zX4>kr&9>jguY@mkzo_9?vhA!718gc`P?M{?~p%Q5g>o8zi|;D-({T)&`bvK&sZk} zbY)$oIsaeI_WvIZ`2Xr_o}qc-F~foy4*I(wzS*@3JK> z0BZIBlcR$Ef70>)t(1cQ=bGgJ!zb~Ju>h2e`J*)fZ0{Dp+-RK*ppgxrY|1(#Kv&jK zn)84CvAq$Xj{hGIk6r$MaM<1dZ>0$K{)1Xt@Def{tXl*~D4s&PFj?V_ASi8Oaui{h z4p5gdPO*qqrahYsucn;|WY@Air{8X79scuc@zg%Ff7ZaiC4kHk1sWL>Hihv$0y{CB zqCK#a)!AN^uh$+l~ zs_=2DvwmTDoH;6<4&N*_SKrk%+@OEVFhu~S0y}r;dr~r5xLe+onT&-Ka+87MuE&GY zniP})&gLbHD``(mXM6DSe*!~9pZ@}*X!XcnvefYZgQEjC|MSW5argdnD@7dHw-Cnw z#VK7R1jnh!$tR>%Ne!UF#{MyeM`6UO9rwsj&a%tgU0n?l0=KF!IyeiH&DvY zKcDgSP=K2Ae|m80#{WJ&IO_7hZ>5Oy|AxSjiz^XeGS~xac;w}&v?cLhQILXQ#!@mB zNtwquLTnE}ra*-N$4W{cEZ{V%e}JHn8lVp;g?CBRw?Z}?SpC0_*^C-the3jYbzHn*h$Md&u0HTyoR^OeP z9sOdXuayZ$&Jqz0Ws32)FnPvyn@?pRS_v~$`CO_Vbo{Cyf{eB5#cJ80Cm9~ERToSJ z=&OZ&IfeHKT+gCNb<=Jrg@}L+1|wc+0~Iu}U3Yc}$OgULyga{X)dL;DpaI<1A5uhP z7=g<;MRW`U)T$SxnrE#Wbg9MpRvl?!zxl!}wIB_^vy@PHFQZkq>q0hcdRVUCw_EUJ z-ekRHY@FK|CTv359YqyZM>TETSNjRGJ8U{{IKHQ-WlyS21L)tv6g|QPIKRFGH)NK! zJ1&&BXwuDhgyMg4ZWf8)z2~!(umDDgwj0+ZfekuSF-67m$VDsovDvZ-t0Cbl%;-#H z7=Jkn?^|*MPx}VFKBCctkcW2kMz(2kPAQq9bb@9KyhSO+LAxcI$~Fx;xS!)j-^!p$1zUVWB{zu|Bp^jT>by#^rX}Ow^FR@Gnn6>nJzZXi~-W5S8LDvgu*5^kW4^`ll#7mg6r*vq7bv?x(E@Ud=v*5v4May zkTx1Zt9qP5ieWffL!Sy#vtCJjPuA0`gw&|lAi}}Jgv=OPL&rI=Mtw69(KYnS!IbrP zgYGd)5e4rO-Y21LddbcNQH=*wfpdC!k0>55IA|&_D?^~0NXuYC5#yrI5?#&(Y!N@u z>Qi25f`Ei*UnUv@Fbwzk!8g#bFGIB)4a1PcY{1*frkOW@=`G+zP&74K_I>fI9UR|Z zU)AHr*+7VyK%?(sI!|KhDX`xV!Fdul!7N58n-G$=o;uyI?ZoMJmB^h-o)N+njvzze z5#rReHK#;I_H4A9LX@xphtLN*VDoZ!sr)DS*;ej<4u?la-TluKl{%?Ti8Zxiofffd zGx;0LnqBj%<_V&V6YMxZZJUNjrb%hnis|es?V2fjVB2ORpKYKmkh#~)u_Ba}S_{i< z>zP-!2D@QrWY}^k(0?W7KmUcx`P-oXhX-dv*Z=4A;HZoLv6W(24`s$` z!hfr(>Wz}&g_)P~yoS7Me-kwfG5&r4qlnAm{fn#XZ~OiR4`|T`eKCvbtw!!Wd?7-1 z00;t-ENrJ?=WWq+#?n^^B^SKnPBt@6?JKn^+I9EOY@b)%|1;|w%O;VxF}X!D`M3DV zM&uU`k)hO%=dR|#=r_lQ!Xh?haAgL+%js-I<@+(F-n7p$_j6dQ)Y>Y z2zi(#pg%w4M@XaC2Rnls6d}maAj{ZSG8ET++?hW?B|`K83`A;Cb10S1%H`O`ga#Dsn*<6+!8)H-zOO%Bq(7dXj(i!R(UiepYuPI6)m#FW^D;%WF9@?5OA{4Qax0vj? zzDW$#2hYn0kvPJaxkFuII@u!BSKoUUo4I*okqJ2mY|<564cilpzye;@Kh(?cGrYNh#LM1Ehje- z?U$ZX6O{`k4_Jsi|4KiOE2&V6sS*SR^Old{J!j5I)-o0GOEd-Q?-nZPpE!+}kWhE{ zi`XcA_cfPyYZ)@gQ*SO~p!M79BIkU1*(Atjt0!E`to2)Mi`~6@_3nj6Dq|l^OtIb| zQxfBpaK<%|&eZ?+3{i}j&6A64{u?1Wse38G#gxCRBQS=eYhIx!DSAXK?eprBubvq? z!;JBnanlhM9=Pki9Vx4?ua^3p|Bgy%a;3e|9NQyI$kjpdSNKONv z6ci5h<1}%>`+!g)wuHXm3bV^C04bTp#pjrW%2Q>t=-q5Y`!=n(9A}Tw2nDK+!bL8P zJP3RIVC7qsIqL{vpo zex8x)nI(jt4$F?CfvIpB(~vY~*@rPkQRoi7M7GR!j5RGDYX0gaKW-t4Qw$@fPQ)H~ z#8Cub#E5ze00N3aabY75yZEaefe%Nbnd(VVIzN|}780qH*JZ`^+&rx%N<)SHFB7j< zH3HW8|C}5+`F{@24o*7z-&TrbkC_H@o4`lD{L4Q4_q;DL-ugE%8s_bc7y6qr9A?8d z-s|TdpU8r!`)_4N%xoZ)w#005Z5vY~&9h*2)E;8le7PjsHbg#iERnidLA-TLl8(_) zuf~T2#-XlLyC7NZvNdTU#}ym3UX03xu$Lkqps^Yjhc@QvYfB9CSZy1GOW3es;Tq8~ zp;M46K9aKnn*uQ~fpfmcrtpKb#YQN;PbYl44Ns0*Fk^!nc$BT88M-e!>ho?2@i5A} z$+%=&jjjoFKIvRGZUNl85sS-V+3jnOa$8e=dwaY^XE?_ZI+u{da=~~Boh|1lODSv> zLf7YUS6wdu6`t-bEeF=ff5YK$=)`|II63L!KWwE)HM;P~b8Uj4=K*LdfzZ>wD9>Sm zvLVEYw{WlBrVYFiInga{{5t9@`rkDqR@X!DiadfxBw3q&)g1z?J79Z&$_G3-l~a1B zGtf9hANKfv^^lA~;}3-qGsyyGRJxek60I$tiD6kcqh4_@?-|A+NM#wCiZEW2Y(P(k#pBVr6z3G9#@$p(qL<}6)N1TTp!m}Of4nA zv74=Mo!)EDOY1nPddhj8rZAXHQJlWw#}-@TZ^K(ZKUVrlmP-CFqHV1116ITT4^GYw zT>r1L!!G{wR!S2Ftb(rO>`il{6irPAq^knkXfCYQqOPqT$lz_Sc_R@h#-9LJ1N|9r z5dDHV^p8J!`}_N5e>%vn_6CrBTV3<+wXs zN(nEM*2L1}{WP;mNnubn^78t>_2NT{}jTewKDz`T5tYN5Kr&(4lV17jms0=4qE87xgjhpapg^+JMm9{UuX@y z?#{5$W!T4Z^`%eTr*-e;a)*!a_N%z#i+*TouQea0G@!|DSMdN;8DoT4$&qMw;TB53 zp^+#ExTZz%>^>z$n%=Mv%Ceq7g`VpMD>WK?Hzm z6re+&i_)|D`ZI7uUo%FZd8ln)>d+&`qd*JW=|9{AyH)3>F>CagvRn^S^-0{sSA1Y%8Ld5WWEFHcd34M?&FMQlJ5Z$ux zx=JnkNUQwrRCd@-@Rf~KHWJuPG=9Bd>{Fv0H6;&F&E)Y#G z8Ji*M=AAQ+y?Lr}oT7UQ{W-;Ta;%d2B5<>g{@kRJ=R%|ec_S^DS<8LdQ<;$5hUkLQ z7s}y>J+PBTO!Go>9BITnsPY+94b0Hho_?~y@oJuc7iq-y{~Q*duW@-L`~ZFjI8L1h zxE9EFqhB)??&pna>u3EJHg&PdgoyB4*$~Cw#cG9-_bX<_YF;v;RSBgY@T@TC-F{nC3=plzr-7Mwa_#4+MlVt-)gNCuW}!NimA|tYy?qr-iwC^!&=>#i zE&@OPQf~iIi3c`s{}~<}7xI6dbnpMRQws6FGznct2(T=7MY#irs)8E&f2iuF8AX3` zeLnR5E%EzMKO4RuCLq`U!;Li#9KB7*I2K6D(SvJnI(}B2lCAO1vX$=a7BlS{QnEde zO*xBXOKJD#NgT{oSbHYKl|(-wp^9lxe9KnF(#&={?ohZ$UD2n~@QIs9LX+)XP< z0d@YLM?;tYpPii!JO00oQt(KW;Z`v+Gzus3&!h+tJR z1cf5#w(g?#K&u=_JvcOWA@$+EDfz(atMBc*jf1JPWja^WO_g%`@5!aNBp0an|2%a4 z{|^s3|NpHNL9!AOhS^eR)#7r>j6v6Wwd7sBQ}L6dM~@)Hjh7E#)o3uqFK+Bkk* zlMv*H12unD&Y!;dUZVr3Z?mNx6YeIESG(KwZ-8bu zuuYEC7H?y#CdnsNw3)B`$Q7q%jaR^4p7Xi+e*Q;|{6|x`hS%S<^5604@ri5yKOT1e zpIa%Cpvnx+>l688;^vl8o@``T2j0ce0?=735g;+Ry*PjK+DY`5g<-#s$OuLQ{6S>e zyigf7O%ctJ@8qD(#3AZaL2g*9WLGKM2?WZTl}Qd_;>sFnfk9L%mk~+@xoS~P%vYJ? zSeg7LT2{>0*~kVkNv_pb=@Mf9_8nn11VWt}d3f$7Bg4%3O*az>qQzo*d;IGynJ z=W%FN_f7$cSxRR?>VM|tmDMwGGY#a-NTJgeHS@(*&(n3xBA;)bDW90%L-Uxua-PxD zNSDh8D%_gyVQoi^gB51e+y;De=bda33uMfj;-I-)*T6%jc|<^G5^SXK-{daxWP;e4 zF?2;jbb0Ob`?Kh-bBaNKCnh2K1t)!SsBoM(4$@n3~r^(?|Hm6be?2gG9vzVW_;3=}qwgyMM)FXDIL z`2He-c3Q0LT7fL*`Vdp=Yl)-t0+oH2MiDpw|S^x9Lyq;%{ zikg;L}Xp%LmLDP4<7yp z8(`uaWeFg?f%+lE^HNa78M8CWiubOC9E(QRvR?J8>SD3=mTc*pw2a^gMeYujAC0}q z@z`ww4#qJ_CD(9Z8ow+9*t)u$F+__)R(n|gXywW*R?|P$_wIj2Etb-R8 zSbgKzFzc_o=Un$av5;cdlA8a$n6}#(CTv1d&wa5{c;_VImE5=|bEkR5Ua?g@*^sG* zz8$2yEK&K?uSL;InGC*}MUmVMK%)ov-@cwS8lJ!_!uagUX}a?gsjb#LY!AMbv&MRC z#MXez9X8gc*O^OcD0c5Jz`ojn*&?}478N>DgFTcVdkY2MG*pW4R%=tMDeQ!XAjpgc zxgM4&4QWm~ zxb?$qglLRX#O2TDVn6K%ld|mD76hev)$a+pO9j*=d`$n!NL)9b=8R-DJ;;RLg@5|Y zO8NaC9lwM73E8_06rFGl>5b(~ONMhi!t61bTHmH6Pq z_L3X7B&L`6(TL?GA-I&UamY^t+|mI*CB99=eVPN`R zKA$p?$a;5;3YJab<4mUg36^sD&sI(Qnw2{J|9I&7|DGP5b@9KpQj8RoYjXi+%j9}x zTTAiE3b|cbp3)U;TQg^^Q@J+C-^$jWwzVXmW2JJ=8YOG}^xkciEkOC?gD?1@)~A`@ zmVK;gZLM6kb%u~G3u|Xcs4i9VpNN0I`TQTp!?VKu&&f%r|8J!z(jn6wuIUO$?VQ#E zplbCL7eRWnH@gbbwcFhW>7nk>n{lZzp=nHL8|9Wu2$L98#EkBB@jBma9Te zU4G3fSFM%Q`Z*_4%|_5AQ~ji`5cN@LqXtMyzsdZmdUt(BQo7>gotXa7msdo&3LzV#)t%t=FsvD5%S+16kuI)CvHUNHp~nb571uT7q7R zqOzcWc}kr@;jo12p!Zl46+&12Xfz3hQ0H*=B}t3fj%_E+DVp)wNp%@P?u5I~p;X9! z#_QbGjKFpB-|3Ni|9^IJ+};0grPx8u*XIHtH_tMmU+tz_a0f8@v&1d)b^893gcvhX zYb9&Rb`7GwTCelh=`LVSYCBQOX!#ks4pgs9-Ku=aegw;8Uic_n309Ost-a7p1g$!J zAA6`*6ZwxY(yPs#K7ARuT>i7;j%?EYcY5sRe?2%n?(%$b)YDmnw)@?$VgmjzW+Jy;=gUB zh^_o~mckUr_dm!bmp3glDjnk1B?zkh)Kd7%T5Vq7n^w(&A^9nko=DoO!m^Fnr`lHv zdV2ELDBM*}aw{pX3ex8%?v*ZA#ZrBlLft3rbEucOnNUc4YW+jd6VMiD6zP-DU06ItAuBt&$GT%#tE;)I_lzhE=3=CHzdH z@R1liyJD3J`Jd2-h`?}l1)xU$KRGx#cIE%GqfY+cN)c4?2es7edibNaPFq<&YxWe6 zeX{-D?2%7az1{O3-ON%b^tY$cD0KI&v;lUutR&_;5~hk^hJeI*{M9`$WAYP2 z5eia5o7zHajhcG62?=i#6aYp5PDSYI_%A6KLmcsLV;q5m;5gN+qOkA1k*gI@Pt`Y!{G=NFEMjP5yNr|o3w&}g?F3BQ2a zZ3NK;i{704k7a*GMPhkx2xiZNA!ebo3WkSN&`v184-|+D4_^i|awoxRj%vX0^Dqun} zp*USE8bNuu-Gcv9j1O{?4sO+6O-dqV$ddD7s;jc6150mGlhc1WLNZ~b_?_cq^hi7M9{NJquzm5T!6tR^rJ!FDAz0NFku6yTJhXuJo6%!*?WK!!wsUSTmGQ!)jQIGx~FH!kd* z1W}k0DhWr3K7bv4z_XwFvTZ>l%8}z6M^_)@pYwd>6^ zaZ#l{=-Av-mN@pr24Q#veFsWs$oe4f^&= z-ff?CY)EIRmc%~g7qMSfsn!1&KTfk~l{_$Y`rqNvi5vfAcyQF|f7>WB-KkpRb*p?D z?s8gQ-g@(jT{Z(|06_Ka$)f+M{+CeRZuQhvX=~Z|T4-oRKJCQ))AQIa=AUY{#Err8 zud*S&QnGbQREBddFk}cxNNkW*zvFuvGcZB{oH5P^3Cj~7LyEwR&0w?;szcUFs1V{o zqMYd>P1W8oL%wHL{y`**rDR z314Ul`eNQ{oohY~1-SeSRPO&T^U(~j_`s*8LOBfMBYgUtZN`Q-9A#v5yQ)}cacO69 z$ya%OCYFt;ZMkUGX=-0~sn!4N$RTf*xd5!c|8wJi9vu!l|F5kSPXv@rT>$!fSxz@B zgSB~0aZVzB7@W&L|0#JQ#W6>53DwaJ($eVS&p-Ul1%+Df>Mx&{&(Afj_3AZWx$fTY z(~?3<_rT|K@#m)opPJgb-e_7aul^bm)b8$Y#k;@xQg?s;)%nOS|H_20PN)2IN@7tb3`90PLYG1)ujb0W4Z&-m%sN5LDP)h zc9(D$@5*OZO6k86HCFNa(4~(4pA_T&oD948KU*nQmM%{A7g`<^;U`q^2O(YuBu*iY z!30H9fGEwvPAEoznY=NN79fBzn7|}KF@WO~QNZaAj_);h5ehksGny|$UEomkLs86y z`hZZ1g2?0?=Q(ylz8@iwK*lxvlz@IpeuUGgzapp6`@Rnb8MmopHhCMv{s^Ner|Qon za$vA)3b=TzCzXM|m{I=s9MP1|)sN?I-|&I`_4eIW--MSFeHqm#&bW3;0Gp6U{ijf% zI1`qz)wuHrNBT8jh{UQrBITp-2;)@7+DIu3QUe5uqs1N=&C<+m0;l<^XJdKM-^*-5 zmnpbMDFX?le5D`*LOtLD22S}-;VXWRK4|rge-)eN5zm6*otj6g$uq>AfSlNqLj-eYBvs?hT4HcG=2g8SNy+X@aMVw?=8|(07qnw)C>>I zb@B1jkDj5H(fWV+)d)qcU(_ z7n^_Jruu7lRRQYH%10ktsy{A?g+>-Zda_GidbvnXlU25omh~_vzZ3(_p z>gfN`u;BlFc-qnbt&}?YpKpNn1Yfo-r};T-%Z{OL8qL-!T9*9ey??Vff~?nqA6R{D znk6KNGR#sG2Q|*RRSj1r{{}Ek^sV(WS44y`v-`3I@mHcHkV^^P#nA%%B%%Eb#L{tv zaD=jGhByZK;!Azvo}}QXKeM0vo|U&vX3GUS=!&=0(0@FI_vm^SMKYqxa*Uvk{vRH? z@xO)#-TR;Ilv+D_aRanx1P+jLj^OF7Uj9#JQ6#Tu+o}Oxyf#k%onG7V0JrhVe82&y zd4Ye)Ig_*;{NKZqgO2`hqtwxV zX9Kk70S16_KH&7?nuB8Gfz#3^q}sP-AH{CJSo2VEC7alY`qu^|WgrqOml=rIL|i(T znTN!kbHB3yZKl-Ge?pfu`WU5#{tt&oj{JXkc6KoA=>IlKE&W#;pp@|Ie;Yrud61L( zLH?J)B6iYga%)y|0)kj=EV^m66zG+CLE3%vMOBM17DDw6ZdW3?fnOgU5N&N~A+_ySvkGYdp!G(=s^s~82>8vbfxtALo@K*^Ys4ztr%59VlWY8KBnw=kovI!O21Q{$nepj{j#N zftJ($bn|l6&+4H5vL~zFR*|zY*|-*G1ea=~!{yCZ*5LABPD+1s)}o`oU8$%4QWo6k z{m<~YkpJP}==8Ls|Jx|F^grJKji|pCoo{8kwkk)RvawrK*4R9_Qb9aTg|a{nWf!(i zv9X9OnQml9^wbDe#${0hGUJLFi%=DYMU8QZc%EhNy$e==W?CS#RlsVyU12$;e%NF+ zi&~KSOQAr@p2y_?Dv#j++1 z^uQ%ydYhBR7W#g)#XJGA=LLY#Y)k6yyU#z`z%a+E-V zD2Q;32EDCZvUXGlb1W8hkz zh&_PQzc4^V@(>y5?JqLQ8pWeoN+?s{PzZh?^x;Jbxc-HTEBhUara*k`orfXj1O!Il zdxpTb6vpWb@FSUtKyNyiUZlZ468Zpe3=&GhS->0a0mwi^;(PB+D&W836kx`Q3kuR` z0hpK?l|}%X2&xd_VF@TQ9^(MR2vC#|hEqZpdmw-*jL1D8Q~@4j*u#hsnIJHscn(v4 z>PG;kB*bH^q_vcY5f`u(QxK>r*eih~D80y$V9n8>S5luZ(3nIKdE}fSfDDOLiF+WN zA%zL1AcpCTf8^sS0i>ULKnDJj_sdcFi`X&fLlWTt^8qE4Oz;S&D11=@Y#+Rw#bG4a zjJ#Lm*bxds%#sK$bYMSgSCq{NPAAWBybEAV(g~t^2c;+u`5usg=nZ^Jr&b4Fgh>J^ zic!{>ySKuIW>5>d_W6^s@jonRV*1kw~E25?*gVvb3q5@n2K zG)y%QgI@1qA{4Y&Fh$0}9v++=>>nKN9~@>i)OppFj`o8{gnxW_`$~iB^}Z27CdY(M zWq)u)W+{LXXXa8SkX6N~sn89lC{AT~e?C>WWSlMfHIih=_sYSbFBvLd-aVn!=ju4o_5CJ%cID(@H^=2ZTsRHewC#VriVJeTH z!1YbGJbDZ%`jCorI27McQt&L;1;c~GGw>Et3}3wj7lbB+%1J*T?Sb2v zI!EE4_wRrG?~*zC_rLxRp8yC_3PUu7^nq^`Kkz}Xx4+KP>s7L#J4B~UF0kf6V1g(b zExq`WbS_no7r zBAHvuKH#Jx}J`S}f!-np0k#>qxaiAkS`d! zDNH6k8IhHP!ZA$w3|@|TceHf%%%H~8BwFOenxcQqFqLGf7tAOp+|h#fiNvai__c@y z6pxB0c25j)Iup}Rg9)c#u*XGgM1>rn=t-VMSkKj-NLB>LV;o^Y3s9V5PS(YG!&y2Z z6#o;2J&G8LB1Gj6S$7nTDa5e^JY$;S*;}^P<8&b)31=5-TDWe5`BoJNK*$v+wA;yr z$PbXTO}13UU7C zkS==7Ku{#uOUSvXUV=fd_oJT9fW$1p!HmpUw9rz7H5h(0ML*dDaw?$bkCPzp1Py@P znt-AJ@wqJGhGP?EFM}!4At@0w=llzK=HxlzGZT2aeq+L^gxaS)bM6;>ee6>L zQ?a&uqr{8y!-HdwOrb#wb_i!F;W9wLIbtt6nX)^R2-t147@*Fb7!QmhAOx|VT2bbw z$DBtPpt1ulsD_ww7%vo)5HX?`Cby#?BKHK4aZb`@RhALOEjYh=1uouQy}G=+e0O!b*L(f9 z>zmiNx8U6kxO{v4=JNHcJ#cw-@#gzimsj6{XFputefRGBJMiZ6?d9D$Z?kJcd-qN6 z?dzM1@6NC8&R<@>xxD*v4}5cZcf}!o^X>+mgX{B~yUUC3-<;oo>+f%_-`&3616S{^ z_Ajr#xw*Xh_VwG>S9g0HtKQw^-J92gUQbIXMMfjoEMrPPl3HOt(f|I}|I4IIm6A+) z6?;?327<&8PE}=!b`j)U6V-gBD9u#an3YHC?bzsGWY%3 z>s`izIN=acAzr*E&{fcJ{X4+jT=PsR%n!4y$V{e^DE zf5?=36CHt8I7ZkqqyrNI+{-1nW zo{e?^jv1nMG z6lMRtd42xs?d!ob+(aL>_y2DE&%@zC=l{E%lHG#5k$Jj$y+8d4T)`=4cDKO{t|hYT;k-*>*5MbQB*gz{{hg0bP@jEdk}4gc`zy%p#(yWPceykMaFmnAiZa&-sV~ic%L>{w=E!zzBiY zAB0&g0+(@$=okj*1^7Guu)lL7l^fYo{q_Wtaai00960GOP=<0B8&V Du(4)S diff --git a/stable/readarr/20.2.0/ix_values.yaml b/stable/readarr/20.2.0/ix_values.yaml deleted file mode 100644 index a29594bbf9..0000000000 --- a/stable/readarr/20.2.0/ix_values.yaml +++ /dev/null @@ -1,109 +0,0 @@ -image: - repository: ghcr.io/onedr0p/readarr-develop - pullPolicy: IfNotPresent - tag: 0.3.18.2411@sha256:a1d9eb2001d499322e00876106a675c36b6f750cd253843595bb8e022a54f37a -exportarrImage: - repository: ghcr.io/onedr0p/exportarr - pullPolicy: IfNotPresent - tag: v1.6.1@sha256:60cf3d44aa0b7dea2a65160b2e2e373c1ae38cd6b12a45fe81b8afa45ac31c22 -securityContext: - container: - readOnlyRootFilesystem: false -service: - main: - ports: - main: - port: 8787 - metrics: - enabled: true - type: ClusterIP - targetSelector: exportarr - ports: - metrics: - enabled: true - port: 8788 - targetSelector: exportarr -workload: - main: - podSpec: - containers: - main: - probes: - liveness: - enabled: true - type: http - path: /ping - readiness: - enabled: true - type: http - path: /ping - startup: - enabled: true - type: http - path: /ping - env: - READARR__PORT: "{{ .Values.service.main.ports.main.port }}" - READARR__AUTHENTICATION_METHOD: "None" - exportarr: - enabled: true - type: Deployment - strategy: RollingUpdate - replicas: 1 - podSpec: - containers: - exportarr: - primary: true - enabled: true - imageSelector: exportarrImage - args: - - readarr - 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 - CONFIG: "/config/config.xml" -persistence: - config: - enabled: true - targetSelector: - main: - main: - mountPath: /config - exportarr: - exportarr: - mountPath: /config - readOnly: true -metrics: - main: - enabled: true - type: "servicemonitor" - endpoints: - - port: metrics - path: /metrics - targetSelector: metrics - prometheusRule: - enabled: false -portal: - open: - enabled: true -updated: true diff --git a/stable/readarr/20.2.0/questions.yaml b/stable/readarr/20.2.0/questions.yaml deleted file mode 100755 index 640b272465..0000000000 --- a/stable/readarr/20.2.0/questions.yaml +++ /dev/null @@ -1,2899 +0,0 @@ -groups: - - name: Container Image - description: Image to be used for container - - name: General Settings - description: General Deployment Settings - - name: Workload Settings - description: Workload Settings - - name: App Configuration - description: App Specific Config Options - - name: Networking and Services - description: Configure Network and Services for Container - - name: Storage and Persistence - description: Persist and Share Data that is Separate from the Container - - name: Ingress - description: Ingress Configuration - - name: Security and Permissions - description: Configure Security Context and Permissions - - name: Resources and Devices - description: "Specify Resources/Devices to be Allocated to Workload" - - name: Middlewares - description: Traefik Middlewares - - name: Metrics - description: Metrics - - name: Addons - description: Addon Configuration - - name: Backup Configuration - description: Configure Velero Backup Schedule - - name: Advanced - description: Advanced Configuration - - name: Postgresql - description: Postgresql - - name: Documentation - description: Documentation - -portals: - open: - protocols: - - "$kubernetes-resource_configmap_tcportal-open_protocol" - host: - - "$kubernetes-resource_configmap_tcportal-open_host" - ports: - - "$kubernetes-resource_configmap_tcportal-open_port" - -questions: - - variable: global - group: General Settings - label: "Global Settings" - schema: - additional_attrs: true - type: dict - attrs: - - variable: stopAll - label: Stop All - description: "Stops All Running pods and hibernates cnpg" - schema: - type: boolean - default: false - - - variable: workload - group: "Workload Settings" - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: main - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: type - label: Type (Advanced) - schema: - type: string - default: Deployment - enum: - - value: Deployment - description: Deployment - - value: DaemonSet - description: DaemonSet - - - variable: replicas - label: Replicas (Advanced) - description: Set the number of Replicas - schema: - type: int - show_if: [["type", "!=", "DaemonSet"]] - default: 1 - - - variable: podSpec - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: containers - label: Containers - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: Main Container - schema: - additional_attrs: true - type: dict - attrs: - - - variable: env - group: App Configuration - label: Image Environment - schema: - additional_attrs: true - type: dict - attrs: - - variable: READARR__AUTHENTICATION_METHOD - label: Auth Method - description: Sets the auth method. - schema: - type: string - default: "" - enum: - - value: "" - description: In-App Setting - - value: None - description: 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 Settings" - schema: - type: string - default: "Etc/UTC" - $ref: - - "definitions/timezone" - - - variable: podOptions - group: "General Settings" - label: "Global Pod Options (Advanced)" - schema: - additional_attrs: true - type: dict - attrs: - - variable: expertPodOpts - label: "Expert - Pod Options" - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hostNetwork - label: "Host Networking" - schema: - type: boolean - default: false - - variable: dnsConfig - label: "DNS Configuration" - schema: - type: dict - additional_attrs: true - attrs: - - variable: options - label: "Options" - schema: - type: list - default: [{"name": "ndots", "value": "1"}] - items: - - variable: optionsEntry - label: "Option Entry" - schema: - type: dict - additional_attrs: true - attrs: - - variable: name - label: "Name" - schema: - type: string - required: true - - variable: value - label: "Value" - schema: - type: string - - variable: nameservers - label: "Nameservers" - schema: - type: list - default: [] - items: - - variable: nsEntry - label: "Nameserver Entry" - schema: - type: string - required: true - - variable: searches - label: "Searches" - schema: - type: list - default: [] - items: - - variable: searchEntry - label: "Search Entry" - schema: - type: string - required: true - - - variable: imagePullSecretList - group: "General Settings" - label: "Image Pull Secrets" - schema: - type: list - default: [] - items: - - variable: pullsecretentry - label: "Pull Secret" - schema: - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: true - - variable: data - label: Data - schema: - type: dict - additional_attrs: true - attrs: - - variable: registry - label: "Registry" - schema: - type: string - required: true - default: "https://index.docker.io/v1/" - - variable: username - label: "Username" - schema: - type: string - required: true - default: "" - - variable: password - label: "Password" - schema: - type: string - required: true - private: true - default: "" - - variable: email - label: "Email" - schema: - type: string - required: true - default: "" - - - variable: service - group: Networking and Services - label: Configure Service(s) - schema: - additional_attrs: true - type: dict - attrs: - - - variable: 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: 8787 - required: true - - variable: serviceexpert - group: Networking and Services - label: Show Expert Config - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - - variable: scaleExternalInterface - description: Add External Interfaces - label: Add external Interfaces - group: Networking - schema: - type: list - items: - - variable: interfaceConfiguration - description: Interface Configuration - label: Interface Configuration - schema: - additional_attrs: true - type: dict - $ref: - - "normalize/interfaceConfiguration" - attrs: - - variable: hostInterface - description: Please Specify Host Interface - label: Host Interface - schema: - type: string - required: true - $ref: - - "definitions/interface" - - variable: ipam - description: Define how IP Address will be managed - label: IP Address Management - schema: - additional_attrs: true - type: dict - required: true - attrs: - - variable: type - description: Specify type for IPAM - label: IPAM Type - schema: - type: string - required: true - enum: - - value: dhcp - description: Use DHCP - - value: static - description: Use Static IP - - variable: staticIPConfigurations - label: Static IP Addresses - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticIP - label: Static IP - schema: - type: ipaddr - cidr: true - - variable: staticRoutes - label: Static Routes - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticRouteConfiguration - label: Static Route Configuration - schema: - additional_attrs: true - type: dict - attrs: - - variable: destination - label: Destination - schema: - type: ipaddr - cidr: true - required: true - - variable: gateway - label: Gateway - schema: - type: ipaddr - cidr: false - required: true - - - variable: serviceList - label: Add Manual Custom Services - group: Networking and Services - schema: - type: list - default: [] - items: - - variable: serviceListEntry - label: Custom Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the service - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: LoadBalancer - description: LoadBalancer (Expose Ports) - - value: ClusterIP - description: ClusterIP (Do Not Expose Ports) - - value: Simple - description: Deprecated CHANGE THIS - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: advancedsvcset - label: Show Advanced Service Settings - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: externalIPs - label: "External IP's" - description: "External IP's" - schema: - type: list - default: [] - items: - - variable: externalIP - label: External IP - schema: - type: string - - variable: ipFamilyPolicy - label: IP Family Policy - description: Specify the IP Policy - schema: - type: string - default: SingleStack - enum: - - value: SingleStack - description: SingleStack - - value: PreferDualStack - description: PreferDualStack - - value: RequireDualStack - description: RequireDualStack - - variable: ipFamilies - label: IP Families - description: (Advanced) The IP Families that should be used - schema: - type: list - default: [] - items: - - variable: ipFamily - label: IP Family - schema: - type: string - - variable: portsList - label: Additional Service Ports - schema: - type: list - default: [] - items: - - variable: portsListEntry - label: Custom ports - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Port - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Port Name - schema: - type: string - default: "" - - variable: protocol - label: Port Type - schema: - type: string - default: tcp - enum: - - value: http - description: HTTP - - value: https - description: HTTPS - - value: tcp - description: TCP - - value: udp - description: UDP - - variable: targetPort - label: Target Port - description: This port exposes the container port on the service - schema: - type: int - required: true - - variable: port - label: Container Port - schema: - type: int - required: true - - - variable: persistence - label: Integrated Persistent Storage - description: Integrated Persistent Storage - group: Storage and 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: 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: Storage and Persistence - schema: - type: list - default: [] - items: - - variable: persistenceListEntry - label: Custom Storage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the storage - schema: - type: boolean - default: true - hidden: true - - variable: type - label: Type of Storage - description: Sets the persistence type, Anything other than PVC could break rollback! - schema: - type: string - default: hostPath - enum: - - value: pvc - description: PVC - - value: hostPath - description: Host Path - - value: emptyDir - description: emptyDir - - value: nfs - description: NFS Share - - variable: server - label: NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: path - label: Path on NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: iscsi - label: iSCSI Options - schema: - show_if: [["type", "=", "iscsi"]] - type: dict - additional_attrs: true - attrs: - - variable: targetPortal - label: targetPortal - schema: - type: string - required: true - default: "" - - variable: iqn - label: iqn - schema: - type: string - required: true - default: "" - - variable: lun - label: lun - schema: - type: int - default: 0 - - variable: authSession - label: authSession - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: authDiscovery - label: authDiscovery - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: autoPermissions - label: Automatic Permissions Configuration - description: Automatically set permissions - schema: - show_if: [["type", "!=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: chown - label: Run CHOWN - description: | - It will run CHOWN on the path with the given fsGroup - schema: - type: boolean - default: false - - variable: chmod - label: Run CHMOD - description: | - It will run CHMOD on the path with the given value
          - Format should be 3 digits, e.g. 770 - schema: - type: string - valid_chars: '[0-9]{3}' - default: "" - - variable: recursive - label: Recursive - description: | - It will run CHOWN and CHMOD recursively - schema: - type: boolean - default: false - - variable: readOnly - label: Read Only - schema: - type: boolean - default: false - - variable: hostPath - label: Host Path - description: Path inside the container the storage is mounted - schema: - show_if: [["type", "=", "hostPath"]] - type: hostpath - - variable: mountPath - label: Mount Path - description: Path inside the container the storage is mounted - schema: - type: string - default: "" - required: true - valid_chars: '^\/([a-zA-Z0-9._-]+(\s?[a-zA-Z0-9._-]+|\/?))+$' - - variable: medium - label: EmptyDir Medium - schema: - show_if: [["type", "=", "emptyDir"]] - type: string - default: "" - enum: - - value: "" - description: Default - - value: Memory - description: Memory - - variable: size - label: Size Quotum of Storage - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: 256Gi - - variable: storageClass - label: 'storageClass (Advanced)' - description: 'sets the storageClass to something other than iX default. Only for advanced usecases!' - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: "" - - variable: static - label: 'Static Fixed PVC Bindings (Experimental)' - description: Link a PVC to a specific storage location - schema: - show_if: [["type", "=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: mode - label: mode - description: | - disabled: use normal dynamic PVCs - smb: connect to an SMB share - nfs: connect to an NFS share - schema: - type: string - default: "disabled" - enum: - - value: "disabled" - description: disabled - - value: smb - description: smb - - value: nfs - description: nfs - - variable: server - label: Server - description: server to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "myserver" - - variable: share - label: Share - description: share to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "/myshare" - - variable: user - label: User - description: connecting user - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "myuser" - - variable: domain - label: Domain - description: user domain - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: password - label: Password - description: connecting password - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: volumeSnapshots - label: 'Volume Snapshots (Experimental)' - description: Add an entry to the list to force creation of a volumeSnapshot of this PVC - schema: - show_if: [["type", "=", "pvc"]] - type: list - default: [] - items: - - variable: volumeSnapshotEntry - label: Custom volumeSnapshot - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - description: 'WARNING: renaming this, means deletion of the snapshot with the old name!' - schema: - type: string - default: "mysnapshot" - required: true - - variable: volumeSnapshotClassName - label: 'volumeSnapshot Class Name (Advanced)' - description: For use with PVCs using a non-default storageClass - schema: - type: string - default: "" - - - variable: ingress - label: "" - group: Ingress - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: Main Ingress - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name (Optional) - description: Defaults to chart name - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description (Optional) - description: Defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: icon - label: Icon (Optional) - description: Defaults to chart icon - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - variable: widget - label: Widget Settings - schema: - type: dict - additional_attrs: true - show_if: [["enabled", "=", true]] - attrs: - - variable: enabled - label: Enable Widget - description: When disabled all widget annotations are skipped. - schema: - type: boolean - default: true - - variable: custom - label: Options - schema: - type: dict - additional_attrs: true - attrs: - - variable: key - label: API-key (key) - schema: - type: string - default: "" - - variable: customkv - label: Custom Options - schema: - type: list - default: [] - items: - - variable: option - label: Option - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - default: "" - required: true - - variable: value - label: Value - schema: - type: string - default: "" - required: true - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - - variable: ingressList - label: Add Manual Custom Ingresses - group: Ingress - schema: - type: list - default: [] - items: - - variable: ingressListEntry - label: Custom Ingress - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: ingressClassName - label: IngressClass Name - schema: - type: string - default: "" - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: overrideService - label: Linked Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Service Name - schema: - type: string - default: "" - - variable: port - label: Service Port - schema: - type: int - - variable: tls - label: TLS-Settings - schema: - type: list - default: [] - show_if: [["certificateIssuer", "=", ""]] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your Cert-Manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: Use Custom Secret (Advanced) - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: "Allow Cross Origin Requests" - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: namespace - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description - description: defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - - variable: securityContext - group: Security and Permissions - label: Security Context - schema: - additional_attrs: true - type: dict - attrs: - - variable: container - label: Container - schema: - additional_attrs: true - type: dict - attrs: - # Settings from questions.yaml get appended here on a per-app basis - - - variable: runAsUser - label: "runAsUser" - description: "The UserID of the user running the application" - schema: - type: int - default: 568 - - variable: runAsGroup - label: "runAsGroup" - description: "The groupID 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 and Devices - label: "Resource Limits" - schema: - additional_attrs: true - type: dict - attrs: - - variable: limits - label: Advanced Limit Resource Consumption - schema: - additional_attrs: true - type: dict - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 4000m - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: RAM - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 8Gi - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: 'gpu.intel.com/i915' - label: Add Intel i915 GPUs - schema: - type: int - default: 0 - - variable: 'nvidia.com/gpu' - label: Add NVIDIA GPUs (Experimental) - schema: - type: int - default: 0 - - variable: 'amd.com/gpu' - label: Add AMD GPUs - schema: - type: int - default: 0 - - variable: requests - label: "Minimum Resources Required (request)" - schema: - additional_attrs: true - type: dict - hidden: true - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 10m - hidden: true - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: "RAM" - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 50Mi - hidden: true - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: deviceList - label: Mount USB Devices - group: Resources and Devices - schema: - type: list - default: [] - items: - - variable: deviceListEntry - label: Device - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Storage - schema: - type: boolean - default: true - - variable: type - label: (Advanced) Type of Storage - description: Sets the persistence type - schema: - type: string - default: device - hidden: true - - variable: readOnly - label: readOnly - schema: - type: boolean - default: false - - variable: hostPath - label: Host Device Path - description: Path to the device on the host system - schema: - type: path - - variable: mountPath - label: Container Device Path - description: Path inside the container the device is mounted - schema: - type: string - default: "/dev/ttyACM0" - - - variable: metrics - group: Metrics - label: Prometheus Metrics - schema: - additional_attrs: true - type: dict - attrs: - - variable: main - label: Main Metrics - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - description: Enable Prometheus Metrics - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - - variable: prometheusRule - label: PrometheusRule - description: Enable and configure Prometheus Rules for the App. - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - description: Enable Prometheus Metrics - schema: - type: boolean - default: false - # TODO: Rule List section - -# - variable: horizontalPodAutoscaler -# group: Advanced -# label: (Advanced) Horizontal Pod Autoscaler -# schema: -# type: list -# default: [] -# items: -# - variable: hpaEntry -# label: HPA Entry -# schema: -# additional_attrs: true -# type: dict -# attrs: -# - variable: name -# label: Name -# schema: -# type: string -# required: true -# default: "" -# - variable: enabled -# label: Enabled -# schema: -# type: boolean -# default: false -# show_subquestions_if: true -# subquestions: -# - variable: target -# label: Target -# description: Deployment name, Defaults to Main Deployment -# schema: -# type: string -# default: "" -# - variable: minReplicas -# label: Minimum Replicas -# schema: -# type: int -# default: 1 -# - variable: maxReplicas -# label: Maximum Replicas -# schema: -# type: int -# default: 5 -# - variable: targetCPUUtilizationPercentage -# label: Target CPU Utilization Percentage -# schema: -# type: int -# default: 80 -# - variable: targetMemoryUtilizationPercentage -# label: Target Memory Utilization Percentage -# schema: -# type: int -# default: 80 - - variable: networkPolicy - group: Advanced - label: (Advanced) Network Policy - schema: - type: list - default: [] - items: - - variable: netPolicyEntry - label: Network Policy Entry - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - default: "" - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: policyType - label: Policy Type - schema: - type: string - default: "" - enum: - - value: "" - description: Default - - value: ingress - description: Ingress - - value: egress - description: Egress - - value: ingress-egress - description: Ingress and Egress - - variable: egress - label: Egress - schema: - type: list - default: [] - items: - - variable: egressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: to - label: To - schema: - type: list - default: [] - items: - - variable: toEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - variable: ingress - label: Ingress - schema: - type: list - default: [] - items: - - variable: ingressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: from - label: From - schema: - type: list - default: [] - items: - - variable: fromEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - - variable: addons - group: Addons - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: codeserver - label: Codeserver - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: service - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: NodePort - description: Deprecated CHANGE THIS - - value: ClusterIP - description: ClusterIP - - value: LoadBalancer - description: LoadBalancer - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: ports - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: codeserver - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - default: 36107 - - variable: ingress - label: "Ingress" - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - variable: scaleCert - label: 'Use TrueNAS SCALE Certificate (Deprecated)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: int - $ref: - - "definitions/certificate" - - variable: envList - label: Codeserver Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: netshoot - label: Netshoot - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: envList - label: Netshoot Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: vpn - label: VPN - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Type - schema: - type: string - default: disabled - enum: - - value: disabled - description: disabled - - value: gluetun - description: Gluetun - - value: tailscale - description: Tailscale - - value: openvpn - description: OpenVPN (Deprecated) - - value: wireguard - description: Wireguard (Deprecated) - - variable: openvpn - label: OpenVPN Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "openvpn"]] - attrs: - - variable: username - label: Authentication Username (Optional) - description: Authentication Username, Optional - schema: - type: string - default: "" - - variable: password - label: Authentication Password - description: Authentication Credentials - schema: - type: string - show_if: [["username", "!=", ""]] - default: "" - required: true - - variable: tailscale - label: Tailscale Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "tailscale"]] - attrs: - - variable: authkey - label: Authentication Key - description: Provide an auth key to automatically authenticate the node as your user account. - schema: - type: string - private: true - default: "" - - variable: auth_once - label: Auth Once - description: Only attempt to log in if not already logged in. - schema: - type: boolean - default: true - - variable: accept_dns - label: Accept DNS - description: Accept DNS configuration from the admin console. - schema: - type: boolean - default: false - - variable: userspace - label: Userspace - description: Userspace Networking mode allows running Tailscale where you do not have access to create a VPN tunnel device. - schema: - type: boolean - default: false - - variable: routes - label: Routes - description: Expose physical subnet routes to your entire Tailscale network. - schema: - type: string - default: "" - - variable: dest_ip - label: Destination IP - description: Tells the DNAT mechanism which Destination IP to set in the IP header, and where to send packets that are matched. - schema: - type: string - default: "" - - variable: sock5_server - label: Sock5 Server - description: The address on which to listen for SOCKS5 proxying into the tailscale net. - schema: - type: string - default: "" - - variable: outbound_http_proxy_listen - label: Outbound HTTP Proxy Listen - description: The address on which to listen for HTTP proxying into the tailscale net. - schema: - type: string - default: "" - - variable: extra_args - label: Extra Args - description: Extra Args - schema: - type: string - default: "" - - variable: daemon_extra_args - label: Tailscale Daemon Extra Args - description: Tailscale Daemon Extra Args - schema: - type: string - default: "" - - variable: killSwitch - label: Enable Killswitch - schema: - type: boolean - show_if: [["type", "!=", "disabled"]] - default: true - - variable: excludedNetworks_IPv4 - label: Killswitch Excluded IPv4 networks - description: List of Killswitch Excluded IPv4 Addresses - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv4 - label: IPv4 Network - schema: - type: string - required: true - - variable: excludedNetworks_IPv6 - label: Killswitch Excluded IPv6 networks - description: "List of Killswitch Excluded IPv6 Addresses" - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv6 - label: IPv6 Network - schema: - type: string - required: true - - variable: configFile - label: VPN Config File Location - schema: - type: string - show_if: [["type", "!=", "disabled"]] - default: "" - - - variable: envList - label: VPN Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - max_length: 10240 - - - variable: docs - group: Documentation - label: Please read the documentation at https://truecharts.org - description: Please read the documentation at -
          https://truecharts.org - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDocs - label: I have checked the documentation - schema: - type: boolean - default: true - - variable: donateNag - group: Documentation - label: Please consider supporting TrueCharts, see https://truecharts.org/sponsor - description: Please consider supporting TrueCharts, see -
          https://truecharts.org/sponsor - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDonate - label: I have considered donating - schema: - type: boolean - default: true - hidden: true - diff --git a/stable/readarr/20.2.0/templates/NOTES.txt b/stable/readarr/20.2.0/templates/NOTES.txt deleted file mode 100644 index efcb74cb77..0000000000 --- a/stable/readarr/20.2.0/templates/NOTES.txt +++ /dev/null @@ -1 +0,0 @@ -{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/readarr/20.2.0/templates/common.yaml b/stable/readarr/20.2.0/templates/common.yaml deleted file mode 100644 index 3c93f57861..0000000000 --- a/stable/readarr/20.2.0/templates/common.yaml +++ /dev/null @@ -1,11 +0,0 @@ -{{/* Make sure all variables are set properly */}} -{{- include "tc.v1.common.loader.init" . -}} - -{{/* Disable [exportarr] if requested */}} -{{- if not .Values.metrics.main.enabled -}} - {{- $_ := set .Values.workload.exportarr "enabled" false -}} - {{- $_ := set .Values.service.metrics "enabled" false -}} -{{- end -}} - -{{/* Render the templates */}} -{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/readarr/20.2.0/values.yaml b/stable/readarr/20.2.0/values.yaml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/stable/readarr/21.6.17/.helmignore b/stable/readarr/21.6.17/.helmignore deleted file mode 100644 index 77ca5567b2..0000000000 --- a/stable/readarr/21.6.17/.helmignore +++ /dev/null @@ -1,30 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ -# OWNERS file for Kubernetes -OWNERS -# helm-docs templates -*.gotmpl -# docs folder -/docs -# icon -icon.png diff --git a/stable/readarr/21.6.17/CHANGELOG.md b/stable/readarr/21.6.17/CHANGELOG.md deleted file mode 100644 index 941abb8a21..0000000000 --- a/stable/readarr/21.6.17/CHANGELOG.md +++ /dev/null @@ -1,3 +0,0 @@ -*for the complete changelog, please refer to the website* - -**Important:** \ No newline at end of file diff --git a/stable/readarr/21.6.17/Chart.yaml b/stable/readarr/21.6.17/Chart.yaml deleted file mode 100644 index 907781bab7..0000000000 --- a/stable/readarr/21.6.17/Chart.yaml +++ /dev/null @@ -1,41 +0,0 @@ -annotations: - max_scale_version: 24.04.0 - min_scale_version: 23.10.0 - 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: 0.3.23.2506 -dependencies: - - name: common - version: 20.4.1 - repository: oci://tccr.io/truecharts - condition: "" - alias: "" - tags: [] - import-values: [] -deprecated: false -description: A fork of Radarr to work with Books & AudioBooks -home: https://truecharts.org/charts/stable/readarr -icon: https://truecharts.org/img/hotlink-ok/chart-icons/readarr.webp -keywords: - - readarr - - torrent - - usenet - - AudioBooks - - ebooks -kubeVersion: ">=1.24.0-0" -maintainers: - - name: TrueCharts - email: info@truecharts.org - url: https://truecharts.org -name: readarr -sources: - - https://readarr.com - - https://github.com/Readarr/Readarr - - https://github.com/truecharts/charts/tree/master/charts/stable/readarr - - https://ghcr.io/onedr0p/exportarr - - https://ghcr.io/onedr0p/readarr-develop -type: application -version: 21.6.17 diff --git a/stable/readarr/21.6.17/README.md b/stable/readarr/21.6.17/README.md deleted file mode 100644 index 690cf66f57..0000000000 --- a/stable/readarr/21.6.17/README.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -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/readarr) - -**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/guides/scale-intro). - -## Configuration Options - -To view the chart specific options, please view Values.yaml included in the chart. - -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/ - -## 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/readarr - -## 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/readarr/21.6.17/app-changelog.md b/stable/readarr/21.6.17/app-changelog.md deleted file mode 100644 index 5b7663117d..0000000000 --- a/stable/readarr/21.6.17/app-changelog.md +++ /dev/null @@ -1,73 +0,0 @@ - - -## [readarr-21.6.17](https://github.com/truecharts/charts/compare/readarr-21.4.0...readarr-21.6.17) (2024-04-24) - -### Chore - - - -- bump charts to ensure new icons are released - -- update groups html ([#21121](https://github.com/truecharts/charts/issues/21121)) - -- bump charts to release new docs to fix broken links - -- bump everything to regenerate readme's and site index - -- bump everything to release new doc pages - -- update container image common to v20.3.4[@d7e1b23](https://github.com/d7e1b23) by renovate ([#20527](https://github.com/truecharts/charts/issues/20527)) - -- update container image ghcr.io/onedr0p/exportarr to v2.0.1[@727e7bc](https://github.com/727e7bc) by renovate ([#20284](https://github.com/truecharts/charts/issues/20284)) - -- update container image common to v20.3.7[@8cf9fc9](https://github.com/8cf9fc9) by renovate ([#20819](https://github.com/truecharts/charts/issues/20819)) - -- update container image ghcr.io/onedr0p/readarr-develop to 0.3.22.2499[@54883dc](https://github.com/54883dc) by renovate ([#20768](https://github.com/truecharts/charts/issues/20768)) - -- update container image ghcr.io/onedr0p/readarr-develop to v0.3.22.2499[@53ad18b](https://github.com/53ad18b) by renovate ([#20746](https://github.com/truecharts/charts/issues/20746)) - -- update container image common to v20.3.6[@27edfed](https://github.com/27edfed) by renovate ([#20599](https://github.com/truecharts/charts/issues/20599)) - -- update container image common to v20.3.5[@aedd88a](https://github.com/aedd88a) by renovate ([#20535](https://github.com/truecharts/charts/issues/20535)) - -- update container image ghcr.io/onedr0p/readarr-develop to v0.3.23.2506[@de8fd28](https://github.com/de8fd28) by renovate ([#21110](https://github.com/truecharts/charts/issues/21110)) - -- update container image common to v20.3.3[@3876ba5](https://github.com/3876ba5) by renovate ([#20478](https://github.com/truecharts/charts/issues/20478)) - -- update container image ghcr.io/onedr0p/readarr-develop to 0.3.21.2475[@75449da](https://github.com/75449da) by renovate ([#20428](https://github.com/truecharts/charts/issues/20428)) - -- update container image common to v20.3.2[@0722ebb](https://github.com/0722ebb) by renovate ([#20334](https://github.com/truecharts/charts/issues/20334)) - -- update container image common to v20.3.11[@dae6129](https://github.com/dae6129) by renovate ([#20875](https://github.com/truecharts/charts/issues/20875)) - -- update container image common to v20.2.10[@6f99c97](https://github.com/6f99c97) by renovate ([#19876](https://github.com/truecharts/charts/issues/19876)) - -- update container image common to v20.2.9[@10fd6c5](https://github.com/10fd6c5) by renovate ([#19817](https://github.com/truecharts/charts/issues/19817)) - -- update container image ghcr.io/onedr0p/readarr-develop to 0.3.21.2475[@dfee716](https://github.com/dfee716) by renovate ([#19781](https://github.com/truecharts/charts/issues/19781)) - -- update container image common to v20.2.4[@f245f5c](https://github.com/f245f5c) by renovate ([#19731](https://github.com/truecharts/charts/issues/19731)) - -- update container image ghcr.io/onedr0p/readarr-develop to v0.3.21.2475[@1b66128](https://github.com/1b66128) by renovate ([#19742](https://github.com/truecharts/charts/issues/19742)) - -- update container image common to v20.2.3[@06e462e](https://github.com/06e462e) by renovate ([#19673](https://github.com/truecharts/charts/issues/19673)) - -- update container image common to v20.2.2[@f7d0b92](https://github.com/f7d0b92) by renovate ([#19432](https://github.com/truecharts/charts/issues/19432)) - -- update container image ghcr.io/onedr0p/readarr-develop to v0.3.20.2452[@0a99412](https://github.com/0a99412) by renovate ([#19406](https://github.com/truecharts/charts/issues/19406)) - -- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) - -- update container image ghcr.io/onedr0p/readarr-develop to 0.3.19.2437[@7db08fb](https://github.com/7db08fb) by renovate ([#19258](https://github.com/truecharts/charts/issues/19258)) - -### Chore - - - -- rework SCALE catagories/groups to match helm and remove deprecated charts ([#21111](https://github.com/truecharts/charts/issues/21111)) - -### Fix - - - -- replace serviceexpert with externalinterfaces/networking-group in the SCALE GUI ([#21154](https://github.com/truecharts/charts/issues/21154)) \ No newline at end of file diff --git a/stable/readarr/21.6.17/app-readme.md b/stable/readarr/21.6.17/app-readme.md deleted file mode 100644 index 3bc4be21cf..0000000000 --- a/stable/readarr/21.6.17/app-readme.md +++ /dev/null @@ -1,8 +0,0 @@ -A fork of Radarr to work with Books & AudioBooks - -This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/readarr](https://truecharts.org/charts/stable/readarr) - ---- - -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/readarr/21.6.17/charts/common-20.3.11.tgz b/stable/readarr/21.6.17/charts/common-20.3.11.tgz deleted file mode 100644 index 010f5b5a245d342f6f0d2e0ef95338a45ead19b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99404 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%0AZSzDiWTe))Y`J0OOCXlO`z1O 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 P00960fC|;b09p(Hd4E&t diff --git a/stable/readarr/21.6.17/icon-small.webp b/stable/readarr/21.6.17/icon-small.webp deleted file mode 100644 index efccc6c8a01057c367d9896d34e85cda297527aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 686 zcmV;f0#W@^Nk&Gd0ssJ4MM6+kP&il$0000G0000V0018V06|PpNZ0@X00DqpZQJqa zS;a{Kwoyn0m*4r^zDwVq`aOs||z8x}d6fcuB>9|TZm%m9FX zPwvDx1oySny&t3F*E08MjQ1Q!oCKh1X#HyWpD{wCZ}nZ}b2A7*Yi@Px_Ur3zXT4~H zB34j1AgBQV0FVX%odGH!03ZMY05m120~8-vPzeq>U^anT46rnTOq<2S+l~6vkbT7W zJ+2)l^5%dYeP|E`ZH!CT7;pgo^Lt@~wU^5*JsxkO;Zz(Y_kxm>10GjZnRDSjekRnM zO6^=^EA`cGk1G<}kN;AYb6Oaqt7uTte)5cSRGx{xAyD@@L~IgP|CV1*Z<8%edk>Oe z()!uES*E9FP|ERV_U4$99`REF+eCj#kGTlLGY;SLS5_{uZV@DD38HrM=lzOjG)!&( zqblL5f1g7@(?x`6o0B!hHTza~tWExoKdL<4eN4`cf$-$yff9zt$OfRz=y(X!U&!NKhLC!|Bi}kLtegTnvsA$m7}ZI0t+Bn$)Mxf UWUD1yGa1}wvyF2n#>|@>0OKG-3;+NC diff --git a/stable/readarr/21.6.17/icon.webp b/stable/readarr/21.6.17/icon.webp deleted file mode 100644 index 0e40998ce295ff20a108dc79c5c2f26cf29a9367..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4742 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 UC3zo>24pN~IyM0v{X;+i0PYl3)Bpeg diff --git a/stable/readarr/21.6.17/ix_values.yaml b/stable/readarr/21.6.17/ix_values.yaml deleted file mode 100644 index f2b97ee89e..0000000000 --- a/stable/readarr/21.6.17/ix_values.yaml +++ /dev/null @@ -1,109 +0,0 @@ -image: - repository: ghcr.io/onedr0p/readarr-develop - pullPolicy: IfNotPresent - tag: 0.3.23.2506@sha256:de8fd287c5810945bd8148caa4b5aadca3571f4d142ab972f32da006491de9bd -exportarrImage: - repository: ghcr.io/onedr0p/exportarr - pullPolicy: IfNotPresent - tag: v2.0.1@sha256:727e7bc8f2f0934a2117978c59f4476b954018b849a010ea6cfb380bd6539644 -securityContext: - container: - readOnlyRootFilesystem: false -service: - main: - ports: - main: - port: 8787 - metrics: - enabled: true - type: ClusterIP - targetSelector: exportarr - ports: - metrics: - enabled: true - port: 8788 - targetSelector: exportarr -workload: - main: - podSpec: - containers: - main: - probes: - liveness: - enabled: true - type: http - path: /ping - readiness: - enabled: true - type: http - path: /ping - startup: - enabled: true - type: http - path: /ping - env: - READARR__PORT: "{{ .Values.service.main.ports.main.port }}" - READARR__AUTHENTICATION_METHOD: "None" - exportarr: - enabled: true - type: Deployment - strategy: RollingUpdate - replicas: 1 - podSpec: - containers: - exportarr: - primary: true - enabled: true - imageSelector: exportarrImage - args: - - readarr - 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 - CONFIG: "/config/config.xml" -persistence: - config: - enabled: true - targetSelector: - main: - main: - mountPath: /config - exportarr: - exportarr: - mountPath: /config - readOnly: true -metrics: - main: - enabled: true - type: "servicemonitor" - endpoints: - - port: metrics - path: /metrics - targetSelector: metrics - prometheusRule: - enabled: false -portal: - open: - enabled: true -updated: true diff --git a/stable/readarr/21.6.17/questions.yaml b/stable/readarr/21.6.17/questions.yaml deleted file mode 100755 index 8d39996b7a..0000000000 --- a/stable/readarr/21.6.17/questions.yaml +++ /dev/null @@ -1,3021 +0,0 @@ -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: 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: READARR__AUTHENTICATION_METHOD - label: Auth Method - description: Sets the auth method. - schema: - type: string - default: "" - enum: - - value: "" - description: In-App Setting - - value: None - description: 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: 8787 - 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: 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: 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/readarr/21.6.17/templates/NOTES.txt b/stable/readarr/21.6.17/templates/NOTES.txt deleted file mode 100644 index efcb74cb77..0000000000 --- a/stable/readarr/21.6.17/templates/NOTES.txt +++ /dev/null @@ -1 +0,0 @@ -{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/readarr/21.6.17/templates/common.yaml b/stable/readarr/21.6.17/templates/common.yaml deleted file mode 100644 index 3c93f57861..0000000000 --- a/stable/readarr/21.6.17/templates/common.yaml +++ /dev/null @@ -1,11 +0,0 @@ -{{/* Make sure all variables are set properly */}} -{{- include "tc.v1.common.loader.init" . -}} - -{{/* Disable [exportarr] if requested */}} -{{- if not .Values.metrics.main.enabled -}} - {{- $_ := set .Values.workload.exportarr "enabled" false -}} - {{- $_ := set .Values.service.metrics "enabled" false -}} -{{- end -}} - -{{/* Render the templates */}} -{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/readarr/21.6.17/values.yaml b/stable/readarr/21.6.17/values.yaml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/stable/readarr/21.6.18/.helmignore b/stable/readarr/21.6.18/.helmignore deleted file mode 100644 index 77ca5567b2..0000000000 --- a/stable/readarr/21.6.18/.helmignore +++ /dev/null @@ -1,30 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ -# OWNERS file for Kubernetes -OWNERS -# helm-docs templates -*.gotmpl -# docs folder -/docs -# icon -icon.png diff --git a/stable/readarr/21.6.18/CHANGELOG.md b/stable/readarr/21.6.18/CHANGELOG.md deleted file mode 100644 index 941abb8a21..0000000000 --- a/stable/readarr/21.6.18/CHANGELOG.md +++ /dev/null @@ -1,3 +0,0 @@ -*for the complete changelog, please refer to the website* - -**Important:** \ No newline at end of file diff --git a/stable/readarr/21.6.18/Chart.yaml b/stable/readarr/21.6.18/Chart.yaml deleted file mode 100644 index 303a2cacde..0000000000 --- a/stable/readarr/21.6.18/Chart.yaml +++ /dev/null @@ -1,41 +0,0 @@ -annotations: - max_scale_version: 24.04.0 - min_scale_version: 23.10.0 - 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: 0.3.23.2506 -dependencies: - - name: common - version: 20.4.1 - repository: oci://tccr.io/truecharts - condition: "" - alias: "" - tags: [] - import-values: [] -deprecated: false -description: A fork of Radarr to work with Books & AudioBooks -home: https://truecharts.org/charts/stable/readarr -icon: https://truecharts.org/img/hotlink-ok/chart-icons/readarr.webp -keywords: - - readarr - - torrent - - usenet - - AudioBooks - - ebooks -kubeVersion: ">=1.24.0-0" -maintainers: - - name: TrueCharts - email: info@truecharts.org - url: https://truecharts.org -name: readarr -sources: - - https://readarr.com - - https://github.com/Readarr/Readarr - - https://github.com/truecharts/charts/tree/master/charts/stable/readarr - - https://ghcr.io/onedr0p/readarr-develop - - https://ghcr.io/onedr0p/exportarr -type: application -version: 21.6.18 diff --git a/stable/readarr/21.6.18/README.md b/stable/readarr/21.6.18/README.md deleted file mode 100644 index 690cf66f57..0000000000 --- a/stable/readarr/21.6.18/README.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -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/readarr) - -**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/guides/scale-intro). - -## Configuration Options - -To view the chart specific options, please view Values.yaml included in the chart. - -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/ - -## 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/readarr - -## 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/readarr/21.6.18/app-changelog.md b/stable/readarr/21.6.18/app-changelog.md deleted file mode 100644 index 5555d324d2..0000000000 --- a/stable/readarr/21.6.18/app-changelog.md +++ /dev/null @@ -1,75 +0,0 @@ - - -## [readarr-21.6.18](https://github.com/truecharts/charts/compare/readarr-21.4.0...readarr-21.6.18) (2024-04-29) - -### Chore - - - -- bump charts to ensure new icons are released - -- bump everything to release new doc pages - -- update groups html ([#21121](https://github.com/truecharts/charts/issues/21121)) - -- bump charts to release new docs to fix broken links - -- bump everything to regenerate readme's and site index - -- update container image common to v20.3.3[@3876ba5](https://github.com/3876ba5) by renovate ([#20478](https://github.com/truecharts/charts/issues/20478)) - -- update container image common to v20.3.2[@0722ebb](https://github.com/0722ebb) by renovate ([#20334](https://github.com/truecharts/charts/issues/20334)) - -- update container image ghcr.io/onedr0p/readarr-develop to v0.3.23.2506[@de8fd28](https://github.com/de8fd28) by renovate ([#21110](https://github.com/truecharts/charts/issues/21110)) - -- update container image common to v20.3.7[@8cf9fc9](https://github.com/8cf9fc9) by renovate ([#20819](https://github.com/truecharts/charts/issues/20819)) - -- update container image ghcr.io/onedr0p/readarr-develop to 0.3.22.2499[@54883dc](https://github.com/54883dc) by renovate ([#20768](https://github.com/truecharts/charts/issues/20768)) - -- update container image ghcr.io/onedr0p/readarr-develop to v0.3.22.2499[@53ad18b](https://github.com/53ad18b) by renovate ([#20746](https://github.com/truecharts/charts/issues/20746)) - -- update container image common to v20.3.6[@27edfed](https://github.com/27edfed) by renovate ([#20599](https://github.com/truecharts/charts/issues/20599)) - -- update container image common to v20.3.5[@aedd88a](https://github.com/aedd88a) by renovate ([#20535](https://github.com/truecharts/charts/issues/20535)) - -- update container image common to v20.3.4[@d7e1b23](https://github.com/d7e1b23) by renovate ([#20527](https://github.com/truecharts/charts/issues/20527)) - -- update container image common to v20.3.12[@3303278](https://github.com/3303278) by renovate ([#21384](https://github.com/truecharts/charts/issues/21384)) - -- update container image ghcr.io/onedr0p/readarr-develop to 0.3.21.2475[@75449da](https://github.com/75449da) by renovate ([#20428](https://github.com/truecharts/charts/issues/20428)) - -- update container image common to v20.3.11[@dae6129](https://github.com/dae6129) by renovate ([#20875](https://github.com/truecharts/charts/issues/20875)) - -- update container image ghcr.io/onedr0p/exportarr to v2.0.1[@727e7bc](https://github.com/727e7bc) by renovate ([#20284](https://github.com/truecharts/charts/issues/20284)) - -- update container image common to v20.2.10[@6f99c97](https://github.com/6f99c97) by renovate ([#19876](https://github.com/truecharts/charts/issues/19876)) - -- update container image common to v20.2.9[@10fd6c5](https://github.com/10fd6c5) by renovate ([#19817](https://github.com/truecharts/charts/issues/19817)) - -- update container image ghcr.io/onedr0p/readarr-develop to 0.3.21.2475[@dfee716](https://github.com/dfee716) by renovate ([#19781](https://github.com/truecharts/charts/issues/19781)) - -- update container image common to v20.2.4[@f245f5c](https://github.com/f245f5c) by renovate ([#19731](https://github.com/truecharts/charts/issues/19731)) - -- update container image ghcr.io/onedr0p/readarr-develop to v0.3.21.2475[@1b66128](https://github.com/1b66128) by renovate ([#19742](https://github.com/truecharts/charts/issues/19742)) - -- update container image common to v20.2.3[@06e462e](https://github.com/06e462e) by renovate ([#19673](https://github.com/truecharts/charts/issues/19673)) - -- update container image common to v20.2.2[@f7d0b92](https://github.com/f7d0b92) by renovate ([#19432](https://github.com/truecharts/charts/issues/19432)) - -- update container image ghcr.io/onedr0p/readarr-develop to v0.3.20.2452[@0a99412](https://github.com/0a99412) by renovate ([#19406](https://github.com/truecharts/charts/issues/19406)) - -- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) - -- update container image ghcr.io/onedr0p/readarr-develop to 0.3.19.2437[@7db08fb](https://github.com/7db08fb) by renovate ([#19258](https://github.com/truecharts/charts/issues/19258)) - -### Chore - - - -- rework SCALE catagories/groups to match helm and remove deprecated charts ([#21111](https://github.com/truecharts/charts/issues/21111)) - -### Fix - - - -- replace serviceexpert with externalinterfaces/networking-group in the SCALE GUI ([#21154](https://github.com/truecharts/charts/issues/21154)) \ No newline at end of file diff --git a/stable/readarr/21.6.18/app-readme.md b/stable/readarr/21.6.18/app-readme.md deleted file mode 100644 index 3bc4be21cf..0000000000 --- a/stable/readarr/21.6.18/app-readme.md +++ /dev/null @@ -1,8 +0,0 @@ -A fork of Radarr to work with Books & AudioBooks - -This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/readarr](https://truecharts.org/charts/stable/readarr) - ---- - -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/readarr/21.6.18/charts/common-20.3.12.tgz b/stable/readarr/21.6.18/charts/common-20.3.12.tgz deleted file mode 100644 index 621bd9e5a5277eda78f0f106b46b6afdc6f56acd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99407 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
            iZ#x$K}*@0J4scA@_XsWr>MiG1UB+r_n|MJ)K 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 S{{H{~0RR7!&lutWS_}Y48_RhB diff --git a/stable/readarr/21.6.18/icon-small.webp b/stable/readarr/21.6.18/icon-small.webp deleted file mode 100644 index efccc6c8a01057c367d9896d34e85cda297527aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 686 zcmV;f0#W@^Nk&Gd0ssJ4MM6+kP&il$0000G0000V0018V06|PpNZ0@X00DqpZQJqa zS;a{Kwoyn0m*4r^zDwVq`aOs||z8x}d6fcuB>9|TZm%m9FX zPwvDx1oySny&t3F*E08MjQ1Q!oCKh1X#HyWpD{wCZ}nZ}b2A7*Yi@Px_Ur3zXT4~H zB34j1AgBQV0FVX%odGH!03ZMY05m120~8-vPzeq>U^anT46rnTOq<2S+l~6vkbT7W zJ+2)l^5%dYeP|E`ZH!CT7;pgo^Lt@~wU^5*JsxkO;Zz(Y_kxm>10GjZnRDSjekRnM zO6^=^EA`cGk1G<}kN;AYb6Oaqt7uTte)5cSRGx{xAyD@@L~IgP|CV1*Z<8%edk>Oe z()!uES*E9FP|ERV_U4$99`REF+eCj#kGTlLGY;SLS5_{uZV@DD38HrM=lzOjG)!&( zqblL5f1g7@(?x`6o0B!hHTza~tWExoKdL<4eN4`cf$-$yff9zt$OfRz=y(X!U&!NKhLC!|Bi}kLtegTnvsA$m7}ZI0t+Bn$)Mxf UWUD1yGa1}wvyF2n#>|@>0OKG-3;+NC diff --git a/stable/readarr/21.6.18/icon.webp b/stable/readarr/21.6.18/icon.webp deleted file mode 100644 index 0e40998ce295ff20a108dc79c5c2f26cf29a9367..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4742 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 UC3zo>24pN~IyM0v{X;+i0PYl3)Bpeg diff --git a/stable/readarr/21.6.18/ix_values.yaml b/stable/readarr/21.6.18/ix_values.yaml deleted file mode 100644 index f2b97ee89e..0000000000 --- a/stable/readarr/21.6.18/ix_values.yaml +++ /dev/null @@ -1,109 +0,0 @@ -image: - repository: ghcr.io/onedr0p/readarr-develop - pullPolicy: IfNotPresent - tag: 0.3.23.2506@sha256:de8fd287c5810945bd8148caa4b5aadca3571f4d142ab972f32da006491de9bd -exportarrImage: - repository: ghcr.io/onedr0p/exportarr - pullPolicy: IfNotPresent - tag: v2.0.1@sha256:727e7bc8f2f0934a2117978c59f4476b954018b849a010ea6cfb380bd6539644 -securityContext: - container: - readOnlyRootFilesystem: false -service: - main: - ports: - main: - port: 8787 - metrics: - enabled: true - type: ClusterIP - targetSelector: exportarr - ports: - metrics: - enabled: true - port: 8788 - targetSelector: exportarr -workload: - main: - podSpec: - containers: - main: - probes: - liveness: - enabled: true - type: http - path: /ping - readiness: - enabled: true - type: http - path: /ping - startup: - enabled: true - type: http - path: /ping - env: - READARR__PORT: "{{ .Values.service.main.ports.main.port }}" - READARR__AUTHENTICATION_METHOD: "None" - exportarr: - enabled: true - type: Deployment - strategy: RollingUpdate - replicas: 1 - podSpec: - containers: - exportarr: - primary: true - enabled: true - imageSelector: exportarrImage - args: - - readarr - 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 - CONFIG: "/config/config.xml" -persistence: - config: - enabled: true - targetSelector: - main: - main: - mountPath: /config - exportarr: - exportarr: - mountPath: /config - readOnly: true -metrics: - main: - enabled: true - type: "servicemonitor" - endpoints: - - port: metrics - path: /metrics - targetSelector: metrics - prometheusRule: - enabled: false -portal: - open: - enabled: true -updated: true diff --git a/stable/readarr/21.6.18/questions.yaml b/stable/readarr/21.6.18/questions.yaml deleted file mode 100755 index 8d39996b7a..0000000000 --- a/stable/readarr/21.6.18/questions.yaml +++ /dev/null @@ -1,3021 +0,0 @@ -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: 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: READARR__AUTHENTICATION_METHOD - label: Auth Method - description: Sets the auth method. - schema: - type: string - default: "" - enum: - - value: "" - description: In-App Setting - - value: None - description: 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: 8787 - 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: 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: 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/readarr/21.6.18/templates/NOTES.txt b/stable/readarr/21.6.18/templates/NOTES.txt deleted file mode 100644 index efcb74cb77..0000000000 --- a/stable/readarr/21.6.18/templates/NOTES.txt +++ /dev/null @@ -1 +0,0 @@ -{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/readarr/21.6.18/templates/common.yaml b/stable/readarr/21.6.18/templates/common.yaml deleted file mode 100644 index 3c93f57861..0000000000 --- a/stable/readarr/21.6.18/templates/common.yaml +++ /dev/null @@ -1,11 +0,0 @@ -{{/* Make sure all variables are set properly */}} -{{- include "tc.v1.common.loader.init" . -}} - -{{/* Disable [exportarr] if requested */}} -{{- if not .Values.metrics.main.enabled -}} - {{- $_ := set .Values.workload.exportarr "enabled" false -}} - {{- $_ := set .Values.service.metrics "enabled" false -}} -{{- end -}} - -{{/* Render the templates */}} -{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/readarr/21.6.18/values.yaml b/stable/readarr/21.6.18/values.yaml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/stable/readarr/app_versions.json b/stable/readarr/app_versions.json index f332e1c461..c5dc68a822 100644 --- a/stable/readarr/app_versions.json +++ b/stable/readarr/app_versions.json @@ -3,13 +3,13 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/readarr/22.0.12", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/stable/readarr/22.0.12", + "last_update": "2024-09-20 02:39:05", "required_features": [ - "definitions/timezone", - "normalize/interfaceConfiguration", "definitions/certificate", - "definitions/interface" + "normalize/interfaceConfiguration", + "definitions/interface", + "definitions/timezone" ], "human_version": "0.3.27.2538_22.0.12", "version": "22.0.12", @@ -25,7 +25,7 @@ "dependencies": [ { "name": "common", - "version": "23.0.10", + "version": "23.0.11", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -5373,13 +5373,13 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/readarr/22.0.11", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/stable/readarr/22.0.11", + "last_update": "2024-09-20 02:39:05", "required_features": [ - "definitions/timezone", - "normalize/interfaceConfiguration", "definitions/certificate", - "definitions/interface" + "normalize/interfaceConfiguration", + "definitions/interface", + "definitions/timezone" ], "human_version": "0.3.27.2538_22.0.11", "version": "22.0.11", @@ -5395,7 +5395,7 @@ "dependencies": [ { "name": "common", - "version": "23.0.9", + "version": "23.0.11", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -10738,30337 +10738,5 @@ "app_readme": "

            A fork of Radarr to work with Books & AudioBooks

            \n

            This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/readarr

            \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/readarr

            \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/readarr/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:

            " - }, - "21.6.18": { - "healthy": true, - "supported": true, - "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/readarr/21.6.18", - "last_update": "2024-05-29 12:35:14", - "required_features": [ - "definitions/timezone", - "normalize/interfaceConfiguration", - "definitions/certificate", - "definitions/interface" - ], - "human_version": "0.3.23.2506_21.6.18", - "version": "21.6.18", - "chart_metadata": { - "annotations": { - "max_scale_version": "24.04.0", - "min_scale_version": "23.10.0", - "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": "0.3.23.2506", - "dependencies": [ - { - "name": "common", - "version": "20.3.12", - "repository": "oci://tccr.io/truecharts", - "condition": "", - "alias": "", - "tags": [], - "import-values": [] - } - ], - "deprecated": false, - "description": "A fork of Radarr to work with Books & AudioBooks", - "home": "https://truecharts.org/charts/stable/readarr", - "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/readarr.webp", - "keywords": [ - "readarr", - "torrent", - "usenet", - "AudioBooks", - "ebooks" - ], - "kubeVersion": ">=1.24.0-0", - "maintainers": [ - { - "name": "TrueCharts", - "email": "info@truecharts.org", - "url": "https://truecharts.org" - } - ], - "name": "readarr", - "sources": [ - "https://readarr.com", - "https://github.com/Readarr/Readarr", - "https://github.com/truecharts/charts/tree/master/charts/stable/readarr", - "https://ghcr.io/onedr0p/readarr-develop", - "https://ghcr.io/onedr0p/exportarr" - ], - "type": "application", - "version": "21.6.18" - }, - "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": "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": "READARR__AUTHENTICATION_METHOD", - "label": "Auth Method", - "description": "Sets the auth method.", - "schema": { - "type": "string", - "default": "", - "enum": [ - { - "value": "", - "description": "In-App Setting" - }, - { - "value": "None", - "description": "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": 8787, - "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": "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": "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": "

            A fork of Radarr to work with Books & AudioBooks

            \n

            This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/readarr

            \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

            Configuration Options

            \n

            To view the chart specific options, please view Values.yaml included in the chart.

            \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

            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/readarr

            \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:

            " - }, - "21.6.17": { - "healthy": true, - "supported": true, - "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/readarr/21.6.17", - "last_update": "2024-05-29 12:35:14", - "required_features": [ - "definitions/timezone", - "normalize/interfaceConfiguration", - "definitions/certificate", - "definitions/interface" - ], - "human_version": "0.3.23.2506_21.6.17", - "version": "21.6.17", - "chart_metadata": { - "annotations": { - "max_scale_version": "24.04.0", - "min_scale_version": "23.10.0", - "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": "0.3.23.2506", - "dependencies": [ - { - "name": "common", - "version": "20.3.11", - "repository": "oci://tccr.io/truecharts", - "condition": "", - "alias": "", - "tags": [], - "import-values": [] - } - ], - "deprecated": false, - "description": "A fork of Radarr to work with Books & AudioBooks", - "home": "https://truecharts.org/charts/stable/readarr", - "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/readarr.webp", - "keywords": [ - "readarr", - "torrent", - "usenet", - "AudioBooks", - "ebooks" - ], - "kubeVersion": ">=1.24.0-0", - "maintainers": [ - { - "name": "TrueCharts", - "email": "info@truecharts.org", - "url": "https://truecharts.org" - } - ], - "name": "readarr", - "sources": [ - "https://readarr.com", - "https://github.com/Readarr/Readarr", - "https://github.com/truecharts/charts/tree/master/charts/stable/readarr", - "https://ghcr.io/onedr0p/exportarr", - "https://ghcr.io/onedr0p/readarr-develop" - ], - "type": "application", - "version": "21.6.17" - }, - "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": "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": "READARR__AUTHENTICATION_METHOD", - "label": "Auth Method", - "description": "Sets the auth method.", - "schema": { - "type": "string", - "default": "", - "enum": [ - { - "value": "", - "description": "In-App Setting" - }, - { - "value": "None", - "description": "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": 8787, - "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": "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": "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": "

            A fork of Radarr to work with Books & AudioBooks

            \n

            This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/readarr

            \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

            Configuration Options

            \n

            To view the chart specific options, please view Values.yaml included in the chart.

            \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

            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/readarr

            \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.2.0": { - "healthy": true, - "supported": true, - "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/readarr/20.2.0", - "last_update": "2024-05-29 12:35:14", - "required_features": [ - "definitions/timezone", - "normalize/interfaceConfiguration", - "definitions/certificate", - "definitions/interface" - ], - "human_version": "0.3.18.2411_20.2.0", - "version": "20.2.0", - "chart_metadata": { - "annotations": { - "max_scale_version": "24.04.0", - "min_scale_version": "23.10.0", - "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": "0.3.18.2411", - "dependencies": [ - { - "name": "common", - "version": "18.1.2", - "repository": "oci://tccr.io/truecharts", - "condition": "", - "alias": "", - "tags": [], - "import-values": [] - } - ], - "deprecated": false, - "description": "A fork of Radarr to work with Books & AudioBooks", - "home": "https://truecharts.org/charts/stable/readarr", - "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/readarr.png", - "keywords": [ - "readarr", - "torrent", - "usenet", - "AudioBooks", - "ebooks" - ], - "kubeVersion": ">=1.24.0-0", - "maintainers": [ - { - "name": "TrueCharts", - "email": "info@truecharts.org", - "url": "https://truecharts.org" - } - ], - "name": "readarr", - "sources": [ - "https://readarr.com", - "https://github.com/Readarr/Readarr", - "https://github.com/truecharts/charts/tree/master/charts/stable/readarr", - "https://ghcr.io/onedr0p/readarr-develop", - "https://ghcr.io/onedr0p/exportarr" - ], - "type": "application", - "version": "20.2.0" - }, - "app_metadata": null, - "schema": { - "groups": [ - { - "name": "Container Image", - "description": "Image to be used for container" - }, - { - "name": "General Settings", - "description": "General Deployment Settings" - }, - { - "name": "Workload Settings", - "description": "Workload Settings" - }, - { - "name": "App Configuration", - "description": "App Specific Config Options" - }, - { - "name": "Networking and Services", - "description": "Configure Network and Services for Container" - }, - { - "name": "Storage and Persistence", - "description": "Persist and Share Data that is Separate from the Container" - }, - { - "name": "Ingress", - "description": "Ingress Configuration" - }, - { - "name": "Security and Permissions", - "description": "Configure Security Context and Permissions" - }, - { - "name": "Resources and Devices", - "description": "Specify Resources/Devices to be Allocated to Workload" - }, - { - "name": "Middlewares", - "description": "Traefik Middlewares" - }, - { - "name": "Metrics", - "description": "Metrics" - }, - { - "name": "Addons", - "description": "Addon Configuration" - }, - { - "name": "Backup Configuration", - "description": "Configure Velero Backup Schedule" - }, - { - "name": "Advanced", - "description": "Advanced Configuration" - }, - { - "name": "Postgresql", - "description": "Postgresql" - }, - { - "name": "Documentation", - "description": "Documentation" - } - ], - "portals": { - "open": { - "protocols": [ - "$kubernetes-resource_configmap_tcportal-open_protocol" - ], - "host": [ - "$kubernetes-resource_configmap_tcportal-open_host" - ], - "ports": [ - "$kubernetes-resource_configmap_tcportal-open_port" - ] - } - }, - "questions": [ - { - "variable": "global", - "group": "General Settings", - "label": "Global Settings", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "stopAll", - "label": "Stop All", - "description": "Stops All Running pods and hibernates cnpg", - "schema": { - "type": "boolean", - "default": false - } - } - ] - } - }, - { - "variable": "workload", - "group": "Workload Settings", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Type (Advanced)", - "schema": { - "type": "string", - "default": "Deployment", - "enum": [ - { - "value": "Deployment", - "description": "Deployment" - }, - { - "value": "DaemonSet", - "description": "DaemonSet" - } - ] - } - }, - { - "variable": "replicas", - "label": "Replicas (Advanced)", - "description": "Set the number of Replicas", - "schema": { - "type": "int", - "show_if": [ - [ - "type", - "!=", - "DaemonSet" - ] - ], - "default": 1 - } - }, - { - "variable": "podSpec", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "containers", - "label": "Containers", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "Main Container", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "env", - "group": "App Configuration", - "label": "Image Environment", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "READARR__AUTHENTICATION_METHOD", - "label": "Auth Method", - "description": "Sets the auth method.", - "schema": { - "type": "string", - "default": "", - "enum": [ - { - "value": "", - "description": "In-App Setting" - }, - { - "value": "None", - "description": "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 Settings", - "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 Settings", - "label": "Global Pod Options (Advanced)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "expertPodOpts", - "label": "Expert - Pod Options", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hostNetwork", - "label": "Host Networking", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "dnsConfig", - "label": "DNS Configuration", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "options", - "label": "Options", - "schema": { - "type": "list", - "default": [ - { - "name": "ndots", - "value": "1" - } - ], - "items": [ - { - "variable": "optionsEntry", - "label": "Option Entry", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true - } - }, - { - "variable": "value", - "label": "Value", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "nameservers", - "label": "Nameservers", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "nsEntry", - "label": "Nameserver Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - }, - { - "variable": "searches", - "label": "Searches", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "searchEntry", - "label": "Search Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "imagePullSecretList", - "group": "General Settings", - "label": "Image Pull Secrets", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "pullsecretentry", - "label": "Pull Secret", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "data", - "label": "Data", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "registry", - "label": "Registry", - "schema": { - "type": "string", - "required": true, - "default": "https://index.docker.io/v1/" - } - }, - { - "variable": "username", - "label": "Username", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "password", - "label": "Password", - "schema": { - "type": "string", - "required": true, - "private": true, - "default": "" - } - }, - { - "variable": "email", - "label": "Email", - "schema": { - "type": "string", - "required": true, - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "service", - "group": "Networking and Services", - "label": "Configure Service(s)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "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": 8787, - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "serviceexpert", - "group": "Networking and Services", - "label": "Show Expert Config", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "scaleExternalInterface", - "description": "Add External Interfaces", - "label": "Add external Interfaces", - "group": "Networking", - "schema": { - "type": "list", - "items": [ - { - "variable": "interfaceConfiguration", - "description": "Interface Configuration", - "label": "Interface Configuration", - "schema": { - "additional_attrs": true, - "type": "dict", - "$ref": [ - "normalize/interfaceConfiguration" - ], - "attrs": [ - { - "variable": "hostInterface", - "description": "Please Specify Host Interface", - "label": "Host Interface", - "schema": { - "type": "string", - "required": true, - "$ref": [ - "definitions/interface" - ], - "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": "Networking and Services", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "serviceListEntry", - "label": "Custom Service", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the service", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "LoadBalancer", - "description": "LoadBalancer (Expose Ports)" - }, - { - "value": "ClusterIP", - "description": "ClusterIP (Do Not Expose Ports)" - }, - { - "value": "Simple", - "description": "Deprecated CHANGE THIS" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "advancedsvcset", - "label": "Show Advanced Service Settings", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "externalIPs", - "label": "External IP's", - "description": "External IP's", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "externalIP", - "label": "External IP", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "ipFamilyPolicy", - "label": "IP Family Policy", - "description": "Specify the IP Policy", - "schema": { - "type": "string", - "default": "SingleStack", - "enum": [ - { - "value": "SingleStack", - "description": "SingleStack" - }, - { - "value": "PreferDualStack", - "description": "PreferDualStack" - }, - { - "value": "RequireDualStack", - "description": "RequireDualStack" - } - ] - } - }, - { - "variable": "ipFamilies", - "label": "IP Families", - "description": "(Advanced) The IP Families that should be used", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ipFamily", - "label": "IP Family", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "portsList", - "label": "Additional Service Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsListEntry", - "label": "Custom ports", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Port", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Port Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "protocol", - "label": "Port Type", - "schema": { - "type": "string", - "default": "tcp", - "enum": [ - { - "value": "http", - "description": "HTTP" - }, - { - "value": "https", - "description": "HTTPS" - }, - { - "value": "tcp", - "description": "TCP" - }, - { - "value": "udp", - "description": "UDP" - } - ] - } - }, - { - "variable": "targetPort", - "label": "Target Port", - "description": "This port exposes the container port on the service", - "schema": { - "type": "int", - "required": true - } - }, - { - "variable": "port", - "label": "Container Port", - "schema": { - "type": "int", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "persistence", - "label": "Integrated Persistent Storage", - "description": "Integrated Persistent Storage", - "group": "Storage and 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": "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": "Storage and Persistence", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "persistenceListEntry", - "label": "Custom Storage", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the storage", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "type", - "label": "Type of Storage", - "description": "Sets the persistence type, Anything other than PVC could break rollback!", - "schema": { - "type": "string", - "default": "hostPath", - "enum": [ - { - "value": "pvc", - "description": "PVC" - }, - { - "value": "hostPath", - "description": "Host Path" - }, - { - "value": "emptyDir", - "description": "emptyDir" - }, - { - "value": "nfs", - "description": "NFS Share" - } - ] - } - }, - { - "variable": "server", - "label": "NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "path", - "label": "Path on NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "iscsi", - "label": "iSCSI Options", - "schema": { - "show_if": [ - [ - "type", - "=", - "iscsi" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "targetPortal", - "label": "targetPortal", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "iqn", - "label": "iqn", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "lun", - "label": "lun", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "authSession", - "label": "authSession", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - }, - { - "variable": "authDiscovery", - "label": "authDiscovery", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - }, - { - "variable": "autoPermissions", - "label": "Automatic Permissions Configuration", - "description": "Automatically set permissions", - "schema": { - "show_if": [ - [ - "type", - "!=", - "pvc" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "chown", - "label": "Run CHOWN", - "description": "It will run CHOWN on the path with the given fsGroup\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": "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": "Security and Permissions", - "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 and Devices", - "label": "Resource Limits", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "limits", - "label": "Advanced Limit Resource Consumption", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "4000m", - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "8Gi", - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - }, - { - "variable": "gpu.intel.com/i915", - "label": "Add Intel i915 GPUs", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "nvidia.com/gpu", - "label": "Add NVIDIA GPUs (Experimental)", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "amd.com/gpu", - "label": "Add AMD GPUs", - "schema": { - "type": "int", - "default": 0 - } - } - ] - } - }, - { - "variable": "requests", - "label": "Minimum Resources Required (request)", - "schema": { - "additional_attrs": true, - "type": "dict", - "hidden": true, - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "10m", - "hidden": true, - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "50Mi", - "hidden": true, - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - } - ] - } - } - ] - } - }, - { - "variable": "deviceList", - "label": "Mount USB Devices", - "group": "Resources and Devices", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "deviceListEntry", - "label": "Device", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Storage", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "type", - "label": "(Advanced) Type of Storage", - "description": "Sets the persistence type", - "schema": { - "type": "string", - "default": "device", - "hidden": true - } - }, - { - "variable": "readOnly", - "label": "readOnly", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "hostPath", - "label": "Host Device Path", - "description": "Path to the device on the host system", - "schema": { - "type": "path" - } - }, - { - "variable": "mountPath", - "label": "Container Device Path", - "description": "Path inside the container the device is mounted", - "schema": { - "type": "string", - "default": "/dev/ttyACM0" - } - } - ] - } - } - ] - } - }, - { - "variable": "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": "Advanced", - "label": "(Advanced) Network Policy", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "netPolicyEntry", - "label": "Network Policy Entry", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "policyType", - "label": "Policy Type", - "schema": { - "type": "string", - "default": "", - "enum": [ - { - "value": "", - "description": "Default" - }, - { - "value": "ingress", - "description": "Ingress" - }, - { - "value": "egress", - "description": "Egress" - }, - { - "value": "ingress-egress", - "description": "Ingress and Egress" - } - ] - } - }, - { - "variable": "egress", - "label": "Egress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "egressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "to", - "label": "To", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "toEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ingressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "from", - "label": "From", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "fromEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "addons", - "group": "Addons", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "Codeserver", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "service", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "NodePort", - "description": "Deprecated CHANGE THIS" - }, - { - "value": "ClusterIP", - "description": "ClusterIP" - }, - { - "value": "LoadBalancer", - "description": "LoadBalancer" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "ports", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int", - "default": 36107 - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable Ingress", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hosts", - "label": "Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "hostEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "host", - "label": "HostName", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "paths", - "label": "Paths", - "schema": { - "type": "list", - "default": [ - { - "path": "/", - "pathType": "Prefix" - } - ], - "items": [ - { - "variable": "pathEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "path", - "label": "Path", - "schema": { - "type": "string", - "required": true, - "default": "/" - } - }, - { - "variable": "pathType", - "label": "Path Type", - "schema": { - "type": "string", - "required": true, - "default": "Prefix" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "integrations", - "label": "Integrations", - "description": "Connect ingress with other charts", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "traefik", - "label": "Traefik", - "description": "Connect ingress with Traefik", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "allowCors", - "label": "Allow Cross Origin Requests (advanced)", - "schema": { - "type": "boolean", - "default": false, - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - }, - { - "variable": "entrypoints", - "label": "Entrypoints", - "schema": { - "type": "list", - "default": [ - "websecure" - ], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "entrypoint", - "label": "Entrypoint", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "middlewares", - "label": "Middlewares", - "schema": { - "type": "list", - "default": [], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "middleware", - "label": "Middleware", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "name", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "namespace", - "label": "namespace (optional)", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "certManager", - "label": "certManager", - "description": "Connect ingress with certManager", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "certificateIssuer", - "label": "certificateIssuer", - "description": "defaults to chartname", - "schema": { - "type": "string", - "default": "", - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "advanced", - "label": "Show Advanced Settings", - "description": "Advanced settings are not covered by TrueCharts Support", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "ingressClassName", - "label": "(Advanced/Optional) IngressClass Name", - "schema": { - "type": "string", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": "" - } - }, - { - "variable": "tls", - "label": "TLS-Settings", - "schema": { - "type": "list", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": [], - "items": [ - { - "variable": "tlsEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "hosts", - "label": "Certificate Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "host", - "label": "Host", - "schema": { - "type": "string", - "default": "", - "required": true - } - } - ] - } - }, - { - "variable": "certificateIssuer", - "label": "Use Cert-Manager clusterIssuer", - "description": "add the name of your cert-manager clusterIssuer here for automatic tls certificates.", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "clusterCertificate", - "label": "Cluster Certificate (Advanced)", - "description": "Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.", - "schema": { - "type": "string", - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "default": "" - } - }, - { - "variable": "secretName", - "label": "Use Custom Certificate Secret (Advanced)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "scaleCert", - "label": "Use TrueNAS SCALE Certificate (Deprecated)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "int", - "$ref": [ - "definitions/certificate" - ], - "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": "

            A fork of Radarr to work with Books & AudioBooks

            \n

            This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/readarr

            \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 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

            readarr-19.1.18 (2024-02-05)

            \n

            Chore

            \n
              \n
            • update container image ghcr.io/onedr0p/readarr-develop to 0.3.18.2411@a1d9eb2 by renovate (#17957)
            • \n
            \n

            readarr-19.1.17 (2024-02-05)

            \n

            Chore

            \n
              \n
            • update container image ghcr.io/onedr0p/readarr-develop to v0.3.18.2411@fa1fe2d by renovate (#17916)
            • \n
            \n

            readarr-19.1.16 (2024-02-03)

            \n

            Chore

            \n
              \n
            • update container image common to v17.2.30@19ad5ec by renovate (#17804)
            • \n
            \n

            readarr-19.1.15 (2024-01-29)

            \n

            Chore

            \n
              \n
            • update container image ghcr.io/onedr0p/exportarr to v1.6.1@60cf3d4 by renovate (#17725)
            • \n
            \n

            readarr-19.1.14 (2024-01-29)

            \n

            Chore

            \n
              \n
            • update container image ghcr.io/onedr0p/readarr-develop to v0.3.17.2409@3d8be41 by renovate (#17675)
            • \n
            \n

            readarr-19.1.13 (2024-01-26)

            \n

            Chore

            \n
              \n
            • update container image common to v17.2.29@d7c41a3 by renovate (#17545)
            • \n
            \n

            readarr-19.1.12 (2024-01-21)

            \n

            Chore

            \n
              \n
            • update container image common to v17.2.28@918b4c5 by renovate (#17478)
            • \n
            \n

            readarr-19.1.11 (2024-01-21)

            \n

            Chore

            \n
              \n
            • update container image common to v17.2.26@24c98f7 by renovate (#17409)
            • \n
            \n

            readarr-19.1.10 (2024-01-21)

            \n

            Chore

            \n
              \n
            • update metadata in chart.yaml (#17457)
            • \n
            \n

            readarr-19.1.9 (2024-01-21)

            " - }, - "20.1.3": { - "healthy": true, - "supported": true, - "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/readarr/20.1.3", - "last_update": "2024-05-29 12:35:14", - "required_features": [ - "definitions/timezone", - "normalize/interfaceConfiguration", - "definitions/certificate", - "definitions/interface" - ], - "human_version": "0.3.18.2411_20.1.3", - "version": "20.1.3", - "chart_metadata": { - "annotations": { - "max_scale_version": "24.04.0", - "min_scale_version": "23.10.0", - "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": "0.3.18.2411", - "dependencies": [ - { - "name": "common", - "version": "18.0.3", - "repository": "oci://tccr.io/truecharts", - "condition": "", - "alias": "", - "tags": [], - "import-values": [] - } - ], - "deprecated": false, - "description": "A fork of Radarr to work with Books & AudioBooks", - "home": "https://truecharts.org/charts/stable/readarr", - "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/readarr.png", - "keywords": [ - "readarr", - "torrent", - "usenet", - "AudioBooks", - "ebooks" - ], - "kubeVersion": ">=1.24.0-0", - "maintainers": [ - { - "name": "TrueCharts", - "email": "info@truecharts.org", - "url": "https://truecharts.org" - } - ], - "name": "readarr", - "sources": [ - "https://readarr.com", - "https://github.com/Readarr/Readarr", - "https://github.com/truecharts/charts/tree/master/charts/stable/readarr", - "https://ghcr.io/onedr0p/exportarr", - "https://ghcr.io/onedr0p/readarr-develop" - ], - "type": "application", - "version": "20.1.3" - }, - "app_metadata": null, - "schema": { - "groups": [ - { - "name": "Container Image", - "description": "Image to be used for container" - }, - { - "name": "General Settings", - "description": "General Deployment Settings" - }, - { - "name": "Workload Settings", - "description": "Workload Settings" - }, - { - "name": "App Configuration", - "description": "App Specific Config Options" - }, - { - "name": "Networking and Services", - "description": "Configure Network and Services for Container" - }, - { - "name": "Storage and Persistence", - "description": "Persist and Share Data that is Separate from the Container" - }, - { - "name": "Ingress", - "description": "Ingress Configuration" - }, - { - "name": "Security and Permissions", - "description": "Configure Security Context and Permissions" - }, - { - "name": "Resources and Devices", - "description": "Specify Resources/Devices to be Allocated to Workload" - }, - { - "name": "Middlewares", - "description": "Traefik Middlewares" - }, - { - "name": "Metrics", - "description": "Metrics" - }, - { - "name": "Addons", - "description": "Addon Configuration" - }, - { - "name": "Backup Configuration", - "description": "Configure Velero Backup Schedule" - }, - { - "name": "Advanced", - "description": "Advanced Configuration" - }, - { - "name": "Postgresql", - "description": "Postgresql" - }, - { - "name": "Documentation", - "description": "Documentation" - } - ], - "portals": { - "open": { - "protocols": [ - "$kubernetes-resource_configmap_tcportal-open_protocol" - ], - "host": [ - "$kubernetes-resource_configmap_tcportal-open_host" - ], - "ports": [ - "$kubernetes-resource_configmap_tcportal-open_port" - ] - } - }, - "questions": [ - { - "variable": "global", - "group": "General Settings", - "label": "Global Settings", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "stopAll", - "label": "Stop All", - "description": "Stops All Running pods and hibernates cnpg", - "schema": { - "type": "boolean", - "default": false - } - } - ] - } - }, - { - "variable": "workload", - "group": "Workload Settings", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Type (Advanced)", - "schema": { - "type": "string", - "default": "Deployment", - "enum": [ - { - "value": "Deployment", - "description": "Deployment" - }, - { - "value": "DaemonSet", - "description": "DaemonSet" - } - ] - } - }, - { - "variable": "replicas", - "label": "Replicas (Advanced)", - "description": "Set the number of Replicas", - "schema": { - "type": "int", - "show_if": [ - [ - "type", - "!=", - "DaemonSet" - ] - ], - "default": 1 - } - }, - { - "variable": "podSpec", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "containers", - "label": "Containers", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "Main Container", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "env", - "group": "App Configuration", - "label": "Image Environment", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "READARR__AUTHENTICATION_METHOD", - "label": "Auth Method", - "description": "Sets the auth method.", - "schema": { - "type": "string", - "default": "", - "enum": [ - { - "value": "", - "description": "In-App Setting" - }, - { - "value": "None", - "description": "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 Settings", - "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 Settings", - "label": "Global Pod Options (Advanced)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "expertPodOpts", - "label": "Expert - Pod Options", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hostNetwork", - "label": "Host Networking", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "dnsConfig", - "label": "DNS Configuration", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "options", - "label": "Options", - "schema": { - "type": "list", - "default": [ - { - "name": "ndots", - "value": "1" - } - ], - "items": [ - { - "variable": "optionsEntry", - "label": "Option Entry", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true - } - }, - { - "variable": "value", - "label": "Value", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "nameservers", - "label": "Nameservers", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "nsEntry", - "label": "Nameserver Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - }, - { - "variable": "searches", - "label": "Searches", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "searchEntry", - "label": "Search Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "imagePullSecretList", - "group": "General Settings", - "label": "Image Pull Secrets", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "pullsecretentry", - "label": "Pull Secret", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "data", - "label": "Data", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "registry", - "label": "Registry", - "schema": { - "type": "string", - "required": true, - "default": "https://index.docker.io/v1/" - } - }, - { - "variable": "username", - "label": "Username", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "password", - "label": "Password", - "schema": { - "type": "string", - "required": true, - "private": true, - "default": "" - } - }, - { - "variable": "email", - "label": "Email", - "schema": { - "type": "string", - "required": true, - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "service", - "group": "Networking and Services", - "label": "Configure Service(s)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "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": 8787, - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "serviceexpert", - "group": "Networking and Services", - "label": "Show Expert Config", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "scaleExternalInterface", - "description": "Add External Interfaces", - "label": "Add external Interfaces", - "group": "Networking", - "schema": { - "type": "list", - "items": [ - { - "variable": "interfaceConfiguration", - "description": "Interface Configuration", - "label": "Interface Configuration", - "schema": { - "additional_attrs": true, - "type": "dict", - "$ref": [ - "normalize/interfaceConfiguration" - ], - "attrs": [ - { - "variable": "hostInterface", - "description": "Please Specify Host Interface", - "label": "Host Interface", - "schema": { - "type": "string", - "required": true, - "$ref": [ - "definitions/interface" - ], - "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": "Networking and Services", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "serviceListEntry", - "label": "Custom Service", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the service", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "LoadBalancer", - "description": "LoadBalancer (Expose Ports)" - }, - { - "value": "ClusterIP", - "description": "ClusterIP (Do Not Expose Ports)" - }, - { - "value": "Simple", - "description": "Deprecated CHANGE THIS" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "advancedsvcset", - "label": "Show Advanced Service Settings", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "externalIPs", - "label": "External IP's", - "description": "External IP's", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "externalIP", - "label": "External IP", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "ipFamilyPolicy", - "label": "IP Family Policy", - "description": "Specify the IP Policy", - "schema": { - "type": "string", - "default": "SingleStack", - "enum": [ - { - "value": "SingleStack", - "description": "SingleStack" - }, - { - "value": "PreferDualStack", - "description": "PreferDualStack" - }, - { - "value": "RequireDualStack", - "description": "RequireDualStack" - } - ] - } - }, - { - "variable": "ipFamilies", - "label": "IP Families", - "description": "(Advanced) The IP Families that should be used", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ipFamily", - "label": "IP Family", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "portsList", - "label": "Additional Service Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsListEntry", - "label": "Custom ports", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Port", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Port Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "protocol", - "label": "Port Type", - "schema": { - "type": "string", - "default": "tcp", - "enum": [ - { - "value": "http", - "description": "HTTP" - }, - { - "value": "https", - "description": "HTTPS" - }, - { - "value": "tcp", - "description": "TCP" - }, - { - "value": "udp", - "description": "UDP" - } - ] - } - }, - { - "variable": "targetPort", - "label": "Target Port", - "description": "This port exposes the container port on the service", - "schema": { - "type": "int", - "required": true - } - }, - { - "variable": "port", - "label": "Container Port", - "schema": { - "type": "int", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "persistence", - "label": "Integrated Persistent Storage", - "description": "Integrated Persistent Storage", - "group": "Storage and 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": "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": "Storage and Persistence", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "persistenceListEntry", - "label": "Custom Storage", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the storage", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "type", - "label": "Type of Storage", - "description": "Sets the persistence type, Anything other than PVC could break rollback!", - "schema": { - "type": "string", - "default": "hostPath", - "enum": [ - { - "value": "pvc", - "description": "PVC" - }, - { - "value": "hostPath", - "description": "Host Path" - }, - { - "value": "emptyDir", - "description": "emptyDir" - }, - { - "value": "nfs", - "description": "NFS Share" - } - ] - } - }, - { - "variable": "server", - "label": "NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "path", - "label": "Path on NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "iscsi", - "label": "iSCSI Options", - "schema": { - "show_if": [ - [ - "type", - "=", - "iscsi" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "targetPortal", - "label": "targetPortal", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "iqn", - "label": "iqn", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "lun", - "label": "lun", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "authSession", - "label": "authSession", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - }, - { - "variable": "authDiscovery", - "label": "authDiscovery", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - }, - { - "variable": "autoPermissions", - "label": "Automatic Permissions Configuration", - "description": "Automatically set permissions", - "schema": { - "show_if": [ - [ - "type", - "!=", - "pvc" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "chown", - "label": "Run CHOWN", - "description": "It will run CHOWN on the path with the given fsGroup\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": "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": "Security and Permissions", - "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 and Devices", - "label": "Resource Limits", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "limits", - "label": "Advanced Limit Resource Consumption", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "4000m", - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "8Gi", - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - }, - { - "variable": "gpu.intel.com/i915", - "label": "Add Intel i915 GPUs", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "nvidia.com/gpu", - "label": "Add NVIDIA GPUs (Experimental)", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "amd.com/gpu", - "label": "Add AMD GPUs", - "schema": { - "type": "int", - "default": 0 - } - } - ] - } - }, - { - "variable": "requests", - "label": "Minimum Resources Required (request)", - "schema": { - "additional_attrs": true, - "type": "dict", - "hidden": true, - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "10m", - "hidden": true, - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "50Mi", - "hidden": true, - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - } - ] - } - } - ] - } - }, - { - "variable": "deviceList", - "label": "Mount USB Devices", - "group": "Resources and Devices", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "deviceListEntry", - "label": "Device", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Storage", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "type", - "label": "(Advanced) Type of Storage", - "description": "Sets the persistence type", - "schema": { - "type": "string", - "default": "device", - "hidden": true - } - }, - { - "variable": "readOnly", - "label": "readOnly", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "hostPath", - "label": "Host Device Path", - "description": "Path to the device on the host system", - "schema": { - "type": "path" - } - }, - { - "variable": "mountPath", - "label": "Container Device Path", - "description": "Path inside the container the device is mounted", - "schema": { - "type": "string", - "default": "/dev/ttyACM0" - } - } - ] - } - } - ] - } - }, - { - "variable": "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": "Advanced", - "label": "(Advanced) Network Policy", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "netPolicyEntry", - "label": "Network Policy Entry", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "policyType", - "label": "Policy Type", - "schema": { - "type": "string", - "default": "", - "enum": [ - { - "value": "", - "description": "Default" - }, - { - "value": "ingress", - "description": "Ingress" - }, - { - "value": "egress", - "description": "Egress" - }, - { - "value": "ingress-egress", - "description": "Ingress and Egress" - } - ] - } - }, - { - "variable": "egress", - "label": "Egress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "egressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "to", - "label": "To", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "toEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ingressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "from", - "label": "From", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "fromEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "addons", - "group": "Addons", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "Codeserver", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "service", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "NodePort", - "description": "Deprecated CHANGE THIS" - }, - { - "value": "ClusterIP", - "description": "ClusterIP" - }, - { - "value": "LoadBalancer", - "description": "LoadBalancer" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "ports", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int", - "default": 36107 - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable Ingress", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hosts", - "label": "Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "hostEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "host", - "label": "HostName", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "paths", - "label": "Paths", - "schema": { - "type": "list", - "default": [ - { - "path": "/", - "pathType": "Prefix" - } - ], - "items": [ - { - "variable": "pathEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "path", - "label": "Path", - "schema": { - "type": "string", - "required": true, - "default": "/" - } - }, - { - "variable": "pathType", - "label": "Path Type", - "schema": { - "type": "string", - "required": true, - "default": "Prefix" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "integrations", - "label": "Integrations", - "description": "Connect ingress with other charts", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "traefik", - "label": "Traefik", - "description": "Connect ingress with Traefik", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "allowCors", - "label": "Allow Cross Origin Requests (advanced)", - "schema": { - "type": "boolean", - "default": false, - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - }, - { - "variable": "entrypoints", - "label": "Entrypoints", - "schema": { - "type": "list", - "default": [ - "websecure" - ], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "entrypoint", - "label": "Entrypoint", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "middlewares", - "label": "Middlewares", - "schema": { - "type": "list", - "default": [], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "middleware", - "label": "Middleware", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "name", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "namespace", - "label": "namespace (optional)", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "certManager", - "label": "certManager", - "description": "Connect ingress with certManager", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "certificateIssuer", - "label": "certificateIssuer", - "description": "defaults to chartname", - "schema": { - "type": "string", - "default": "", - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "advanced", - "label": "Show Advanced Settings", - "description": "Advanced settings are not covered by TrueCharts Support", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "ingressClassName", - "label": "(Advanced/Optional) IngressClass Name", - "schema": { - "type": "string", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": "" - } - }, - { - "variable": "tls", - "label": "TLS-Settings", - "schema": { - "type": "list", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": [], - "items": [ - { - "variable": "tlsEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "hosts", - "label": "Certificate Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "host", - "label": "Host", - "schema": { - "type": "string", - "default": "", - "required": true - } - } - ] - } - }, - { - "variable": "certificateIssuer", - "label": "Use Cert-Manager clusterIssuer", - "description": "add the name of your cert-manager clusterIssuer here for automatic tls certificates.", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "clusterCertificate", - "label": "Cluster Certificate (Advanced)", - "description": "Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.", - "schema": { - "type": "string", - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "default": "" - } - }, - { - "variable": "secretName", - "label": "Use Custom Certificate Secret (Advanced)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "scaleCert", - "label": "Use TrueNAS SCALE Certificate (Deprecated)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "int", - "$ref": [ - "definitions/certificate" - ], - "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": "

            A fork of Radarr to work with Books & AudioBooks

            \n

            This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/readarr

            \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 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

            readarr-19.1.18 (2024-02-05)

            \n

            Chore

            \n
              \n
            • update container image ghcr.io/onedr0p/readarr-develop to 0.3.18.2411@a1d9eb2 by renovate (#17957)
            • \n
            \n

            readarr-19.1.17 (2024-02-05)

            \n

            Chore

            \n
              \n
            • update container image ghcr.io/onedr0p/readarr-develop to v0.3.18.2411@fa1fe2d by renovate (#17916)
            • \n
            \n

            readarr-19.1.16 (2024-02-03)

            \n

            Chore

            \n
              \n
            • update container image common to v17.2.30@19ad5ec by renovate (#17804)
            • \n
            \n

            readarr-19.1.15 (2024-01-29)

            \n

            Chore

            \n
              \n
            • update container image ghcr.io/onedr0p/exportarr to v1.6.1@60cf3d4 by renovate (#17725)
            • \n
            \n

            readarr-19.1.14 (2024-01-29)

            \n

            Chore

            \n
              \n
            • update container image ghcr.io/onedr0p/readarr-develop to v0.3.17.2409@3d8be41 by renovate (#17675)
            • \n
            \n

            readarr-19.1.13 (2024-01-26)

            \n

            Chore

            \n
              \n
            • update container image common to v17.2.29@d7c41a3 by renovate (#17545)
            • \n
            \n

            readarr-19.1.12 (2024-01-21)

            \n

            Chore

            \n
              \n
            • update container image common to v17.2.28@918b4c5 by renovate (#17478)
            • \n
            \n

            readarr-19.1.11 (2024-01-21)

            \n

            Chore

            \n
              \n
            • update container image common to v17.2.26@24c98f7 by renovate (#17409)
            • \n
            \n

            readarr-19.1.10 (2024-01-21)

            \n

            Chore

            \n
              \n
            • update metadata in chart.yaml (#17457)
            • \n
            \n

            readarr-19.1.9 (2024-01-21)

            " - }, - "19.3.0": { - "healthy": true, - "supported": true, - "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/readarr/19.3.0", - "last_update": "2024-05-29 12:35:14", - "required_features": [ - "definitions/timezone", - "definitions/gpuConfiguration", - "definitions/interface", - "normalize/interfaceConfiguration", - "definitions/certificate" - ], - "human_version": "0.3.18.2411_19.3.0", - "version": "19.3.0", - "chart_metadata": { - "annotations": { - "max_scale_version": "24.04.0", - "min_scale_version": "23.10.0", - "truecharts.org/category": "media", - "truecharts.org/max_helm_version": "3.14", - "truecharts.org/min_helm_version": "3.12", - "truecharts.org/train": "stable" - }, - "apiVersion": "v2", - "appVersion": "0.3.18.2411", - "dependencies": [ - { - "name": "common", - "version": "17.5.0", - "repository": "oci://tccr.io/truecharts", - "condition": "", - "alias": "", - "tags": [], - "import-values": [] - } - ], - "deprecated": false, - "description": "A fork of Radarr to work with Books & AudioBooks", - "home": "https://truecharts.org/charts/stable/readarr", - "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/readarr.png", - "keywords": [ - "readarr", - "torrent", - "usenet", - "AudioBooks", - "ebooks" - ], - "kubeVersion": ">=1.24.0-0", - "maintainers": [ - { - "name": "TrueCharts", - "email": "info@truecharts.org", - "url": "https://truecharts.org" - } - ], - "name": "readarr", - "sources": [ - "https://readarr.com", - "https://github.com/Readarr/Readarr", - "https://github.com/truecharts/charts/tree/master/charts/stable/readarr", - "https://ghcr.io/onedr0p/exportarr", - "https://ghcr.io/onedr0p/readarr-develop" - ], - "type": "application", - "version": "19.3.0" - }, - "app_metadata": null, - "schema": { - "groups": [ - { - "name": "Container Image", - "description": "Image to be used for container" - }, - { - "name": "General Settings", - "description": "General Deployment Settings" - }, - { - "name": "Workload Settings", - "description": "Workload Settings" - }, - { - "name": "App Configuration", - "description": "App Specific Config Options" - }, - { - "name": "Networking and Services", - "description": "Configure Network and Services for Container" - }, - { - "name": "Storage and Persistence", - "description": "Persist and Share Data that is Separate from the Container" - }, - { - "name": "Ingress", - "description": "Ingress Configuration" - }, - { - "name": "Security and Permissions", - "description": "Configure Security Context and Permissions" - }, - { - "name": "Resources and Devices", - "description": "Specify Resources/Devices to be Allocated to Workload" - }, - { - "name": "Middlewares", - "description": "Traefik Middlewares" - }, - { - "name": "Metrics", - "description": "Metrics" - }, - { - "name": "Addons", - "description": "Addon Configuration" - }, - { - "name": "Backup Configuration", - "description": "Configure Velero Backup Schedule" - }, - { - "name": "Advanced", - "description": "Advanced Configuration" - }, - { - "name": "Postgresql", - "description": "Postgresql" - }, - { - "name": "Documentation", - "description": "Documentation" - } - ], - "portals": { - "open": { - "protocols": [ - "$kubernetes-resource_configmap_tcportal-open_protocol" - ], - "host": [ - "$kubernetes-resource_configmap_tcportal-open_host" - ], - "ports": [ - "$kubernetes-resource_configmap_tcportal-open_port" - ] - } - }, - "questions": [ - { - "variable": "global", - "group": "General Settings", - "label": "Global Settings", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "stopAll", - "label": "Stop All", - "description": "Stops All Running pods and hibernates cnpg", - "schema": { - "type": "boolean", - "default": false - } - } - ] - } - }, - { - "variable": "workload", - "group": "Workload Settings", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Type (Advanced)", - "schema": { - "type": "string", - "default": "Deployment", - "enum": [ - { - "value": "Deployment", - "description": "Deployment" - }, - { - "value": "DaemonSet", - "description": "DaemonSet" - } - ] - } - }, - { - "variable": "replicas", - "label": "Replicas (Advanced)", - "description": "Set the number of Replicas", - "schema": { - "type": "int", - "show_if": [ - [ - "type", - "!=", - "DaemonSet" - ] - ], - "default": 1 - } - }, - { - "variable": "podSpec", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "containers", - "label": "Containers", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "Main Container", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "env", - "group": "App Configuration", - "label": "Image Environment", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "READARR__AUTHENTICATION_METHOD", - "label": "Auth Method", - "description": "Sets the auth method.", - "schema": { - "type": "string", - "default": "", - "enum": [ - { - "value": "", - "description": "In-App Setting" - }, - { - "value": "None", - "description": "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 Settings", - "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 Settings", - "label": "Global Pod Options (Advanced)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "expertPodOpts", - "label": "Expert - Pod Options", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hostNetwork", - "label": "Host Networking", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "dnsConfig", - "label": "DNS Configuration", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "options", - "label": "Options", - "schema": { - "type": "list", - "default": [ - { - "name": "ndots", - "value": "1" - } - ], - "items": [ - { - "variable": "optionsEntry", - "label": "Option Entry", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true - } - }, - { - "variable": "value", - "label": "Value", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "nameservers", - "label": "Nameservers", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "nsEntry", - "label": "Nameserver Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - }, - { - "variable": "searches", - "label": "Searches", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "searchEntry", - "label": "Search Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "imagePullSecretList", - "group": "General Settings", - "label": "Image Pull Secrets", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "pullsecretentry", - "label": "Pull Secret", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "data", - "label": "Data", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "registry", - "label": "Registry", - "schema": { - "type": "string", - "required": true, - "default": "https://index.docker.io/v1/" - } - }, - { - "variable": "username", - "label": "Username", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "password", - "label": "Password", - "schema": { - "type": "string", - "required": true, - "private": true, - "default": "" - } - }, - { - "variable": "email", - "label": "Email", - "schema": { - "type": "string", - "required": true, - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "service", - "group": "Networking and Services", - "label": "Configure Service(s)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "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": 8787, - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "serviceexpert", - "group": "Networking and Services", - "label": "Show Expert Config", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "scaleExternalInterface", - "description": "Add External Interfaces", - "label": "Add external Interfaces", - "group": "Networking", - "schema": { - "type": "list", - "items": [ - { - "variable": "interfaceConfiguration", - "description": "Interface Configuration", - "label": "Interface Configuration", - "schema": { - "additional_attrs": true, - "type": "dict", - "$ref": [ - "normalize/interfaceConfiguration" - ], - "attrs": [ - { - "variable": "hostInterface", - "description": "Please Specify Host Interface", - "label": "Host Interface", - "schema": { - "type": "string", - "required": true, - "$ref": [ - "definitions/interface" - ], - "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": "Networking and Services", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "serviceListEntry", - "label": "Custom Service", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the service", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "LoadBalancer", - "description": "LoadBalancer (Expose Ports)" - }, - { - "value": "ClusterIP", - "description": "ClusterIP (Do Not Expose Ports)" - }, - { - "value": "Simple", - "description": "Deprecated CHANGE THIS" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "advancedsvcset", - "label": "Show Advanced Service Settings", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "externalIPs", - "label": "External IP's", - "description": "External IP's", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "externalIP", - "label": "External IP", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "ipFamilyPolicy", - "label": "IP Family Policy", - "description": "Specify the IP Policy", - "schema": { - "type": "string", - "default": "SingleStack", - "enum": [ - { - "value": "SingleStack", - "description": "SingleStack" - }, - { - "value": "PreferDualStack", - "description": "PreferDualStack" - }, - { - "value": "RequireDualStack", - "description": "RequireDualStack" - } - ] - } - }, - { - "variable": "ipFamilies", - "label": "IP Families", - "description": "(Advanced) The IP Families that should be used", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ipFamily", - "label": "IP Family", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "portsList", - "label": "Additional Service Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsListEntry", - "label": "Custom ports", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Port", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Port Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "protocol", - "label": "Port Type", - "schema": { - "type": "string", - "default": "tcp", - "enum": [ - { - "value": "http", - "description": "HTTP" - }, - { - "value": "https", - "description": "HTTPS" - }, - { - "value": "tcp", - "description": "TCP" - }, - { - "value": "udp", - "description": "UDP" - } - ] - } - }, - { - "variable": "targetPort", - "label": "Target Port", - "description": "This port exposes the container port on the service", - "schema": { - "type": "int", - "required": true - } - }, - { - "variable": "port", - "label": "Container Port", - "schema": { - "type": "int", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "persistence", - "label": "Integrated Persistent Storage", - "description": "Integrated Persistent Storage", - "group": "Storage and 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": "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": "Storage and Persistence", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "persistenceListEntry", - "label": "Custom Storage", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the storage", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "type", - "label": "Type of Storage", - "description": "Sets the persistence type, Anything other than PVC could break rollback!", - "schema": { - "type": "string", - "default": "hostPath", - "enum": [ - { - "value": "pvc", - "description": "PVC" - }, - { - "value": "hostPath", - "description": "Host Path" - }, - { - "value": "emptyDir", - "description": "emptyDir" - }, - { - "value": "nfs", - "description": "NFS Share" - } - ] - } - }, - { - "variable": "server", - "label": "NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "path", - "label": "Path on NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "iscsi", - "label": "iSCSI Options", - "schema": { - "show_if": [ - [ - "type", - "=", - "iscsi" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "targetPortal", - "label": "targetPortal", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "iqn", - "label": "iqn", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "lun", - "label": "lun", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "authSession", - "label": "authSession", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - }, - { - "variable": "authDiscovery", - "label": "authDiscovery", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - }, - { - "variable": "autoPermissions", - "label": "Automatic Permissions Configuration", - "description": "Automatically set permissions", - "schema": { - "show_if": [ - [ - "type", - "!=", - "pvc" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "chown", - "label": "Run CHOWN", - "description": "It will run CHOWN on the path with the given fsGroup\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": "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": "Security and Permissions", - "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 and Devices", - "label": "Resource Limits", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "limits", - "label": "Advanced Limit Resource Consumption", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "4000m", - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "8Gi", - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - }, - { - "variable": "intel.com/i915", - "label": "Add Intel i915 GPUs", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "nvidia.com/gpu", - "label": "Add NVIDIA GPUs (Experimental)", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "amd.com/gpu", - "label": "Add AMD GPUs", - "schema": { - "type": "int", - "default": 0 - } - } - ] - } - }, - { - "variable": "requests", - "label": "Minimum Resources Required (request)", - "schema": { - "additional_attrs": true, - "type": "dict", - "hidden": true, - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "10m", - "hidden": true, - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "50Mi", - "hidden": true, - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - } - ] - } - } - ] - } - }, - { - "variable": "deviceList", - "label": "Mount USB Devices", - "group": "Resources and Devices", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "deviceListEntry", - "label": "Device", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Storage", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "type", - "label": "(Advanced) Type of Storage", - "description": "Sets the persistence type", - "schema": { - "type": "string", - "default": "device", - "hidden": true - } - }, - { - "variable": "readOnly", - "label": "readOnly", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "hostPath", - "label": "Host Device Path", - "description": "Path to the device on the host system", - "schema": { - "type": "path" - } - }, - { - "variable": "mountPath", - "label": "Container Device Path", - "description": "Path inside the container the device is mounted", - "schema": { - "type": "string", - "default": "/dev/ttyACM0" - } - } - ] - } - } - ] - } - }, - { - "variable": "scaleGPU", - "label": "GPU Configuration", - "group": "Resources and Devices", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "scaleGPUEntry", - "label": "GPU", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "gpu", - "label": "Select GPU", - "schema": { - "additional_attrs": true, - "type": "dict", - "$ref": [ - "definitions/gpuConfiguration" - ], - "attrs": [] - } - }, - { - "variable": "workaround", - "label": "Workaround", - "schema": { - "type": "string", - "default": "workaround", - "hidden": 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": "Advanced", - "label": "(Advanced) Network Policy", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "netPolicyEntry", - "label": "Network Policy Entry", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "policyType", - "label": "Policy Type", - "schema": { - "type": "string", - "default": "", - "enum": [ - { - "value": "", - "description": "Default" - }, - { - "value": "ingress", - "description": "Ingress" - }, - { - "value": "egress", - "description": "Egress" - }, - { - "value": "ingress-egress", - "description": "Ingress and Egress" - } - ] - } - }, - { - "variable": "egress", - "label": "Egress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "egressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "to", - "label": "To", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "toEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ingressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "from", - "label": "From", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "fromEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "addons", - "group": "Addons", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "Codeserver", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "service", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "NodePort", - "description": "Deprecated CHANGE THIS" - }, - { - "value": "ClusterIP", - "description": "ClusterIP" - }, - { - "value": "LoadBalancer", - "description": "LoadBalancer" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "ports", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int", - "default": 36107 - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable Ingress", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hosts", - "label": "Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "hostEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "host", - "label": "HostName", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "paths", - "label": "Paths", - "schema": { - "type": "list", - "default": [ - { - "path": "/", - "pathType": "Prefix" - } - ], - "items": [ - { - "variable": "pathEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "path", - "label": "Path", - "schema": { - "type": "string", - "required": true, - "default": "/" - } - }, - { - "variable": "pathType", - "label": "Path Type", - "schema": { - "type": "string", - "required": true, - "default": "Prefix" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "integrations", - "label": "Integrations", - "description": "Connect ingress with other charts", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "traefik", - "label": "Traefik", - "description": "Connect ingress with Traefik", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "allowCors", - "label": "Allow Cross Origin Requests (advanced)", - "schema": { - "type": "boolean", - "default": false, - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - }, - { - "variable": "entrypoints", - "label": "Entrypoints", - "schema": { - "type": "list", - "default": [ - "websecure" - ], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "entrypoint", - "label": "Entrypoint", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "middlewares", - "label": "Middlewares", - "schema": { - "type": "list", - "default": [], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "middleware", - "label": "Middleware", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "name", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "namespace", - "label": "namespace (optional)", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "certManager", - "label": "certManager", - "description": "Connect ingress with certManager", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "certificateIssuer", - "label": "certificateIssuer", - "description": "defaults to chartname", - "schema": { - "type": "string", - "default": "", - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "advanced", - "label": "Show Advanced Settings", - "description": "Advanced settings are not covered by TrueCharts Support", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "ingressClassName", - "label": "(Advanced/Optional) IngressClass Name", - "schema": { - "type": "string", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": "" - } - }, - { - "variable": "tls", - "label": "TLS-Settings", - "schema": { - "type": "list", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": [], - "items": [ - { - "variable": "tlsEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "hosts", - "label": "Certificate Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "host", - "label": "Host", - "schema": { - "type": "string", - "default": "", - "required": true - } - } - ] - } - }, - { - "variable": "certificateIssuer", - "label": "Use Cert-Manager clusterIssuer", - "description": "add the name of your cert-manager clusterIssuer here for automatic tls certificates.", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "clusterCertificate", - "label": "Cluster Certificate (Advanced)", - "description": "Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.", - "schema": { - "type": "string", - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "default": "" - } - }, - { - "variable": "secretName", - "label": "Use Custom Certificate Secret (Advanced)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "scaleCert", - "label": "Use TrueNAS SCALE Certificate (Deprecated)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "int", - "$ref": [ - "definitions/certificate" - ], - "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": "

            A fork of Radarr to work with Books & AudioBooks

            \n

            This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/readarr

            \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 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

            readarr-19.1.18 (2024-02-05)

            \n

            Chore

            \n
              \n
            • update container image ghcr.io/onedr0p/readarr-develop to 0.3.18.2411@a1d9eb2 by renovate (#17957)
            • \n
            \n

            readarr-19.1.17 (2024-02-05)

            \n

            Chore

            \n
              \n
            • update container image ghcr.io/onedr0p/readarr-develop to v0.3.18.2411@fa1fe2d by renovate (#17916)
            • \n
            \n

            readarr-19.1.16 (2024-02-03)

            \n

            Chore

            \n
              \n
            • update container image common to v17.2.30@19ad5ec by renovate (#17804)
            • \n
            \n

            readarr-19.1.15 (2024-01-29)

            \n

            Chore

            \n
              \n
            • update container image ghcr.io/onedr0p/exportarr to v1.6.1@60cf3d4 by renovate (#17725)
            • \n
            \n

            readarr-19.1.14 (2024-01-29)

            \n

            Chore

            \n
              \n
            • update container image ghcr.io/onedr0p/readarr-develop to v0.3.17.2409@3d8be41 by renovate (#17675)
            • \n
            \n

            readarr-19.1.13 (2024-01-26)

            \n

            Chore

            \n
              \n
            • update container image common to v17.2.29@d7c41a3 by renovate (#17545)
            • \n
            \n

            readarr-19.1.12 (2024-01-21)

            \n

            Chore

            \n
              \n
            • update container image common to v17.2.28@918b4c5 by renovate (#17478)
            • \n
            \n

            readarr-19.1.11 (2024-01-21)

            \n

            Chore

            \n
              \n
            • update container image common to v17.2.26@24c98f7 by renovate (#17409)
            • \n
            \n

            readarr-19.1.10 (2024-01-21)

            \n

            Chore

            \n
              \n
            • update metadata in chart.yaml (#17457)
            • \n
            \n

            readarr-19.1.9 (2024-01-21)

            \n

            Chore

            \n
              \n
            • update container image ghcr.io/onedr0p/readarr-develop to v0.3.15.2376@ac03108 by renovate (#17422)
            • \n
            " - }, - "19.2.0": { - "healthy": true, - "supported": true, - "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/readarr/19.2.0", - "last_update": "2024-05-29 12:35:14", - "required_features": [ - "definitions/timezone", - "definitions/gpuConfiguration", - "definitions/interface", - "normalize/interfaceConfiguration", - "definitions/certificate" - ], - "human_version": "0.3.18.2411_19.2.0", - "version": "19.2.0", - "chart_metadata": { - "annotations": { - "max_scale_version": "24.04.0", - "min_scale_version": "23.10.0", - "truecharts.org/category": "media", - "truecharts.org/max_helm_version": "3.14", - "truecharts.org/min_helm_version": "3.12", - "truecharts.org/train": "stable" - }, - "apiVersion": "v2", - "appVersion": "0.3.18.2411", - "dependencies": [ - { - "name": "common", - "version": "17.4.2", - "repository": "oci://tccr.io/truecharts", - "condition": "", - "alias": "", - "tags": [], - "import-values": [] - } - ], - "deprecated": false, - "description": "A fork of Radarr to work with Books & AudioBooks", - "home": "https://truecharts.org/charts/stable/readarr", - "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/readarr.png", - "keywords": [ - "readarr", - "torrent", - "usenet", - "AudioBooks", - "ebooks" - ], - "kubeVersion": ">=1.24.0-0", - "maintainers": [ - { - "name": "TrueCharts", - "email": "info@truecharts.org", - "url": "https://truecharts.org" - } - ], - "name": "readarr", - "sources": [ - "https://readarr.com", - "https://github.com/Readarr/Readarr", - "https://github.com/truecharts/charts/tree/master/charts/stable/readarr", - "https://ghcr.io/onedr0p/readarr-develop", - "https://ghcr.io/onedr0p/exportarr" - ], - "type": "application", - "version": "19.2.0" - }, - "app_metadata": null, - "schema": { - "groups": [ - { - "name": "Container Image", - "description": "Image to be used for container" - }, - { - "name": "General Settings", - "description": "General Deployment Settings" - }, - { - "name": "Workload Settings", - "description": "Workload Settings" - }, - { - "name": "App Configuration", - "description": "App Specific Config Options" - }, - { - "name": "Networking and Services", - "description": "Configure Network and Services for Container" - }, - { - "name": "Storage and Persistence", - "description": "Persist and Share Data that is Separate from the Container" - }, - { - "name": "Ingress", - "description": "Ingress Configuration" - }, - { - "name": "Security and Permissions", - "description": "Configure Security Context and Permissions" - }, - { - "name": "Resources and Devices", - "description": "Specify Resources/Devices to be Allocated to Workload" - }, - { - "name": "Middlewares", - "description": "Traefik Middlewares" - }, - { - "name": "Metrics", - "description": "Metrics" - }, - { - "name": "Addons", - "description": "Addon Configuration" - }, - { - "name": "Backup Configuration", - "description": "Configure Velero Backup Schedule" - }, - { - "name": "Advanced", - "description": "Advanced Configuration" - }, - { - "name": "Postgresql", - "description": "Postgresql" - }, - { - "name": "Documentation", - "description": "Documentation" - } - ], - "portals": { - "open": { - "protocols": [ - "$kubernetes-resource_configmap_tcportal-open_protocol" - ], - "host": [ - "$kubernetes-resource_configmap_tcportal-open_host" - ], - "ports": [ - "$kubernetes-resource_configmap_tcportal-open_port" - ] - } - }, - "questions": [ - { - "variable": "global", - "group": "General Settings", - "label": "Global Settings", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "stopAll", - "label": "Stop All", - "description": "Stops All Running pods and hibernates cnpg", - "schema": { - "type": "boolean", - "default": false - } - } - ] - } - }, - { - "variable": "workload", - "group": "Workload Settings", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Type (Advanced)", - "schema": { - "type": "string", - "default": "Deployment", - "enum": [ - { - "value": "Deployment", - "description": "Deployment" - }, - { - "value": "DaemonSet", - "description": "DaemonSet" - } - ] - } - }, - { - "variable": "replicas", - "label": "Replicas (Advanced)", - "description": "Set the number of Replicas", - "schema": { - "type": "int", - "show_if": [ - [ - "type", - "!=", - "DaemonSet" - ] - ], - "default": 1 - } - }, - { - "variable": "podSpec", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "containers", - "label": "Containers", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "Main Container", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "env", - "group": "App Configuration", - "label": "Image Environment", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "READARR__AUTHENTICATION_METHOD", - "label": "Auth Method", - "description": "Sets the auth method.", - "schema": { - "type": "string", - "default": "", - "enum": [ - { - "value": "", - "description": "In-App Setting" - }, - { - "value": "None", - "description": "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 Settings", - "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 Settings", - "label": "Global Pod Options (Advanced)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "expertPodOpts", - "label": "Expert - Pod Options", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hostNetwork", - "label": "Host Networking", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "dnsConfig", - "label": "DNS Configuration", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "options", - "label": "Options", - "schema": { - "type": "list", - "default": [ - { - "name": "ndots", - "value": "1" - } - ], - "items": [ - { - "variable": "optionsEntry", - "label": "Option Entry", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true - } - }, - { - "variable": "value", - "label": "Value", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "nameservers", - "label": "Nameservers", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "nsEntry", - "label": "Nameserver Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - }, - { - "variable": "searches", - "label": "Searches", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "searchEntry", - "label": "Search Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "imagePullSecretList", - "group": "General Settings", - "label": "Image Pull Secrets", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "pullsecretentry", - "label": "Pull Secret", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "data", - "label": "Data", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "registry", - "label": "Registry", - "schema": { - "type": "string", - "required": true, - "default": "https://index.docker.io/v1/" - } - }, - { - "variable": "username", - "label": "Username", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "password", - "label": "Password", - "schema": { - "type": "string", - "required": true, - "private": true, - "default": "" - } - }, - { - "variable": "email", - "label": "Email", - "schema": { - "type": "string", - "required": true, - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "service", - "group": "Networking and Services", - "label": "Configure Service(s)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "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": 8787, - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "serviceexpert", - "group": "Networking and Services", - "label": "Show Expert Config", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "scaleExternalInterface", - "description": "Add External Interfaces", - "label": "Add external Interfaces", - "group": "Networking", - "schema": { - "type": "list", - "items": [ - { - "variable": "interfaceConfiguration", - "description": "Interface Configuration", - "label": "Interface Configuration", - "schema": { - "additional_attrs": true, - "type": "dict", - "$ref": [ - "normalize/interfaceConfiguration" - ], - "attrs": [ - { - "variable": "hostInterface", - "description": "Please Specify Host Interface", - "label": "Host Interface", - "schema": { - "type": "string", - "required": true, - "$ref": [ - "definitions/interface" - ], - "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": "Networking and Services", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "serviceListEntry", - "label": "Custom Service", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the service", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "LoadBalancer", - "description": "LoadBalancer (Expose Ports)" - }, - { - "value": "ClusterIP", - "description": "ClusterIP (Do Not Expose Ports)" - }, - { - "value": "Simple", - "description": "Deprecated CHANGE THIS" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "advancedsvcset", - "label": "Show Advanced Service Settings", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "externalIPs", - "label": "External IP's", - "description": "External IP's", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "externalIP", - "label": "External IP", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "ipFamilyPolicy", - "label": "IP Family Policy", - "description": "Specify the IP Policy", - "schema": { - "type": "string", - "default": "SingleStack", - "enum": [ - { - "value": "SingleStack", - "description": "SingleStack" - }, - { - "value": "PreferDualStack", - "description": "PreferDualStack" - }, - { - "value": "RequireDualStack", - "description": "RequireDualStack" - } - ] - } - }, - { - "variable": "ipFamilies", - "label": "IP Families", - "description": "(Advanced) The IP Families that should be used", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ipFamily", - "label": "IP Family", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "portsList", - "label": "Additional Service Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsListEntry", - "label": "Custom ports", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Port", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Port Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "protocol", - "label": "Port Type", - "schema": { - "type": "string", - "default": "tcp", - "enum": [ - { - "value": "http", - "description": "HTTP" - }, - { - "value": "https", - "description": "HTTPS" - }, - { - "value": "tcp", - "description": "TCP" - }, - { - "value": "udp", - "description": "UDP" - } - ] - } - }, - { - "variable": "targetPort", - "label": "Target Port", - "description": "This port exposes the container port on the service", - "schema": { - "type": "int", - "required": true - } - }, - { - "variable": "port", - "label": "Container Port", - "schema": { - "type": "int", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "persistence", - "label": "Integrated Persistent Storage", - "description": "Integrated Persistent Storage", - "group": "Storage and 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": "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": "Storage and Persistence", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "persistenceListEntry", - "label": "Custom Storage", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the storage", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "type", - "label": "Type of Storage", - "description": "Sets the persistence type, Anything other than PVC could break rollback!", - "schema": { - "type": "string", - "default": "hostPath", - "enum": [ - { - "value": "pvc", - "description": "PVC" - }, - { - "value": "hostPath", - "description": "Host Path" - }, - { - "value": "emptyDir", - "description": "emptyDir" - }, - { - "value": "nfs", - "description": "NFS Share" - } - ] - } - }, - { - "variable": "server", - "label": "NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "path", - "label": "Path on NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "iscsi", - "label": "iSCSI Options", - "schema": { - "show_if": [ - [ - "type", - "=", - "iscsi" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "targetPortal", - "label": "targetPortal", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "iqn", - "label": "iqn", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "lun", - "label": "lun", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "authSession", - "label": "authSession", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - }, - { - "variable": "authDiscovery", - "label": "authDiscovery", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - }, - { - "variable": "autoPermissions", - "label": "Automatic Permissions Configuration", - "description": "Automatically set permissions", - "schema": { - "show_if": [ - [ - "type", - "!=", - "pvc" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "chown", - "label": "Run CHOWN", - "description": "It will run CHOWN on the path with the given fsGroup\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": "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": "Security and Permissions", - "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 and Devices", - "label": "Resource Limits", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "limits", - "label": "Advanced Limit Resource Consumption", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "4000m", - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "8Gi", - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - }, - { - "variable": "intel.com/i915", - "label": "Add Intel i915 GPUs", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "nvidia.com/gpu", - "label": "Add NVIDIA GPUs (Experimental)", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "amd.com/gpu", - "label": "Add AMD GPUs", - "schema": { - "type": "int", - "default": 0 - } - } - ] - } - }, - { - "variable": "requests", - "label": "Minimum Resources Required (request)", - "schema": { - "additional_attrs": true, - "type": "dict", - "hidden": true, - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "10m", - "hidden": true, - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "50Mi", - "hidden": true, - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - } - ] - } - } - ] - } - }, - { - "variable": "deviceList", - "label": "Mount USB Devices", - "group": "Resources and Devices", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "deviceListEntry", - "label": "Device", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Storage", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "type", - "label": "(Advanced) Type of Storage", - "description": "Sets the persistence type", - "schema": { - "type": "string", - "default": "device", - "hidden": true - } - }, - { - "variable": "readOnly", - "label": "readOnly", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "hostPath", - "label": "Host Device Path", - "description": "Path to the device on the host system", - "schema": { - "type": "path" - } - }, - { - "variable": "mountPath", - "label": "Container Device Path", - "description": "Path inside the container the device is mounted", - "schema": { - "type": "string", - "default": "/dev/ttyACM0" - } - } - ] - } - } - ] - } - }, - { - "variable": "scaleGPU", - "label": "GPU Configuration", - "group": "Resources and Devices", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "scaleGPUEntry", - "label": "GPU", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "gpu", - "label": "Select GPU", - "schema": { - "additional_attrs": true, - "type": "dict", - "$ref": [ - "definitions/gpuConfiguration" - ], - "attrs": [] - } - }, - { - "variable": "workaround", - "label": "Workaround", - "schema": { - "type": "string", - "default": "workaround", - "hidden": 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": "Advanced", - "label": "(Advanced) Network Policy", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "netPolicyEntry", - "label": "Network Policy Entry", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "policyType", - "label": "Policy Type", - "schema": { - "type": "string", - "default": "", - "enum": [ - { - "value": "", - "description": "Default" - }, - { - "value": "ingress", - "description": "Ingress" - }, - { - "value": "egress", - "description": "Egress" - }, - { - "value": "ingress-egress", - "description": "Ingress and Egress" - } - ] - } - }, - { - "variable": "egress", - "label": "Egress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "egressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "to", - "label": "To", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "toEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ingressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "from", - "label": "From", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "fromEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "addons", - "group": "Addons", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "Codeserver", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "service", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "NodePort", - "description": "Deprecated CHANGE THIS" - }, - { - "value": "ClusterIP", - "description": "ClusterIP" - }, - { - "value": "LoadBalancer", - "description": "LoadBalancer" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "ports", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int", - "default": 36107 - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable Ingress", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hosts", - "label": "Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "hostEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "host", - "label": "HostName", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "paths", - "label": "Paths", - "schema": { - "type": "list", - "default": [ - { - "path": "/", - "pathType": "Prefix" - } - ], - "items": [ - { - "variable": "pathEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "path", - "label": "Path", - "schema": { - "type": "string", - "required": true, - "default": "/" - } - }, - { - "variable": "pathType", - "label": "Path Type", - "schema": { - "type": "string", - "required": true, - "default": "Prefix" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "integrations", - "label": "Integrations", - "description": "Connect ingress with other charts", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "traefik", - "label": "Traefik", - "description": "Connect ingress with Traefik", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "allowCors", - "label": "Allow Cross Origin Requests (advanced)", - "schema": { - "type": "boolean", - "default": false, - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - }, - { - "variable": "entrypoints", - "label": "Entrypoints", - "schema": { - "type": "list", - "default": [ - "websecure" - ], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "entrypoint", - "label": "Entrypoint", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "middlewares", - "label": "Middlewares", - "schema": { - "type": "list", - "default": [], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "middleware", - "label": "Middleware", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "name", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "namespace", - "label": "namespace (optional)", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "certManager", - "label": "certManager", - "description": "Connect ingress with certManager", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "certificateIssuer", - "label": "certificateIssuer", - "description": "defaults to chartname", - "schema": { - "type": "string", - "default": "", - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "advanced", - "label": "Show Advanced Settings", - "description": "Advanced settings are not covered by TrueCharts Support", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "ingressClassName", - "label": "(Advanced/Optional) IngressClass Name", - "schema": { - "type": "string", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": "" - } - }, - { - "variable": "tls", - "label": "TLS-Settings", - "schema": { - "type": "list", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": [], - "items": [ - { - "variable": "tlsEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "hosts", - "label": "Certificate Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "host", - "label": "Host", - "schema": { - "type": "string", - "default": "", - "required": true - } - } - ] - } - }, - { - "variable": "certificateIssuer", - "label": "Use Cert-Manager clusterIssuer", - "description": "add the name of your cert-manager clusterIssuer here for automatic tls certificates.", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "clusterCertificate", - "label": "Cluster Certificate (Advanced)", - "description": "Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.", - "schema": { - "type": "string", - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "default": "" - } - }, - { - "variable": "secretName", - "label": "Use Custom Certificate Secret (Advanced)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "scaleCert", - "label": "Use TrueNAS SCALE Certificate (Deprecated)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "int", - "$ref": [ - "definitions/certificate" - ], - "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": "

            A fork of Radarr to work with Books & AudioBooks

            \n

            This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/readarr

            \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 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

            readarr-19.1.18 (2024-02-05)

            \n

            Chore

            \n
              \n
            • update container image ghcr.io/onedr0p/readarr-develop to 0.3.18.2411@a1d9eb2 by renovate (#17957)
            • \n
            \n

            readarr-19.1.17 (2024-02-05)

            \n

            Chore

            \n
              \n
            • update container image ghcr.io/onedr0p/readarr-develop to v0.3.18.2411@fa1fe2d by renovate (#17916)
            • \n
            \n

            readarr-19.1.16 (2024-02-03)

            \n

            Chore

            \n
              \n
            • update container image common to v17.2.30@19ad5ec by renovate (#17804)
            • \n
            \n

            readarr-19.1.15 (2024-01-29)

            \n

            Chore

            \n
              \n
            • update container image ghcr.io/onedr0p/exportarr to v1.6.1@60cf3d4 by renovate (#17725)
            • \n
            \n

            readarr-19.1.14 (2024-01-29)

            \n

            Chore

            \n
              \n
            • update container image ghcr.io/onedr0p/readarr-develop to v0.3.17.2409@3d8be41 by renovate (#17675)
            • \n
            \n

            readarr-19.1.13 (2024-01-26)

            \n

            Chore

            \n
              \n
            • update container image common to v17.2.29@d7c41a3 by renovate (#17545)
            • \n
            \n

            readarr-19.1.12 (2024-01-21)

            \n

            Chore

            \n
              \n
            • update container image common to v17.2.28@918b4c5 by renovate (#17478)
            • \n
            \n

            readarr-19.1.11 (2024-01-21)

            \n

            Chore

            \n
              \n
            • update container image common to v17.2.26@24c98f7 by renovate (#17409)
            • \n
            \n

            readarr-19.1.10 (2024-01-21)

            \n

            Chore

            \n
              \n
            • update metadata in chart.yaml (#17457)
            • \n
            \n

            readarr-19.1.9 (2024-01-21)

            \n

            Chore

            \n
              \n
            • update container image ghcr.io/onedr0p/readarr-develop to v0.3.15.2376@ac03108 by renovate (#17422)
            • \n
            " } } \ No newline at end of file diff --git a/stable/sabnzbd/17.3.2/.helmignore b/stable/sabnzbd/17.3.2/.helmignore deleted file mode 100644 index 77ca5567b2..0000000000 --- a/stable/sabnzbd/17.3.2/.helmignore +++ /dev/null @@ -1,30 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ -# OWNERS file for Kubernetes -OWNERS -# helm-docs templates -*.gotmpl -# docs folder -/docs -# icon -icon.png diff --git a/stable/sabnzbd/17.3.2/CHANGELOG.md b/stable/sabnzbd/17.3.2/CHANGELOG.md deleted file mode 100644 index 42b6701538..0000000000 --- a/stable/sabnzbd/17.3.2/CHANGELOG.md +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: Changelog ---- - - -*for the complete changelog, please refer to the website* - -**Important:** - - - - - - - - - - - - - - - - - - - - -## [sabnzbd-17.2.9](https://github.com/truecharts/charts/compare/sabnzbd-17.2.8...sabnzbd-17.2.9) (2024-02-05) - -### Chore - - - -- update container image ghcr.io/onedr0p/sabnzbd to 4.2.2[@5b1f15c](https://github.com/5b1f15c) by renovate ([#17958](https://github.com/truecharts/charts/issues/17958)) - - -## [sabnzbd-17.2.8](https://github.com/truecharts/charts/compare/sabnzbd-17.2.7...sabnzbd-17.2.8) (2024-02-05) - -### Chore - - - -- update container image ghcr.io/onedr0p/sabnzbd to v4.2.2[@0343b55](https://github.com/0343b55) by renovate ([#17917](https://github.com/truecharts/charts/issues/17917)) - - -## [sabnzbd-17.2.7](https://github.com/truecharts/charts/compare/sabnzbd-17.2.6...sabnzbd-17.2.7) (2024-02-03) - -### Chore - - - -- update container image common to v17.2.30[@19ad5ec](https://github.com/19ad5ec) by renovate ([#17804](https://github.com/truecharts/charts/issues/17804)) - - -## [sabnzbd-17.2.6](https://github.com/truecharts/charts/compare/sabnzbd-17.2.5...sabnzbd-17.2.6) (2024-01-26) - -### Chore - - - -- update container image common to v17.2.29[@d7c41a3](https://github.com/d7c41a3) by renovate ([#17545](https://github.com/truecharts/charts/issues/17545)) - - -## [sabnzbd-17.2.5](https://github.com/truecharts/charts/compare/sabnzbd-17.2.4...sabnzbd-17.2.5) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.28[@918b4c5](https://github.com/918b4c5) by renovate ([#17478](https://github.com/truecharts/charts/issues/17478)) - - -## [sabnzbd-17.2.4](https://github.com/truecharts/charts/compare/sabnzbd-17.2.3...sabnzbd-17.2.4) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.26[@24c98f7](https://github.com/24c98f7) by renovate ([#17409](https://github.com/truecharts/charts/issues/17409)) - - -## [sabnzbd-17.2.3](https://github.com/truecharts/charts/compare/sabnzbd-17.2.2...sabnzbd-17.2.3) (2024-01-21) - -### Chore - - - -- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) - - - - -## [sabnzbd-17.2.2](https://github.com/truecharts/charts/compare/sabnzbd-17.2.1...sabnzbd-17.2.2) (2024-01-09) - -### Chore - - - -- update container image common to v17.2.22[@e7c9056](https://github.com/e7c9056) by renovate ([#16986](https://github.com/truecharts/charts/issues/16986)) \ No newline at end of file diff --git a/stable/sabnzbd/17.3.2/Chart.yaml b/stable/sabnzbd/17.3.2/Chart.yaml deleted file mode 100644 index 1895a19da5..0000000000 --- a/stable/sabnzbd/17.3.2/Chart.yaml +++ /dev/null @@ -1,37 +0,0 @@ -annotations: - max_scale_version: 24.04.0 - min_scale_version: 23.10.0 - truecharts.org/category: media - truecharts.org/max_helm_version: "3.14" - truecharts.org/min_helm_version: "3.12" - truecharts.org/train: stable -apiVersion: v2 -appVersion: 4.2.2 -dependencies: - - name: common - version: 17.5.1 - 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.png -keywords: - - sabnzbd - - usenet -kubeVersion: ">=1.24.0-0" -maintainers: - - name: TrueCharts - email: info@truecharts.org - url: https://truecharts.org -name: sabnzbd -sources: - - https://sabnzbd.org/ - - https://github.com/truecharts/charts/tree/master/charts/stable/sabnzbd - - https://ghcr.io/onedr0p/exportarr - - https://ghcr.io/onedr0p/sabnzbd -type: application -version: 17.3.2 diff --git a/stable/sabnzbd/17.3.2/README.md b/stable/sabnzbd/17.3.2/README.md deleted file mode 100644 index b6b127eb79..0000000000 --- a/stable/sabnzbd/17.3.2/README.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: README ---- - -## General Info - -TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. -However only installations using the TrueNAS SCALE Apps system are supported. - -For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/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)** - -## Support - -- Please check our [quick-start guides for TrueNAS SCALE](https://truecharts.org/manual/SCALE/guides/scale-intro). -- See the [Website](https://truecharts.org) -- Check our [Discord](https://discord.gg/tVsPTHWTtr) -- Open a [issue](https://github.com/truecharts/charts/issues/new/choose) - ---- - -## Sponsor TrueCharts - -TrueCharts can only exist due to the incredible effort of our staff. -Please consider making a [donation](https://truecharts.org/sponsor) or contributing back to the project any way you can! - -_All Rights Reserved - The TrueCharts Project_ diff --git a/stable/sabnzbd/17.3.2/app-readme.md b/stable/sabnzbd/17.3.2/app-readme.md deleted file mode 100644 index 04be527cd6..0000000000 --- a/stable/sabnzbd/17.3.2/app-readme.md +++ /dev/null @@ -1,8 +0,0 @@ -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/17.3.2/charts/common-17.4.2.tgz b/stable/sabnzbd/17.3.2/charts/common-17.4.2.tgz deleted file mode 100644 index 31f3a104561f859f297067776ab86a1503525be4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100097 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 l8bLay74+E3;;+DksJU3 diff --git a/stable/sabnzbd/17.3.2/ix_values.yaml b/stable/sabnzbd/17.3.2/ix_values.yaml deleted file mode 100644 index 4ba9a7585f..0000000000 --- a/stable/sabnzbd/17.3.2/ix_values.yaml +++ /dev/null @@ -1,89 +0,0 @@ -image: - repository: ghcr.io/onedr0p/sabnzbd - pullPolicy: IfNotPresent - tag: 4.3.3@sha256:86c645db93affcbf01cc2bce2560082bfde791009e1506dba68269b9c50bc341 -exportarrImage: - repository: ghcr.io/onedr0p/exportarr - pullPolicy: IfNotPresent - tag: v1.6.1@sha256:60cf3d44aa0b7dea2a65160b2e2e373c1ae38cd6b12a45fe81b8afa45ac31c22 -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/17.3.2/questions.yaml b/stable/sabnzbd/17.3.2/questions.yaml deleted file mode 100755 index 2715e1df92..0000000000 --- a/stable/sabnzbd/17.3.2/questions.yaml +++ /dev/null @@ -1,2910 +0,0 @@ -groups: - - name: Container Image - description: Image to be used for container - - name: General Settings - description: General Deployment Settings - - name: Workload Settings - description: Workload Settings - - name: App Configuration - description: App Specific Config Options - - name: Networking and Services - description: Configure Network and Services for Container - - name: Storage and Persistence - description: Persist and Share Data that is Separate from the Container - - name: Ingress - description: Ingress Configuration - - name: Security and Permissions - description: Configure Security Context and Permissions - - name: Resources and Devices - description: "Specify Resources/Devices to be Allocated to Workload" - - name: Middlewares - description: Traefik Middlewares - - name: Metrics - description: Metrics - - name: Addons - description: Addon Configuration - - name: Backup Configuration - description: Configure Velero Backup Schedule - - name: Advanced - description: Advanced Configuration - - name: Postgresql - description: Postgresql - - name: Documentation - description: Documentation - -portals: - open: - protocols: - - "$kubernetes-resource_configmap_tcportal-open_protocol" - host: - - "$kubernetes-resource_configmap_tcportal-open_host" - ports: - - "$kubernetes-resource_configmap_tcportal-open_port" - -questions: - - variable: global - group: General Settings - label: "Global Settings" - schema: - additional_attrs: true - type: dict - attrs: - - variable: stopAll - label: Stop All - description: "Stops All Running pods and hibernates cnpg" - schema: - type: boolean - default: false - - - variable: workload - group: "Workload Settings" - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: main - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: type - label: Type (Advanced) - schema: - type: string - default: Deployment - enum: - - value: Deployment - description: Deployment - - value: DaemonSet - description: DaemonSet - - - variable: replicas - label: Replicas (Advanced) - description: Set the number of Replicas - schema: - type: int - show_if: [["type", "!=", "DaemonSet"]] - default: 1 - - - variable: podSpec - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: containers - label: Containers - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: Main Container - schema: - additional_attrs: true - type: dict - attrs: - - - variable: 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 Settings" - schema: - type: string - default: "Etc/UTC" - $ref: - - "definitions/timezone" - - - variable: podOptions - group: "General Settings" - label: "Global Pod Options (Advanced)" - schema: - additional_attrs: true - type: dict - attrs: - - variable: expertPodOpts - label: "Expert - Pod Options" - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hostNetwork - label: "Host Networking" - schema: - type: boolean - default: false - - variable: dnsConfig - label: "DNS Configuration" - schema: - type: dict - additional_attrs: true - attrs: - - variable: options - label: "Options" - schema: - type: list - default: [{"name": "ndots", "value": "1"}] - items: - - variable: optionsEntry - label: "Option Entry" - schema: - type: dict - additional_attrs: true - attrs: - - variable: name - label: "Name" - schema: - type: string - required: true - - variable: value - label: "Value" - schema: - type: string - - variable: nameservers - label: "Nameservers" - schema: - type: list - default: [] - items: - - variable: nsEntry - label: "Nameserver Entry" - schema: - type: string - required: true - - variable: searches - label: "Searches" - schema: - type: list - default: [] - items: - - variable: searchEntry - label: "Search Entry" - schema: - type: string - required: true - - - variable: imagePullSecretList - group: "General Settings" - label: "Image Pull Secrets" - schema: - type: list - default: [] - items: - - variable: pullsecretentry - label: "Pull Secret" - schema: - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: true - - variable: data - label: Data - schema: - type: dict - additional_attrs: true - attrs: - - variable: registry - label: "Registry" - schema: - type: string - required: true - default: "https://index.docker.io/v1/" - - variable: username - label: "Username" - schema: - type: string - required: true - default: "" - - variable: password - label: "Password" - schema: - type: string - required: true - private: true - default: "" - - variable: email - label: "Email" - schema: - type: string - required: true - default: "" - - - variable: service - group: Networking and Services - label: Configure Service(s) - schema: - additional_attrs: true - type: dict - attrs: - - - variable: 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: serviceexpert - group: Networking and Services - label: Show Expert Config - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - - variable: scaleExternalInterface - description: Add External Interfaces - label: Add external Interfaces - group: Networking - schema: - type: list - items: - - variable: interfaceConfiguration - description: Interface Configuration - label: Interface Configuration - schema: - additional_attrs: true - type: dict - $ref: - - "normalize/interfaceConfiguration" - attrs: - - variable: hostInterface - description: Please Specify Host Interface - label: Host Interface - schema: - type: string - required: true - $ref: - - "definitions/interface" - - variable: ipam - description: Define how IP Address will be managed - label: IP Address Management - schema: - additional_attrs: true - type: dict - required: true - attrs: - - variable: type - description: Specify type for IPAM - label: IPAM Type - schema: - type: string - required: true - enum: - - value: dhcp - description: Use DHCP - - value: static - description: Use Static IP - - variable: staticIPConfigurations - label: Static IP Addresses - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticIP - label: Static IP - schema: - type: ipaddr - cidr: true - - variable: staticRoutes - label: Static Routes - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticRouteConfiguration - label: Static Route Configuration - schema: - additional_attrs: true - type: dict - attrs: - - variable: destination - label: Destination - schema: - type: ipaddr - cidr: true - required: true - - variable: gateway - label: Gateway - schema: - type: ipaddr - cidr: false - required: true - - - variable: serviceList - label: Add Manual Custom Services - group: Networking and Services - schema: - type: list - default: [] - items: - - variable: serviceListEntry - label: Custom Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the service - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: LoadBalancer - description: LoadBalancer (Expose Ports) - - value: ClusterIP - description: ClusterIP (Do Not Expose Ports) - - value: Simple - description: Deprecated CHANGE THIS - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: advancedsvcset - label: Show Advanced Service Settings - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: externalIPs - label: "External IP's" - description: "External IP's" - schema: - type: list - default: [] - items: - - variable: externalIP - label: External IP - schema: - type: string - - variable: ipFamilyPolicy - label: IP Family Policy - description: Specify the IP Policy - schema: - type: string - default: SingleStack - enum: - - value: SingleStack - description: SingleStack - - value: PreferDualStack - description: PreferDualStack - - value: RequireDualStack - description: RequireDualStack - - variable: ipFamilies - label: IP Families - description: (Advanced) The IP Families that should be used - schema: - type: list - default: [] - items: - - variable: ipFamily - label: IP Family - schema: - type: string - - variable: portsList - label: Additional Service Ports - schema: - type: list - default: [] - items: - - variable: portsListEntry - label: Custom ports - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Port - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Port Name - schema: - type: string - default: "" - - variable: protocol - label: Port Type - schema: - type: string - default: tcp - enum: - - value: http - description: HTTP - - value: https - description: HTTPS - - value: tcp - description: TCP - - value: udp - description: UDP - - variable: targetPort - label: Target Port - description: This port exposes the container port on the service - schema: - type: int - required: true - - variable: port - label: Container Port - schema: - type: int - required: true - - - variable: persistence - label: Integrated Persistent Storage - description: Integrated Persistent Storage - group: Storage and 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: 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: Storage and Persistence - schema: - type: list - default: [] - items: - - variable: persistenceListEntry - label: Custom Storage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the storage - schema: - type: boolean - default: true - hidden: true - - variable: type - label: Type of Storage - description: Sets the persistence type, Anything other than PVC could break rollback! - schema: - type: string - default: hostPath - enum: - - value: pvc - description: PVC - - value: hostPath - description: Host Path - - value: emptyDir - description: emptyDir - - value: nfs - description: NFS Share - - variable: server - label: NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: path - label: Path on NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: iscsi - label: iSCSI Options - schema: - show_if: [["type", "=", "iscsi"]] - type: dict - additional_attrs: true - attrs: - - variable: targetPortal - label: targetPortal - schema: - type: string - required: true - default: "" - - variable: iqn - label: iqn - schema: - type: string - required: true - default: "" - - variable: lun - label: lun - schema: - type: int - default: 0 - - variable: authSession - label: authSession - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: authDiscovery - label: authDiscovery - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: autoPermissions - label: Automatic Permissions Configuration - description: Automatically set permissions - schema: - show_if: [["type", "!=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: chown - label: Run CHOWN - description: | - It will run CHOWN on the path with the given fsGroup - schema: - type: boolean - default: false - - variable: chmod - label: Run CHMOD - description: | - It will run CHMOD on the path with the given value
            - Format should be 3 digits, e.g. 770 - schema: - type: string - valid_chars: '[0-9]{3}' - default: "" - - variable: recursive - label: Recursive - description: | - It will run CHOWN and CHMOD recursively - schema: - type: boolean - default: false - - variable: readOnly - label: Read Only - schema: - type: boolean - default: false - - variable: hostPath - label: Host Path - description: Path inside the container the storage is mounted - schema: - show_if: [["type", "=", "hostPath"]] - type: hostpath - - variable: mountPath - label: Mount Path - description: Path inside the container the storage is mounted - schema: - type: string - default: "" - required: true - valid_chars: '^\/([a-zA-Z0-9._-]+(\s?[a-zA-Z0-9._-]+|\/?))+$' - - variable: medium - label: EmptyDir Medium - schema: - show_if: [["type", "=", "emptyDir"]] - type: string - default: "" - enum: - - value: "" - description: Default - - value: Memory - description: Memory - - variable: size - label: Size Quotum of Storage - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: 256Gi - - variable: storageClass - label: 'storageClass (Advanced)' - description: 'sets the storageClass to something other than iX default. Only for advanced usecases!' - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: "" - - variable: static - label: 'Static Fixed PVC Bindings (Experimental)' - description: Link a PVC to a specific storage location - schema: - show_if: [["type", "=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: mode - label: mode - description: | - disabled: use normal dynamic PVCs - smb: connect to an SMB share - nfs: connect to an NFS share - schema: - type: string - default: "disabled" - enum: - - value: "disabled" - description: disabled - - value: smb - description: smb - - value: nfs - description: nfs - - variable: server - label: Server - description: server to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "myserver" - - variable: share - label: Share - description: share to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "/myshare" - - variable: user - label: User - description: connecting user - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "myuser" - - variable: domain - label: Domain - description: user domain - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: password - label: Password - description: connecting password - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: volumeSnapshots - label: 'Volume Snapshots (Experimental)' - description: Add an entry to the list to force creation of a volumeSnapshot of this PVC - schema: - show_if: [["type", "=", "pvc"]] - type: list - default: [] - items: - - variable: volumeSnapshotEntry - label: Custom volumeSnapshot - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - description: 'WARNING: renaming this, means deletion of the snapshot with the old name!' - schema: - type: string - default: "mysnapshot" - required: true - - variable: volumeSnapshotClassName - label: 'volumeSnapshot Class Name (Advanced)' - description: For use with PVCs using a non-default storageClass - schema: - type: string - default: "" - - - variable: ingress - label: "" - group: Ingress - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: "Main Ingress" - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name (Optional) - description: Defaults to chart name - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description (Optional) - description: Defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: icon - label: Icon (Optional) - description: Defaults to chart icon - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - variable: widget - label: Widget Settings - schema: - type: dict - additional_attrs: true - show_if: [["enabled", "=", true]] - attrs: - - variable: enabled - label: Enable Widget - description: When disabled all widget annotations are skipped. - schema: - type: boolean - default: true - - variable: custom - label: Options - schema: - type: dict - additional_attrs: true - attrs: - - variable: key - label: API-key (key) - schema: - type: string - default: "" - - variable: customkv - label: Custom Options - schema: - type: list - default: [] - items: - - variable: option - label: Option - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - default: "" - required: true - - variable: value - label: Value - schema: - type: string - default: "" - required: true - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - - variable: ingressList - label: Add Manual Custom Ingresses - group: Ingress - schema: - type: list - default: [] - items: - - variable: ingressListEntry - label: Custom Ingress - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: ingressClassName - label: IngressClass Name - schema: - type: string - default: "" - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: overrideService - label: Linked Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Service Name - schema: - type: string - default: "" - - variable: port - label: Service Port - schema: - type: int - - variable: tls - label: TLS-Settings - schema: - type: list - default: [] - show_if: [["certificateIssuer", "=", ""]] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your Cert-Manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: Use Custom Secret (Advanced) - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: "Allow Cross Origin Requests" - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: namespace - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description - description: defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - - variable: securityContext - group: Security and Permissions - label: Security Context - schema: - additional_attrs: true - type: dict - attrs: - - variable: container - label: Container - schema: - additional_attrs: true - type: dict - attrs: - # Settings from questions.yaml get appended here on a per-app basis - - - variable: runAsUser - label: "runAsUser" - description: "The UserID of the user running the application" - schema: - type: int - default: 568 - - variable: runAsGroup - label: "runAsGroup" - description: "The groupID 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 and Devices - label: "Resource Limits" - schema: - additional_attrs: true - type: dict - attrs: - - variable: limits - label: Advanced Limit Resource Consumption - schema: - additional_attrs: true - type: dict - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 4000m - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: RAM - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 8Gi - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: 'intel.com/i915' - label: Add Intel i915 GPUs - schema: - type: int - default: 0 - - variable: 'nvidia.com/gpu' - label: Add NVIDIA GPUs (Experimental) - schema: - type: int - default: 0 - - variable: 'amd.com/gpu' - label: Add AMD GPUs - schema: - type: int - default: 0 - - variable: requests - label: "Minimum Resources Required (request)" - schema: - additional_attrs: true - type: dict - hidden: true - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 10m - hidden: true - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: "RAM" - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 50Mi - hidden: true - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: deviceList - label: Mount USB Devices - group: Resources and Devices - schema: - type: list - default: [] - items: - - variable: deviceListEntry - label: Device - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Storage - schema: - type: boolean - default: true - - variable: type - label: (Advanced) Type of Storage - description: Sets the persistence type - schema: - type: string - default: device - hidden: true - - variable: readOnly - label: readOnly - schema: - type: boolean - default: false - - variable: hostPath - label: Host Device Path - description: Path to the device on the host system - schema: - type: path - - variable: mountPath - label: Container Device Path - description: Path inside the container the device is mounted - schema: - type: string - default: "/dev/ttyACM0" - - variable: scaleGPU - label: GPU Configuration - group: Resources and Devices - schema: - type: list - default: [] - items: - - variable: scaleGPUEntry - label: GPU - schema: - additional_attrs: true - type: dict - attrs: - # Specify GPU configuration - - variable: gpu - label: Select GPU - schema: - additional_attrs: true - type: dict - $ref: - - "definitions/gpuConfiguration" - attrs: [] - - variable: workaround - label: "Workaround" - schema: - type: string - default: workaround - hidden: 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: apiKey - label: "Sabnzbd API key" - description: "Can be found in the Bazarr settings" - schema: - type: string - default: "" - required: true -# - variable: horizontalPodAutoscaler -# group: Advanced -# label: (Advanced) Horizontal Pod Autoscaler -# schema: -# type: list -# default: [] -# items: -# - variable: hpaEntry -# label: HPA Entry -# schema: -# additional_attrs: true -# type: dict -# attrs: -# - variable: name -# label: Name -# schema: -# type: string -# required: true -# default: "" -# - variable: enabled -# label: Enabled -# schema: -# type: boolean -# default: false -# show_subquestions_if: true -# subquestions: -# - variable: target -# label: Target -# description: Deployment name, Defaults to Main Deployment -# schema: -# type: string -# default: "" -# - variable: minReplicas -# label: Minimum Replicas -# schema: -# type: int -# default: 1 -# - variable: maxReplicas -# label: Maximum Replicas -# schema: -# type: int -# default: 5 -# - variable: targetCPUUtilizationPercentage -# label: Target CPU Utilization Percentage -# schema: -# type: int -# default: 80 -# - variable: targetMemoryUtilizationPercentage -# label: Target Memory Utilization Percentage -# schema: -# type: int -# default: 80 - - variable: networkPolicy - group: Advanced - label: (Advanced) Network Policy - schema: - type: list - default: [] - items: - - variable: netPolicyEntry - label: Network Policy Entry - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - default: "" - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: policyType - label: Policy Type - schema: - type: string - default: "" - enum: - - value: "" - description: Default - - value: ingress - description: Ingress - - value: egress - description: Egress - - value: ingress-egress - description: Ingress and Egress - - variable: egress - label: Egress - schema: - type: list - default: [] - items: - - variable: egressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: to - label: To - schema: - type: list - default: [] - items: - - variable: toEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - variable: ingress - label: Ingress - schema: - type: list - default: [] - items: - - variable: ingressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: from - label: From - schema: - type: list - default: [] - items: - - variable: fromEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - - variable: addons - group: Addons - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: codeserver - label: Codeserver - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: service - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: NodePort - description: Deprecated CHANGE THIS - - value: ClusterIP - description: ClusterIP - - value: LoadBalancer - description: LoadBalancer - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: ports - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: codeserver - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - default: 36107 - - variable: ingress - label: "Ingress" - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - variable: scaleCert - label: 'Use TrueNAS SCALE Certificate (Deprecated)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: int - $ref: - - "definitions/certificate" - - variable: envList - label: Codeserver Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: netshoot - label: Netshoot - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: envList - label: Netshoot Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: vpn - label: VPN - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Type - schema: - type: string - default: disabled - enum: - - value: disabled - description: disabled - - value: gluetun - description: Gluetun - - value: tailscale - description: Tailscale - - value: openvpn - description: OpenVPN (Deprecated) - - value: wireguard - description: Wireguard (Deprecated) - - variable: openvpn - label: OpenVPN Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "openvpn"]] - attrs: - - variable: username - label: Authentication Username (Optional) - description: Authentication Username, Optional - schema: - type: string - default: "" - - variable: password - label: Authentication Password - description: Authentication Credentials - schema: - type: string - show_if: [["username", "!=", ""]] - default: "" - required: true - - variable: tailscale - label: Tailscale Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "tailscale"]] - attrs: - - variable: authkey - label: Authentication Key - description: Provide an auth key to automatically authenticate the node as your user account. - schema: - type: string - private: true - default: "" - - variable: auth_once - label: Auth Once - description: Only attempt to log in if not already logged in. - schema: - type: boolean - default: true - - variable: accept_dns - label: Accept DNS - description: Accept DNS configuration from the admin console. - schema: - type: boolean - default: false - - variable: userspace - label: Userspace - description: Userspace Networking mode allows running Tailscale where you do not have access to create a VPN tunnel device. - schema: - type: boolean - default: false - - variable: routes - label: Routes - description: Expose physical subnet routes to your entire Tailscale network. - schema: - type: string - default: "" - - variable: dest_ip - label: Destination IP - description: Tells the DNAT mechanism which Destination IP to set in the IP header, and where to send packets that are matched. - schema: - type: string - default: "" - - variable: sock5_server - label: Sock5 Server - description: The address on which to listen for SOCKS5 proxying into the tailscale net. - schema: - type: string - default: "" - - variable: outbound_http_proxy_listen - label: Outbound HTTP Proxy Listen - description: The address on which to listen for HTTP proxying into the tailscale net. - schema: - type: string - default: "" - - variable: extra_args - label: Extra Args - description: Extra Args - schema: - type: string - default: "" - - variable: daemon_extra_args - label: Tailscale Daemon Extra Args - description: Tailscale Daemon Extra Args - schema: - type: string - default: "" - - variable: killSwitch - label: Enable Killswitch - schema: - type: boolean - show_if: [["type", "!=", "disabled"]] - default: true - - variable: excludedNetworks_IPv4 - label: Killswitch Excluded IPv4 networks - description: List of Killswitch Excluded IPv4 Addresses - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv4 - label: IPv4 Network - schema: - type: string - required: true - - variable: excludedNetworks_IPv6 - label: Killswitch Excluded IPv6 networks - description: "List of Killswitch Excluded IPv6 Addresses" - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv6 - label: IPv6 Network - schema: - type: string - required: true - - variable: configFile - label: VPN Config File Location - schema: - type: string - show_if: [["type", "!=", "disabled"]] - default: "" - - - variable: envList - label: VPN Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - max_length: 10240 - - - variable: docs - group: Documentation - label: Please read the documentation at https://truecharts.org - description: Please read the documentation at -
            https://truecharts.org - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDocs - label: I have checked the documentation - schema: - type: boolean - default: true - - variable: donateNag - group: Documentation - label: Please consider supporting TrueCharts, see https://truecharts.org/sponsor - description: Please consider supporting TrueCharts, see -
            https://truecharts.org/sponsor - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDonate - label: I have considered donating - schema: - type: boolean - default: true - hidden: true - diff --git a/stable/sabnzbd/17.3.2/templates/NOTES.txt b/stable/sabnzbd/17.3.2/templates/NOTES.txt deleted file mode 100644 index efcb74cb77..0000000000 --- a/stable/sabnzbd/17.3.2/templates/NOTES.txt +++ /dev/null @@ -1 +0,0 @@ -{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/sabnzbd/17.3.2/templates/common.yaml b/stable/sabnzbd/17.3.2/templates/common.yaml deleted file mode 100644 index b51394e00a..0000000000 --- a/stable/sabnzbd/17.3.2/templates/common.yaml +++ /dev/null @@ -1 +0,0 @@ -{{ include "tc.v1.common.loader.all" . }} diff --git a/stable/sabnzbd/17.3.2/values.yaml b/stable/sabnzbd/17.3.2/values.yaml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/stable/sabnzbd/17.4.0/.helmignore b/stable/sabnzbd/17.4.0/.helmignore deleted file mode 100644 index 77ca5567b2..0000000000 --- a/stable/sabnzbd/17.4.0/.helmignore +++ /dev/null @@ -1,30 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ -# OWNERS file for Kubernetes -OWNERS -# helm-docs templates -*.gotmpl -# docs folder -/docs -# icon -icon.png diff --git a/stable/sabnzbd/17.4.0/CHANGELOG.md b/stable/sabnzbd/17.4.0/CHANGELOG.md deleted file mode 100644 index ee06972fe1..0000000000 --- a/stable/sabnzbd/17.4.0/CHANGELOG.md +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: Changelog ---- - - -*for the complete changelog, please refer to the website* - -**Important:** - - - - - - - - - - - - - - - - - - - - - -## [sabnzbd-17.2.9](https://github.com/truecharts/charts/compare/sabnzbd-17.2.8...sabnzbd-17.2.9) (2024-02-05) - -### Chore - - - -- update container image ghcr.io/onedr0p/sabnzbd to 4.2.2[@5b1f15c](https://github.com/5b1f15c) by renovate ([#17958](https://github.com/truecharts/charts/issues/17958)) - - -## [sabnzbd-17.2.8](https://github.com/truecharts/charts/compare/sabnzbd-17.2.7...sabnzbd-17.2.8) (2024-02-05) - -### Chore - - - -- update container image ghcr.io/onedr0p/sabnzbd to v4.2.2[@0343b55](https://github.com/0343b55) by renovate ([#17917](https://github.com/truecharts/charts/issues/17917)) - - -## [sabnzbd-17.2.7](https://github.com/truecharts/charts/compare/sabnzbd-17.2.6...sabnzbd-17.2.7) (2024-02-03) - -### Chore - - - -- update container image common to v17.2.30[@19ad5ec](https://github.com/19ad5ec) by renovate ([#17804](https://github.com/truecharts/charts/issues/17804)) - - -## [sabnzbd-17.2.6](https://github.com/truecharts/charts/compare/sabnzbd-17.2.5...sabnzbd-17.2.6) (2024-01-26) - -### Chore - - - -- update container image common to v17.2.29[@d7c41a3](https://github.com/d7c41a3) by renovate ([#17545](https://github.com/truecharts/charts/issues/17545)) - - -## [sabnzbd-17.2.5](https://github.com/truecharts/charts/compare/sabnzbd-17.2.4...sabnzbd-17.2.5) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.28[@918b4c5](https://github.com/918b4c5) by renovate ([#17478](https://github.com/truecharts/charts/issues/17478)) - - -## [sabnzbd-17.2.4](https://github.com/truecharts/charts/compare/sabnzbd-17.2.3...sabnzbd-17.2.4) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.26[@24c98f7](https://github.com/24c98f7) by renovate ([#17409](https://github.com/truecharts/charts/issues/17409)) - - -## [sabnzbd-17.2.3](https://github.com/truecharts/charts/compare/sabnzbd-17.2.2...sabnzbd-17.2.3) (2024-01-21) - -### Chore - - - -- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) - - - - -## [sabnzbd-17.2.2](https://github.com/truecharts/charts/compare/sabnzbd-17.2.1...sabnzbd-17.2.2) (2024-01-09) - -### Chore - - diff --git a/stable/sabnzbd/17.4.0/Chart.yaml b/stable/sabnzbd/17.4.0/Chart.yaml deleted file mode 100644 index 5b64ade338..0000000000 --- a/stable/sabnzbd/17.4.0/Chart.yaml +++ /dev/null @@ -1,37 +0,0 @@ -annotations: - max_scale_version: 24.04.0 - min_scale_version: 23.10.0 - truecharts.org/category: media - truecharts.org/max_helm_version: "3.14" - truecharts.org/min_helm_version: "3.12" - truecharts.org/train: stable -apiVersion: v2 -appVersion: 4.2.2 -dependencies: - - name: common - version: 17.5.1 - 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.png -keywords: - - sabnzbd - - usenet -kubeVersion: ">=1.24.0-0" -maintainers: - - name: TrueCharts - email: info@truecharts.org - url: https://truecharts.org -name: sabnzbd -sources: - - https://sabnzbd.org/ - - https://github.com/truecharts/charts/tree/master/charts/stable/sabnzbd - - https://ghcr.io/onedr0p/sabnzbd - - https://ghcr.io/onedr0p/exportarr -type: application -version: 17.4.0 diff --git a/stable/sabnzbd/17.4.0/README.md b/stable/sabnzbd/17.4.0/README.md deleted file mode 100644 index b6b127eb79..0000000000 --- a/stable/sabnzbd/17.4.0/README.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: README ---- - -## General Info - -TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. -However only installations using the TrueNAS SCALE Apps system are supported. - -For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/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)** - -## Support - -- Please check our [quick-start guides for TrueNAS SCALE](https://truecharts.org/manual/SCALE/guides/scale-intro). -- See the [Website](https://truecharts.org) -- Check our [Discord](https://discord.gg/tVsPTHWTtr) -- Open a [issue](https://github.com/truecharts/charts/issues/new/choose) - ---- - -## Sponsor TrueCharts - -TrueCharts can only exist due to the incredible effort of our staff. -Please consider making a [donation](https://truecharts.org/sponsor) or contributing back to the project any way you can! - -_All Rights Reserved - The TrueCharts Project_ diff --git a/stable/sabnzbd/17.4.0/app-readme.md b/stable/sabnzbd/17.4.0/app-readme.md deleted file mode 100644 index 04be527cd6..0000000000 --- a/stable/sabnzbd/17.4.0/app-readme.md +++ /dev/null @@ -1,8 +0,0 @@ -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/17.4.0/charts/common-17.5.0.tgz b/stable/sabnzbd/17.4.0/charts/common-17.5.0.tgz deleted file mode 100644 index 3a5534883aaac1a331bf10ad166cff7fe5d2dd75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100452 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 z 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 Wm9Bh-<^K-=0RR7ge;?HVjtl_2wPFzf diff --git a/stable/sabnzbd/17.4.0/ix_values.yaml b/stable/sabnzbd/17.4.0/ix_values.yaml deleted file mode 100644 index 4ba9a7585f..0000000000 --- a/stable/sabnzbd/17.4.0/ix_values.yaml +++ /dev/null @@ -1,89 +0,0 @@ -image: - repository: ghcr.io/onedr0p/sabnzbd - pullPolicy: IfNotPresent - tag: 4.3.3@sha256:86c645db93affcbf01cc2bce2560082bfde791009e1506dba68269b9c50bc341 -exportarrImage: - repository: ghcr.io/onedr0p/exportarr - pullPolicy: IfNotPresent - tag: v1.6.1@sha256:60cf3d44aa0b7dea2a65160b2e2e373c1ae38cd6b12a45fe81b8afa45ac31c22 -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/17.4.0/questions.yaml b/stable/sabnzbd/17.4.0/questions.yaml deleted file mode 100755 index 2715e1df92..0000000000 --- a/stable/sabnzbd/17.4.0/questions.yaml +++ /dev/null @@ -1,2910 +0,0 @@ -groups: - - name: Container Image - description: Image to be used for container - - name: General Settings - description: General Deployment Settings - - name: Workload Settings - description: Workload Settings - - name: App Configuration - description: App Specific Config Options - - name: Networking and Services - description: Configure Network and Services for Container - - name: Storage and Persistence - description: Persist and Share Data that is Separate from the Container - - name: Ingress - description: Ingress Configuration - - name: Security and Permissions - description: Configure Security Context and Permissions - - name: Resources and Devices - description: "Specify Resources/Devices to be Allocated to Workload" - - name: Middlewares - description: Traefik Middlewares - - name: Metrics - description: Metrics - - name: Addons - description: Addon Configuration - - name: Backup Configuration - description: Configure Velero Backup Schedule - - name: Advanced - description: Advanced Configuration - - name: Postgresql - description: Postgresql - - name: Documentation - description: Documentation - -portals: - open: - protocols: - - "$kubernetes-resource_configmap_tcportal-open_protocol" - host: - - "$kubernetes-resource_configmap_tcportal-open_host" - ports: - - "$kubernetes-resource_configmap_tcportal-open_port" - -questions: - - variable: global - group: General Settings - label: "Global Settings" - schema: - additional_attrs: true - type: dict - attrs: - - variable: stopAll - label: Stop All - description: "Stops All Running pods and hibernates cnpg" - schema: - type: boolean - default: false - - - variable: workload - group: "Workload Settings" - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: main - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: type - label: Type (Advanced) - schema: - type: string - default: Deployment - enum: - - value: Deployment - description: Deployment - - value: DaemonSet - description: DaemonSet - - - variable: replicas - label: Replicas (Advanced) - description: Set the number of Replicas - schema: - type: int - show_if: [["type", "!=", "DaemonSet"]] - default: 1 - - - variable: podSpec - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: containers - label: Containers - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: Main Container - schema: - additional_attrs: true - type: dict - attrs: - - - variable: 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 Settings" - schema: - type: string - default: "Etc/UTC" - $ref: - - "definitions/timezone" - - - variable: podOptions - group: "General Settings" - label: "Global Pod Options (Advanced)" - schema: - additional_attrs: true - type: dict - attrs: - - variable: expertPodOpts - label: "Expert - Pod Options" - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hostNetwork - label: "Host Networking" - schema: - type: boolean - default: false - - variable: dnsConfig - label: "DNS Configuration" - schema: - type: dict - additional_attrs: true - attrs: - - variable: options - label: "Options" - schema: - type: list - default: [{"name": "ndots", "value": "1"}] - items: - - variable: optionsEntry - label: "Option Entry" - schema: - type: dict - additional_attrs: true - attrs: - - variable: name - label: "Name" - schema: - type: string - required: true - - variable: value - label: "Value" - schema: - type: string - - variable: nameservers - label: "Nameservers" - schema: - type: list - default: [] - items: - - variable: nsEntry - label: "Nameserver Entry" - schema: - type: string - required: true - - variable: searches - label: "Searches" - schema: - type: list - default: [] - items: - - variable: searchEntry - label: "Search Entry" - schema: - type: string - required: true - - - variable: imagePullSecretList - group: "General Settings" - label: "Image Pull Secrets" - schema: - type: list - default: [] - items: - - variable: pullsecretentry - label: "Pull Secret" - schema: - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: true - - variable: data - label: Data - schema: - type: dict - additional_attrs: true - attrs: - - variable: registry - label: "Registry" - schema: - type: string - required: true - default: "https://index.docker.io/v1/" - - variable: username - label: "Username" - schema: - type: string - required: true - default: "" - - variable: password - label: "Password" - schema: - type: string - required: true - private: true - default: "" - - variable: email - label: "Email" - schema: - type: string - required: true - default: "" - - - variable: service - group: Networking and Services - label: Configure Service(s) - schema: - additional_attrs: true - type: dict - attrs: - - - variable: 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: serviceexpert - group: Networking and Services - label: Show Expert Config - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - - variable: scaleExternalInterface - description: Add External Interfaces - label: Add external Interfaces - group: Networking - schema: - type: list - items: - - variable: interfaceConfiguration - description: Interface Configuration - label: Interface Configuration - schema: - additional_attrs: true - type: dict - $ref: - - "normalize/interfaceConfiguration" - attrs: - - variable: hostInterface - description: Please Specify Host Interface - label: Host Interface - schema: - type: string - required: true - $ref: - - "definitions/interface" - - variable: ipam - description: Define how IP Address will be managed - label: IP Address Management - schema: - additional_attrs: true - type: dict - required: true - attrs: - - variable: type - description: Specify type for IPAM - label: IPAM Type - schema: - type: string - required: true - enum: - - value: dhcp - description: Use DHCP - - value: static - description: Use Static IP - - variable: staticIPConfigurations - label: Static IP Addresses - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticIP - label: Static IP - schema: - type: ipaddr - cidr: true - - variable: staticRoutes - label: Static Routes - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticRouteConfiguration - label: Static Route Configuration - schema: - additional_attrs: true - type: dict - attrs: - - variable: destination - label: Destination - schema: - type: ipaddr - cidr: true - required: true - - variable: gateway - label: Gateway - schema: - type: ipaddr - cidr: false - required: true - - - variable: serviceList - label: Add Manual Custom Services - group: Networking and Services - schema: - type: list - default: [] - items: - - variable: serviceListEntry - label: Custom Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the service - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: LoadBalancer - description: LoadBalancer (Expose Ports) - - value: ClusterIP - description: ClusterIP (Do Not Expose Ports) - - value: Simple - description: Deprecated CHANGE THIS - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: advancedsvcset - label: Show Advanced Service Settings - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: externalIPs - label: "External IP's" - description: "External IP's" - schema: - type: list - default: [] - items: - - variable: externalIP - label: External IP - schema: - type: string - - variable: ipFamilyPolicy - label: IP Family Policy - description: Specify the IP Policy - schema: - type: string - default: SingleStack - enum: - - value: SingleStack - description: SingleStack - - value: PreferDualStack - description: PreferDualStack - - value: RequireDualStack - description: RequireDualStack - - variable: ipFamilies - label: IP Families - description: (Advanced) The IP Families that should be used - schema: - type: list - default: [] - items: - - variable: ipFamily - label: IP Family - schema: - type: string - - variable: portsList - label: Additional Service Ports - schema: - type: list - default: [] - items: - - variable: portsListEntry - label: Custom ports - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Port - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Port Name - schema: - type: string - default: "" - - variable: protocol - label: Port Type - schema: - type: string - default: tcp - enum: - - value: http - description: HTTP - - value: https - description: HTTPS - - value: tcp - description: TCP - - value: udp - description: UDP - - variable: targetPort - label: Target Port - description: This port exposes the container port on the service - schema: - type: int - required: true - - variable: port - label: Container Port - schema: - type: int - required: true - - - variable: persistence - label: Integrated Persistent Storage - description: Integrated Persistent Storage - group: Storage and 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: 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: Storage and Persistence - schema: - type: list - default: [] - items: - - variable: persistenceListEntry - label: Custom Storage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the storage - schema: - type: boolean - default: true - hidden: true - - variable: type - label: Type of Storage - description: Sets the persistence type, Anything other than PVC could break rollback! - schema: - type: string - default: hostPath - enum: - - value: pvc - description: PVC - - value: hostPath - description: Host Path - - value: emptyDir - description: emptyDir - - value: nfs - description: NFS Share - - variable: server - label: NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: path - label: Path on NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: iscsi - label: iSCSI Options - schema: - show_if: [["type", "=", "iscsi"]] - type: dict - additional_attrs: true - attrs: - - variable: targetPortal - label: targetPortal - schema: - type: string - required: true - default: "" - - variable: iqn - label: iqn - schema: - type: string - required: true - default: "" - - variable: lun - label: lun - schema: - type: int - default: 0 - - variable: authSession - label: authSession - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: authDiscovery - label: authDiscovery - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: autoPermissions - label: Automatic Permissions Configuration - description: Automatically set permissions - schema: - show_if: [["type", "!=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: chown - label: Run CHOWN - description: | - It will run CHOWN on the path with the given fsGroup - schema: - type: boolean - default: false - - variable: chmod - label: Run CHMOD - description: | - It will run CHMOD on the path with the given value
            - Format should be 3 digits, e.g. 770 - schema: - type: string - valid_chars: '[0-9]{3}' - default: "" - - variable: recursive - label: Recursive - description: | - It will run CHOWN and CHMOD recursively - schema: - type: boolean - default: false - - variable: readOnly - label: Read Only - schema: - type: boolean - default: false - - variable: hostPath - label: Host Path - description: Path inside the container the storage is mounted - schema: - show_if: [["type", "=", "hostPath"]] - type: hostpath - - variable: mountPath - label: Mount Path - description: Path inside the container the storage is mounted - schema: - type: string - default: "" - required: true - valid_chars: '^\/([a-zA-Z0-9._-]+(\s?[a-zA-Z0-9._-]+|\/?))+$' - - variable: medium - label: EmptyDir Medium - schema: - show_if: [["type", "=", "emptyDir"]] - type: string - default: "" - enum: - - value: "" - description: Default - - value: Memory - description: Memory - - variable: size - label: Size Quotum of Storage - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: 256Gi - - variable: storageClass - label: 'storageClass (Advanced)' - description: 'sets the storageClass to something other than iX default. Only for advanced usecases!' - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: "" - - variable: static - label: 'Static Fixed PVC Bindings (Experimental)' - description: Link a PVC to a specific storage location - schema: - show_if: [["type", "=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: mode - label: mode - description: | - disabled: use normal dynamic PVCs - smb: connect to an SMB share - nfs: connect to an NFS share - schema: - type: string - default: "disabled" - enum: - - value: "disabled" - description: disabled - - value: smb - description: smb - - value: nfs - description: nfs - - variable: server - label: Server - description: server to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "myserver" - - variable: share - label: Share - description: share to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "/myshare" - - variable: user - label: User - description: connecting user - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "myuser" - - variable: domain - label: Domain - description: user domain - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: password - label: Password - description: connecting password - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: volumeSnapshots - label: 'Volume Snapshots (Experimental)' - description: Add an entry to the list to force creation of a volumeSnapshot of this PVC - schema: - show_if: [["type", "=", "pvc"]] - type: list - default: [] - items: - - variable: volumeSnapshotEntry - label: Custom volumeSnapshot - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - description: 'WARNING: renaming this, means deletion of the snapshot with the old name!' - schema: - type: string - default: "mysnapshot" - required: true - - variable: volumeSnapshotClassName - label: 'volumeSnapshot Class Name (Advanced)' - description: For use with PVCs using a non-default storageClass - schema: - type: string - default: "" - - - variable: ingress - label: "" - group: Ingress - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: "Main Ingress" - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name (Optional) - description: Defaults to chart name - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description (Optional) - description: Defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: icon - label: Icon (Optional) - description: Defaults to chart icon - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - variable: widget - label: Widget Settings - schema: - type: dict - additional_attrs: true - show_if: [["enabled", "=", true]] - attrs: - - variable: enabled - label: Enable Widget - description: When disabled all widget annotations are skipped. - schema: - type: boolean - default: true - - variable: custom - label: Options - schema: - type: dict - additional_attrs: true - attrs: - - variable: key - label: API-key (key) - schema: - type: string - default: "" - - variable: customkv - label: Custom Options - schema: - type: list - default: [] - items: - - variable: option - label: Option - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - default: "" - required: true - - variable: value - label: Value - schema: - type: string - default: "" - required: true - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - - variable: ingressList - label: Add Manual Custom Ingresses - group: Ingress - schema: - type: list - default: [] - items: - - variable: ingressListEntry - label: Custom Ingress - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: ingressClassName - label: IngressClass Name - schema: - type: string - default: "" - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: overrideService - label: Linked Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Service Name - schema: - type: string - default: "" - - variable: port - label: Service Port - schema: - type: int - - variable: tls - label: TLS-Settings - schema: - type: list - default: [] - show_if: [["certificateIssuer", "=", ""]] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your Cert-Manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: Use Custom Secret (Advanced) - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: "Allow Cross Origin Requests" - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: namespace - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description - description: defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - - variable: securityContext - group: Security and Permissions - label: Security Context - schema: - additional_attrs: true - type: dict - attrs: - - variable: container - label: Container - schema: - additional_attrs: true - type: dict - attrs: - # Settings from questions.yaml get appended here on a per-app basis - - - variable: runAsUser - label: "runAsUser" - description: "The UserID of the user running the application" - schema: - type: int - default: 568 - - variable: runAsGroup - label: "runAsGroup" - description: "The groupID 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 and Devices - label: "Resource Limits" - schema: - additional_attrs: true - type: dict - attrs: - - variable: limits - label: Advanced Limit Resource Consumption - schema: - additional_attrs: true - type: dict - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 4000m - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: RAM - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 8Gi - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: 'intel.com/i915' - label: Add Intel i915 GPUs - schema: - type: int - default: 0 - - variable: 'nvidia.com/gpu' - label: Add NVIDIA GPUs (Experimental) - schema: - type: int - default: 0 - - variable: 'amd.com/gpu' - label: Add AMD GPUs - schema: - type: int - default: 0 - - variable: requests - label: "Minimum Resources Required (request)" - schema: - additional_attrs: true - type: dict - hidden: true - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 10m - hidden: true - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: "RAM" - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 50Mi - hidden: true - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: deviceList - label: Mount USB Devices - group: Resources and Devices - schema: - type: list - default: [] - items: - - variable: deviceListEntry - label: Device - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Storage - schema: - type: boolean - default: true - - variable: type - label: (Advanced) Type of Storage - description: Sets the persistence type - schema: - type: string - default: device - hidden: true - - variable: readOnly - label: readOnly - schema: - type: boolean - default: false - - variable: hostPath - label: Host Device Path - description: Path to the device on the host system - schema: - type: path - - variable: mountPath - label: Container Device Path - description: Path inside the container the device is mounted - schema: - type: string - default: "/dev/ttyACM0" - - variable: scaleGPU - label: GPU Configuration - group: Resources and Devices - schema: - type: list - default: [] - items: - - variable: scaleGPUEntry - label: GPU - schema: - additional_attrs: true - type: dict - attrs: - # Specify GPU configuration - - variable: gpu - label: Select GPU - schema: - additional_attrs: true - type: dict - $ref: - - "definitions/gpuConfiguration" - attrs: [] - - variable: workaround - label: "Workaround" - schema: - type: string - default: workaround - hidden: 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: apiKey - label: "Sabnzbd API key" - description: "Can be found in the Bazarr settings" - schema: - type: string - default: "" - required: true -# - variable: horizontalPodAutoscaler -# group: Advanced -# label: (Advanced) Horizontal Pod Autoscaler -# schema: -# type: list -# default: [] -# items: -# - variable: hpaEntry -# label: HPA Entry -# schema: -# additional_attrs: true -# type: dict -# attrs: -# - variable: name -# label: Name -# schema: -# type: string -# required: true -# default: "" -# - variable: enabled -# label: Enabled -# schema: -# type: boolean -# default: false -# show_subquestions_if: true -# subquestions: -# - variable: target -# label: Target -# description: Deployment name, Defaults to Main Deployment -# schema: -# type: string -# default: "" -# - variable: minReplicas -# label: Minimum Replicas -# schema: -# type: int -# default: 1 -# - variable: maxReplicas -# label: Maximum Replicas -# schema: -# type: int -# default: 5 -# - variable: targetCPUUtilizationPercentage -# label: Target CPU Utilization Percentage -# schema: -# type: int -# default: 80 -# - variable: targetMemoryUtilizationPercentage -# label: Target Memory Utilization Percentage -# schema: -# type: int -# default: 80 - - variable: networkPolicy - group: Advanced - label: (Advanced) Network Policy - schema: - type: list - default: [] - items: - - variable: netPolicyEntry - label: Network Policy Entry - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - default: "" - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: policyType - label: Policy Type - schema: - type: string - default: "" - enum: - - value: "" - description: Default - - value: ingress - description: Ingress - - value: egress - description: Egress - - value: ingress-egress - description: Ingress and Egress - - variable: egress - label: Egress - schema: - type: list - default: [] - items: - - variable: egressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: to - label: To - schema: - type: list - default: [] - items: - - variable: toEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - variable: ingress - label: Ingress - schema: - type: list - default: [] - items: - - variable: ingressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: from - label: From - schema: - type: list - default: [] - items: - - variable: fromEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - - variable: addons - group: Addons - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: codeserver - label: Codeserver - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: service - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: NodePort - description: Deprecated CHANGE THIS - - value: ClusterIP - description: ClusterIP - - value: LoadBalancer - description: LoadBalancer - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: ports - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: codeserver - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - default: 36107 - - variable: ingress - label: "Ingress" - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - variable: scaleCert - label: 'Use TrueNAS SCALE Certificate (Deprecated)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: int - $ref: - - "definitions/certificate" - - variable: envList - label: Codeserver Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: netshoot - label: Netshoot - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: envList - label: Netshoot Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: vpn - label: VPN - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Type - schema: - type: string - default: disabled - enum: - - value: disabled - description: disabled - - value: gluetun - description: Gluetun - - value: tailscale - description: Tailscale - - value: openvpn - description: OpenVPN (Deprecated) - - value: wireguard - description: Wireguard (Deprecated) - - variable: openvpn - label: OpenVPN Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "openvpn"]] - attrs: - - variable: username - label: Authentication Username (Optional) - description: Authentication Username, Optional - schema: - type: string - default: "" - - variable: password - label: Authentication Password - description: Authentication Credentials - schema: - type: string - show_if: [["username", "!=", ""]] - default: "" - required: true - - variable: tailscale - label: Tailscale Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "tailscale"]] - attrs: - - variable: authkey - label: Authentication Key - description: Provide an auth key to automatically authenticate the node as your user account. - schema: - type: string - private: true - default: "" - - variable: auth_once - label: Auth Once - description: Only attempt to log in if not already logged in. - schema: - type: boolean - default: true - - variable: accept_dns - label: Accept DNS - description: Accept DNS configuration from the admin console. - schema: - type: boolean - default: false - - variable: userspace - label: Userspace - description: Userspace Networking mode allows running Tailscale where you do not have access to create a VPN tunnel device. - schema: - type: boolean - default: false - - variable: routes - label: Routes - description: Expose physical subnet routes to your entire Tailscale network. - schema: - type: string - default: "" - - variable: dest_ip - label: Destination IP - description: Tells the DNAT mechanism which Destination IP to set in the IP header, and where to send packets that are matched. - schema: - type: string - default: "" - - variable: sock5_server - label: Sock5 Server - description: The address on which to listen for SOCKS5 proxying into the tailscale net. - schema: - type: string - default: "" - - variable: outbound_http_proxy_listen - label: Outbound HTTP Proxy Listen - description: The address on which to listen for HTTP proxying into the tailscale net. - schema: - type: string - default: "" - - variable: extra_args - label: Extra Args - description: Extra Args - schema: - type: string - default: "" - - variable: daemon_extra_args - label: Tailscale Daemon Extra Args - description: Tailscale Daemon Extra Args - schema: - type: string - default: "" - - variable: killSwitch - label: Enable Killswitch - schema: - type: boolean - show_if: [["type", "!=", "disabled"]] - default: true - - variable: excludedNetworks_IPv4 - label: Killswitch Excluded IPv4 networks - description: List of Killswitch Excluded IPv4 Addresses - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv4 - label: IPv4 Network - schema: - type: string - required: true - - variable: excludedNetworks_IPv6 - label: Killswitch Excluded IPv6 networks - description: "List of Killswitch Excluded IPv6 Addresses" - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv6 - label: IPv6 Network - schema: - type: string - required: true - - variable: configFile - label: VPN Config File Location - schema: - type: string - show_if: [["type", "!=", "disabled"]] - default: "" - - - variable: envList - label: VPN Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - max_length: 10240 - - - variable: docs - group: Documentation - label: Please read the documentation at https://truecharts.org - description: Please read the documentation at -
            https://truecharts.org - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDocs - label: I have checked the documentation - schema: - type: boolean - default: true - - variable: donateNag - group: Documentation - label: Please consider supporting TrueCharts, see https://truecharts.org/sponsor - description: Please consider supporting TrueCharts, see -
            https://truecharts.org/sponsor - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDonate - label: I have considered donating - schema: - type: boolean - default: true - hidden: true - diff --git a/stable/sabnzbd/17.4.0/templates/NOTES.txt b/stable/sabnzbd/17.4.0/templates/NOTES.txt deleted file mode 100644 index efcb74cb77..0000000000 --- a/stable/sabnzbd/17.4.0/templates/NOTES.txt +++ /dev/null @@ -1 +0,0 @@ -{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/sabnzbd/17.4.0/templates/common.yaml b/stable/sabnzbd/17.4.0/templates/common.yaml deleted file mode 100644 index b51394e00a..0000000000 --- a/stable/sabnzbd/17.4.0/templates/common.yaml +++ /dev/null @@ -1 +0,0 @@ -{{ include "tc.v1.common.loader.all" . }} diff --git a/stable/sabnzbd/17.4.0/values.yaml b/stable/sabnzbd/17.4.0/values.yaml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/stable/sabnzbd/18.1.3/.helmignore b/stable/sabnzbd/18.1.3/.helmignore deleted file mode 100644 index 77ca5567b2..0000000000 --- a/stable/sabnzbd/18.1.3/.helmignore +++ /dev/null @@ -1,30 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ -# OWNERS file for Kubernetes -OWNERS -# helm-docs templates -*.gotmpl -# docs folder -/docs -# icon -icon.png diff --git a/stable/sabnzbd/18.1.3/CHANGELOG.md b/stable/sabnzbd/18.1.3/CHANGELOG.md deleted file mode 100644 index a125cdab1d..0000000000 --- a/stable/sabnzbd/18.1.3/CHANGELOG.md +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: Changelog ---- - - -*for the complete changelog, please refer to the website* - -**Important:** - - - - - - - - - - - - - - - - - - - - - - - - - - -## [sabnzbd-17.2.9](https://github.com/truecharts/charts/compare/sabnzbd-17.2.8...sabnzbd-17.2.9) (2024-02-05) - -### Chore - - - -- update container image ghcr.io/onedr0p/sabnzbd to 4.2.2[@5b1f15c](https://github.com/5b1f15c) by renovate ([#17958](https://github.com/truecharts/charts/issues/17958)) - - -## [sabnzbd-17.2.8](https://github.com/truecharts/charts/compare/sabnzbd-17.2.7...sabnzbd-17.2.8) (2024-02-05) - -### Chore - - - -- update container image ghcr.io/onedr0p/sabnzbd to v4.2.2[@0343b55](https://github.com/0343b55) by renovate ([#17917](https://github.com/truecharts/charts/issues/17917)) - - -## [sabnzbd-17.2.7](https://github.com/truecharts/charts/compare/sabnzbd-17.2.6...sabnzbd-17.2.7) (2024-02-03) - -### Chore - - - -- update container image common to v17.2.30[@19ad5ec](https://github.com/19ad5ec) by renovate ([#17804](https://github.com/truecharts/charts/issues/17804)) - - -## [sabnzbd-17.2.6](https://github.com/truecharts/charts/compare/sabnzbd-17.2.5...sabnzbd-17.2.6) (2024-01-26) - -### Chore - - - -- update container image common to v17.2.29[@d7c41a3](https://github.com/d7c41a3) by renovate ([#17545](https://github.com/truecharts/charts/issues/17545)) - - -## [sabnzbd-17.2.5](https://github.com/truecharts/charts/compare/sabnzbd-17.2.4...sabnzbd-17.2.5) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.28[@918b4c5](https://github.com/918b4c5) by renovate ([#17478](https://github.com/truecharts/charts/issues/17478)) - - -## [sabnzbd-17.2.4](https://github.com/truecharts/charts/compare/sabnzbd-17.2.3...sabnzbd-17.2.4) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.26[@24c98f7](https://github.com/24c98f7) by renovate ([#17409](https://github.com/truecharts/charts/issues/17409)) - - -## [sabnzbd-17.2.3](https://github.com/truecharts/charts/compare/sabnzbd-17.2.2...sabnzbd-17.2.3) (2024-01-21) - -### Chore - - - -- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) - - - - -## [sabnzbd-17.2.2](https://github.com/truecharts/charts/compare/sabnzbd-17.2.1...sabnzbd-17.2.2) (2024-01-09) \ No newline at end of file diff --git a/stable/sabnzbd/18.1.3/Chart.yaml b/stable/sabnzbd/18.1.3/Chart.yaml deleted file mode 100644 index 348b5e628c..0000000000 --- a/stable/sabnzbd/18.1.3/Chart.yaml +++ /dev/null @@ -1,37 +0,0 @@ -annotations: - max_scale_version: 24.04.0 - min_scale_version: 23.10.0 - 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.2.2 -dependencies: - - name: common - version: 18.2.1 - 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.png -keywords: - - sabnzbd - - usenet -kubeVersion: ">=1.24.0-0" -maintainers: - - name: TrueCharts - email: info@truecharts.org - url: https://truecharts.org -name: sabnzbd -sources: - - https://sabnzbd.org/ - - https://github.com/truecharts/charts/tree/master/charts/stable/sabnzbd - - https://ghcr.io/onedr0p/sabnzbd - - https://ghcr.io/onedr0p/exportarr -type: application -version: 18.1.3 diff --git a/stable/sabnzbd/18.1.3/README.md b/stable/sabnzbd/18.1.3/README.md deleted file mode 100644 index b6b127eb79..0000000000 --- a/stable/sabnzbd/18.1.3/README.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: README ---- - -## General Info - -TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. -However only installations using the TrueNAS SCALE Apps system are supported. - -For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/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)** - -## Support - -- Please check our [quick-start guides for TrueNAS SCALE](https://truecharts.org/manual/SCALE/guides/scale-intro). -- See the [Website](https://truecharts.org) -- Check our [Discord](https://discord.gg/tVsPTHWTtr) -- Open a [issue](https://github.com/truecharts/charts/issues/new/choose) - ---- - -## Sponsor TrueCharts - -TrueCharts can only exist due to the incredible effort of our staff. -Please consider making a [donation](https://truecharts.org/sponsor) or contributing back to the project any way you can! - -_All Rights Reserved - The TrueCharts Project_ diff --git a/stable/sabnzbd/18.1.3/app-readme.md b/stable/sabnzbd/18.1.3/app-readme.md deleted file mode 100644 index 04be527cd6..0000000000 --- a/stable/sabnzbd/18.1.3/app-readme.md +++ /dev/null @@ -1,8 +0,0 @@ -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/18.1.3/charts/common-18.0.3.tgz b/stable/sabnzbd/18.1.3/charts/common-18.0.3.tgz deleted file mode 100644 index 94e930e88c129164c3a20cff45fa9f4fb8916035..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98756 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 - 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: 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: Storage and Persistence - schema: - type: list - default: [] - items: - - variable: persistenceListEntry - label: Custom Storage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the storage - schema: - type: boolean - default: true - hidden: true - - variable: type - label: Type of Storage - description: Sets the persistence type, Anything other than PVC could break rollback! - schema: - type: string - default: hostPath - enum: - - value: pvc - description: PVC - - value: hostPath - description: Host Path - - value: emptyDir - description: emptyDir - - value: nfs - description: NFS Share - - variable: server - label: NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: path - label: Path on NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: iscsi - label: iSCSI Options - schema: - show_if: [["type", "=", "iscsi"]] - type: dict - additional_attrs: true - attrs: - - variable: targetPortal - label: targetPortal - schema: - type: string - required: true - default: "" - - variable: iqn - label: iqn - schema: - type: string - required: true - default: "" - - variable: lun - label: lun - schema: - type: int - default: 0 - - variable: authSession - label: authSession - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: authDiscovery - label: authDiscovery - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: autoPermissions - label: Automatic Permissions Configuration - description: Automatically set permissions - schema: - show_if: [["type", "!=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: chown - label: Run CHOWN - description: | - It will run CHOWN on the path with the given fsGroup - schema: - type: boolean - default: false - - variable: chmod - label: Run CHMOD - description: | - It will run CHMOD on the path with the given value
            - Format should be 3 digits, e.g. 770 - schema: - type: string - valid_chars: '[0-9]{3}' - default: "" - - variable: recursive - label: Recursive - description: | - It will run CHOWN and CHMOD recursively - schema: - type: boolean - default: false - - variable: readOnly - label: Read Only - schema: - type: boolean - default: false - - variable: hostPath - label: Host Path - description: Path inside the container the storage is mounted - schema: - show_if: [["type", "=", "hostPath"]] - type: hostpath - - variable: mountPath - label: Mount Path - description: Path inside the container the storage is mounted - schema: - type: string - default: "" - required: true - valid_chars: '^\/([a-zA-Z0-9._-]+(\s?[a-zA-Z0-9._-]+|\/?))+$' - - variable: medium - label: EmptyDir Medium - schema: - show_if: [["type", "=", "emptyDir"]] - type: string - default: "" - enum: - - value: "" - description: Default - - value: Memory - description: Memory - - variable: size - label: Size Quotum of Storage - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: 256Gi - - variable: storageClass - label: 'storageClass (Advanced)' - description: 'sets the storageClass to something other than iX default. Only for advanced usecases!' - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: "" - - variable: static - label: 'Static Fixed PVC Bindings (Experimental)' - description: Link a PVC to a specific storage location - schema: - show_if: [["type", "=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: mode - label: mode - description: | - disabled: use normal dynamic PVCs - smb: connect to an SMB share - nfs: connect to an NFS share - schema: - type: string - default: "disabled" - enum: - - value: "disabled" - description: disabled - - value: smb - description: smb - - value: nfs - description: nfs - - variable: server - label: Server - description: server to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "myserver" - - variable: share - label: Share - description: share to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "/myshare" - - variable: user - label: User - description: connecting user - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "myuser" - - variable: domain - label: Domain - description: user domain - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: password - label: Password - description: connecting password - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: volumeSnapshots - label: 'Volume Snapshots (Experimental)' - description: Add an entry to the list to force creation of a volumeSnapshot of this PVC - schema: - show_if: [["type", "=", "pvc"]] - type: list - default: [] - items: - - variable: volumeSnapshotEntry - label: Custom volumeSnapshot - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - description: 'WARNING: renaming this, means deletion of the snapshot with the old name!' - schema: - type: string - default: "mysnapshot" - required: true - - variable: volumeSnapshotClassName - label: 'volumeSnapshot Class Name (Advanced)' - description: For use with PVCs using a non-default storageClass - schema: - type: string - default: "" - - - variable: ingress - label: "" - group: Ingress - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: "Main Ingress" - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name (Optional) - description: Defaults to chart name - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description (Optional) - description: Defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: icon - label: Icon (Optional) - description: Defaults to chart icon - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - variable: widget - label: Widget Settings - schema: - type: dict - additional_attrs: true - show_if: [["enabled", "=", true]] - attrs: - - variable: enabled - label: Enable Widget - description: When disabled all widget annotations are skipped. - schema: - type: boolean - default: true - - variable: custom - label: Options - schema: - type: dict - additional_attrs: true - attrs: - - variable: key - label: API-key (key) - schema: - type: string - default: "" - - variable: customkv - label: Custom Options - schema: - type: list - default: [] - items: - - variable: option - label: Option - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - default: "" - required: true - - variable: value - label: Value - schema: - type: string - default: "" - required: true - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - - variable: ingressList - label: Add Manual Custom Ingresses - group: Ingress - schema: - type: list - default: [] - items: - - variable: ingressListEntry - label: Custom Ingress - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: ingressClassName - label: IngressClass Name - schema: - type: string - default: "" - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: overrideService - label: Linked Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Service Name - schema: - type: string - default: "" - - variable: port - label: Service Port - schema: - type: int - - variable: tls - label: TLS-Settings - schema: - type: list - default: [] - show_if: [["certificateIssuer", "=", ""]] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your Cert-Manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: Use Custom Secret (Advanced) - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: "Allow Cross Origin Requests" - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: namespace - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description - description: defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - - variable: securityContext - group: Security and Permissions - label: Security Context - schema: - additional_attrs: true - type: dict - attrs: - - variable: container - label: Container - schema: - additional_attrs: true - type: dict - attrs: - # Settings from questions.yaml get appended here on a per-app basis - - - variable: runAsUser - label: "runAsUser" - description: "The UserID of the user running the application" - schema: - type: int - default: 568 - - variable: runAsGroup - label: "runAsGroup" - description: "The groupID 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 and Devices - label: "Resource Limits" - schema: - additional_attrs: true - type: dict - attrs: - - variable: limits - label: Advanced Limit Resource Consumption - schema: - additional_attrs: true - type: dict - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 4000m - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: RAM - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 8Gi - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: 'gpu.intel.com/i915' - label: Add Intel i915 GPUs - schema: - type: int - default: 0 - - variable: 'nvidia.com/gpu' - label: Add NVIDIA GPUs (Experimental) - schema: - type: int - default: 0 - - variable: 'amd.com/gpu' - label: Add AMD GPUs - schema: - type: int - default: 0 - - variable: requests - label: "Minimum Resources Required (request)" - schema: - additional_attrs: true - type: dict - hidden: true - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 10m - hidden: true - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: "RAM" - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 50Mi - hidden: true - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: deviceList - label: Mount USB Devices - group: Resources and Devices - schema: - type: list - default: [] - items: - - variable: deviceListEntry - label: Device - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Storage - schema: - type: boolean - default: true - - variable: type - label: (Advanced) Type of Storage - description: Sets the persistence type - schema: - type: string - default: device - hidden: true - - variable: readOnly - label: readOnly - schema: - type: boolean - default: false - - variable: hostPath - label: Host Device Path - description: Path to the device on the host system - schema: - type: path - - variable: mountPath - label: Container Device Path - description: Path inside the container the device is mounted - schema: - type: string - default: "/dev/ttyACM0" - - - variable: 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: Advanced -# label: (Advanced) Horizontal Pod Autoscaler -# schema: -# type: list -# default: [] -# items: -# - variable: hpaEntry -# label: HPA Entry -# schema: -# additional_attrs: true -# type: dict -# attrs: -# - variable: name -# label: Name -# schema: -# type: string -# required: true -# default: "" -# - variable: enabled -# label: Enabled -# schema: -# type: boolean -# default: false -# show_subquestions_if: true -# subquestions: -# - variable: target -# label: Target -# description: Deployment name, Defaults to Main Deployment -# schema: -# type: string -# default: "" -# - variable: minReplicas -# label: Minimum Replicas -# schema: -# type: int -# default: 1 -# - variable: maxReplicas -# label: Maximum Replicas -# schema: -# type: int -# default: 5 -# - variable: targetCPUUtilizationPercentage -# label: Target CPU Utilization Percentage -# schema: -# type: int -# default: 80 -# - variable: targetMemoryUtilizationPercentage -# label: Target Memory Utilization Percentage -# schema: -# type: int -# default: 80 - - variable: networkPolicy - group: Advanced - label: (Advanced) Network Policy - schema: - type: list - default: [] - items: - - variable: netPolicyEntry - label: Network Policy Entry - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - default: "" - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: policyType - label: Policy Type - schema: - type: string - default: "" - enum: - - value: "" - description: Default - - value: ingress - description: Ingress - - value: egress - description: Egress - - value: ingress-egress - description: Ingress and Egress - - variable: egress - label: Egress - schema: - type: list - default: [] - items: - - variable: egressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: to - label: To - schema: - type: list - default: [] - items: - - variable: toEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - variable: ingress - label: Ingress - schema: - type: list - default: [] - items: - - variable: ingressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: from - label: From - schema: - type: list - default: [] - items: - - variable: fromEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - - variable: addons - group: Addons - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: codeserver - label: Codeserver - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: service - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: NodePort - description: Deprecated CHANGE THIS - - value: ClusterIP - description: ClusterIP - - value: LoadBalancer - description: LoadBalancer - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: ports - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: codeserver - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - default: 36107 - - variable: ingress - label: "Ingress" - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - variable: scaleCert - label: 'Use TrueNAS SCALE Certificate (Deprecated)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: int - $ref: - - "definitions/certificate" - - variable: envList - label: Codeserver Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: netshoot - label: Netshoot - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: envList - label: Netshoot Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: vpn - label: VPN - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Type - schema: - type: string - default: disabled - enum: - - value: disabled - description: disabled - - value: gluetun - description: Gluetun - - value: tailscale - description: Tailscale - - value: openvpn - description: OpenVPN (Deprecated) - - value: wireguard - description: Wireguard (Deprecated) - - variable: openvpn - label: OpenVPN Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "openvpn"]] - attrs: - - variable: username - label: Authentication Username (Optional) - description: Authentication Username, Optional - schema: - type: string - default: "" - - variable: password - label: Authentication Password - description: Authentication Credentials - schema: - type: string - show_if: [["username", "!=", ""]] - default: "" - required: true - - variable: tailscale - label: Tailscale Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "tailscale"]] - attrs: - - variable: authkey - label: Authentication Key - description: Provide an auth key to automatically authenticate the node as your user account. - schema: - type: string - private: true - default: "" - - variable: auth_once - label: Auth Once - description: Only attempt to log in if not already logged in. - schema: - type: boolean - default: true - - variable: accept_dns - label: Accept DNS - description: Accept DNS configuration from the admin console. - schema: - type: boolean - default: false - - variable: userspace - label: Userspace - description: Userspace Networking mode allows running Tailscale where you do not have access to create a VPN tunnel device. - schema: - type: boolean - default: false - - variable: routes - label: Routes - description: Expose physical subnet routes to your entire Tailscale network. - schema: - type: string - default: "" - - variable: dest_ip - label: Destination IP - description: Tells the DNAT mechanism which Destination IP to set in the IP header, and where to send packets that are matched. - schema: - type: string - default: "" - - variable: sock5_server - label: Sock5 Server - description: The address on which to listen for SOCKS5 proxying into the tailscale net. - schema: - type: string - default: "" - - variable: outbound_http_proxy_listen - label: Outbound HTTP Proxy Listen - description: The address on which to listen for HTTP proxying into the tailscale net. - schema: - type: string - default: "" - - variable: extra_args - label: Extra Args - description: Extra Args - schema: - type: string - default: "" - - variable: daemon_extra_args - label: Tailscale Daemon Extra Args - description: Tailscale Daemon Extra Args - schema: - type: string - default: "" - - variable: killSwitch - label: Enable Killswitch - schema: - type: boolean - show_if: [["type", "!=", "disabled"]] - default: true - - variable: excludedNetworks_IPv4 - label: Killswitch Excluded IPv4 networks - description: List of Killswitch Excluded IPv4 Addresses - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv4 - label: IPv4 Network - schema: - type: string - required: true - - variable: excludedNetworks_IPv6 - label: Killswitch Excluded IPv6 networks - description: "List of Killswitch Excluded IPv6 Addresses" - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv6 - label: IPv6 Network - schema: - type: string - required: true - - variable: configFile - label: VPN Config File Location - schema: - type: string - show_if: [["type", "!=", "disabled"]] - default: "" - - - variable: envList - label: VPN Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - max_length: 10240 - - - variable: docs - group: Documentation - label: Please read the documentation at https://truecharts.org - description: Please read the documentation at -
            https://truecharts.org - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDocs - label: I have checked the documentation - schema: - type: boolean - default: true - - variable: donateNag - group: Documentation - label: Please consider supporting TrueCharts, see https://truecharts.org/sponsor - description: Please consider supporting TrueCharts, see -
            https://truecharts.org/sponsor - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDonate - label: I have considered donating - schema: - type: boolean - default: true - hidden: true - diff --git a/stable/sabnzbd/18.1.3/templates/NOTES.txt b/stable/sabnzbd/18.1.3/templates/NOTES.txt deleted file mode 100644 index efcb74cb77..0000000000 --- a/stable/sabnzbd/18.1.3/templates/NOTES.txt +++ /dev/null @@ -1 +0,0 @@ -{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/sabnzbd/18.1.3/templates/common.yaml b/stable/sabnzbd/18.1.3/templates/common.yaml deleted file mode 100644 index b51394e00a..0000000000 --- a/stable/sabnzbd/18.1.3/templates/common.yaml +++ /dev/null @@ -1 +0,0 @@ -{{ include "tc.v1.common.loader.all" . }} diff --git a/stable/sabnzbd/18.1.3/values.yaml b/stable/sabnzbd/18.1.3/values.yaml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/stable/sabnzbd/18.2.0/.helmignore b/stable/sabnzbd/18.2.0/.helmignore deleted file mode 100644 index 77ca5567b2..0000000000 --- a/stable/sabnzbd/18.2.0/.helmignore +++ /dev/null @@ -1,30 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ -# OWNERS file for Kubernetes -OWNERS -# helm-docs templates -*.gotmpl -# docs folder -/docs -# icon -icon.png diff --git a/stable/sabnzbd/18.2.0/CHANGELOG.md b/stable/sabnzbd/18.2.0/CHANGELOG.md deleted file mode 100644 index 49ca407a21..0000000000 --- a/stable/sabnzbd/18.2.0/CHANGELOG.md +++ /dev/null @@ -1,99 +0,0 @@ ---- -title: Changelog ---- - - -*for the complete changelog, please refer to the website* - -**Important:** - - - - - - - - - - - - - - - - - - - - - - - - - - - -## [sabnzbd-17.2.9](https://github.com/truecharts/charts/compare/sabnzbd-17.2.8...sabnzbd-17.2.9) (2024-02-05) - -### Chore - - - -- update container image ghcr.io/onedr0p/sabnzbd to 4.2.2[@5b1f15c](https://github.com/5b1f15c) by renovate ([#17958](https://github.com/truecharts/charts/issues/17958)) - - -## [sabnzbd-17.2.8](https://github.com/truecharts/charts/compare/sabnzbd-17.2.7...sabnzbd-17.2.8) (2024-02-05) - -### Chore - - - -- update container image ghcr.io/onedr0p/sabnzbd to v4.2.2[@0343b55](https://github.com/0343b55) by renovate ([#17917](https://github.com/truecharts/charts/issues/17917)) - - -## [sabnzbd-17.2.7](https://github.com/truecharts/charts/compare/sabnzbd-17.2.6...sabnzbd-17.2.7) (2024-02-03) - -### Chore - - - -- update container image common to v17.2.30[@19ad5ec](https://github.com/19ad5ec) by renovate ([#17804](https://github.com/truecharts/charts/issues/17804)) - - -## [sabnzbd-17.2.6](https://github.com/truecharts/charts/compare/sabnzbd-17.2.5...sabnzbd-17.2.6) (2024-01-26) - -### Chore - - - -- update container image common to v17.2.29[@d7c41a3](https://github.com/d7c41a3) by renovate ([#17545](https://github.com/truecharts/charts/issues/17545)) - - -## [sabnzbd-17.2.5](https://github.com/truecharts/charts/compare/sabnzbd-17.2.4...sabnzbd-17.2.5) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.28[@918b4c5](https://github.com/918b4c5) by renovate ([#17478](https://github.com/truecharts/charts/issues/17478)) - - -## [sabnzbd-17.2.4](https://github.com/truecharts/charts/compare/sabnzbd-17.2.3...sabnzbd-17.2.4) (2024-01-21) - -### Chore - - - -- update container image common to v17.2.26[@24c98f7](https://github.com/24c98f7) by renovate ([#17409](https://github.com/truecharts/charts/issues/17409)) - - -## [sabnzbd-17.2.3](https://github.com/truecharts/charts/compare/sabnzbd-17.2.2...sabnzbd-17.2.3) (2024-01-21) - -### Chore - - - -- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) - - - diff --git a/stable/sabnzbd/18.2.0/Chart.yaml b/stable/sabnzbd/18.2.0/Chart.yaml deleted file mode 100644 index 1223398448..0000000000 --- a/stable/sabnzbd/18.2.0/Chart.yaml +++ /dev/null @@ -1,37 +0,0 @@ -annotations: - max_scale_version: 24.04.0 - min_scale_version: 23.10.0 - 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.2.2 -dependencies: - - name: common - version: 18.2.1 - 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.png -keywords: - - sabnzbd - - usenet -kubeVersion: ">=1.24.0-0" -maintainers: - - name: TrueCharts - email: info@truecharts.org - url: https://truecharts.org -name: sabnzbd -sources: - - https://sabnzbd.org/ - - https://github.com/truecharts/charts/tree/master/charts/stable/sabnzbd - - https://ghcr.io/onedr0p/sabnzbd - - https://ghcr.io/onedr0p/exportarr -type: application -version: 18.2.0 diff --git a/stable/sabnzbd/18.2.0/README.md b/stable/sabnzbd/18.2.0/README.md deleted file mode 100644 index b6b127eb79..0000000000 --- a/stable/sabnzbd/18.2.0/README.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: README ---- - -## General Info - -TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. -However only installations using the TrueNAS SCALE Apps system are supported. - -For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/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)** - -## Support - -- Please check our [quick-start guides for TrueNAS SCALE](https://truecharts.org/manual/SCALE/guides/scale-intro). -- See the [Website](https://truecharts.org) -- Check our [Discord](https://discord.gg/tVsPTHWTtr) -- Open a [issue](https://github.com/truecharts/charts/issues/new/choose) - ---- - -## Sponsor TrueCharts - -TrueCharts can only exist due to the incredible effort of our staff. -Please consider making a [donation](https://truecharts.org/sponsor) or contributing back to the project any way you can! - -_All Rights Reserved - The TrueCharts Project_ diff --git a/stable/sabnzbd/18.2.0/app-readme.md b/stable/sabnzbd/18.2.0/app-readme.md deleted file mode 100644 index 04be527cd6..0000000000 --- a/stable/sabnzbd/18.2.0/app-readme.md +++ /dev/null @@ -1,8 +0,0 @@ -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/18.2.0/charts/common-18.1.2.tgz b/stable/sabnzbd/18.2.0/charts/common-18.1.2.tgz deleted file mode 100644 index afb1de8120d9e1088c1711607a6c323d4dae355b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99288 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 Du(4)S diff --git a/stable/sabnzbd/18.2.0/ix_values.yaml b/stable/sabnzbd/18.2.0/ix_values.yaml deleted file mode 100644 index 4ba9a7585f..0000000000 --- a/stable/sabnzbd/18.2.0/ix_values.yaml +++ /dev/null @@ -1,89 +0,0 @@ -image: - repository: ghcr.io/onedr0p/sabnzbd - pullPolicy: IfNotPresent - tag: 4.3.3@sha256:86c645db93affcbf01cc2bce2560082bfde791009e1506dba68269b9c50bc341 -exportarrImage: - repository: ghcr.io/onedr0p/exportarr - pullPolicy: IfNotPresent - tag: v1.6.1@sha256:60cf3d44aa0b7dea2a65160b2e2e373c1ae38cd6b12a45fe81b8afa45ac31c22 -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/18.2.0/questions.yaml b/stable/sabnzbd/18.2.0/questions.yaml deleted file mode 100755 index 7b7c3b8d85..0000000000 --- a/stable/sabnzbd/18.2.0/questions.yaml +++ /dev/null @@ -1,2882 +0,0 @@ -groups: - - name: Container Image - description: Image to be used for container - - name: General Settings - description: General Deployment Settings - - name: Workload Settings - description: Workload Settings - - name: App Configuration - description: App Specific Config Options - - name: Networking and Services - description: Configure Network and Services for Container - - name: Storage and Persistence - description: Persist and Share Data that is Separate from the Container - - name: Ingress - description: Ingress Configuration - - name: Security and Permissions - description: Configure Security Context and Permissions - - name: Resources and Devices - description: "Specify Resources/Devices to be Allocated to Workload" - - name: Middlewares - description: Traefik Middlewares - - name: Metrics - description: Metrics - - name: Addons - description: Addon Configuration - - name: Backup Configuration - description: Configure Velero Backup Schedule - - name: Advanced - description: Advanced Configuration - - name: Postgresql - description: Postgresql - - name: Documentation - description: Documentation - -portals: - open: - protocols: - - "$kubernetes-resource_configmap_tcportal-open_protocol" - host: - - "$kubernetes-resource_configmap_tcportal-open_host" - ports: - - "$kubernetes-resource_configmap_tcportal-open_port" - -questions: - - variable: global - group: General Settings - label: "Global Settings" - schema: - additional_attrs: true - type: dict - attrs: - - variable: stopAll - label: Stop All - description: "Stops All Running pods and hibernates cnpg" - schema: - type: boolean - default: false - - - variable: workload - group: "Workload Settings" - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: main - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: type - label: Type (Advanced) - schema: - type: string - default: Deployment - enum: - - value: Deployment - description: Deployment - - value: DaemonSet - description: DaemonSet - - - variable: replicas - label: Replicas (Advanced) - description: Set the number of Replicas - schema: - type: int - show_if: [["type", "!=", "DaemonSet"]] - default: 1 - - - variable: podSpec - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: containers - label: Containers - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: Main Container - schema: - additional_attrs: true - type: dict - attrs: - - - variable: 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 Settings" - schema: - type: string - default: "Etc/UTC" - $ref: - - "definitions/timezone" - - - variable: podOptions - group: "General Settings" - label: "Global Pod Options (Advanced)" - schema: - additional_attrs: true - type: dict - attrs: - - variable: expertPodOpts - label: "Expert - Pod Options" - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hostNetwork - label: "Host Networking" - schema: - type: boolean - default: false - - variable: dnsConfig - label: "DNS Configuration" - schema: - type: dict - additional_attrs: true - attrs: - - variable: options - label: "Options" - schema: - type: list - default: [{"name": "ndots", "value": "1"}] - items: - - variable: optionsEntry - label: "Option Entry" - schema: - type: dict - additional_attrs: true - attrs: - - variable: name - label: "Name" - schema: - type: string - required: true - - variable: value - label: "Value" - schema: - type: string - - variable: nameservers - label: "Nameservers" - schema: - type: list - default: [] - items: - - variable: nsEntry - label: "Nameserver Entry" - schema: - type: string - required: true - - variable: searches - label: "Searches" - schema: - type: list - default: [] - items: - - variable: searchEntry - label: "Search Entry" - schema: - type: string - required: true - - - variable: imagePullSecretList - group: "General Settings" - label: "Image Pull Secrets" - schema: - type: list - default: [] - items: - - variable: pullsecretentry - label: "Pull Secret" - schema: - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: true - - variable: data - label: Data - schema: - type: dict - additional_attrs: true - attrs: - - variable: registry - label: "Registry" - schema: - type: string - required: true - default: "https://index.docker.io/v1/" - - variable: username - label: "Username" - schema: - type: string - required: true - default: "" - - variable: password - label: "Password" - schema: - type: string - required: true - private: true - default: "" - - variable: email - label: "Email" - schema: - type: string - required: true - default: "" - - - variable: service - group: Networking and Services - label: Configure Service(s) - schema: - additional_attrs: true - type: dict - attrs: - - - variable: 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: serviceexpert - group: Networking and Services - label: Show Expert Config - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - - variable: scaleExternalInterface - description: Add External Interfaces - label: Add external Interfaces - group: Networking - schema: - type: list - items: - - variable: interfaceConfiguration - description: Interface Configuration - label: Interface Configuration - schema: - additional_attrs: true - type: dict - $ref: - - "normalize/interfaceConfiguration" - attrs: - - variable: hostInterface - description: Please Specify Host Interface - label: Host Interface - schema: - type: string - required: true - $ref: - - "definitions/interface" - - variable: ipam - description: Define how IP Address will be managed - label: IP Address Management - schema: - additional_attrs: true - type: dict - required: true - attrs: - - variable: type - description: Specify type for IPAM - label: IPAM Type - schema: - type: string - required: true - enum: - - value: dhcp - description: Use DHCP - - value: static - description: Use Static IP - - variable: staticIPConfigurations - label: Static IP Addresses - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticIP - label: Static IP - schema: - type: ipaddr - cidr: true - - variable: staticRoutes - label: Static Routes - schema: - type: list - show_if: [["type", "=", "static"]] - items: - - variable: staticRouteConfiguration - label: Static Route Configuration - schema: - additional_attrs: true - type: dict - attrs: - - variable: destination - label: Destination - schema: - type: ipaddr - cidr: true - required: true - - variable: gateway - label: Gateway - schema: - type: ipaddr - cidr: false - required: true - - - variable: serviceList - label: Add Manual Custom Services - group: Networking and Services - schema: - type: list - default: [] - items: - - variable: serviceListEntry - label: Custom Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the service - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: LoadBalancer - description: LoadBalancer (Expose Ports) - - value: ClusterIP - description: ClusterIP (Do Not Expose Ports) - - value: Simple - description: Deprecated CHANGE THIS - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: advancedsvcset - label: Show Advanced Service Settings - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: externalIPs - label: "External IP's" - description: "External IP's" - schema: - type: list - default: [] - items: - - variable: externalIP - label: External IP - schema: - type: string - - variable: ipFamilyPolicy - label: IP Family Policy - description: Specify the IP Policy - schema: - type: string - default: SingleStack - enum: - - value: SingleStack - description: SingleStack - - value: PreferDualStack - description: PreferDualStack - - value: RequireDualStack - description: RequireDualStack - - variable: ipFamilies - label: IP Families - description: (Advanced) The IP Families that should be used - schema: - type: list - default: [] - items: - - variable: ipFamily - label: IP Family - schema: - type: string - - variable: portsList - label: Additional Service Ports - schema: - type: list - default: [] - items: - - variable: portsListEntry - label: Custom ports - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Port - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Port Name - schema: - type: string - default: "" - - variable: protocol - label: Port Type - schema: - type: string - default: tcp - enum: - - value: http - description: HTTP - - value: https - description: HTTPS - - value: tcp - description: TCP - - value: udp - description: UDP - - variable: targetPort - label: Target Port - description: This port exposes the container port on the service - schema: - type: int - required: true - - variable: port - label: Container Port - schema: - type: int - required: true - - - variable: persistence - label: Integrated Persistent Storage - description: Integrated Persistent Storage - group: Storage and 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: 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: Storage and Persistence - schema: - type: list - default: [] - items: - - variable: persistenceListEntry - label: Custom Storage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the storage - schema: - type: boolean - default: true - hidden: true - - variable: type - label: Type of Storage - description: Sets the persistence type, Anything other than PVC could break rollback! - schema: - type: string - default: hostPath - enum: - - value: pvc - description: PVC - - value: hostPath - description: Host Path - - value: emptyDir - description: emptyDir - - value: nfs - description: NFS Share - - variable: server - label: NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: path - label: Path on NFS Server - schema: - show_if: [["type", "=", "nfs"]] - type: string - default: "" - - variable: iscsi - label: iSCSI Options - schema: - show_if: [["type", "=", "iscsi"]] - type: dict - additional_attrs: true - attrs: - - variable: targetPortal - label: targetPortal - schema: - type: string - required: true - default: "" - - variable: iqn - label: iqn - schema: - type: string - required: true - default: "" - - variable: lun - label: lun - schema: - type: int - default: 0 - - variable: authSession - label: authSession - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: authDiscovery - label: authDiscovery - schema: - type: dict - additional_attrs: true - attrs: - - variable: username - label: username - schema: - type: string - default: "" - - variable: password - label: password - schema: - type: string - default: "" - - variable: usernameInitiator - label: usernameInitiator - schema: - type: string - default: "" - - variable: passwordInitiator - label: passwordInitiator - schema: - type: string - default: "" - - variable: autoPermissions - label: Automatic Permissions Configuration - description: Automatically set permissions - schema: - show_if: [["type", "!=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: chown - label: Run CHOWN - description: | - It will run CHOWN on the path with the given fsGroup - schema: - type: boolean - default: false - - variable: chmod - label: Run CHMOD - description: | - It will run CHMOD on the path with the given value
            - Format should be 3 digits, e.g. 770 - schema: - type: string - valid_chars: '[0-9]{3}' - default: "" - - variable: recursive - label: Recursive - description: | - It will run CHOWN and CHMOD recursively - schema: - type: boolean - default: false - - variable: readOnly - label: Read Only - schema: - type: boolean - default: false - - variable: hostPath - label: Host Path - description: Path inside the container the storage is mounted - schema: - show_if: [["type", "=", "hostPath"]] - type: hostpath - - variable: mountPath - label: Mount Path - description: Path inside the container the storage is mounted - schema: - type: string - default: "" - required: true - valid_chars: '^\/([a-zA-Z0-9._-]+(\s?[a-zA-Z0-9._-]+|\/?))+$' - - variable: medium - label: EmptyDir Medium - schema: - show_if: [["type", "=", "emptyDir"]] - type: string - default: "" - enum: - - value: "" - description: Default - - value: Memory - description: Memory - - variable: size - label: Size Quotum of Storage - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: 256Gi - - variable: storageClass - label: 'storageClass (Advanced)' - description: 'sets the storageClass to something other than iX default. Only for advanced usecases!' - schema: - show_if: [["type", "=", "pvc"]] - type: string - default: "" - - variable: static - label: 'Static Fixed PVC Bindings (Experimental)' - description: Link a PVC to a specific storage location - schema: - show_if: [["type", "=", "pvc"]] - type: dict - additional_attrs: true - attrs: - - variable: mode - label: mode - description: | - disabled: use normal dynamic PVCs - smb: connect to an SMB share - nfs: connect to an NFS share - schema: - type: string - default: "disabled" - enum: - - value: "disabled" - description: disabled - - value: smb - description: smb - - value: nfs - description: nfs - - variable: server - label: Server - description: server to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "myserver" - - variable: share - label: Share - description: share to connect to - schema: - type: string - show_if: [["mode", "!=", "disabled"]] - default: "/myshare" - - variable: user - label: User - description: connecting user - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "myuser" - - variable: domain - label: Domain - description: user domain - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: password - label: Password - description: connecting password - schema: - type: string - show_if: [["mode", "=", "smb"]] - default: "" - - variable: volumeSnapshots - label: 'Volume Snapshots (Experimental)' - description: Add an entry to the list to force creation of a volumeSnapshot of this PVC - schema: - show_if: [["type", "=", "pvc"]] - type: list - default: [] - items: - - variable: volumeSnapshotEntry - label: Custom volumeSnapshot - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - description: 'WARNING: renaming this, means deletion of the snapshot with the old name!' - schema: - type: string - default: "mysnapshot" - required: true - - variable: volumeSnapshotClassName - label: 'volumeSnapshot Class Name (Advanced)' - description: For use with PVCs using a non-default storageClass - schema: - type: string - default: "" - - - variable: ingress - label: "" - group: Ingress - schema: - additional_attrs: true - type: dict - attrs: - - - variable: main - label: "Main Ingress" - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name (Optional) - description: Defaults to chart name - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description (Optional) - description: Defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: icon - label: Icon (Optional) - description: Defaults to chart icon - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - variable: widget - label: Widget Settings - schema: - type: dict - additional_attrs: true - show_if: [["enabled", "=", true]] - attrs: - - variable: enabled - label: Enable Widget - description: When disabled all widget annotations are skipped. - schema: - type: boolean - default: true - - variable: custom - label: Options - schema: - type: dict - additional_attrs: true - attrs: - - variable: key - label: API-key (key) - schema: - type: string - default: "" - - variable: customkv - label: Custom Options - schema: - type: list - default: [] - items: - - variable: option - label: Option - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - default: "" - required: true - - variable: value - label: Value - schema: - type: string - default: "" - required: true - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - - variable: ingressList - label: Add Manual Custom Ingresses - group: Ingress - schema: - type: list - default: [] - items: - - variable: ingressListEntry - label: Custom Ingress - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: true - hidden: true - - variable: name - label: Name - schema: - type: string - default: "" - - variable: ingressClassName - label: IngressClass Name - schema: - type: string - default: "" - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: overrideService - label: Linked Service - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Service Name - schema: - type: string - default: "" - - variable: port - label: Service Port - schema: - type: int - - variable: tls - label: TLS-Settings - schema: - type: list - default: [] - show_if: [["certificateIssuer", "=", ""]] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your Cert-Manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: Use Custom Secret (Advanced) - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: "Allow Cross Origin Requests" - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: namespace - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: homepage - label: Homepage - description: Connect ingress with Homepage - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: name - label: Name - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: description - label: Description - description: defaults to chart description - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: group - label: Group - schema: - type: string - required: true - default: "default" - show_if: [["enabled", "=", true]] - - - variable: securityContext - group: Security and Permissions - label: Security Context - schema: - additional_attrs: true - type: dict - attrs: - - variable: container - label: Container - schema: - additional_attrs: true - type: dict - attrs: - # Settings from questions.yaml get appended here on a per-app basis - - - variable: runAsUser - label: "runAsUser" - description: "The UserID of the user running the application" - schema: - type: int - default: 568 - - variable: runAsGroup - label: "runAsGroup" - description: "The groupID 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 and Devices - label: "Resource Limits" - schema: - additional_attrs: true - type: dict - attrs: - - variable: limits - label: Advanced Limit Resource Consumption - schema: - additional_attrs: true - type: dict - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 4000m - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: RAM - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 8Gi - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: 'gpu.intel.com/i915' - label: Add Intel i915 GPUs - schema: - type: int - default: 0 - - variable: 'nvidia.com/gpu' - label: Add NVIDIA GPUs (Experimental) - schema: - type: int - default: 0 - - variable: 'amd.com/gpu' - label: Add AMD GPUs - schema: - type: int - default: 0 - - variable: requests - label: "Minimum Resources Required (request)" - schema: - additional_attrs: true - type: dict - hidden: true - attrs: - - variable: cpu - label: CPU - description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 10m - hidden: true - valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' - - variable: memory - label: "RAM" - description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" - schema: - type: string - default: 50Mi - hidden: true - valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' - - variable: deviceList - label: Mount USB Devices - group: Resources and Devices - schema: - type: list - default: [] - items: - - variable: deviceListEntry - label: Device - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable the Storage - schema: - type: boolean - default: true - - variable: type - label: (Advanced) Type of Storage - description: Sets the persistence type - schema: - type: string - default: device - hidden: true - - variable: readOnly - label: readOnly - schema: - type: boolean - default: false - - variable: hostPath - label: Host Device Path - description: Path to the device on the host system - schema: - type: path - - variable: mountPath - label: Container Device Path - description: Path inside the container the device is mounted - schema: - type: string - default: "/dev/ttyACM0" - - - variable: 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: Advanced -# label: (Advanced) Horizontal Pod Autoscaler -# schema: -# type: list -# default: [] -# items: -# - variable: hpaEntry -# label: HPA Entry -# schema: -# additional_attrs: true -# type: dict -# attrs: -# - variable: name -# label: Name -# schema: -# type: string -# required: true -# default: "" -# - variable: enabled -# label: Enabled -# schema: -# type: boolean -# default: false -# show_subquestions_if: true -# subquestions: -# - variable: target -# label: Target -# description: Deployment name, Defaults to Main Deployment -# schema: -# type: string -# default: "" -# - variable: minReplicas -# label: Minimum Replicas -# schema: -# type: int -# default: 1 -# - variable: maxReplicas -# label: Maximum Replicas -# schema: -# type: int -# default: 5 -# - variable: targetCPUUtilizationPercentage -# label: Target CPU Utilization Percentage -# schema: -# type: int -# default: 80 -# - variable: targetMemoryUtilizationPercentage -# label: Target Memory Utilization Percentage -# schema: -# type: int -# default: 80 - - variable: networkPolicy - group: Advanced - label: (Advanced) Network Policy - schema: - type: list - default: [] - items: - - variable: netPolicyEntry - label: Network Policy Entry - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - default: "" - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: policyType - label: Policy Type - schema: - type: string - default: "" - enum: - - value: "" - description: Default - - value: ingress - description: Ingress - - value: egress - description: Egress - - value: ingress-egress - description: Ingress and Egress - - variable: egress - label: Egress - schema: - type: list - default: [] - items: - - variable: egressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: to - label: To - schema: - type: list - default: [] - items: - - variable: toEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - variable: ingress - label: Ingress - schema: - type: list - default: [] - items: - - variable: ingressEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: from - label: From - schema: - type: list - default: [] - items: - - variable: fromEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: ipBlock - label: IP Block - schema: - additional_attrs: true - type: dict - attrs: - - variable: cidr - label: CIDR - schema: - type: string - default: "" - - variable: except - label: Except - schema: - type: list - default: [] - items: - - variable: exceptint - label: "" - schema: - type: string - - variable: namespaceSelector - label: Namespace Selector - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: podSelector - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: matchExpressions - label: Match Expressions - schema: - type: list - default: [] - items: - - variable: expressionEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: key - label: Key - schema: - type: string - - variable: operator - label: Operator - schema: - type: string - default: TCP - enum: - - value: In - description: In - - value: NotIn - description: NotIn - - value: Exists - description: Exists - - value: DoesNotExist - description: DoesNotExist - - variable: values - label: Values - schema: - type: list - default: [] - items: - - variable: value - label: "" - schema: - type: string - - variable: ports - label: Ports - schema: - type: list - default: [] - items: - - variable: portsEntry - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - - variable: endPort - label: End Port - schema: - type: int - - variable: protocol - label: Protocol - schema: - type: string - default: TCP - enum: - - value: TCP - description: TCP - - value: UDP - description: UDP - - value: SCTP - description: SCTP - - - variable: addons - group: Addons - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - - variable: codeserver - label: Codeserver - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: service - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Service Type - description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" - schema: - type: string - default: LoadBalancer - enum: - - value: NodePort - description: Deprecated CHANGE THIS - - value: ClusterIP - description: ClusterIP - - value: LoadBalancer - description: LoadBalancer - - variable: loadBalancerIP - label: LoadBalancer IP - description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" - schema: - show_if: [["type", "=", "LoadBalancer"]] - type: string - default: "" - - variable: ports - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: codeserver - label: "" - schema: - additional_attrs: true - type: dict - attrs: - - variable: port - label: Port - schema: - type: int - default: 36107 - - variable: ingress - label: "Ingress" - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enable Ingress - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: hosts - label: Hosts - schema: - type: list - default: [] - items: - - variable: hostEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: host - label: HostName - schema: - type: string - default: "" - required: true - - variable: paths - label: Paths - schema: - type: list - default: [{path: "/", pathType: "Prefix"}] - items: - - variable: pathEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: path - label: Path - schema: - type: string - required: true - default: "/" - - variable: pathType - label: Path Type - schema: - type: string - required: true - default: Prefix - - variable: integrations - label: Integrations - description: Connect ingress with other charts - schema: - additional_attrs: true - type: dict - attrs: - - variable: traefik - label: Traefik - description: Connect ingress with Traefik - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: true - - variable: allowCors - label: 'Allow Cross Origin Requests (advanced)' - schema: - type: boolean - default: false - show_if: [["enabled", "=", true]] - - variable: entrypoints - label: Entrypoints - schema: - type: list - default: ["websecure"] - show_if: [["enabled", "=", true]] - items: - - variable: entrypoint - label: Entrypoint - schema: - type: string - - variable: middlewares - label: Middlewares - schema: - type: list - default: [] - show_if: [["enabled", "=", true]] - items: - - variable: middleware - label: Middleware - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: name - schema: - type: string - default: "" - required: true - - variable: namespace - label: 'namespace (optional)' - schema: - type: string - default: "" - - variable: certManager - label: certManager - description: Connect ingress with certManager - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: enabled - schema: - type: boolean - default: false - - variable: certificateIssuer - label: certificateIssuer - description: defaults to chartname - schema: - type: string - default: "" - show_if: [["enabled", "=", true]] - - variable: advanced - label: Show Advanced Settings - description: Advanced settings are not covered by TrueCharts Support - schema: - type: boolean - default: false - - variable: ingressClassName - label: (Advanced/Optional) IngressClass Name - schema: - type: string - show_if: [["advanced", "=", true]] - default: "" - - variable: tls - label: TLS-Settings - schema: - type: list - show_if: [["advanced", "=", true]] - default: [] - items: - - variable: tlsEntry - label: Host - schema: - additional_attrs: true - type: dict - attrs: - - variable: hosts - label: Certificate Hosts - schema: - type: list - default: [] - items: - - variable: host - label: Host - schema: - type: string - default: "" - required: true - - - variable: certificateIssuer - label: Use Cert-Manager clusterIssuer - description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' - schema: - type: string - default: "" - - variable: clusterCertificate - label: 'Cluster Certificate (Advanced)' - description: 'Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.' - schema: - type: string - show_if: [["certificateIssuer", "=", ""]] - default: "" - - variable: secretName - label: 'Use Custom Certificate Secret (Advanced)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: string - default: "" - - variable: scaleCert - label: 'Use TrueNAS SCALE Certificate (Deprecated)' - schema: - show_if: [["certificateIssuer", "=", ""]] - type: int - $ref: - - "definitions/certificate" - - variable: envList - label: Codeserver Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: netshoot - label: Netshoot - schema: - additional_attrs: true - type: dict - attrs: - - variable: enabled - label: Enabled - schema: - type: boolean - default: false - show_subquestions_if: true - subquestions: - - variable: envList - label: Netshoot Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - - - variable: vpn - label: VPN - schema: - additional_attrs: true - type: dict - attrs: - - variable: type - label: Type - schema: - type: string - default: disabled - enum: - - value: disabled - description: disabled - - value: gluetun - description: Gluetun - - value: tailscale - description: Tailscale - - value: openvpn - description: OpenVPN (Deprecated) - - value: wireguard - description: Wireguard (Deprecated) - - variable: openvpn - label: OpenVPN Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "openvpn"]] - attrs: - - variable: username - label: Authentication Username (Optional) - description: Authentication Username, Optional - schema: - type: string - default: "" - - variable: password - label: Authentication Password - description: Authentication Credentials - schema: - type: string - show_if: [["username", "!=", ""]] - default: "" - required: true - - variable: tailscale - label: Tailscale Settings - schema: - additional_attrs: true - type: dict - show_if: [["type", "=", "tailscale"]] - attrs: - - variable: authkey - label: Authentication Key - description: Provide an auth key to automatically authenticate the node as your user account. - schema: - type: string - private: true - default: "" - - variable: auth_once - label: Auth Once - description: Only attempt to log in if not already logged in. - schema: - type: boolean - default: true - - variable: accept_dns - label: Accept DNS - description: Accept DNS configuration from the admin console. - schema: - type: boolean - default: false - - variable: userspace - label: Userspace - description: Userspace Networking mode allows running Tailscale where you do not have access to create a VPN tunnel device. - schema: - type: boolean - default: false - - variable: routes - label: Routes - description: Expose physical subnet routes to your entire Tailscale network. - schema: - type: string - default: "" - - variable: dest_ip - label: Destination IP - description: Tells the DNAT mechanism which Destination IP to set in the IP header, and where to send packets that are matched. - schema: - type: string - default: "" - - variable: sock5_server - label: Sock5 Server - description: The address on which to listen for SOCKS5 proxying into the tailscale net. - schema: - type: string - default: "" - - variable: outbound_http_proxy_listen - label: Outbound HTTP Proxy Listen - description: The address on which to listen for HTTP proxying into the tailscale net. - schema: - type: string - default: "" - - variable: extra_args - label: Extra Args - description: Extra Args - schema: - type: string - default: "" - - variable: daemon_extra_args - label: Tailscale Daemon Extra Args - description: Tailscale Daemon Extra Args - schema: - type: string - default: "" - - variable: killSwitch - label: Enable Killswitch - schema: - type: boolean - show_if: [["type", "!=", "disabled"]] - default: true - - variable: excludedNetworks_IPv4 - label: Killswitch Excluded IPv4 networks - description: List of Killswitch Excluded IPv4 Addresses - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv4 - label: IPv4 Network - schema: - type: string - required: true - - variable: excludedNetworks_IPv6 - label: Killswitch Excluded IPv6 networks - description: "List of Killswitch Excluded IPv6 Addresses" - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: networkv6 - label: IPv6 Network - schema: - type: string - required: true - - variable: configFile - label: VPN Config File Location - schema: - type: string - show_if: [["type", "!=", "disabled"]] - default: "" - - - variable: envList - label: VPN Environment Variables - schema: - type: list - show_if: [["type", "!=", "disabled"]] - default: [] - items: - - variable: envItem - label: Environment Variable - schema: - additional_attrs: true - type: dict - attrs: - - variable: name - label: Name - schema: - type: string - required: true - - variable: value - label: Value - schema: - type: string - required: true - max_length: 10240 - - - variable: docs - group: Documentation - label: Please read the documentation at https://truecharts.org - description: Please read the documentation at -
            https://truecharts.org - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDocs - label: I have checked the documentation - schema: - type: boolean - default: true - - variable: donateNag - group: Documentation - label: Please consider supporting TrueCharts, see https://truecharts.org/sponsor - description: Please consider supporting TrueCharts, see -
            https://truecharts.org/sponsor - schema: - additional_attrs: true - type: dict - attrs: - - variable: confirmDonate - label: I have considered donating - schema: - type: boolean - default: true - hidden: true - diff --git a/stable/sabnzbd/18.2.0/templates/NOTES.txt b/stable/sabnzbd/18.2.0/templates/NOTES.txt deleted file mode 100644 index efcb74cb77..0000000000 --- a/stable/sabnzbd/18.2.0/templates/NOTES.txt +++ /dev/null @@ -1 +0,0 @@ -{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/sabnzbd/18.2.0/templates/common.yaml b/stable/sabnzbd/18.2.0/templates/common.yaml deleted file mode 100644 index b51394e00a..0000000000 --- a/stable/sabnzbd/18.2.0/templates/common.yaml +++ /dev/null @@ -1 +0,0 @@ -{{ include "tc.v1.common.loader.all" . }} diff --git a/stable/sabnzbd/18.2.0/values.yaml b/stable/sabnzbd/18.2.0/values.yaml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/stable/sabnzbd/19.6.15/.helmignore b/stable/sabnzbd/19.6.15/.helmignore deleted file mode 100644 index 77ca5567b2..0000000000 --- a/stable/sabnzbd/19.6.15/.helmignore +++ /dev/null @@ -1,30 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ -# OWNERS file for Kubernetes -OWNERS -# helm-docs templates -*.gotmpl -# docs folder -/docs -# icon -icon.png diff --git a/stable/sabnzbd/19.6.15/CHANGELOG.md b/stable/sabnzbd/19.6.15/CHANGELOG.md deleted file mode 100644 index 941abb8a21..0000000000 --- a/stable/sabnzbd/19.6.15/CHANGELOG.md +++ /dev/null @@ -1,3 +0,0 @@ -*for the complete changelog, please refer to the website* - -**Important:** \ No newline at end of file diff --git a/stable/sabnzbd/19.6.15/Chart.yaml b/stable/sabnzbd/19.6.15/Chart.yaml deleted file mode 100644 index a8cb4e0e55..0000000000 --- a/stable/sabnzbd/19.6.15/Chart.yaml +++ /dev/null @@ -1,37 +0,0 @@ -annotations: - max_scale_version: 24.04.0 - min_scale_version: 23.10.0 - 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.2.3 -dependencies: - - name: common - version: 20.4.1 - 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://sabnzbd.org/ - - https://github.com/truecharts/charts/tree/master/charts/stable/sabnzbd - - https://ghcr.io/onedr0p/sabnzbd - - https://ghcr.io/onedr0p/exportarr -type: application -version: 19.6.15 diff --git a/stable/sabnzbd/19.6.15/README.md b/stable/sabnzbd/19.6.15/README.md deleted file mode 100644 index b67ff85e8a..0000000000 --- a/stable/sabnzbd/19.6.15/README.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -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/guides/scale-intro). - -## Configuration Options - -To view the chart specific options, please view Values.yaml included in the chart. - -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/ - -## 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 - -## 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/19.6.15/app-changelog.md b/stable/sabnzbd/19.6.15/app-changelog.md deleted file mode 100644 index 5e31e3247a..0000000000 --- a/stable/sabnzbd/19.6.15/app-changelog.md +++ /dev/null @@ -1,63 +0,0 @@ - - -## [sabnzbd-19.6.15](https://github.com/truecharts/charts/compare/sabnzbd-19.4.0...sabnzbd-19.6.15) (2024-04-23) - -### Chore - - - -- bump charts to ensure new icons are released - -- update groups html ([#21121](https://github.com/truecharts/charts/issues/21121)) - -- bump charts to release new docs to fix broken links - -- bump everything to regenerate readme's and site index - -- bump everything to release new doc pages - -- update container image common to v20.3.4[@d7e1b23](https://github.com/d7e1b23) by renovate ([#20527](https://github.com/truecharts/charts/issues/20527)) - -- update container image ghcr.io/onedr0p/exportarr to v2.0.1[@727e7bc](https://github.com/727e7bc) by renovate ([#20284](https://github.com/truecharts/charts/issues/20284)) - -- update container image ghcr.io/onedr0p/sabnzbd to 4.2.3[@da0b03d](https://github.com/da0b03d) by renovate ([#20769](https://github.com/truecharts/charts/issues/20769)) - -- update container image common to v20.3.6[@27edfed](https://github.com/27edfed) by renovate ([#20599](https://github.com/truecharts/charts/issues/20599)) - -- update container image common to v20.3.5[@aedd88a](https://github.com/aedd88a) by renovate ([#20535](https://github.com/truecharts/charts/issues/20535)) - -- update container image common to v20.3.11[@dae6129](https://github.com/dae6129) by renovate ([#20875](https://github.com/truecharts/charts/issues/20875)) - -- update container image common to v20.3.3[@3876ba5](https://github.com/3876ba5) by renovate ([#20478](https://github.com/truecharts/charts/issues/20478)) - -- update container image ghcr.io/onedr0p/sabnzbd to 4.2.3[@bb20d39](https://github.com/bb20d39) by renovate ([#20429](https://github.com/truecharts/charts/issues/20429)) - -- update container image common to v20.3.2[@0722ebb](https://github.com/0722ebb) by renovate ([#20334](https://github.com/truecharts/charts/issues/20334)) - -- update container image common to v20.3.7[@8cf9fc9](https://github.com/8cf9fc9) by renovate ([#20819](https://github.com/truecharts/charts/issues/20819)) - -- update container image common to v20.2.10[@6f99c97](https://github.com/6f99c97) by renovate ([#19876](https://github.com/truecharts/charts/issues/19876)) - -- update container image common to v20.2.9[@10fd6c5](https://github.com/10fd6c5) by renovate ([#19817](https://github.com/truecharts/charts/issues/19817)) - -- update container image common to v20.2.4[@f245f5c](https://github.com/f245f5c) by renovate ([#19731](https://github.com/truecharts/charts/issues/19731)) - -- update container image common to v20.2.3[@06e462e](https://github.com/06e462e) by renovate ([#19673](https://github.com/truecharts/charts/issues/19673)) - -- update container image common to v20.2.2[@f7d0b92](https://github.com/f7d0b92) by renovate ([#19432](https://github.com/truecharts/charts/issues/19432)) - -- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) - -- update container image ghcr.io/onedr0p/sabnzbd to 4.2.3[@fa8ddea](https://github.com/fa8ddea) by renovate ([#19259](https://github.com/truecharts/charts/issues/19259)) - -### Chore - - - -- rework SCALE catagories/groups to match helm and remove deprecated charts ([#21111](https://github.com/truecharts/charts/issues/21111)) - -### Fix - - - -- replace serviceexpert with externalinterfaces/networking-group in the SCALE GUI ([#21154](https://github.com/truecharts/charts/issues/21154)) \ No newline at end of file diff --git a/stable/sabnzbd/19.6.15/app-readme.md b/stable/sabnzbd/19.6.15/app-readme.md deleted file mode 100644 index 04be527cd6..0000000000 --- a/stable/sabnzbd/19.6.15/app-readme.md +++ /dev/null @@ -1,8 +0,0 @@ -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/19.6.15/charts/common-20.3.11.tgz b/stable/sabnzbd/19.6.15/charts/common-20.3.11.tgz deleted file mode 100644 index 010f5b5a245d342f6f0d2e0ef95338a45ead19b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99404 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%0AZSzDiWTe))Y`J0OOCXlO`z1O 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 P00960fC|;b09p(Hd4E&t diff --git a/stable/sabnzbd/19.6.15/icon-small.webp b/stable/sabnzbd/19.6.15/icon-small.webp deleted file mode 100644 index b8488d587d1287fd21ad1b3b6f45d2b851595f13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 720 zcmV;>0x$hiNk&G<0ssJ4MM6+kP&il$0000G0000V0018V06|PpNTL7$00DqwZQJqa z4O-jkxPVlyQe^|_y$dJXvCR#nvMXC-eB&u2f@s<%byK?oo^y?+v)SyueQ1R@s^24( zdrJdN{=W$SR1-}B{}hD!Po2;l`%k&s_aCgKS$)i04W|7^Y>WWr(?{&o0KWSVW&a7h zALjTl&zH}ZyVtG=2QEeckg8rLV_h|Dj)zL00ICsC9nc?85(sd+_2~y!U?3?p|hu?BP?5cH{|eZ?RbX_x0J?&|sN^ zu+;qMb>gPkdD&*lkc3xEGx*Q$;x}@P}tHXhY-|3@76yvf@ zZU6D;F-Py-Fcg))ub9;(TI+r!RJPJV|A_ECFZ^a-dGNp4JB|FscEVw3x|L(ogyb}f z8Z2>S7N-y$WZ1b3?ED@(&I~8KCsn0AlJPt;vRoI?*nPjZLQ)4xNIa-~a$N CqG%@o diff --git a/stable/sabnzbd/19.6.15/icon.webp b/stable/sabnzbd/19.6.15/icon.webp deleted file mode 100644 index 27476e86f9c5cc9457f30449083445e10f55bfc4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1960 zcmV;Z2Uqw~Nk&GX2LJ$9MM6+kP&il$0000G0001$005N$06|PpNEQPC00EFjZQI#M zZ_^ZG+xFVFZQHi_%eHOXwrzWNY_|EbjJDsq-i?R}02%eg`^{dv&SbBh-6fwMzCqS) z)X7)T@g_X_#qm*Ytl}7tk=N3A6Q6der-S0GE8NWBO@8vx{CcJN_D?6K&luOtS!ofI za(D`6_wxSlzyJRGg@Iuu%r%t`ef(GnnXj-`UJ_PbVW2_IutHuETCtyLiwxU-Ou|dA z2@SXhXOD?Lx~^XVEoiFFy_3zOGUeK|(h#)r9goiEGwr&*;1PPi%To86$Da zHzZ)>{ghr$IeZxIHuu_}f({b1(Mw(Hun`*>n~SQ!vGqYCE;6>(w*mmKPN$6o4_wBM zCa&{(FWydZzGqI3*rm-D-m9gx7*@y$l}F*_&aAL12aGsKm|`WY#aSMQ=?mS2wY`9ocK>YG>KslQp2A6)T{$Rm zofd-m6xqCrj~2fD zN~>duT;$!n!a(0@+p>r}By({Ips;<7ty!{=lw~C?Xv8?z*d8YX_hw}UJD@USTW@c? zbniA)wr1!ADqXvSDN-eFYp7EJwRO!-5NXJcS~{S(%BjUIgB01v>p7@s28?Iht7+mA zk2Z2+fbNXr!1JkM;t#a4V}SN*m!TIkgk>CQr&9p}UHaV?cDu6@8gJ@vEH^Mib}fJaTp@FUNoqn{rcT-3MKD|RO z9hgd1P&goD1ONcgApo5LDwY7206u{*lt-l^q9HYZc{rdD2~FFp__I)NpDo36z%aRd zdw2he=OyVo<^%RS_5EqBxdU%U)rNMiLoK{c%^o^jYiKW^RGkLz zZk2W7`6x0i2c&yKdQ6WtJ!sli044;#9~~!TOb4G-MMFft_QvJEn12$vQg16@E;_)7 z8P(4{j!$+DCal{*-RjPBQCzxcfRETkJb9B+%$NZF`XC-~)m_B8Hzgp6uVGdJ*Q{@U z@M;Tr;b%^k-%)G;5tIUwIWiIOcIA+fYoUn!b}$TN1v5@Quxfrk`Pn~Lqcvm8J)lh` z0~1W^=xSx{?+k=>KfwXP{a=NaeLC1xM2}=d@o0?UB}_$1L|i>ih7h44sA?{=WqWvt zu_?xi8b?iww7L$X?U`5 zRP0r*tN<84V}S+x!^TX?49B)#5Wgp+BL`vZaP~@jG7*}$ahfhRLI!3FpggM`sVKw| zt*^iGzDqDy=nnRII2Vwh@n*U(?!#_WYw0I(>!~Q=@MsR7ZR+&{IB?0y4cL;Td!{Y> z`TgnNGV@%S30Y0P!?DSTFvR#@(6UAAjx!to9fM9D1Crto?|7yVM(z?_P7e#xfJWfe z6R?;%L|En};gedm5{Fh6`}N+Q14RjhUy-9%&gu1-P?mXj5=MFudyJoBP~<3KW3l## zr4QDrXF6BVJ@9a+6?u7y<2f}s<(Ry*4=m^vx$v7w(gzZo?Yz6!-)Ec*C#({7DQ1AEz-UDYnT56g8aQ@rj6dfFrB-Pc2>bu#yi<*KL*^KSnT&XlS zjBn?)!d2mh?u%9Wr(2=TBq=MOe*aN@}^8*`e4BQQ}P9~S5N zqj{{cFg5}T$a5-O)B1>_am+iuMGfqmLtDS&qw`zLp#$9luQC67*Uc$*R~z4+aI4$t z-U3}NupYkvFG=Em_J2AXL_2Ex)6m%0ew?-wd-Vg%;T4@fnhUAIXX@8L_D}GIfd5r>`EGqu*EKhh)QLs@kAlpf|j38kCH!r$TuX7V?3Km&gO0000TsK)XD diff --git a/stable/sabnzbd/19.6.15/ix_values.yaml b/stable/sabnzbd/19.6.15/ix_values.yaml deleted file mode 100644 index 231a844e98..0000000000 --- a/stable/sabnzbd/19.6.15/ix_values.yaml +++ /dev/null @@ -1,89 +0,0 @@ -image: - repository: ghcr.io/onedr0p/sabnzbd - pullPolicy: IfNotPresent - tag: 4.3.3@sha256:86c645db93affcbf01cc2bce2560082bfde791009e1506dba68269b9c50bc341 -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/19.6.15/questions.yaml b/stable/sabnzbd/19.6.15/questions.yaml deleted file mode 100755 index 56f7f38af2..0000000000 --- a/stable/sabnzbd/19.6.15/questions.yaml +++ /dev/null @@ -1,3004 +0,0 @@ -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: 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: 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: 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/19.6.15/templates/NOTES.txt b/stable/sabnzbd/19.6.15/templates/NOTES.txt deleted file mode 100644 index efcb74cb77..0000000000 --- a/stable/sabnzbd/19.6.15/templates/NOTES.txt +++ /dev/null @@ -1 +0,0 @@ -{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/sabnzbd/19.6.15/templates/common.yaml b/stable/sabnzbd/19.6.15/templates/common.yaml deleted file mode 100644 index b51394e00a..0000000000 --- a/stable/sabnzbd/19.6.15/templates/common.yaml +++ /dev/null @@ -1 +0,0 @@ -{{ include "tc.v1.common.loader.all" . }} diff --git a/stable/sabnzbd/19.6.15/values.yaml b/stable/sabnzbd/19.6.15/values.yaml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/stable/sabnzbd/19.6.16/.helmignore b/stable/sabnzbd/19.6.16/.helmignore deleted file mode 100644 index 77ca5567b2..0000000000 --- a/stable/sabnzbd/19.6.16/.helmignore +++ /dev/null @@ -1,30 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ -# OWNERS file for Kubernetes -OWNERS -# helm-docs templates -*.gotmpl -# docs folder -/docs -# icon -icon.png diff --git a/stable/sabnzbd/19.6.16/CHANGELOG.md b/stable/sabnzbd/19.6.16/CHANGELOG.md deleted file mode 100644 index 941abb8a21..0000000000 --- a/stable/sabnzbd/19.6.16/CHANGELOG.md +++ /dev/null @@ -1,3 +0,0 @@ -*for the complete changelog, please refer to the website* - -**Important:** \ No newline at end of file diff --git a/stable/sabnzbd/19.6.16/Chart.yaml b/stable/sabnzbd/19.6.16/Chart.yaml deleted file mode 100644 index bc73f7e15f..0000000000 --- a/stable/sabnzbd/19.6.16/Chart.yaml +++ /dev/null @@ -1,37 +0,0 @@ -annotations: - max_scale_version: 24.04.0 - min_scale_version: 23.10.0 - 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.2.3 -dependencies: - - name: common - version: 20.4.1 - 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://sabnzbd.org/ - - https://github.com/truecharts/charts/tree/master/charts/stable/sabnzbd - - https://ghcr.io/onedr0p/sabnzbd - - https://ghcr.io/onedr0p/exportarr -type: application -version: 19.6.16 diff --git a/stable/sabnzbd/19.6.16/README.md b/stable/sabnzbd/19.6.16/README.md deleted file mode 100644 index b67ff85e8a..0000000000 --- a/stable/sabnzbd/19.6.16/README.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -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/guides/scale-intro). - -## Configuration Options - -To view the chart specific options, please view Values.yaml included in the chart. - -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/ - -## 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 - -## 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/19.6.16/app-changelog.md b/stable/sabnzbd/19.6.16/app-changelog.md deleted file mode 100644 index f6b3541af7..0000000000 --- a/stable/sabnzbd/19.6.16/app-changelog.md +++ /dev/null @@ -1,65 +0,0 @@ - - -## [sabnzbd-19.6.16](https://github.com/truecharts/charts/compare/sabnzbd-19.4.0...sabnzbd-19.6.16) (2024-04-26) - -### Chore - - - -- bump charts to ensure new icons are released - -- bump everything to release new doc pages - -- update groups html ([#21121](https://github.com/truecharts/charts/issues/21121)) - -- bump charts to release new docs to fix broken links - -- bump everything to regenerate readme's and site index - -- update container image common to v20.3.5[@aedd88a](https://github.com/aedd88a) by renovate ([#20535](https://github.com/truecharts/charts/issues/20535)) - -- update container image common to v20.3.2[@0722ebb](https://github.com/0722ebb) by renovate ([#20334](https://github.com/truecharts/charts/issues/20334)) - -- update container image common to v20.3.7[@8cf9fc9](https://github.com/8cf9fc9) by renovate ([#20819](https://github.com/truecharts/charts/issues/20819)) - -- update container image ghcr.io/onedr0p/sabnzbd to 4.2.3[@da0b03d](https://github.com/da0b03d) by renovate ([#20769](https://github.com/truecharts/charts/issues/20769)) - -- update container image common to v20.3.6[@27edfed](https://github.com/27edfed) by renovate ([#20599](https://github.com/truecharts/charts/issues/20599)) - -- update container image common to v20.3.12[@3303278](https://github.com/3303278) by renovate ([#21384](https://github.com/truecharts/charts/issues/21384)) - -- update container image common to v20.3.4[@d7e1b23](https://github.com/d7e1b23) by renovate ([#20527](https://github.com/truecharts/charts/issues/20527)) - -- update container image common to v20.3.3[@3876ba5](https://github.com/3876ba5) by renovate ([#20478](https://github.com/truecharts/charts/issues/20478)) - -- update container image ghcr.io/onedr0p/sabnzbd to 4.2.3[@bb20d39](https://github.com/bb20d39) by renovate ([#20429](https://github.com/truecharts/charts/issues/20429)) - -- update container image common to v20.3.11[@dae6129](https://github.com/dae6129) by renovate ([#20875](https://github.com/truecharts/charts/issues/20875)) - -- update container image ghcr.io/onedr0p/exportarr to v2.0.1[@727e7bc](https://github.com/727e7bc) by renovate ([#20284](https://github.com/truecharts/charts/issues/20284)) - -- update container image common to v20.2.10[@6f99c97](https://github.com/6f99c97) by renovate ([#19876](https://github.com/truecharts/charts/issues/19876)) - -- update container image common to v20.2.9[@10fd6c5](https://github.com/10fd6c5) by renovate ([#19817](https://github.com/truecharts/charts/issues/19817)) - -- update container image common to v20.2.4[@f245f5c](https://github.com/f245f5c) by renovate ([#19731](https://github.com/truecharts/charts/issues/19731)) - -- update container image common to v20.2.3[@06e462e](https://github.com/06e462e) by renovate ([#19673](https://github.com/truecharts/charts/issues/19673)) - -- update container image common to v20.2.2[@f7d0b92](https://github.com/f7d0b92) by renovate ([#19432](https://github.com/truecharts/charts/issues/19432)) - -- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) - -- update container image ghcr.io/onedr0p/sabnzbd to 4.2.3[@fa8ddea](https://github.com/fa8ddea) by renovate ([#19259](https://github.com/truecharts/charts/issues/19259)) - -### Chore - - - -- rework SCALE catagories/groups to match helm and remove deprecated charts ([#21111](https://github.com/truecharts/charts/issues/21111)) - -### Fix - - - -- replace serviceexpert with externalinterfaces/networking-group in the SCALE GUI ([#21154](https://github.com/truecharts/charts/issues/21154)) \ No newline at end of file diff --git a/stable/sabnzbd/19.6.16/app-readme.md b/stable/sabnzbd/19.6.16/app-readme.md deleted file mode 100644 index 04be527cd6..0000000000 --- a/stable/sabnzbd/19.6.16/app-readme.md +++ /dev/null @@ -1,8 +0,0 @@ -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/19.6.16/charts/common-20.3.12.tgz b/stable/sabnzbd/19.6.16/charts/common-20.3.12.tgz deleted file mode 100644 index 621bd9e5a5277eda78f0f106b46b6afdc6f56acd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99407 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
              iZ#x$K}*@0J4scA@_XsWr>MiG1UB+r_n|MJ)K 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 S{{H{~0RR7!&lutWS_}Y48_RhB diff --git a/stable/sabnzbd/19.6.16/icon-small.webp b/stable/sabnzbd/19.6.16/icon-small.webp deleted file mode 100644 index b8488d587d1287fd21ad1b3b6f45d2b851595f13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 720 zcmV;>0x$hiNk&G<0ssJ4MM6+kP&il$0000G0000V0018V06|PpNTL7$00DqwZQJqa z4O-jkxPVlyQe^|_y$dJXvCR#nvMXC-eB&u2f@s<%byK?oo^y?+v)SyueQ1R@s^24( zdrJdN{=W$SR1-}B{}hD!Po2;l`%k&s_aCgKS$)i04W|7^Y>WWr(?{&o0KWSVW&a7h zALjTl&zH}ZyVtG=2QEeckg8rLV_h|Dj)zL00ICsC9nc?85(sd+_2~y!U?3?p|hu?BP?5cH{|eZ?RbX_x0J?&|sN^ zu+;qMb>gPkdD&*lkc3xEGx*Q$;x}@P}tHXhY-|3@76yvf@ zZU6D;F-Py-Fcg))ub9;(TI+r!RJPJV|A_ECFZ^a-dGNp4JB|FscEVw3x|L(ogyb}f z8Z2>S7N-y$WZ1b3?ED@(&I~8KCsn0AlJPt;vRoI?*nPjZLQ)4xNIa-~a$N CqG%@o diff --git a/stable/sabnzbd/19.6.16/icon.webp b/stable/sabnzbd/19.6.16/icon.webp deleted file mode 100644 index 27476e86f9c5cc9457f30449083445e10f55bfc4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1960 zcmV;Z2Uqw~Nk&GX2LJ$9MM6+kP&il$0000G0001$005N$06|PpNEQPC00EFjZQI#M zZ_^ZG+xFVFZQHi_%eHOXwrzWNY_|EbjJDsq-i?R}02%eg`^{dv&SbBh-6fwMzCqS) z)X7)T@g_X_#qm*Ytl}7tk=N3A6Q6der-S0GE8NWBO@8vx{CcJN_D?6K&luOtS!ofI za(D`6_wxSlzyJRGg@Iuu%r%t`ef(GnnXj-`UJ_PbVW2_IutHuETCtyLiwxU-Ou|dA z2@SXhXOD?Lx~^XVEoiFFy_3zOGUeK|(h#)r9goiEGwr&*;1PPi%To86$Da zHzZ)>{ghr$IeZxIHuu_}f({b1(Mw(Hun`*>n~SQ!vGqYCE;6>(w*mmKPN$6o4_wBM zCa&{(FWydZzGqI3*rm-D-m9gx7*@y$l}F*_&aAL12aGsKm|`WY#aSMQ=?mS2wY`9ocK>YG>KslQp2A6)T{$Rm zofd-m6xqCrj~2fD zN~>duT;$!n!a(0@+p>r}By({Ips;<7ty!{=lw~C?Xv8?z*d8YX_hw}UJD@USTW@c? zbniA)wr1!ADqXvSDN-eFYp7EJwRO!-5NXJcS~{S(%BjUIgB01v>p7@s28?Iht7+mA zk2Z2+fbNXr!1JkM;t#a4V}SN*m!TIkgk>CQr&9p}UHaV?cDu6@8gJ@vEH^Mib}fJaTp@FUNoqn{rcT-3MKD|RO z9hgd1P&goD1ONcgApo5LDwY7206u{*lt-l^q9HYZc{rdD2~FFp__I)NpDo36z%aRd zdw2he=OyVo<^%RS_5EqBxdU%U)rNMiLoK{c%^o^jYiKW^RGkLz zZk2W7`6x0i2c&yKdQ6WtJ!sli044;#9~~!TOb4G-MMFft_QvJEn12$vQg16@E;_)7 z8P(4{j!$+DCal{*-RjPBQCzxcfRETkJb9B+%$NZF`XC-~)m_B8Hzgp6uVGdJ*Q{@U z@M;Tr;b%^k-%)G;5tIUwIWiIOcIA+fYoUn!b}$TN1v5@Quxfrk`Pn~Lqcvm8J)lh` z0~1W^=xSx{?+k=>KfwXP{a=NaeLC1xM2}=d@o0?UB}_$1L|i>ih7h44sA?{=WqWvt zu_?xi8b?iww7L$X?U`5 zRP0r*tN<84V}S+x!^TX?49B)#5Wgp+BL`vZaP~@jG7*}$ahfhRLI!3FpggM`sVKw| zt*^iGzDqDy=nnRII2Vwh@n*U(?!#_WYw0I(>!~Q=@MsR7ZR+&{IB?0y4cL;Td!{Y> z`TgnNGV@%S30Y0P!?DSTFvR#@(6UAAjx!to9fM9D1Crto?|7yVM(z?_P7e#xfJWfe z6R?;%L|En};gedm5{Fh6`}N+Q14RjhUy-9%&gu1-P?mXj5=MFudyJoBP~<3KW3l## zr4QDrXF6BVJ@9a+6?u7y<2f}s<(Ry*4=m^vx$v7w(gzZo?Yz6!-)Ec*C#({7DQ1AEz-UDYnT56g8aQ@rj6dfFrB-Pc2>bu#yi<*KL*^KSnT&XlS zjBn?)!d2mh?u%9Wr(2=TBq=MOe*aN@}^8*`e4BQQ}P9~S5N zqj{{cFg5}T$a5-O)B1>_am+iuMGfqmLtDS&qw`zLp#$9luQC67*Uc$*R~z4+aI4$t z-U3}NupYkvFG=Em_J2AXL_2Ex)6m%0ew?-wd-Vg%;T4@fnhUAIXX@8L_D}GIfd5r>`EGqu*EKhh)QLs@kAlpf|j38kCH!r$TuX7V?3Km&gO0000TsK)XD diff --git a/stable/sabnzbd/19.6.16/ix_values.yaml b/stable/sabnzbd/19.6.16/ix_values.yaml deleted file mode 100644 index 231a844e98..0000000000 --- a/stable/sabnzbd/19.6.16/ix_values.yaml +++ /dev/null @@ -1,89 +0,0 @@ -image: - repository: ghcr.io/onedr0p/sabnzbd - pullPolicy: IfNotPresent - tag: 4.3.3@sha256:86c645db93affcbf01cc2bce2560082bfde791009e1506dba68269b9c50bc341 -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/19.6.16/questions.yaml b/stable/sabnzbd/19.6.16/questions.yaml deleted file mode 100755 index 56f7f38af2..0000000000 --- a/stable/sabnzbd/19.6.16/questions.yaml +++ /dev/null @@ -1,3004 +0,0 @@ -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: 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: 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: 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/19.6.16/templates/NOTES.txt b/stable/sabnzbd/19.6.16/templates/NOTES.txt deleted file mode 100644 index efcb74cb77..0000000000 --- a/stable/sabnzbd/19.6.16/templates/NOTES.txt +++ /dev/null @@ -1 +0,0 @@ -{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/sabnzbd/19.6.16/templates/common.yaml b/stable/sabnzbd/19.6.16/templates/common.yaml deleted file mode 100644 index b51394e00a..0000000000 --- a/stable/sabnzbd/19.6.16/templates/common.yaml +++ /dev/null @@ -1 +0,0 @@ -{{ include "tc.v1.common.loader.all" . }} diff --git a/stable/sabnzbd/19.6.16/values.yaml b/stable/sabnzbd/19.6.16/values.yaml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/stable/sabnzbd/app_versions.json b/stable/sabnzbd/app_versions.json index b3e80b7e74..37e78cbeff 100644 --- a/stable/sabnzbd/app_versions.json +++ b/stable/sabnzbd/app_versions.json @@ -3,13 +3,13 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/sabnzbd/20.1.5", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/stable/sabnzbd/20.1.5", + "last_update": "2024-11-14 00:29:43", "required_features": [ - "definitions/timezone", - "normalize/interfaceConfiguration", "definitions/certificate", - "definitions/interface" + "normalize/interfaceConfiguration", + "definitions/interface", + "definitions/timezone" ], "human_version": "4.3.1_20.1.5", "version": "20.1.5", @@ -25,7 +25,7 @@ "dependencies": [ { "name": "common", - "version": "23.0.10", + "version": "23.0.11", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -5341,13 +5341,13 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/sabnzbd/20.1.4", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/stable/sabnzbd/20.1.4", + "last_update": "2024-11-14 00:29:43", "required_features": [ - "definitions/timezone", - "normalize/interfaceConfiguration", "definitions/certificate", - "definitions/interface" + "normalize/interfaceConfiguration", + "definitions/interface", + "definitions/timezone" ], "human_version": "4.3.1_20.1.4", "version": "20.1.4", @@ -5363,7 +5363,7 @@ "dependencies": [ { "name": "common", - "version": "23.0.9", + "version": "23.0.11", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -10674,30145 +10674,5 @@ "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:

              " - }, - "19.6.16": { - "healthy": true, - "supported": true, - "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/sabnzbd/19.6.16", - "last_update": "2024-05-29 12:35:14", - "required_features": [ - "definitions/timezone", - "normalize/interfaceConfiguration", - "definitions/certificate", - "definitions/interface" - ], - "human_version": "4.2.3_19.6.16", - "version": "19.6.16", - "chart_metadata": { - "annotations": { - "max_scale_version": "24.04.0", - "min_scale_version": "23.10.0", - "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.2.3", - "dependencies": [ - { - "name": "common", - "version": "20.3.12", - "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://sabnzbd.org/", - "https://github.com/truecharts/charts/tree/master/charts/stable/sabnzbd", - "https://ghcr.io/onedr0p/sabnzbd", - "https://ghcr.io/onedr0p/exportarr" - ], - "type": "application", - "version": "19.6.16" - }, - "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": "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": "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": "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

              Configuration Options

              \n

              To view the chart specific options, please view Values.yaml included in the chart.

              \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

              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

              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:

              " - }, - "19.6.15": { - "healthy": true, - "supported": true, - "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/sabnzbd/19.6.15", - "last_update": "2024-05-29 12:35:14", - "required_features": [ - "definitions/timezone", - "normalize/interfaceConfiguration", - "definitions/certificate", - "definitions/interface" - ], - "human_version": "4.2.3_19.6.15", - "version": "19.6.15", - "chart_metadata": { - "annotations": { - "max_scale_version": "24.04.0", - "min_scale_version": "23.10.0", - "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.2.3", - "dependencies": [ - { - "name": "common", - "version": "20.3.11", - "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://sabnzbd.org/", - "https://github.com/truecharts/charts/tree/master/charts/stable/sabnzbd", - "https://ghcr.io/onedr0p/sabnzbd", - "https://ghcr.io/onedr0p/exportarr" - ], - "type": "application", - "version": "19.6.15" - }, - "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": "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": "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": "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

              Configuration Options

              \n

              To view the chart specific options, please view Values.yaml included in the chart.

              \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

              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

              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:

              " - }, - "18.2.0": { - "healthy": true, - "supported": true, - "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/sabnzbd/18.2.0", - "last_update": "2024-05-29 12:35:14", - "required_features": [ - "definitions/timezone", - "normalize/interfaceConfiguration", - "definitions/certificate", - "definitions/interface" - ], - "human_version": "4.2.2_18.2.0", - "version": "18.2.0", - "chart_metadata": { - "annotations": { - "max_scale_version": "24.04.0", - "min_scale_version": "23.10.0", - "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.2.2", - "dependencies": [ - { - "name": "common", - "version": "18.1.2", - "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.png", - "keywords": [ - "sabnzbd", - "usenet" - ], - "kubeVersion": ">=1.24.0-0", - "maintainers": [ - { - "name": "TrueCharts", - "email": "info@truecharts.org", - "url": "https://truecharts.org" - } - ], - "name": "sabnzbd", - "sources": [ - "https://sabnzbd.org/", - "https://github.com/truecharts/charts/tree/master/charts/stable/sabnzbd", - "https://ghcr.io/onedr0p/sabnzbd", - "https://ghcr.io/onedr0p/exportarr" - ], - "type": "application", - "version": "18.2.0" - }, - "app_metadata": null, - "schema": { - "groups": [ - { - "name": "Container Image", - "description": "Image to be used for container" - }, - { - "name": "General Settings", - "description": "General Deployment Settings" - }, - { - "name": "Workload Settings", - "description": "Workload Settings" - }, - { - "name": "App Configuration", - "description": "App Specific Config Options" - }, - { - "name": "Networking and Services", - "description": "Configure Network and Services for Container" - }, - { - "name": "Storage and Persistence", - "description": "Persist and Share Data that is Separate from the Container" - }, - { - "name": "Ingress", - "description": "Ingress Configuration" - }, - { - "name": "Security and Permissions", - "description": "Configure Security Context and Permissions" - }, - { - "name": "Resources and Devices", - "description": "Specify Resources/Devices to be Allocated to Workload" - }, - { - "name": "Middlewares", - "description": "Traefik Middlewares" - }, - { - "name": "Metrics", - "description": "Metrics" - }, - { - "name": "Addons", - "description": "Addon Configuration" - }, - { - "name": "Backup Configuration", - "description": "Configure Velero Backup Schedule" - }, - { - "name": "Advanced", - "description": "Advanced Configuration" - }, - { - "name": "Postgresql", - "description": "Postgresql" - }, - { - "name": "Documentation", - "description": "Documentation" - } - ], - "portals": { - "open": { - "protocols": [ - "$kubernetes-resource_configmap_tcportal-open_protocol" - ], - "host": [ - "$kubernetes-resource_configmap_tcportal-open_host" - ], - "ports": [ - "$kubernetes-resource_configmap_tcportal-open_port" - ] - } - }, - "questions": [ - { - "variable": "global", - "group": "General Settings", - "label": "Global Settings", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "stopAll", - "label": "Stop All", - "description": "Stops All Running pods and hibernates cnpg", - "schema": { - "type": "boolean", - "default": false - } - } - ] - } - }, - { - "variable": "workload", - "group": "Workload Settings", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Type (Advanced)", - "schema": { - "type": "string", - "default": "Deployment", - "enum": [ - { - "value": "Deployment", - "description": "Deployment" - }, - { - "value": "DaemonSet", - "description": "DaemonSet" - } - ] - } - }, - { - "variable": "replicas", - "label": "Replicas (Advanced)", - "description": "Set the number of Replicas", - "schema": { - "type": "int", - "show_if": [ - [ - "type", - "!=", - "DaemonSet" - ] - ], - "default": 1 - } - }, - { - "variable": "podSpec", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "containers", - "label": "Containers", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "Main Container", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "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 Settings", - "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 Settings", - "label": "Global Pod Options (Advanced)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "expertPodOpts", - "label": "Expert - Pod Options", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hostNetwork", - "label": "Host Networking", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "dnsConfig", - "label": "DNS Configuration", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "options", - "label": "Options", - "schema": { - "type": "list", - "default": [ - { - "name": "ndots", - "value": "1" - } - ], - "items": [ - { - "variable": "optionsEntry", - "label": "Option Entry", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true - } - }, - { - "variable": "value", - "label": "Value", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "nameservers", - "label": "Nameservers", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "nsEntry", - "label": "Nameserver Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - }, - { - "variable": "searches", - "label": "Searches", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "searchEntry", - "label": "Search Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "imagePullSecretList", - "group": "General Settings", - "label": "Image Pull Secrets", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "pullsecretentry", - "label": "Pull Secret", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "data", - "label": "Data", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "registry", - "label": "Registry", - "schema": { - "type": "string", - "required": true, - "default": "https://index.docker.io/v1/" - } - }, - { - "variable": "username", - "label": "Username", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "password", - "label": "Password", - "schema": { - "type": "string", - "required": true, - "private": true, - "default": "" - } - }, - { - "variable": "email", - "label": "Email", - "schema": { - "type": "string", - "required": true, - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "service", - "group": "Networking and Services", - "label": "Configure Service(s)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "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": "serviceexpert", - "group": "Networking and Services", - "label": "Show Expert Config", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "scaleExternalInterface", - "description": "Add External Interfaces", - "label": "Add external Interfaces", - "group": "Networking", - "schema": { - "type": "list", - "items": [ - { - "variable": "interfaceConfiguration", - "description": "Interface Configuration", - "label": "Interface Configuration", - "schema": { - "additional_attrs": true, - "type": "dict", - "$ref": [ - "normalize/interfaceConfiguration" - ], - "attrs": [ - { - "variable": "hostInterface", - "description": "Please Specify Host Interface", - "label": "Host Interface", - "schema": { - "type": "string", - "required": true, - "$ref": [ - "definitions/interface" - ], - "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": "Networking and Services", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "serviceListEntry", - "label": "Custom Service", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the service", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "LoadBalancer", - "description": "LoadBalancer (Expose Ports)" - }, - { - "value": "ClusterIP", - "description": "ClusterIP (Do Not Expose Ports)" - }, - { - "value": "Simple", - "description": "Deprecated CHANGE THIS" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "advancedsvcset", - "label": "Show Advanced Service Settings", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "externalIPs", - "label": "External IP's", - "description": "External IP's", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "externalIP", - "label": "External IP", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "ipFamilyPolicy", - "label": "IP Family Policy", - "description": "Specify the IP Policy", - "schema": { - "type": "string", - "default": "SingleStack", - "enum": [ - { - "value": "SingleStack", - "description": "SingleStack" - }, - { - "value": "PreferDualStack", - "description": "PreferDualStack" - }, - { - "value": "RequireDualStack", - "description": "RequireDualStack" - } - ] - } - }, - { - "variable": "ipFamilies", - "label": "IP Families", - "description": "(Advanced) The IP Families that should be used", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ipFamily", - "label": "IP Family", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "portsList", - "label": "Additional Service Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsListEntry", - "label": "Custom ports", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Port", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Port Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "protocol", - "label": "Port Type", - "schema": { - "type": "string", - "default": "tcp", - "enum": [ - { - "value": "http", - "description": "HTTP" - }, - { - "value": "https", - "description": "HTTPS" - }, - { - "value": "tcp", - "description": "TCP" - }, - { - "value": "udp", - "description": "UDP" - } - ] - } - }, - { - "variable": "targetPort", - "label": "Target Port", - "description": "This port exposes the container port on the service", - "schema": { - "type": "int", - "required": true - } - }, - { - "variable": "port", - "label": "Container Port", - "schema": { - "type": "int", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "persistence", - "label": "Integrated Persistent Storage", - "description": "Integrated Persistent Storage", - "group": "Storage and 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": "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": "Storage and Persistence", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "persistenceListEntry", - "label": "Custom Storage", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the storage", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "type", - "label": "Type of Storage", - "description": "Sets the persistence type, Anything other than PVC could break rollback!", - "schema": { - "type": "string", - "default": "hostPath", - "enum": [ - { - "value": "pvc", - "description": "PVC" - }, - { - "value": "hostPath", - "description": "Host Path" - }, - { - "value": "emptyDir", - "description": "emptyDir" - }, - { - "value": "nfs", - "description": "NFS Share" - } - ] - } - }, - { - "variable": "server", - "label": "NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "path", - "label": "Path on NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "iscsi", - "label": "iSCSI Options", - "schema": { - "show_if": [ - [ - "type", - "=", - "iscsi" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "targetPortal", - "label": "targetPortal", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "iqn", - "label": "iqn", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "lun", - "label": "lun", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "authSession", - "label": "authSession", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - }, - { - "variable": "authDiscovery", - "label": "authDiscovery", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - }, - { - "variable": "autoPermissions", - "label": "Automatic Permissions Configuration", - "description": "Automatically set permissions", - "schema": { - "show_if": [ - [ - "type", - "!=", - "pvc" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "chown", - "label": "Run CHOWN", - "description": "It will run CHOWN on the path with the given fsGroup\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": "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": "Security and Permissions", - "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 and Devices", - "label": "Resource Limits", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "limits", - "label": "Advanced Limit Resource Consumption", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "4000m", - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "8Gi", - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - }, - { - "variable": "gpu.intel.com/i915", - "label": "Add Intel i915 GPUs", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "nvidia.com/gpu", - "label": "Add NVIDIA GPUs (Experimental)", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "amd.com/gpu", - "label": "Add AMD GPUs", - "schema": { - "type": "int", - "default": 0 - } - } - ] - } - }, - { - "variable": "requests", - "label": "Minimum Resources Required (request)", - "schema": { - "additional_attrs": true, - "type": "dict", - "hidden": true, - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "10m", - "hidden": true, - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "50Mi", - "hidden": true, - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - } - ] - } - } - ] - } - }, - { - "variable": "deviceList", - "label": "Mount USB Devices", - "group": "Resources and Devices", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "deviceListEntry", - "label": "Device", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Storage", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "type", - "label": "(Advanced) Type of Storage", - "description": "Sets the persistence type", - "schema": { - "type": "string", - "default": "device", - "hidden": true - } - }, - { - "variable": "readOnly", - "label": "readOnly", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "hostPath", - "label": "Host Device Path", - "description": "Path to the device on the host system", - "schema": { - "type": "path" - } - }, - { - "variable": "mountPath", - "label": "Container Device Path", - "description": "Path inside the container the device is mounted", - "schema": { - "type": "string", - "default": "/dev/ttyACM0" - } - } - ] - } - } - ] - } - }, - { - "variable": "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": "Advanced", - "label": "(Advanced) Network Policy", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "netPolicyEntry", - "label": "Network Policy Entry", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "policyType", - "label": "Policy Type", - "schema": { - "type": "string", - "default": "", - "enum": [ - { - "value": "", - "description": "Default" - }, - { - "value": "ingress", - "description": "Ingress" - }, - { - "value": "egress", - "description": "Egress" - }, - { - "value": "ingress-egress", - "description": "Ingress and Egress" - } - ] - } - }, - { - "variable": "egress", - "label": "Egress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "egressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "to", - "label": "To", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "toEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ingressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "from", - "label": "From", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "fromEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "addons", - "group": "Addons", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "Codeserver", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "service", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "NodePort", - "description": "Deprecated CHANGE THIS" - }, - { - "value": "ClusterIP", - "description": "ClusterIP" - }, - { - "value": "LoadBalancer", - "description": "LoadBalancer" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "ports", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int", - "default": 36107 - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable Ingress", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hosts", - "label": "Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "hostEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "host", - "label": "HostName", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "paths", - "label": "Paths", - "schema": { - "type": "list", - "default": [ - { - "path": "/", - "pathType": "Prefix" - } - ], - "items": [ - { - "variable": "pathEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "path", - "label": "Path", - "schema": { - "type": "string", - "required": true, - "default": "/" - } - }, - { - "variable": "pathType", - "label": "Path Type", - "schema": { - "type": "string", - "required": true, - "default": "Prefix" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "integrations", - "label": "Integrations", - "description": "Connect ingress with other charts", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "traefik", - "label": "Traefik", - "description": "Connect ingress with Traefik", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "allowCors", - "label": "Allow Cross Origin Requests (advanced)", - "schema": { - "type": "boolean", - "default": false, - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - }, - { - "variable": "entrypoints", - "label": "Entrypoints", - "schema": { - "type": "list", - "default": [ - "websecure" - ], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "entrypoint", - "label": "Entrypoint", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "middlewares", - "label": "Middlewares", - "schema": { - "type": "list", - "default": [], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "middleware", - "label": "Middleware", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "name", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "namespace", - "label": "namespace (optional)", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "certManager", - "label": "certManager", - "description": "Connect ingress with certManager", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "certificateIssuer", - "label": "certificateIssuer", - "description": "defaults to chartname", - "schema": { - "type": "string", - "default": "", - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "advanced", - "label": "Show Advanced Settings", - "description": "Advanced settings are not covered by TrueCharts Support", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "ingressClassName", - "label": "(Advanced/Optional) IngressClass Name", - "schema": { - "type": "string", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": "" - } - }, - { - "variable": "tls", - "label": "TLS-Settings", - "schema": { - "type": "list", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": [], - "items": [ - { - "variable": "tlsEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "hosts", - "label": "Certificate Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "host", - "label": "Host", - "schema": { - "type": "string", - "default": "", - "required": true - } - } - ] - } - }, - { - "variable": "certificateIssuer", - "label": "Use Cert-Manager clusterIssuer", - "description": "add the name of your cert-manager clusterIssuer here for automatic tls certificates.", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "clusterCertificate", - "label": "Cluster Certificate (Advanced)", - "description": "Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.", - "schema": { - "type": "string", - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "default": "" - } - }, - { - "variable": "secretName", - "label": "Use Custom Certificate Secret (Advanced)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "scaleCert", - "label": "Use TrueNAS SCALE Certificate (Deprecated)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "int", - "$ref": [ - "definitions/certificate" - ], - "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 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

              sabnzbd-17.2.9 (2024-02-05)

              \n

              Chore

              \n
                \n
              • update container image ghcr.io/onedr0p/sabnzbd to 4.2.2@5b1f15c by renovate (#17958)
              • \n
              \n

              sabnzbd-17.2.8 (2024-02-05)

              \n

              Chore

              \n
                \n
              • update container image ghcr.io/onedr0p/sabnzbd to v4.2.2@0343b55 by renovate (#17917)
              • \n
              \n

              sabnzbd-17.2.7 (2024-02-03)

              \n

              Chore

              \n
                \n
              • update container image common to v17.2.30@19ad5ec by renovate (#17804)
              • \n
              \n

              sabnzbd-17.2.6 (2024-01-26)

              \n

              Chore

              \n
                \n
              • update container image common to v17.2.29@d7c41a3 by renovate (#17545)
              • \n
              \n

              sabnzbd-17.2.5 (2024-01-21)

              \n

              Chore

              \n
                \n
              • update container image common to v17.2.28@918b4c5 by renovate (#17478)
              • \n
              \n

              sabnzbd-17.2.4 (2024-01-21)

              \n

              Chore

              \n
                \n
              • update container image common to v17.2.26@24c98f7 by renovate (#17409)
              • \n
              \n

              sabnzbd-17.2.3 (2024-01-21)

              \n

              Chore

              \n
                \n
              • update metadata in chart.yaml (#17457)
              • \n
              " - }, - "18.1.3": { - "healthy": true, - "supported": true, - "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/sabnzbd/18.1.3", - "last_update": "2024-05-29 12:35:14", - "required_features": [ - "definitions/timezone", - "normalize/interfaceConfiguration", - "definitions/certificate", - "definitions/interface" - ], - "human_version": "4.2.2_18.1.3", - "version": "18.1.3", - "chart_metadata": { - "annotations": { - "max_scale_version": "24.04.0", - "min_scale_version": "23.10.0", - "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.2.2", - "dependencies": [ - { - "name": "common", - "version": "18.0.3", - "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.png", - "keywords": [ - "sabnzbd", - "usenet" - ], - "kubeVersion": ">=1.24.0-0", - "maintainers": [ - { - "name": "TrueCharts", - "email": "info@truecharts.org", - "url": "https://truecharts.org" - } - ], - "name": "sabnzbd", - "sources": [ - "https://sabnzbd.org/", - "https://github.com/truecharts/charts/tree/master/charts/stable/sabnzbd", - "https://ghcr.io/onedr0p/sabnzbd", - "https://ghcr.io/onedr0p/exportarr" - ], - "type": "application", - "version": "18.1.3" - }, - "app_metadata": null, - "schema": { - "groups": [ - { - "name": "Container Image", - "description": "Image to be used for container" - }, - { - "name": "General Settings", - "description": "General Deployment Settings" - }, - { - "name": "Workload Settings", - "description": "Workload Settings" - }, - { - "name": "App Configuration", - "description": "App Specific Config Options" - }, - { - "name": "Networking and Services", - "description": "Configure Network and Services for Container" - }, - { - "name": "Storage and Persistence", - "description": "Persist and Share Data that is Separate from the Container" - }, - { - "name": "Ingress", - "description": "Ingress Configuration" - }, - { - "name": "Security and Permissions", - "description": "Configure Security Context and Permissions" - }, - { - "name": "Resources and Devices", - "description": "Specify Resources/Devices to be Allocated to Workload" - }, - { - "name": "Middlewares", - "description": "Traefik Middlewares" - }, - { - "name": "Metrics", - "description": "Metrics" - }, - { - "name": "Addons", - "description": "Addon Configuration" - }, - { - "name": "Backup Configuration", - "description": "Configure Velero Backup Schedule" - }, - { - "name": "Advanced", - "description": "Advanced Configuration" - }, - { - "name": "Postgresql", - "description": "Postgresql" - }, - { - "name": "Documentation", - "description": "Documentation" - } - ], - "portals": { - "open": { - "protocols": [ - "$kubernetes-resource_configmap_tcportal-open_protocol" - ], - "host": [ - "$kubernetes-resource_configmap_tcportal-open_host" - ], - "ports": [ - "$kubernetes-resource_configmap_tcportal-open_port" - ] - } - }, - "questions": [ - { - "variable": "global", - "group": "General Settings", - "label": "Global Settings", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "stopAll", - "label": "Stop All", - "description": "Stops All Running pods and hibernates cnpg", - "schema": { - "type": "boolean", - "default": false - } - } - ] - } - }, - { - "variable": "workload", - "group": "Workload Settings", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Type (Advanced)", - "schema": { - "type": "string", - "default": "Deployment", - "enum": [ - { - "value": "Deployment", - "description": "Deployment" - }, - { - "value": "DaemonSet", - "description": "DaemonSet" - } - ] - } - }, - { - "variable": "replicas", - "label": "Replicas (Advanced)", - "description": "Set the number of Replicas", - "schema": { - "type": "int", - "show_if": [ - [ - "type", - "!=", - "DaemonSet" - ] - ], - "default": 1 - } - }, - { - "variable": "podSpec", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "containers", - "label": "Containers", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "Main Container", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "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 Settings", - "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 Settings", - "label": "Global Pod Options (Advanced)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "expertPodOpts", - "label": "Expert - Pod Options", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hostNetwork", - "label": "Host Networking", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "dnsConfig", - "label": "DNS Configuration", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "options", - "label": "Options", - "schema": { - "type": "list", - "default": [ - { - "name": "ndots", - "value": "1" - } - ], - "items": [ - { - "variable": "optionsEntry", - "label": "Option Entry", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true - } - }, - { - "variable": "value", - "label": "Value", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "nameservers", - "label": "Nameservers", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "nsEntry", - "label": "Nameserver Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - }, - { - "variable": "searches", - "label": "Searches", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "searchEntry", - "label": "Search Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "imagePullSecretList", - "group": "General Settings", - "label": "Image Pull Secrets", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "pullsecretentry", - "label": "Pull Secret", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "data", - "label": "Data", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "registry", - "label": "Registry", - "schema": { - "type": "string", - "required": true, - "default": "https://index.docker.io/v1/" - } - }, - { - "variable": "username", - "label": "Username", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "password", - "label": "Password", - "schema": { - "type": "string", - "required": true, - "private": true, - "default": "" - } - }, - { - "variable": "email", - "label": "Email", - "schema": { - "type": "string", - "required": true, - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "service", - "group": "Networking and Services", - "label": "Configure Service(s)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "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": "serviceexpert", - "group": "Networking and Services", - "label": "Show Expert Config", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "scaleExternalInterface", - "description": "Add External Interfaces", - "label": "Add external Interfaces", - "group": "Networking", - "schema": { - "type": "list", - "items": [ - { - "variable": "interfaceConfiguration", - "description": "Interface Configuration", - "label": "Interface Configuration", - "schema": { - "additional_attrs": true, - "type": "dict", - "$ref": [ - "normalize/interfaceConfiguration" - ], - "attrs": [ - { - "variable": "hostInterface", - "description": "Please Specify Host Interface", - "label": "Host Interface", - "schema": { - "type": "string", - "required": true, - "$ref": [ - "definitions/interface" - ], - "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": "Networking and Services", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "serviceListEntry", - "label": "Custom Service", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the service", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "LoadBalancer", - "description": "LoadBalancer (Expose Ports)" - }, - { - "value": "ClusterIP", - "description": "ClusterIP (Do Not Expose Ports)" - }, - { - "value": "Simple", - "description": "Deprecated CHANGE THIS" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "advancedsvcset", - "label": "Show Advanced Service Settings", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "externalIPs", - "label": "External IP's", - "description": "External IP's", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "externalIP", - "label": "External IP", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "ipFamilyPolicy", - "label": "IP Family Policy", - "description": "Specify the IP Policy", - "schema": { - "type": "string", - "default": "SingleStack", - "enum": [ - { - "value": "SingleStack", - "description": "SingleStack" - }, - { - "value": "PreferDualStack", - "description": "PreferDualStack" - }, - { - "value": "RequireDualStack", - "description": "RequireDualStack" - } - ] - } - }, - { - "variable": "ipFamilies", - "label": "IP Families", - "description": "(Advanced) The IP Families that should be used", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ipFamily", - "label": "IP Family", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "portsList", - "label": "Additional Service Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsListEntry", - "label": "Custom ports", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Port", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Port Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "protocol", - "label": "Port Type", - "schema": { - "type": "string", - "default": "tcp", - "enum": [ - { - "value": "http", - "description": "HTTP" - }, - { - "value": "https", - "description": "HTTPS" - }, - { - "value": "tcp", - "description": "TCP" - }, - { - "value": "udp", - "description": "UDP" - } - ] - } - }, - { - "variable": "targetPort", - "label": "Target Port", - "description": "This port exposes the container port on the service", - "schema": { - "type": "int", - "required": true - } - }, - { - "variable": "port", - "label": "Container Port", - "schema": { - "type": "int", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "persistence", - "label": "Integrated Persistent Storage", - "description": "Integrated Persistent Storage", - "group": "Storage and 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": "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": "Storage and Persistence", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "persistenceListEntry", - "label": "Custom Storage", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the storage", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "type", - "label": "Type of Storage", - "description": "Sets the persistence type, Anything other than PVC could break rollback!", - "schema": { - "type": "string", - "default": "hostPath", - "enum": [ - { - "value": "pvc", - "description": "PVC" - }, - { - "value": "hostPath", - "description": "Host Path" - }, - { - "value": "emptyDir", - "description": "emptyDir" - }, - { - "value": "nfs", - "description": "NFS Share" - } - ] - } - }, - { - "variable": "server", - "label": "NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "path", - "label": "Path on NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "iscsi", - "label": "iSCSI Options", - "schema": { - "show_if": [ - [ - "type", - "=", - "iscsi" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "targetPortal", - "label": "targetPortal", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "iqn", - "label": "iqn", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "lun", - "label": "lun", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "authSession", - "label": "authSession", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - }, - { - "variable": "authDiscovery", - "label": "authDiscovery", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - }, - { - "variable": "autoPermissions", - "label": "Automatic Permissions Configuration", - "description": "Automatically set permissions", - "schema": { - "show_if": [ - [ - "type", - "!=", - "pvc" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "chown", - "label": "Run CHOWN", - "description": "It will run CHOWN on the path with the given fsGroup\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": "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": "Security and Permissions", - "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 and Devices", - "label": "Resource Limits", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "limits", - "label": "Advanced Limit Resource Consumption", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "4000m", - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "8Gi", - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - }, - { - "variable": "gpu.intel.com/i915", - "label": "Add Intel i915 GPUs", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "nvidia.com/gpu", - "label": "Add NVIDIA GPUs (Experimental)", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "amd.com/gpu", - "label": "Add AMD GPUs", - "schema": { - "type": "int", - "default": 0 - } - } - ] - } - }, - { - "variable": "requests", - "label": "Minimum Resources Required (request)", - "schema": { - "additional_attrs": true, - "type": "dict", - "hidden": true, - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "10m", - "hidden": true, - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "50Mi", - "hidden": true, - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - } - ] - } - } - ] - } - }, - { - "variable": "deviceList", - "label": "Mount USB Devices", - "group": "Resources and Devices", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "deviceListEntry", - "label": "Device", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Storage", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "type", - "label": "(Advanced) Type of Storage", - "description": "Sets the persistence type", - "schema": { - "type": "string", - "default": "device", - "hidden": true - } - }, - { - "variable": "readOnly", - "label": "readOnly", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "hostPath", - "label": "Host Device Path", - "description": "Path to the device on the host system", - "schema": { - "type": "path" - } - }, - { - "variable": "mountPath", - "label": "Container Device Path", - "description": "Path inside the container the device is mounted", - "schema": { - "type": "string", - "default": "/dev/ttyACM0" - } - } - ] - } - } - ] - } - }, - { - "variable": "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": "Advanced", - "label": "(Advanced) Network Policy", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "netPolicyEntry", - "label": "Network Policy Entry", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "policyType", - "label": "Policy Type", - "schema": { - "type": "string", - "default": "", - "enum": [ - { - "value": "", - "description": "Default" - }, - { - "value": "ingress", - "description": "Ingress" - }, - { - "value": "egress", - "description": "Egress" - }, - { - "value": "ingress-egress", - "description": "Ingress and Egress" - } - ] - } - }, - { - "variable": "egress", - "label": "Egress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "egressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "to", - "label": "To", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "toEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ingressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "from", - "label": "From", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "fromEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "addons", - "group": "Addons", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "Codeserver", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "service", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "NodePort", - "description": "Deprecated CHANGE THIS" - }, - { - "value": "ClusterIP", - "description": "ClusterIP" - }, - { - "value": "LoadBalancer", - "description": "LoadBalancer" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "ports", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int", - "default": 36107 - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable Ingress", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hosts", - "label": "Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "hostEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "host", - "label": "HostName", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "paths", - "label": "Paths", - "schema": { - "type": "list", - "default": [ - { - "path": "/", - "pathType": "Prefix" - } - ], - "items": [ - { - "variable": "pathEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "path", - "label": "Path", - "schema": { - "type": "string", - "required": true, - "default": "/" - } - }, - { - "variable": "pathType", - "label": "Path Type", - "schema": { - "type": "string", - "required": true, - "default": "Prefix" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "integrations", - "label": "Integrations", - "description": "Connect ingress with other charts", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "traefik", - "label": "Traefik", - "description": "Connect ingress with Traefik", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "allowCors", - "label": "Allow Cross Origin Requests (advanced)", - "schema": { - "type": "boolean", - "default": false, - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - }, - { - "variable": "entrypoints", - "label": "Entrypoints", - "schema": { - "type": "list", - "default": [ - "websecure" - ], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "entrypoint", - "label": "Entrypoint", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "middlewares", - "label": "Middlewares", - "schema": { - "type": "list", - "default": [], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "middleware", - "label": "Middleware", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "name", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "namespace", - "label": "namespace (optional)", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "certManager", - "label": "certManager", - "description": "Connect ingress with certManager", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "certificateIssuer", - "label": "certificateIssuer", - "description": "defaults to chartname", - "schema": { - "type": "string", - "default": "", - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "advanced", - "label": "Show Advanced Settings", - "description": "Advanced settings are not covered by TrueCharts Support", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "ingressClassName", - "label": "(Advanced/Optional) IngressClass Name", - "schema": { - "type": "string", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": "" - } - }, - { - "variable": "tls", - "label": "TLS-Settings", - "schema": { - "type": "list", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": [], - "items": [ - { - "variable": "tlsEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "hosts", - "label": "Certificate Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "host", - "label": "Host", - "schema": { - "type": "string", - "default": "", - "required": true - } - } - ] - } - }, - { - "variable": "certificateIssuer", - "label": "Use Cert-Manager clusterIssuer", - "description": "add the name of your cert-manager clusterIssuer here for automatic tls certificates.", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "clusterCertificate", - "label": "Cluster Certificate (Advanced)", - "description": "Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.", - "schema": { - "type": "string", - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "default": "" - } - }, - { - "variable": "secretName", - "label": "Use Custom Certificate Secret (Advanced)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "scaleCert", - "label": "Use TrueNAS SCALE Certificate (Deprecated)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "int", - "$ref": [ - "definitions/certificate" - ], - "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 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

              sabnzbd-17.2.9 (2024-02-05)

              \n

              Chore

              \n
                \n
              • update container image ghcr.io/onedr0p/sabnzbd to 4.2.2@5b1f15c by renovate (#17958)
              • \n
              \n

              sabnzbd-17.2.8 (2024-02-05)

              \n

              Chore

              \n
                \n
              • update container image ghcr.io/onedr0p/sabnzbd to v4.2.2@0343b55 by renovate (#17917)
              • \n
              \n

              sabnzbd-17.2.7 (2024-02-03)

              \n

              Chore

              \n
                \n
              • update container image common to v17.2.30@19ad5ec by renovate (#17804)
              • \n
              \n

              sabnzbd-17.2.6 (2024-01-26)

              \n

              Chore

              \n
                \n
              • update container image common to v17.2.29@d7c41a3 by renovate (#17545)
              • \n
              \n

              sabnzbd-17.2.5 (2024-01-21)

              \n

              Chore

              \n
                \n
              • update container image common to v17.2.28@918b4c5 by renovate (#17478)
              • \n
              \n

              sabnzbd-17.2.4 (2024-01-21)

              \n

              Chore

              \n
                \n
              • update container image common to v17.2.26@24c98f7 by renovate (#17409)
              • \n
              \n

              sabnzbd-17.2.3 (2024-01-21)

              \n

              Chore

              \n
                \n
              • update metadata in chart.yaml (#17457)
              • \n
              \n

              sabnzbd-17.2.2 (2024-01-09)

              " - }, - "17.4.0": { - "healthy": true, - "supported": true, - "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/sabnzbd/17.4.0", - "last_update": "2024-05-29 12:35:14", - "required_features": [ - "definitions/timezone", - "definitions/gpuConfiguration", - "definitions/interface", - "normalize/interfaceConfiguration", - "definitions/certificate" - ], - "human_version": "4.2.2_17.4.0", - "version": "17.4.0", - "chart_metadata": { - "annotations": { - "max_scale_version": "24.04.0", - "min_scale_version": "23.10.0", - "truecharts.org/category": "media", - "truecharts.org/max_helm_version": "3.14", - "truecharts.org/min_helm_version": "3.12", - "truecharts.org/train": "stable" - }, - "apiVersion": "v2", - "appVersion": "4.2.2", - "dependencies": [ - { - "name": "common", - "version": "17.5.0", - "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.png", - "keywords": [ - "sabnzbd", - "usenet" - ], - "kubeVersion": ">=1.24.0-0", - "maintainers": [ - { - "name": "TrueCharts", - "email": "info@truecharts.org", - "url": "https://truecharts.org" - } - ], - "name": "sabnzbd", - "sources": [ - "https://sabnzbd.org/", - "https://github.com/truecharts/charts/tree/master/charts/stable/sabnzbd", - "https://ghcr.io/onedr0p/sabnzbd", - "https://ghcr.io/onedr0p/exportarr" - ], - "type": "application", - "version": "17.4.0" - }, - "app_metadata": null, - "schema": { - "groups": [ - { - "name": "Container Image", - "description": "Image to be used for container" - }, - { - "name": "General Settings", - "description": "General Deployment Settings" - }, - { - "name": "Workload Settings", - "description": "Workload Settings" - }, - { - "name": "App Configuration", - "description": "App Specific Config Options" - }, - { - "name": "Networking and Services", - "description": "Configure Network and Services for Container" - }, - { - "name": "Storage and Persistence", - "description": "Persist and Share Data that is Separate from the Container" - }, - { - "name": "Ingress", - "description": "Ingress Configuration" - }, - { - "name": "Security and Permissions", - "description": "Configure Security Context and Permissions" - }, - { - "name": "Resources and Devices", - "description": "Specify Resources/Devices to be Allocated to Workload" - }, - { - "name": "Middlewares", - "description": "Traefik Middlewares" - }, - { - "name": "Metrics", - "description": "Metrics" - }, - { - "name": "Addons", - "description": "Addon Configuration" - }, - { - "name": "Backup Configuration", - "description": "Configure Velero Backup Schedule" - }, - { - "name": "Advanced", - "description": "Advanced Configuration" - }, - { - "name": "Postgresql", - "description": "Postgresql" - }, - { - "name": "Documentation", - "description": "Documentation" - } - ], - "portals": { - "open": { - "protocols": [ - "$kubernetes-resource_configmap_tcportal-open_protocol" - ], - "host": [ - "$kubernetes-resource_configmap_tcportal-open_host" - ], - "ports": [ - "$kubernetes-resource_configmap_tcportal-open_port" - ] - } - }, - "questions": [ - { - "variable": "global", - "group": "General Settings", - "label": "Global Settings", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "stopAll", - "label": "Stop All", - "description": "Stops All Running pods and hibernates cnpg", - "schema": { - "type": "boolean", - "default": false - } - } - ] - } - }, - { - "variable": "workload", - "group": "Workload Settings", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Type (Advanced)", - "schema": { - "type": "string", - "default": "Deployment", - "enum": [ - { - "value": "Deployment", - "description": "Deployment" - }, - { - "value": "DaemonSet", - "description": "DaemonSet" - } - ] - } - }, - { - "variable": "replicas", - "label": "Replicas (Advanced)", - "description": "Set the number of Replicas", - "schema": { - "type": "int", - "show_if": [ - [ - "type", - "!=", - "DaemonSet" - ] - ], - "default": 1 - } - }, - { - "variable": "podSpec", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "containers", - "label": "Containers", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "Main Container", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "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 Settings", - "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 Settings", - "label": "Global Pod Options (Advanced)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "expertPodOpts", - "label": "Expert - Pod Options", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hostNetwork", - "label": "Host Networking", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "dnsConfig", - "label": "DNS Configuration", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "options", - "label": "Options", - "schema": { - "type": "list", - "default": [ - { - "name": "ndots", - "value": "1" - } - ], - "items": [ - { - "variable": "optionsEntry", - "label": "Option Entry", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true - } - }, - { - "variable": "value", - "label": "Value", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "nameservers", - "label": "Nameservers", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "nsEntry", - "label": "Nameserver Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - }, - { - "variable": "searches", - "label": "Searches", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "searchEntry", - "label": "Search Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "imagePullSecretList", - "group": "General Settings", - "label": "Image Pull Secrets", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "pullsecretentry", - "label": "Pull Secret", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "data", - "label": "Data", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "registry", - "label": "Registry", - "schema": { - "type": "string", - "required": true, - "default": "https://index.docker.io/v1/" - } - }, - { - "variable": "username", - "label": "Username", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "password", - "label": "Password", - "schema": { - "type": "string", - "required": true, - "private": true, - "default": "" - } - }, - { - "variable": "email", - "label": "Email", - "schema": { - "type": "string", - "required": true, - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "service", - "group": "Networking and Services", - "label": "Configure Service(s)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "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": "serviceexpert", - "group": "Networking and Services", - "label": "Show Expert Config", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "scaleExternalInterface", - "description": "Add External Interfaces", - "label": "Add external Interfaces", - "group": "Networking", - "schema": { - "type": "list", - "items": [ - { - "variable": "interfaceConfiguration", - "description": "Interface Configuration", - "label": "Interface Configuration", - "schema": { - "additional_attrs": true, - "type": "dict", - "$ref": [ - "normalize/interfaceConfiguration" - ], - "attrs": [ - { - "variable": "hostInterface", - "description": "Please Specify Host Interface", - "label": "Host Interface", - "schema": { - "type": "string", - "required": true, - "$ref": [ - "definitions/interface" - ], - "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": "Networking and Services", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "serviceListEntry", - "label": "Custom Service", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the service", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "LoadBalancer", - "description": "LoadBalancer (Expose Ports)" - }, - { - "value": "ClusterIP", - "description": "ClusterIP (Do Not Expose Ports)" - }, - { - "value": "Simple", - "description": "Deprecated CHANGE THIS" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "advancedsvcset", - "label": "Show Advanced Service Settings", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "externalIPs", - "label": "External IP's", - "description": "External IP's", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "externalIP", - "label": "External IP", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "ipFamilyPolicy", - "label": "IP Family Policy", - "description": "Specify the IP Policy", - "schema": { - "type": "string", - "default": "SingleStack", - "enum": [ - { - "value": "SingleStack", - "description": "SingleStack" - }, - { - "value": "PreferDualStack", - "description": "PreferDualStack" - }, - { - "value": "RequireDualStack", - "description": "RequireDualStack" - } - ] - } - }, - { - "variable": "ipFamilies", - "label": "IP Families", - "description": "(Advanced) The IP Families that should be used", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ipFamily", - "label": "IP Family", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "portsList", - "label": "Additional Service Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsListEntry", - "label": "Custom ports", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Port", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Port Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "protocol", - "label": "Port Type", - "schema": { - "type": "string", - "default": "tcp", - "enum": [ - { - "value": "http", - "description": "HTTP" - }, - { - "value": "https", - "description": "HTTPS" - }, - { - "value": "tcp", - "description": "TCP" - }, - { - "value": "udp", - "description": "UDP" - } - ] - } - }, - { - "variable": "targetPort", - "label": "Target Port", - "description": "This port exposes the container port on the service", - "schema": { - "type": "int", - "required": true - } - }, - { - "variable": "port", - "label": "Container Port", - "schema": { - "type": "int", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "persistence", - "label": "Integrated Persistent Storage", - "description": "Integrated Persistent Storage", - "group": "Storage and 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": "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": "Storage and Persistence", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "persistenceListEntry", - "label": "Custom Storage", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the storage", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "type", - "label": "Type of Storage", - "description": "Sets the persistence type, Anything other than PVC could break rollback!", - "schema": { - "type": "string", - "default": "hostPath", - "enum": [ - { - "value": "pvc", - "description": "PVC" - }, - { - "value": "hostPath", - "description": "Host Path" - }, - { - "value": "emptyDir", - "description": "emptyDir" - }, - { - "value": "nfs", - "description": "NFS Share" - } - ] - } - }, - { - "variable": "server", - "label": "NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "path", - "label": "Path on NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "iscsi", - "label": "iSCSI Options", - "schema": { - "show_if": [ - [ - "type", - "=", - "iscsi" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "targetPortal", - "label": "targetPortal", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "iqn", - "label": "iqn", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "lun", - "label": "lun", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "authSession", - "label": "authSession", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - }, - { - "variable": "authDiscovery", - "label": "authDiscovery", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - }, - { - "variable": "autoPermissions", - "label": "Automatic Permissions Configuration", - "description": "Automatically set permissions", - "schema": { - "show_if": [ - [ - "type", - "!=", - "pvc" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "chown", - "label": "Run CHOWN", - "description": "It will run CHOWN on the path with the given fsGroup\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": "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": "Security and Permissions", - "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 and Devices", - "label": "Resource Limits", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "limits", - "label": "Advanced Limit Resource Consumption", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "4000m", - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "8Gi", - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - }, - { - "variable": "intel.com/i915", - "label": "Add Intel i915 GPUs", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "nvidia.com/gpu", - "label": "Add NVIDIA GPUs (Experimental)", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "amd.com/gpu", - "label": "Add AMD GPUs", - "schema": { - "type": "int", - "default": 0 - } - } - ] - } - }, - { - "variable": "requests", - "label": "Minimum Resources Required (request)", - "schema": { - "additional_attrs": true, - "type": "dict", - "hidden": true, - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "10m", - "hidden": true, - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "50Mi", - "hidden": true, - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - } - ] - } - } - ] - } - }, - { - "variable": "deviceList", - "label": "Mount USB Devices", - "group": "Resources and Devices", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "deviceListEntry", - "label": "Device", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Storage", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "type", - "label": "(Advanced) Type of Storage", - "description": "Sets the persistence type", - "schema": { - "type": "string", - "default": "device", - "hidden": true - } - }, - { - "variable": "readOnly", - "label": "readOnly", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "hostPath", - "label": "Host Device Path", - "description": "Path to the device on the host system", - "schema": { - "type": "path" - } - }, - { - "variable": "mountPath", - "label": "Container Device Path", - "description": "Path inside the container the device is mounted", - "schema": { - "type": "string", - "default": "/dev/ttyACM0" - } - } - ] - } - } - ] - } - }, - { - "variable": "scaleGPU", - "label": "GPU Configuration", - "group": "Resources and Devices", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "scaleGPUEntry", - "label": "GPU", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "gpu", - "label": "Select GPU", - "schema": { - "additional_attrs": true, - "type": "dict", - "$ref": [ - "definitions/gpuConfiguration" - ], - "attrs": [] - } - }, - { - "variable": "workaround", - "label": "Workaround", - "schema": { - "type": "string", - "default": "workaround", - "hidden": 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": "apiKey", - "label": "Sabnzbd API key", - "description": "Can be found in the Bazarr settings", - "schema": { - "type": "string", - "default": "", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "networkPolicy", - "group": "Advanced", - "label": "(Advanced) Network Policy", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "netPolicyEntry", - "label": "Network Policy Entry", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "policyType", - "label": "Policy Type", - "schema": { - "type": "string", - "default": "", - "enum": [ - { - "value": "", - "description": "Default" - }, - { - "value": "ingress", - "description": "Ingress" - }, - { - "value": "egress", - "description": "Egress" - }, - { - "value": "ingress-egress", - "description": "Ingress and Egress" - } - ] - } - }, - { - "variable": "egress", - "label": "Egress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "egressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "to", - "label": "To", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "toEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ingressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "from", - "label": "From", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "fromEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "addons", - "group": "Addons", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "Codeserver", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "service", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "NodePort", - "description": "Deprecated CHANGE THIS" - }, - { - "value": "ClusterIP", - "description": "ClusterIP" - }, - { - "value": "LoadBalancer", - "description": "LoadBalancer" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "ports", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int", - "default": 36107 - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable Ingress", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hosts", - "label": "Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "hostEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "host", - "label": "HostName", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "paths", - "label": "Paths", - "schema": { - "type": "list", - "default": [ - { - "path": "/", - "pathType": "Prefix" - } - ], - "items": [ - { - "variable": "pathEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "path", - "label": "Path", - "schema": { - "type": "string", - "required": true, - "default": "/" - } - }, - { - "variable": "pathType", - "label": "Path Type", - "schema": { - "type": "string", - "required": true, - "default": "Prefix" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "integrations", - "label": "Integrations", - "description": "Connect ingress with other charts", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "traefik", - "label": "Traefik", - "description": "Connect ingress with Traefik", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "allowCors", - "label": "Allow Cross Origin Requests (advanced)", - "schema": { - "type": "boolean", - "default": false, - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - }, - { - "variable": "entrypoints", - "label": "Entrypoints", - "schema": { - "type": "list", - "default": [ - "websecure" - ], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "entrypoint", - "label": "Entrypoint", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "middlewares", - "label": "Middlewares", - "schema": { - "type": "list", - "default": [], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "middleware", - "label": "Middleware", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "name", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "namespace", - "label": "namespace (optional)", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "certManager", - "label": "certManager", - "description": "Connect ingress with certManager", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "certificateIssuer", - "label": "certificateIssuer", - "description": "defaults to chartname", - "schema": { - "type": "string", - "default": "", - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "advanced", - "label": "Show Advanced Settings", - "description": "Advanced settings are not covered by TrueCharts Support", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "ingressClassName", - "label": "(Advanced/Optional) IngressClass Name", - "schema": { - "type": "string", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": "" - } - }, - { - "variable": "tls", - "label": "TLS-Settings", - "schema": { - "type": "list", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": [], - "items": [ - { - "variable": "tlsEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "hosts", - "label": "Certificate Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "host", - "label": "Host", - "schema": { - "type": "string", - "default": "", - "required": true - } - } - ] - } - }, - { - "variable": "certificateIssuer", - "label": "Use Cert-Manager clusterIssuer", - "description": "add the name of your cert-manager clusterIssuer here for automatic tls certificates.", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "clusterCertificate", - "label": "Cluster Certificate (Advanced)", - "description": "Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.", - "schema": { - "type": "string", - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "default": "" - } - }, - { - "variable": "secretName", - "label": "Use Custom Certificate Secret (Advanced)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "scaleCert", - "label": "Use TrueNAS SCALE Certificate (Deprecated)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "int", - "$ref": [ - "definitions/certificate" - ], - "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 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

              sabnzbd-17.2.9 (2024-02-05)

              \n

              Chore

              \n
                \n
              • update container image ghcr.io/onedr0p/sabnzbd to 4.2.2@5b1f15c by renovate (#17958)
              • \n
              \n

              sabnzbd-17.2.8 (2024-02-05)

              \n

              Chore

              \n
                \n
              • update container image ghcr.io/onedr0p/sabnzbd to v4.2.2@0343b55 by renovate (#17917)
              • \n
              \n

              sabnzbd-17.2.7 (2024-02-03)

              \n

              Chore

              \n
                \n
              • update container image common to v17.2.30@19ad5ec by renovate (#17804)
              • \n
              \n

              sabnzbd-17.2.6 (2024-01-26)

              \n

              Chore

              \n
                \n
              • update container image common to v17.2.29@d7c41a3 by renovate (#17545)
              • \n
              \n

              sabnzbd-17.2.5 (2024-01-21)

              \n

              Chore

              \n
                \n
              • update container image common to v17.2.28@918b4c5 by renovate (#17478)
              • \n
              \n

              sabnzbd-17.2.4 (2024-01-21)

              \n

              Chore

              \n
                \n
              • update container image common to v17.2.26@24c98f7 by renovate (#17409)
              • \n
              \n

              sabnzbd-17.2.3 (2024-01-21)

              \n

              Chore

              \n
                \n
              • update metadata in chart.yaml (#17457)
              • \n
              \n

              sabnzbd-17.2.2 (2024-01-09)

              \n

              Chore

              " - }, - "17.3.2": { - "healthy": true, - "supported": true, - "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/sabnzbd/17.3.2", - "last_update": "2024-05-29 12:35:14", - "required_features": [ - "definitions/timezone", - "definitions/gpuConfiguration", - "definitions/interface", - "normalize/interfaceConfiguration", - "definitions/certificate" - ], - "human_version": "4.2.2_17.3.2", - "version": "17.3.2", - "chart_metadata": { - "annotations": { - "max_scale_version": "24.04.0", - "min_scale_version": "23.10.0", - "truecharts.org/category": "media", - "truecharts.org/max_helm_version": "3.14", - "truecharts.org/min_helm_version": "3.12", - "truecharts.org/train": "stable" - }, - "apiVersion": "v2", - "appVersion": "4.2.2", - "dependencies": [ - { - "name": "common", - "version": "17.4.2", - "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.png", - "keywords": [ - "sabnzbd", - "usenet" - ], - "kubeVersion": ">=1.24.0-0", - "maintainers": [ - { - "name": "TrueCharts", - "email": "info@truecharts.org", - "url": "https://truecharts.org" - } - ], - "name": "sabnzbd", - "sources": [ - "https://sabnzbd.org/", - "https://github.com/truecharts/charts/tree/master/charts/stable/sabnzbd", - "https://ghcr.io/onedr0p/exportarr", - "https://ghcr.io/onedr0p/sabnzbd" - ], - "type": "application", - "version": "17.3.2" - }, - "app_metadata": null, - "schema": { - "groups": [ - { - "name": "Container Image", - "description": "Image to be used for container" - }, - { - "name": "General Settings", - "description": "General Deployment Settings" - }, - { - "name": "Workload Settings", - "description": "Workload Settings" - }, - { - "name": "App Configuration", - "description": "App Specific Config Options" - }, - { - "name": "Networking and Services", - "description": "Configure Network and Services for Container" - }, - { - "name": "Storage and Persistence", - "description": "Persist and Share Data that is Separate from the Container" - }, - { - "name": "Ingress", - "description": "Ingress Configuration" - }, - { - "name": "Security and Permissions", - "description": "Configure Security Context and Permissions" - }, - { - "name": "Resources and Devices", - "description": "Specify Resources/Devices to be Allocated to Workload" - }, - { - "name": "Middlewares", - "description": "Traefik Middlewares" - }, - { - "name": "Metrics", - "description": "Metrics" - }, - { - "name": "Addons", - "description": "Addon Configuration" - }, - { - "name": "Backup Configuration", - "description": "Configure Velero Backup Schedule" - }, - { - "name": "Advanced", - "description": "Advanced Configuration" - }, - { - "name": "Postgresql", - "description": "Postgresql" - }, - { - "name": "Documentation", - "description": "Documentation" - } - ], - "portals": { - "open": { - "protocols": [ - "$kubernetes-resource_configmap_tcportal-open_protocol" - ], - "host": [ - "$kubernetes-resource_configmap_tcportal-open_host" - ], - "ports": [ - "$kubernetes-resource_configmap_tcportal-open_port" - ] - } - }, - "questions": [ - { - "variable": "global", - "group": "General Settings", - "label": "Global Settings", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "stopAll", - "label": "Stop All", - "description": "Stops All Running pods and hibernates cnpg", - "schema": { - "type": "boolean", - "default": false - } - } - ] - } - }, - { - "variable": "workload", - "group": "Workload Settings", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Type (Advanced)", - "schema": { - "type": "string", - "default": "Deployment", - "enum": [ - { - "value": "Deployment", - "description": "Deployment" - }, - { - "value": "DaemonSet", - "description": "DaemonSet" - } - ] - } - }, - { - "variable": "replicas", - "label": "Replicas (Advanced)", - "description": "Set the number of Replicas", - "schema": { - "type": "int", - "show_if": [ - [ - "type", - "!=", - "DaemonSet" - ] - ], - "default": 1 - } - }, - { - "variable": "podSpec", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "containers", - "label": "Containers", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "main", - "label": "Main Container", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "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 Settings", - "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 Settings", - "label": "Global Pod Options (Advanced)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "expertPodOpts", - "label": "Expert - Pod Options", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hostNetwork", - "label": "Host Networking", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "dnsConfig", - "label": "DNS Configuration", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "options", - "label": "Options", - "schema": { - "type": "list", - "default": [ - { - "name": "ndots", - "value": "1" - } - ], - "items": [ - { - "variable": "optionsEntry", - "label": "Option Entry", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true - } - }, - { - "variable": "value", - "label": "Value", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "nameservers", - "label": "Nameservers", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "nsEntry", - "label": "Nameserver Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - }, - { - "variable": "searches", - "label": "Searches", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "searchEntry", - "label": "Search Entry", - "schema": { - "type": "string", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "imagePullSecretList", - "group": "General Settings", - "label": "Image Pull Secrets", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "pullsecretentry", - "label": "Pull Secret", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "data", - "label": "Data", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "registry", - "label": "Registry", - "schema": { - "type": "string", - "required": true, - "default": "https://index.docker.io/v1/" - } - }, - { - "variable": "username", - "label": "Username", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "password", - "label": "Password", - "schema": { - "type": "string", - "required": true, - "private": true, - "default": "" - } - }, - { - "variable": "email", - "label": "Email", - "schema": { - "type": "string", - "required": true, - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "service", - "group": "Networking and Services", - "label": "Configure Service(s)", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "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": "serviceexpert", - "group": "Networking and Services", - "label": "Show Expert Config", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "scaleExternalInterface", - "description": "Add External Interfaces", - "label": "Add external Interfaces", - "group": "Networking", - "schema": { - "type": "list", - "items": [ - { - "variable": "interfaceConfiguration", - "description": "Interface Configuration", - "label": "Interface Configuration", - "schema": { - "additional_attrs": true, - "type": "dict", - "$ref": [ - "normalize/interfaceConfiguration" - ], - "attrs": [ - { - "variable": "hostInterface", - "description": "Please Specify Host Interface", - "label": "Host Interface", - "schema": { - "type": "string", - "required": true, - "$ref": [ - "definitions/interface" - ], - "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": "Networking and Services", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "serviceListEntry", - "label": "Custom Service", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the service", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "LoadBalancer", - "description": "LoadBalancer (Expose Ports)" - }, - { - "value": "ClusterIP", - "description": "ClusterIP (Do Not Expose Ports)" - }, - { - "value": "Simple", - "description": "Deprecated CHANGE THIS" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "advancedsvcset", - "label": "Show Advanced Service Settings", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "externalIPs", - "label": "External IP's", - "description": "External IP's", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "externalIP", - "label": "External IP", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "ipFamilyPolicy", - "label": "IP Family Policy", - "description": "Specify the IP Policy", - "schema": { - "type": "string", - "default": "SingleStack", - "enum": [ - { - "value": "SingleStack", - "description": "SingleStack" - }, - { - "value": "PreferDualStack", - "description": "PreferDualStack" - }, - { - "value": "RequireDualStack", - "description": "RequireDualStack" - } - ] - } - }, - { - "variable": "ipFamilies", - "label": "IP Families", - "description": "(Advanced) The IP Families that should be used", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ipFamily", - "label": "IP Family", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "portsList", - "label": "Additional Service Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsListEntry", - "label": "Custom ports", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Port", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "name", - "label": "Port Name", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "protocol", - "label": "Port Type", - "schema": { - "type": "string", - "default": "tcp", - "enum": [ - { - "value": "http", - "description": "HTTP" - }, - { - "value": "https", - "description": "HTTPS" - }, - { - "value": "tcp", - "description": "TCP" - }, - { - "value": "udp", - "description": "UDP" - } - ] - } - }, - { - "variable": "targetPort", - "label": "Target Port", - "description": "This port exposes the container port on the service", - "schema": { - "type": "int", - "required": true - } - }, - { - "variable": "port", - "label": "Container Port", - "schema": { - "type": "int", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "persistence", - "label": "Integrated Persistent Storage", - "description": "Integrated Persistent Storage", - "group": "Storage and 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": "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": "Storage and Persistence", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "persistenceListEntry", - "label": "Custom Storage", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the storage", - "schema": { - "type": "boolean", - "default": true, - "hidden": true - } - }, - { - "variable": "type", - "label": "Type of Storage", - "description": "Sets the persistence type, Anything other than PVC could break rollback!", - "schema": { - "type": "string", - "default": "hostPath", - "enum": [ - { - "value": "pvc", - "description": "PVC" - }, - { - "value": "hostPath", - "description": "Host Path" - }, - { - "value": "emptyDir", - "description": "emptyDir" - }, - { - "value": "nfs", - "description": "NFS Share" - } - ] - } - }, - { - "variable": "server", - "label": "NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "path", - "label": "Path on NFS Server", - "schema": { - "show_if": [ - [ - "type", - "=", - "nfs" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "iscsi", - "label": "iSCSI Options", - "schema": { - "show_if": [ - [ - "type", - "=", - "iscsi" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "targetPortal", - "label": "targetPortal", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "iqn", - "label": "iqn", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "lun", - "label": "lun", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "authSession", - "label": "authSession", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - }, - { - "variable": "authDiscovery", - "label": "authDiscovery", - "schema": { - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "username", - "label": "username", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "password", - "label": "password", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "usernameInitiator", - "label": "usernameInitiator", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "passwordInitiator", - "label": "passwordInitiator", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - }, - { - "variable": "autoPermissions", - "label": "Automatic Permissions Configuration", - "description": "Automatically set permissions", - "schema": { - "show_if": [ - [ - "type", - "!=", - "pvc" - ] - ], - "type": "dict", - "additional_attrs": true, - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "chown", - "label": "Run CHOWN", - "description": "It will run CHOWN on the path with the given fsGroup\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": "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": "Security and Permissions", - "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 and Devices", - "label": "Resource Limits", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "limits", - "label": "Advanced Limit Resource Consumption", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "4000m", - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "8Gi", - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - }, - { - "variable": "intel.com/i915", - "label": "Add Intel i915 GPUs", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "nvidia.com/gpu", - "label": "Add NVIDIA GPUs (Experimental)", - "schema": { - "type": "int", - "default": 0 - } - }, - { - "variable": "amd.com/gpu", - "label": "Add AMD GPUs", - "schema": { - "type": "int", - "default": 0 - } - } - ] - } - }, - { - "variable": "requests", - "label": "Minimum Resources Required (request)", - "schema": { - "additional_attrs": true, - "type": "dict", - "hidden": true, - "attrs": [ - { - "variable": "cpu", - "label": "CPU", - "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "10m", - "hidden": true, - "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" - } - }, - { - "variable": "memory", - "label": "RAM", - "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", - "schema": { - "type": "string", - "default": "50Mi", - "hidden": true, - "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" - } - } - ] - } - } - ] - } - }, - { - "variable": "deviceList", - "label": "Mount USB Devices", - "group": "Resources and Devices", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "deviceListEntry", - "label": "Device", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable the Storage", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "type", - "label": "(Advanced) Type of Storage", - "description": "Sets the persistence type", - "schema": { - "type": "string", - "default": "device", - "hidden": true - } - }, - { - "variable": "readOnly", - "label": "readOnly", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "hostPath", - "label": "Host Device Path", - "description": "Path to the device on the host system", - "schema": { - "type": "path" - } - }, - { - "variable": "mountPath", - "label": "Container Device Path", - "description": "Path inside the container the device is mounted", - "schema": { - "type": "string", - "default": "/dev/ttyACM0" - } - } - ] - } - } - ] - } - }, - { - "variable": "scaleGPU", - "label": "GPU Configuration", - "group": "Resources and Devices", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "scaleGPUEntry", - "label": "GPU", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "gpu", - "label": "Select GPU", - "schema": { - "additional_attrs": true, - "type": "dict", - "$ref": [ - "definitions/gpuConfiguration" - ], - "attrs": [] - } - }, - { - "variable": "workaround", - "label": "Workaround", - "schema": { - "type": "string", - "default": "workaround", - "hidden": 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": "apiKey", - "label": "Sabnzbd API key", - "description": "Can be found in the Bazarr settings", - "schema": { - "type": "string", - "default": "", - "required": true - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "networkPolicy", - "group": "Advanced", - "label": "(Advanced) Network Policy", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "netPolicyEntry", - "label": "Network Policy Entry", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "Name", - "schema": { - "type": "string", - "required": true, - "default": "" - } - }, - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "policyType", - "label": "Policy Type", - "schema": { - "type": "string", - "default": "", - "enum": [ - { - "value": "", - "description": "Default" - }, - { - "value": "ingress", - "description": "Ingress" - }, - { - "value": "egress", - "description": "Egress" - }, - { - "value": "ingress-egress", - "description": "Ingress and Egress" - } - ] - } - }, - { - "variable": "egress", - "label": "Egress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "egressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "to", - "label": "To", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "toEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "ingressEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "from", - "label": "From", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "fromEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "ipBlock", - "label": "IP Block", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "cidr", - "label": "CIDR", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "except", - "label": "Except", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "exceptint", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - }, - { - "variable": "namespaceSelector", - "label": "Namespace Selector", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "podSelector", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "matchExpressions", - "label": "Match Expressions", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "expressionEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "key", - "label": "Key", - "schema": { - "type": "string" - } - }, - { - "variable": "operator", - "label": "Operator", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "In", - "description": "In" - }, - { - "value": "NotIn", - "description": "NotIn" - }, - { - "value": "Exists", - "description": "Exists" - }, - { - "value": "DoesNotExist", - "description": "DoesNotExist" - } - ] - } - }, - { - "variable": "values", - "label": "Values", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "value", - "label": "", - "schema": { - "type": "string" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ports", - "label": "Ports", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "portsEntry", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int" - } - }, - { - "variable": "endPort", - "label": "End Port", - "schema": { - "type": "int" - } - }, - { - "variable": "protocol", - "label": "Protocol", - "schema": { - "type": "string", - "default": "TCP", - "enum": [ - { - "value": "TCP", - "description": "TCP" - }, - { - "value": "UDP", - "description": "UDP" - }, - { - "value": "SCTP", - "description": "SCTP" - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "addons", - "group": "Addons", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "Codeserver", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enabled", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "service", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "type", - "label": "Service Type", - "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", - "schema": { - "type": "string", - "default": "LoadBalancer", - "enum": [ - { - "value": "NodePort", - "description": "Deprecated CHANGE THIS" - }, - { - "value": "ClusterIP", - "description": "ClusterIP" - }, - { - "value": "LoadBalancer", - "description": "LoadBalancer" - } - ] - } - }, - { - "variable": "loadBalancerIP", - "label": "LoadBalancer IP", - "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", - "schema": { - "show_if": [ - [ - "type", - "=", - "LoadBalancer" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "ports", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "codeserver", - "label": "", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "port", - "label": "Port", - "schema": { - "type": "int", - "default": 36107 - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "ingress", - "label": "Ingress", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "Enable Ingress", - "schema": { - "type": "boolean", - "default": false, - "show_subquestions_if": true, - "subquestions": [ - { - "variable": "hosts", - "label": "Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "hostEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "host", - "label": "HostName", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "paths", - "label": "Paths", - "schema": { - "type": "list", - "default": [ - { - "path": "/", - "pathType": "Prefix" - } - ], - "items": [ - { - "variable": "pathEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "path", - "label": "Path", - "schema": { - "type": "string", - "required": true, - "default": "/" - } - }, - { - "variable": "pathType", - "label": "Path Type", - "schema": { - "type": "string", - "required": true, - "default": "Prefix" - } - } - ] - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "integrations", - "label": "Integrations", - "description": "Connect ingress with other charts", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "traefik", - "label": "Traefik", - "description": "Connect ingress with Traefik", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": true - } - }, - { - "variable": "allowCors", - "label": "Allow Cross Origin Requests (advanced)", - "schema": { - "type": "boolean", - "default": false, - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - }, - { - "variable": "entrypoints", - "label": "Entrypoints", - "schema": { - "type": "list", - "default": [ - "websecure" - ], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "entrypoint", - "label": "Entrypoint", - "schema": { - "type": "string" - } - } - ] - } - }, - { - "variable": "middlewares", - "label": "Middlewares", - "schema": { - "type": "list", - "default": [], - "show_if": [ - [ - "enabled", - "=", - true - ] - ], - "items": [ - { - "variable": "middleware", - "label": "Middleware", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "name", - "label": "name", - "schema": { - "type": "string", - "default": "", - "required": true - } - }, - { - "variable": "namespace", - "label": "namespace (optional)", - "schema": { - "type": "string", - "default": "" - } - } - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "certManager", - "label": "certManager", - "description": "Connect ingress with certManager", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "enabled", - "label": "enabled", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "certificateIssuer", - "label": "certificateIssuer", - "description": "defaults to chartname", - "schema": { - "type": "string", - "default": "", - "show_if": [ - [ - "enabled", - "=", - true - ] - ] - } - } - ] - } - } - ] - } - }, - { - "variable": "advanced", - "label": "Show Advanced Settings", - "description": "Advanced settings are not covered by TrueCharts Support", - "schema": { - "type": "boolean", - "default": false - } - }, - { - "variable": "ingressClassName", - "label": "(Advanced/Optional) IngressClass Name", - "schema": { - "type": "string", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": "" - } - }, - { - "variable": "tls", - "label": "TLS-Settings", - "schema": { - "type": "list", - "show_if": [ - [ - "advanced", - "=", - true - ] - ], - "default": [], - "items": [ - { - "variable": "tlsEntry", - "label": "Host", - "schema": { - "additional_attrs": true, - "type": "dict", - "attrs": [ - { - "variable": "hosts", - "label": "Certificate Hosts", - "schema": { - "type": "list", - "default": [], - "items": [ - { - "variable": "host", - "label": "Host", - "schema": { - "type": "string", - "default": "", - "required": true - } - } - ] - } - }, - { - "variable": "certificateIssuer", - "label": "Use Cert-Manager clusterIssuer", - "description": "add the name of your cert-manager clusterIssuer here for automatic tls certificates.", - "schema": { - "type": "string", - "default": "" - } - }, - { - "variable": "clusterCertificate", - "label": "Cluster Certificate (Advanced)", - "description": "Add the name of your cluster-wide certificate, that you set up in the ClusterIssuer chart.", - "schema": { - "type": "string", - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "default": "" - } - }, - { - "variable": "secretName", - "label": "Use Custom Certificate Secret (Advanced)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "string", - "default": "" - } - }, - { - "variable": "scaleCert", - "label": "Use TrueNAS SCALE Certificate (Deprecated)", - "schema": { - "show_if": [ - [ - "certificateIssuer", - "=", - "" - ] - ], - "type": "int", - "$ref": [ - "definitions/certificate" - ], - "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 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

              sabnzbd-17.2.9 (2024-02-05)

              \n

              Chore

              \n
                \n
              • update container image ghcr.io/onedr0p/sabnzbd to 4.2.2@5b1f15c by renovate (#17958)
              • \n
              \n

              sabnzbd-17.2.8 (2024-02-05)

              \n

              Chore

              \n
                \n
              • update container image ghcr.io/onedr0p/sabnzbd to v4.2.2@0343b55 by renovate (#17917)
              • \n
              \n

              sabnzbd-17.2.7 (2024-02-03)

              \n

              Chore

              \n
                \n
              • update container image common to v17.2.30@19ad5ec by renovate (#17804)
              • \n
              \n

              sabnzbd-17.2.6 (2024-01-26)

              \n

              Chore

              \n
                \n
              • update container image common to v17.2.29@d7c41a3 by renovate (#17545)
              • \n
              \n

              sabnzbd-17.2.5 (2024-01-21)

              \n

              Chore

              \n
                \n
              • update container image common to v17.2.28@918b4c5 by renovate (#17478)
              • \n
              \n

              sabnzbd-17.2.4 (2024-01-21)

              \n

              Chore

              \n
                \n
              • update container image common to v17.2.26@24c98f7 by renovate (#17409)
              • \n
              \n

              sabnzbd-17.2.3 (2024-01-21)

              \n

              Chore

              \n
                \n
              • update metadata in chart.yaml (#17457)
              • \n
              \n

              sabnzbd-17.2.2 (2024-01-09)

              \n

              Chore

              \n
                \n
              • update container image common to v17.2.22@e7c9056 by renovate (#16986)
              • \n
              " } } \ No newline at end of file diff --git a/stable/sonarr/app_versions.json b/stable/sonarr/app_versions.json index 1cae409427..1ee153685e 100644 --- a/stable/sonarr/app_versions.json +++ b/stable/sonarr/app_versions.json @@ -1,5384 +1,17 @@ { - "rolling": { - "healthy": true, - "supported": true, - "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/sonarr/rolling", - "last_update": "2024-07-14 12:35:14", - "required_features": [ - "definitions/timezone", - "normalize/interfaceConfiguration", - "definitions/certificate", - "definitions/interface" - ], - "human_version": "4.0.7.1863", - "version": "rolling", - "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": "rolling", - "dependencies": [ - { - "name": "common", - "version": "23.0.10", - "repository": "oci://tccr.io/truecharts", - "condition": "", - "alias": "", - "tags": [], - "import-values": [] - } - ], - "deprecated": false, - "description": "Smart PVR for newsgroup and bittorrent users", - "home": "https://truecharts.org/charts/stable/sonarr", - "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/sonarr.webp", - "keywords": [ - "sonarr", - "torrent", - "usenet" - ], - "kubeVersion": ">=1.24.0-0", - "maintainers": [ - { - "name": "TrueCharts", - "email": "info@truecharts.org", - "url": "https://truecharts.org" - } - ], - "name": "sonarr", - "sources": [ - "https://ghcr.io/onedr0p/exportarr", - "https://ghcr.io/onedr0p/sonarr", - "https://github.com/Sonarr/Sonarr", - "https://github.com/truecharts/charts/tree/master/charts/stable/sonarr" - ], - "type": "application", - "version": "rolling" - }, - "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": "SONARR__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": 8989, - "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": "

              Smart PVR for newsgroup and bittorrent users

              \n

              This App is supplied by TrueCharts, for more information visit the manual: https://truecharts.org/charts/stable/sonarr

              \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/sonarr

              \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/sonarr/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:

              " - }, "22.0.10": { "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/stable/sonarr/22.0.10", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/stable/sonarr/22.0.10", + "last_update": "2024-09-20 02:39:05", "required_features": [ - "definitions/timezone", - "normalize/interfaceConfiguration", "definitions/certificate", - "definitions/interface" + "normalize/interfaceConfiguration", + "definitions/interface", + "definitions/timezone" ], - "human_version": "4.0.7.1863", + "human_version": "4.0.4.1491_22.0.10", "version": "22.0.10", "chart_metadata": { "annotations": { @@ -5392,7 +25,7 @@ "dependencies": [ { "name": "common", - "version": "23.0.10", + "version": "23.0.11", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", diff --git a/stable/sonarr/rolling/.helmignore b/stable/sonarr/rolling/.helmignore deleted file mode 100644 index feb7464da6..0000000000 --- a/stable/sonarr/rolling/.helmignore +++ /dev/null @@ -1,32 +0,0 @@ -# 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/sonarr/rolling/CHANGELOG.md b/stable/sonarr/rolling/CHANGELOG.md deleted file mode 100644 index 941abb8a21..0000000000 --- a/stable/sonarr/rolling/CHANGELOG.md +++ /dev/null @@ -1,3 +0,0 @@ -*for the complete changelog, please refer to the website* - -**Important:** \ No newline at end of file diff --git a/stable/sonarr/rolling/Chart.yaml b/stable/sonarr/rolling/Chart.yaml deleted file mode 100644 index 6aa732bdba..0000000000 --- a/stable/sonarr/rolling/Chart.yaml +++ /dev/null @@ -1,36 +0,0 @@ -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: rolling -dependencies: - - name: common - version: 23.0.11 - repository: oci://tccr.io/truecharts - condition: "" - alias: "" - tags: [] - import-values: [] -deprecated: false -description: Smart PVR for newsgroup and bittorrent users -home: https://truecharts.org/charts/stable/sonarr -icon: https://truecharts.org/img/hotlink-ok/chart-icons/sonarr.webp -keywords: - - sonarr - - torrent - - usenet -kubeVersion: '>=1.24.0-0' -maintainers: - - name: TrueCharts - email: info@truecharts.org - url: https://truecharts.org -name: sonarr -sources: - - https://ghcr.io/onedr0p/exportarr - - https://ghcr.io/onedr0p/sonarr - - https://github.com/Sonarr/Sonarr - - https://github.com/truecharts/charts/tree/master/charts/stable/sonarr -type: application -version: rolling diff --git a/stable/sonarr/rolling/README.md b/stable/sonarr/rolling/README.md deleted file mode 100644 index d08132275a..0000000000 --- a/stable/sonarr/rolling/README.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -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/sonarr) - -**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/sonarr - -## 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/sonarr/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/sonarr/rolling/app-readme.md b/stable/sonarr/rolling/app-readme.md deleted file mode 100644 index ec61484a6b..0000000000 --- a/stable/sonarr/rolling/app-readme.md +++ /dev/null @@ -1,8 +0,0 @@ -Smart PVR for newsgroup and bittorrent users - -This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/sonarr](https://truecharts.org/charts/stable/sonarr) - ---- - -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/sonarr/rolling/charts/common-23.0.10.tgz b/stable/sonarr/rolling/charts/common-23.0.10.tgz deleted file mode 100644 index 5eefcb329be559e54998b5f211021daca81c39ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96939 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 diff --git a/stable/sonarr/rolling/icon-small.webp b/stable/sonarr/rolling/icon-small.webp deleted file mode 100644 index 58454f7dd1f507651cf52fe918d89e0a7c80a7bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 628 zcmV-)0*n1pNk&F&0ssJ4MM6+kP&il$0000G0000V0018V06|PpNX-BM00Dp;Ns=Nd z1z7x%1dPWh4C}-AVm?ur??f1*XM@>tPo)MCF#&MQt)9O4+W4;*8$}4VZ&lY(KTgF- z?b&Wjdy;jke0K%^8xHe+S2S84Qw_SpVQobEw=4da9y;t24*^VAhV20NUFsbQilg#t zUGnNF>+Fg3;<0?g(!7Y}zq4L0S!bK9)uQI893D8gz=UPk7JviB9ss1inP48{OP>|R9vHuJXj0hnqIlb@z0LZf^44Zc8193?U{nOZ}j$TekxveE-0rb$FDM|WM>zN;o zNanEu8pBu5qqUoGcya8sL7yjW><`=j;^Ao-g~(sLMJ-8sT;2cP>=((~wBZI>($h!h zplN33BdG=zZMCe2bzR+Ey(98!Xv1bqlV9QXEu;e~nrHrhL!^6grb|W?^NXLqhh$V? zkXlBRkj?~8{kUHfxR;?ApsK`i6rD2;#1lwos<@u7p_BsR!hT0g@7Im$2k3*~3SBWS z*U7$o@27WKI*%Y-aHYJPKV`+x>x)EM_=f5cklJfVmHbY>Vyl+|8y=@Q`2B7M_Yn|4 z)(;AnIIES+S}`86vdCJG>7voV2q3{M`sd~YkYAk41kq+SPlH&0MZQEhTL_gxXOdl= O?;n~(JlKtN0000jS|98H diff --git a/stable/sonarr/rolling/icon.webp b/stable/sonarr/rolling/icon.webp deleted file mode 100644 index 7ec595b001835acb36e7b8e9c0f44039caac7373..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3402 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 diff --git a/stable/sonarr/rolling/ix_values.yaml b/stable/sonarr/rolling/ix_values.yaml deleted file mode 100644 index 54e7ce080c..0000000000 --- a/stable/sonarr/rolling/ix_values.yaml +++ /dev/null @@ -1,106 +0,0 @@ -image: - repository: ghcr.io/onedr0p/sonarr - pullPolicy: IfNotPresent - tag: rolling -exportarrImage: - repository: ghcr.io/onedr0p/exportarr - pullPolicy: IfNotPresent - tag: v2.0.1@sha256:727e7bc8f2f0934a2117978c59f4476b954018b849a010ea6cfb380bd6539644 -service: - main: - ports: - main: - port: 8989 - metrics: - enabled: true - type: ClusterIP - targetSelector: exportarr - ports: - metrics: - enabled: true - port: 8990 - targetSelector: exportarr -workload: - main: - podSpec: - containers: - main: - probes: - liveness: - enabled: true - type: http - path: /ping - readiness: - enabled: true - type: http - path: /ping - startup: - enabled: true - type: http - path: /ping - env: - SONARR__PORT: "{{ .Values.service.main.ports.main.port }}" - SONARR__AUTHENTICATION_METHOD: "" - exportarr: - enabled: true - type: Deployment - strategy: RollingUpdate - replicas: 1 - podSpec: - containers: - exportarr: - primary: true - enabled: true - imageSelector: exportarrImage - args: - - sonarr - 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 - CONFIG: "/config/config.xml" -persistence: - config: - enabled: true - targetSelector: - main: - main: - mountPath: /config - exportarr: - exportarr: - mountPath: /config - readOnly: true -metrics: - main: - enabled: true - type: "servicemonitor" - endpoints: - - port: metrics - path: /metrics - targetSelector: metrics - prometheusRule: - enabled: false -portal: - open: - enabled: true -updated: true diff --git a/stable/sonarr/rolling/questions.yaml b/stable/sonarr/rolling/questions.yaml deleted file mode 100644 index e375acf455..0000000000 --- a/stable/sonarr/rolling/questions.yaml +++ /dev/null @@ -1,3214 +0,0 @@ -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: SONARR__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: 8989 - 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/sonarr/rolling/templates/NOTES.txt b/stable/sonarr/rolling/templates/NOTES.txt deleted file mode 100644 index efcb74cb77..0000000000 --- a/stable/sonarr/rolling/templates/NOTES.txt +++ /dev/null @@ -1 +0,0 @@ -{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/sonarr/rolling/templates/common.yaml b/stable/sonarr/rolling/templates/common.yaml deleted file mode 100644 index 3c93f57861..0000000000 --- a/stable/sonarr/rolling/templates/common.yaml +++ /dev/null @@ -1,11 +0,0 @@ -{{/* Make sure all variables are set properly */}} -{{- include "tc.v1.common.loader.init" . -}} - -{{/* Disable [exportarr] if requested */}} -{{- if not .Values.metrics.main.enabled -}} - {{- $_ := set .Values.workload.exportarr "enabled" false -}} - {{- $_ := set .Values.service.metrics "enabled" false -}} -{{- end -}} - -{{/* Render the templates */}} -{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/sonarr/rolling/values.yaml b/stable/sonarr/rolling/values.yaml deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/system/cert-manager/app_versions.json b/system/cert-manager/app_versions.json index 2c0a286d9b..49422a1eab 100644 --- a/system/cert-manager/app_versions.json +++ b/system/cert-manager/app_versions.json @@ -3,8 +3,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/cert-manager/5.0.4", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/cert-manager/5.0.4", + "last_update": "2024-09-20 03:10:48", "required_features": [], "human_version": "latest_5.0.4", "version": "5.0.4", @@ -20,7 +20,7 @@ "dependencies": [ { "name": "common", - "version": "23.0.0", + "version": "23.0.11", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -29,7 +29,7 @@ }, { "name": "cert-manager", - "version": "v1.14.5", + "version": "v1.15.3", "repository": "https://charts.jetstack.io", "condition": "", "alias": "certmanager", @@ -335,8 +335,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/cert-manager/5.0.3", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/cert-manager/5.0.3", + "last_update": "2024-09-20 02:42:44", "required_features": [], "human_version": "latest_5.0.3", "version": "5.0.3", @@ -361,7 +361,7 @@ }, { "name": "cert-manager", - "version": "v1.14.5", + "version": "v1.15.3", "repository": "https://charts.jetstack.io", "condition": "", "alias": "certmanager", @@ -683,8 +683,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/cert-manager/4.8.18", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/cert-manager/4.8.18", + "last_update": "2024-09-22 11:56:32", "required_features": [], "human_version": "latest_4.8.18", "version": "4.8.18", @@ -702,7 +702,7 @@ "dependencies": [ { "name": "common", - "version": "20.3.12", + "version": "20.4.1", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -711,7 +711,7 @@ }, { "name": "cert-manager", - "version": "v1.14.5", + "version": "v1.15.3", "repository": "https://charts.jetstack.io", "condition": "", "alias": "certmanager", @@ -888,8 +888,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/cert-manager/4.8.17", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/cert-manager/4.8.17", + "last_update": "2024-09-22 11:56:32", "required_features": [], "human_version": "latest_4.8.17", "version": "4.8.17", @@ -907,7 +907,7 @@ "dependencies": [ { "name": "common", - "version": "20.3.11", + "version": "20.4.1", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -916,7 +916,7 @@ }, { "name": "cert-manager", - "version": "v1.14.5", + "version": "v1.15.3", "repository": "https://charts.jetstack.io", "condition": "", "alias": "certmanager", diff --git a/system/cloudnative-pg/app_versions.json b/system/cloudnative-pg/app_versions.json index c228990411..dfc758a340 100644 --- a/system/cloudnative-pg/app_versions.json +++ b/system/cloudnative-pg/app_versions.json @@ -3,8 +3,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/cloudnative-pg/7.0.5", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/cloudnative-pg/7.0.5", + "last_update": "2024-09-20 03:10:48", "required_features": [], "human_version": "latest_7.0.5", "version": "7.0.5", @@ -20,7 +20,7 @@ "dependencies": [ { "name": "common", - "version": "23.0.0", + "version": "23.0.11", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -29,7 +29,7 @@ }, { "name": "cloudnative-pg", - "version": "0.20.2", + "version": "0.22.0", "repository": "https://cloudnative-pg.github.io/charts", "condition": "", "alias": "cloudnative-pg", @@ -175,8 +175,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/cloudnative-pg/7.0.4", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/cloudnative-pg/7.0.4", + "last_update": "2024-09-20 03:10:48", "required_features": [], "human_version": "latest_7.0.4", "version": "7.0.4", @@ -192,7 +192,7 @@ "dependencies": [ { "name": "common", - "version": "23.0.0", + "version": "23.0.11", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -201,7 +201,7 @@ }, { "name": "cloudnative-pg", - "version": "0.20.2", + "version": "0.22.0", "repository": "https://cloudnative-pg.github.io/charts", "condition": "", "alias": "cloudnative-pg", @@ -476,8 +476,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/cloudnative-pg/6.10.2", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/cloudnative-pg/6.10.2", + "last_update": "2024-09-22 11:56:32", "required_features": [], "human_version": "latest_6.10.2", "version": "6.10.2", @@ -495,7 +495,7 @@ "dependencies": [ { "name": "common", - "version": "20.3.12", + "version": "20.4.1", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -504,7 +504,7 @@ }, { "name": "cloudnative-pg", - "version": "0.20.2", + "version": "0.22.0", "repository": "https://cloudnative-pg.github.io/charts", "condition": "", "alias": "cloudnative-pg", diff --git a/system/grafana-agent-operator/app_versions.json b/system/grafana-agent-operator/app_versions.json index c2b15767fe..ea84aad4bc 100644 --- a/system/grafana-agent-operator/app_versions.json +++ b/system/grafana-agent-operator/app_versions.json @@ -3,8 +3,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/grafana-agent-operator/1.8.7", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/grafana-agent-operator/1.8.7", + "last_update": "2024-09-22 11:56:32", "required_features": [], "human_version": "0.39.2_1.8.7", "version": "1.8.7", @@ -22,7 +22,7 @@ "dependencies": [ { "name": "common", - "version": "20.3.11", + "version": "20.4.1", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -192,8 +192,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/grafana-agent-operator/1.8.6", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/grafana-agent-operator/1.8.6", + "last_update": "2024-09-22 11:56:32", "required_features": [], "human_version": "0.39.2_1.8.6", "version": "1.8.6", @@ -211,7 +211,7 @@ "dependencies": [ { "name": "common", - "version": "20.3.7", + "version": "20.4.1", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", diff --git a/system/kubeapps/app_versions.json b/system/kubeapps/app_versions.json index f1653fd50d..7b04f266b2 100644 --- a/system/kubeapps/app_versions.json +++ b/system/kubeapps/app_versions.json @@ -3,11 +3,11 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/kubeapps/3.0.5", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/kubeapps/3.0.5", + "last_update": "2024-09-22 12:00:19", "required_features": [ - "definitions/interface", - "normalize/interfaceConfiguration" + "normalize/interfaceConfiguration", + "definitions/interface" ], "human_version": "0.0.3_3.0.5", "version": "3.0.5", @@ -23,7 +23,7 @@ "dependencies": [ { "name": "common", - "version": "23.0.0", + "version": "23.0.11", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -32,7 +32,7 @@ }, { "name": "kubeapps", - "version": "15.0.3", + "version": "15.3.10", "repository": "oci://registry-1.docker.io/bitnamicharts", "condition": "", "alias": "ogkubeapps", @@ -1790,11 +1790,11 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/kubeapps/3.0.4", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/kubeapps/3.0.4", + "last_update": "2024-09-22 12:00:19", "required_features": [ - "definitions/interface", - "normalize/interfaceConfiguration" + "normalize/interfaceConfiguration", + "definitions/interface" ], "human_version": "0.0.3_3.0.4", "version": "3.0.4", @@ -1810,7 +1810,7 @@ "dependencies": [ { "name": "common", - "version": "23.0.0", + "version": "23.0.11", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -1819,7 +1819,7 @@ }, { "name": "kubeapps", - "version": "15.0.2", + "version": "15.3.10", "repository": "oci://registry-1.docker.io/bitnamicharts", "condition": "", "alias": "ogkubeapps", @@ -3577,11 +3577,11 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/kubeapps/2.10.16", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/kubeapps/2.10.16", + "last_update": "2024-09-23 18:38:33", "required_features": [ - "definitions/interface", - "normalize/interfaceConfiguration" + "normalize/interfaceConfiguration", + "definitions/interface" ], "human_version": "0.0.3_2.10.16", "version": "2.10.16", @@ -3599,7 +3599,7 @@ "dependencies": [ { "name": "common", - "version": "20.3.12", + "version": "20.4.1", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -3608,7 +3608,7 @@ }, { "name": "kubeapps", - "version": "15.0.2", + "version": "15.3.10", "repository": "oci://registry-1.docker.io/bitnamicharts", "condition": "", "alias": "ogkubeapps", @@ -5237,11 +5237,11 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/kubeapps/2.10.15", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/kubeapps/2.10.15", + "last_update": "2024-09-23 18:38:33", "required_features": [ - "definitions/interface", - "normalize/interfaceConfiguration" + "normalize/interfaceConfiguration", + "definitions/interface" ], "human_version": "0.0.3_2.10.15", "version": "2.10.15", @@ -5259,7 +5259,7 @@ "dependencies": [ { "name": "common", - "version": "20.3.11", + "version": "20.4.1", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -5268,7 +5268,7 @@ }, { "name": "kubeapps", - "version": "15.0.2", + "version": "15.3.10", "repository": "oci://registry-1.docker.io/bitnamicharts", "condition": "", "alias": "ogkubeapps", diff --git a/system/kubernetes-reflector/app_versions.json b/system/kubernetes-reflector/app_versions.json index 3c6208ae18..834221e123 100644 --- a/system/kubernetes-reflector/app_versions.json +++ b/system/kubernetes-reflector/app_versions.json @@ -3,8 +3,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/kubernetes-reflector/5.0.4", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/kubernetes-reflector/5.0.4", + "last_update": "2024-09-20 02:39:05", "required_features": [ "definitions/certificate" ], @@ -22,7 +22,7 @@ "dependencies": [ { "name": "common", - "version": "23.0.0", + "version": "23.0.11", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -2272,8 +2272,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/kubernetes-reflector/5.0.3", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/kubernetes-reflector/5.0.3", + "last_update": "2024-07-15 04:01:57", "required_features": [ "definitions/certificate" ], @@ -4557,8 +4557,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/kubernetes-reflector/4.8.15", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/kubernetes-reflector/4.8.15", + "last_update": "2024-09-22 11:56:32", "required_features": [ "definitions/certificate" ], @@ -4578,7 +4578,7 @@ "dependencies": [ { "name": "common", - "version": "20.3.12", + "version": "20.4.1", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -6699,8 +6699,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/kubernetes-reflector/4.8.14", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/kubernetes-reflector/4.8.14", + "last_update": "2024-09-22 11:56:32", "required_features": [ "definitions/certificate" ], @@ -6720,7 +6720,7 @@ "dependencies": [ { "name": "common", - "version": "20.3.11", + "version": "20.4.1", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", diff --git a/system/metallb/app_versions.json b/system/metallb/app_versions.json index 945879a3ce..28de5393af 100644 --- a/system/metallb/app_versions.json +++ b/system/metallb/app_versions.json @@ -3,8 +3,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/metallb/15.0.4", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/metallb/15.0.4", + "last_update": "2024-09-20 03:11:45", "required_features": [], "human_version": "latest_15.0.4", "version": "15.0.4", @@ -20,7 +20,7 @@ "dependencies": [ { "name": "common", - "version": "23.0.0", + "version": "23.0.11", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -29,7 +29,7 @@ }, { "name": "metallb", - "version": "0.14.5", + "version": "0.14.8", "repository": "https://metallb.github.io/metallb", "condition": "", "alias": "metallb", @@ -303,8 +303,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/metallb/15.0.3", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/metallb/15.0.3", + "last_update": "2024-09-20 02:28:12", "required_features": [], "human_version": "latest_15.0.3", "version": "15.0.3", @@ -329,7 +329,7 @@ }, { "name": "metallb", - "version": "0.14.5", + "version": "0.14.8", "repository": "https://metallb.github.io/metallb", "condition": "", "alias": "metallb", @@ -619,8 +619,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/metallb/14.8.16", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/metallb/14.8.16", + "last_update": "2024-09-22 11:56:32", "required_features": [], "human_version": "latest_14.8.16", "version": "14.8.16", @@ -638,7 +638,7 @@ "dependencies": [ { "name": "common", - "version": "20.3.12", + "version": "20.4.1", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -647,7 +647,7 @@ }, { "name": "metallb", - "version": "0.14.5", + "version": "0.14.8", "repository": "https://metallb.github.io/metallb", "condition": "", "alias": "metallb", @@ -792,8 +792,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/metallb/14.8.15", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/metallb/14.8.15", + "last_update": "2024-09-22 11:56:32", "required_features": [], "human_version": "latest_14.8.15", "version": "14.8.15", @@ -811,7 +811,7 @@ "dependencies": [ { "name": "common", - "version": "20.3.11", + "version": "20.4.1", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -820,7 +820,7 @@ }, { "name": "metallb", - "version": "0.14.5", + "version": "0.14.8", "repository": "https://metallb.github.io/metallb", "condition": "", "alias": "metallb", diff --git a/system/openebs/app_versions.json b/system/openebs/app_versions.json index f8eb3c7885..b580b15bdd 100644 --- a/system/openebs/app_versions.json +++ b/system/openebs/app_versions.json @@ -3,8 +3,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/openebs/6.0.1", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/openebs/6.0.1", + "last_update": "2024-09-20 03:10:48", "required_features": [], "human_version": "latest_6.0.1", "version": "6.0.1", @@ -20,7 +20,7 @@ "dependencies": [ { "name": "common", - "version": "23.0.0", + "version": "23.0.11", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -29,7 +29,7 @@ }, { "name": "localpv-provisioner", - "version": "4.0.0", + "version": "4.1.1", "repository": "https://openebs.github.io/dynamic-localpv-provisioner", "condition": "localpv-provisioner.enabled", "alias": "", @@ -38,7 +38,7 @@ }, { "name": "zfs-localpv", - "version": "2.5.1", + "version": "2.6.1", "repository": "https://openebs.github.io/zfs-localpv", "condition": "zfs-localpv.enabled", "alias": "", @@ -47,7 +47,7 @@ }, { "name": "lvm-localpv", - "version": "1.5.1", + "version": "1.6.2", "repository": "https://openebs.github.io/lvm-localpv", "condition": "lvm-localpv.enabled", "alias": "", @@ -468,8 +468,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/openebs/6.0.0", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/openebs/6.0.0", + "last_update": "2024-09-20 03:10:48", "required_features": [], "human_version": "latest_6.0.0", "version": "6.0.0", @@ -485,7 +485,7 @@ "dependencies": [ { "name": "common", - "version": "23.0.0", + "version": "23.0.11", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -494,7 +494,7 @@ }, { "name": "localpv-provisioner", - "version": "4.0.0", + "version": "4.1.1", "repository": "https://openebs.github.io/dynamic-localpv-provisioner", "condition": "localpv-provisioner.enabled", "alias": "", @@ -503,7 +503,7 @@ }, { "name": "zfs-localpv", - "version": "2.5.1", + "version": "2.6.1", "repository": "https://openebs.github.io/zfs-localpv", "condition": "zfs-localpv.enabled", "alias": "", @@ -512,7 +512,7 @@ }, { "name": "lvm-localpv", - "version": "1.5.1", + "version": "1.6.2", "repository": "https://openebs.github.io/lvm-localpv", "condition": "lvm-localpv.enabled", "alias": "", @@ -933,8 +933,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/openebs/5.1.2", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/openebs/5.1.2", + "last_update": "2024-09-20 03:10:48", "required_features": [], "human_version": "latest_5.1.2", "version": "5.1.2", @@ -950,7 +950,7 @@ "dependencies": [ { "name": "common", - "version": "23.0.0", + "version": "23.0.11", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -959,7 +959,7 @@ }, { "name": "localpv-provisioner", - "version": "4.0.0", + "version": "4.1.1", "repository": "https://openebs.github.io/dynamic-localpv-provisioner", "condition": "localpv-provisioner.enabled", "alias": "", @@ -968,7 +968,7 @@ }, { "name": "zfs-localpv", - "version": "2.5.1", + "version": "2.6.1", "repository": "https://openebs.github.io/zfs-localpv", "condition": "zfs-localpv.enabled", "alias": "", @@ -977,7 +977,7 @@ }, { "name": "lvm-localpv", - "version": "1.5.1", + "version": "1.6.2", "repository": "https://openebs.github.io/lvm-localpv", "condition": "lvm-localpv.enabled", "alias": "", @@ -1389,8 +1389,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/openebs/5.1.1", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/openebs/5.1.1", + "last_update": "2024-09-20 03:10:48", "required_features": [], "human_version": "latest_5.1.1", "version": "5.1.1", @@ -1406,7 +1406,7 @@ "dependencies": [ { "name": "common", - "version": "23.0.0", + "version": "23.0.11", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -1415,7 +1415,7 @@ }, { "name": "localpv-provisioner", - "version": "4.0.0", + "version": "4.1.1", "repository": "https://openebs.github.io/dynamic-localpv-provisioner", "condition": "localpv-provisioner.enabled", "alias": "", @@ -1424,7 +1424,7 @@ }, { "name": "zfs-localpv", - "version": "2.5.1", + "version": "2.6.1", "repository": "https://openebs.github.io/zfs-localpv", "condition": "zfs-localpv.enabled", "alias": "", @@ -1433,7 +1433,7 @@ }, { "name": "lvm-localpv", - "version": "1.5.1", + "version": "1.6.2", "repository": "https://openebs.github.io/lvm-localpv", "condition": "lvm-localpv.enabled", "alias": "", @@ -1845,8 +1845,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/openebs/4.4.3", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/openebs/4.4.3", + "last_update": "2024-09-22 11:56:32", "required_features": [], "human_version": "latest_4.4.3", "version": "4.4.3", @@ -1864,7 +1864,7 @@ "dependencies": [ { "name": "common", - "version": "20.3.12", + "version": "20.4.1", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -1873,7 +1873,7 @@ }, { "name": "localpv-provisioner", - "version": "4.0.0", + "version": "4.1.1", "repository": "https://openebs.github.io/dynamic-localpv-provisioner", "condition": "localpv-provisioner.enabled", "alias": "", @@ -1882,7 +1882,7 @@ }, { "name": "zfs-localpv", - "version": "2.5.1", + "version": "2.6.1", "repository": "https://openebs.github.io/zfs-localpv", "condition": "zfs-localpv.enabled", "alias": "", @@ -1891,7 +1891,7 @@ }, { "name": "lvm-localpv", - "version": "1.5.1", + "version": "1.6.2", "repository": "https://openebs.github.io/lvm-localpv", "condition": "lvm-localpv.enabled", "alias": "", @@ -2247,8 +2247,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/openebs/4.4.2", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/openebs/4.4.2", + "last_update": "2024-09-22 11:56:32", "required_features": [], "human_version": "latest_4.4.2", "version": "4.4.2", @@ -2266,7 +2266,7 @@ "dependencies": [ { "name": "common", - "version": "20.3.11", + "version": "20.4.1", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -2275,7 +2275,7 @@ }, { "name": "localpv-provisioner", - "version": "4.0.0", + "version": "4.1.1", "repository": "https://openebs.github.io/dynamic-localpv-provisioner", "condition": "localpv-provisioner.enabled", "alias": "", @@ -2284,7 +2284,7 @@ }, { "name": "zfs-localpv", - "version": "2.5.1", + "version": "2.6.1", "repository": "https://openebs.github.io/zfs-localpv", "condition": "zfs-localpv.enabled", "alias": "", @@ -2293,7 +2293,7 @@ }, { "name": "lvm-localpv", - "version": "1.5.1", + "version": "1.6.2", "repository": "https://openebs.github.io/lvm-localpv", "condition": "lvm-localpv.enabled", "alias": "", @@ -2649,8 +2649,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/openebs/3.7.5", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/openebs/3.7.5", + "last_update": "2024-09-22 11:56:32", "required_features": [], "human_version": "latest_3.7.5", "version": "3.7.5", @@ -2668,7 +2668,7 @@ "dependencies": [ { "name": "common", - "version": "20.2.4", + "version": "20.4.1", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -2986,8 +2986,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/openebs/3.7.4", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/openebs/3.7.4", + "last_update": "2024-09-22 11:56:32", "required_features": [], "human_version": "latest_3.7.4", "version": "3.7.4", @@ -3005,7 +3005,7 @@ "dependencies": [ { "name": "common", - "version": "20.2.3", + "version": "20.4.1", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", diff --git a/system/prometheus-operator/app_versions.json b/system/prometheus-operator/app_versions.json index 70fe2a0c06..eadf5290af 100644 --- a/system/prometheus-operator/app_versions.json +++ b/system/prometheus-operator/app_versions.json @@ -3,8 +3,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/prometheus-operator/7.0.4", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/prometheus-operator/7.0.4", + "last_update": "2024-09-20 03:10:48", "required_features": [], "human_version": "latest_7.0.4", "version": "7.0.4", @@ -20,7 +20,7 @@ "dependencies": [ { "name": "common", - "version": "23.0.0", + "version": "23.0.11", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -29,7 +29,7 @@ }, { "name": "kube-prometheus-stack", - "version": "56.21.0", + "version": "56.21.4", "repository": "oci://ghcr.io/prometheus-community/charts", "condition": "", "alias": "kps", @@ -303,8 +303,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/prometheus-operator/7.0.3", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/prometheus-operator/7.0.3", + "last_update": "2024-09-20 02:40:37", "required_features": [], "human_version": "latest_7.0.3", "version": "7.0.3", @@ -329,7 +329,7 @@ }, { "name": "kube-prometheus-stack", - "version": "56.21.0", + "version": "56.21.4", "repository": "oci://ghcr.io/prometheus-community/charts", "condition": "", "alias": "kps", @@ -619,8 +619,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/prometheus-operator/6.10.15", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/prometheus-operator/6.10.15", + "last_update": "2024-09-22 11:56:32", "required_features": [], "human_version": "latest_6.10.15", "version": "6.10.15", @@ -638,7 +638,7 @@ "dependencies": [ { "name": "common", - "version": "20.3.12", + "version": "20.4.1", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -647,7 +647,7 @@ }, { "name": "kube-prometheus-stack", - "version": "56.21.0", + "version": "56.21.4", "repository": "oci://ghcr.io/prometheus-community/charts", "condition": "", "alias": "kps", @@ -792,8 +792,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/prometheus-operator/6.10.14", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/prometheus-operator/6.10.14", + "last_update": "2024-09-22 11:56:32", "required_features": [], "human_version": "latest_6.10.14", "version": "6.10.14", @@ -811,7 +811,7 @@ "dependencies": [ { "name": "common", - "version": "20.3.11", + "version": "20.4.1", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -820,7 +820,7 @@ }, { "name": "kube-prometheus-stack", - "version": "56.21.0", + "version": "56.21.4", "repository": "oci://ghcr.io/prometheus-community/charts", "condition": "", "alias": "kps", diff --git a/system/snapshot-controller/app_versions.json b/system/snapshot-controller/app_versions.json index 08fb9cc0b6..498ffc333e 100644 --- a/system/snapshot-controller/app_versions.json +++ b/system/snapshot-controller/app_versions.json @@ -3,8 +3,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/snapshot-controller/1.0.1", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/snapshot-controller/1.0.1", + "last_update": "2024-09-20 02:39:05", "required_features": [], "human_version": "7.0.1_1.0.1", "version": "1.0.1", @@ -20,7 +20,7 @@ "dependencies": [ { "name": "common", - "version": "23.0.0", + "version": "23.0.11", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -188,8 +188,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/snapshot-controller/1.0.0", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/snapshot-controller/1.0.0", + "last_update": "2024-07-15 04:01:57", "required_features": [], "human_version": "7.0.1_1.0.0", "version": "1.0.0", diff --git a/system/traefik-crds/app_versions.json b/system/traefik-crds/app_versions.json index da208f926a..fc8bc4006a 100644 --- a/system/traefik-crds/app_versions.json +++ b/system/traefik-crds/app_versions.json @@ -3,8 +3,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/traefik-crds/2.0.4", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/traefik-crds/2.0.4", + "last_update": "2024-09-20 02:39:05", "required_features": [], "human_version": "latest_2.0.4", "version": "2.0.4", @@ -20,7 +20,7 @@ "dependencies": [ { "name": "common", - "version": "23.0.0", + "version": "23.0.11", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -201,8 +201,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/traefik-crds/2.0.3", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/traefik-crds/2.0.3", + "last_update": "2024-07-15 04:01:57", "required_features": [], "human_version": "latest_2.0.3", "version": "2.0.3", @@ -399,8 +399,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/traefik-crds/1.0.0", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/traefik-crds/1.0.0", + "last_update": "2024-09-22 11:56:32", "required_features": [], "human_version": "latest_1.0.0", "version": "1.0.0", @@ -418,7 +418,7 @@ "dependencies": [ { "name": "common", - "version": "20.3.12", + "version": "20.4.1", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -599,8 +599,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/traefik-crds/0.4.15", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/traefik-crds/0.4.15", + "last_update": "2024-09-22 11:56:32", "required_features": [], "human_version": "latest_0.4.15", "version": "0.4.15", @@ -618,7 +618,7 @@ "dependencies": [ { "name": "common", - "version": "20.3.12", + "version": "20.4.1", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -799,8 +799,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/traefik-crds/0.4.14", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/traefik-crds/0.4.14", + "last_update": "2024-09-22 11:56:32", "required_features": [], "human_version": "latest_0.4.14", "version": "0.4.14", @@ -818,7 +818,7 @@ "dependencies": [ { "name": "common", - "version": "20.3.11", + "version": "20.4.1", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", diff --git a/system/velero/app_versions.json b/system/velero/app_versions.json index b0a555498c..da2612aee1 100644 --- a/system/velero/app_versions.json +++ b/system/velero/app_versions.json @@ -3,8 +3,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/velero/4.7.5", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/velero/4.7.5", + "last_update": "2024-09-22 11:56:32", "required_features": [], "human_version": "latest_4.7.5", "version": "4.7.5", @@ -22,7 +22,7 @@ "dependencies": [ { "name": "common", - "version": "20.2.10", + "version": "20.4.1", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -612,8 +612,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/velero/4.7.4", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/velero/4.7.4", + "last_update": "2024-09-22 11:56:32", "required_features": [], "human_version": "latest_4.7.4", "version": "4.7.4", @@ -631,7 +631,7 @@ "dependencies": [ { "name": "common", - "version": "20.2.9", + "version": "20.4.1", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", diff --git a/system/volsync/app_versions.json b/system/volsync/app_versions.json index 4bf7204f04..acde5060ec 100644 --- a/system/volsync/app_versions.json +++ b/system/volsync/app_versions.json @@ -3,11 +3,11 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/volsync/1.0.8", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/volsync/1.0.8", + "last_update": "2024-09-20 02:39:05", "required_features": [ - "definitions/timezone", - "definitions/certificate" + "definitions/certificate", + "definitions/timezone" ], "human_version": "0.9.1_1.0.8", "version": "1.0.8", @@ -23,7 +23,7 @@ "dependencies": [ { "name": "common", - "version": "23.0.0", + "version": "23.0.11", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", diff --git a/system/volumesnapshots/app_versions.json b/system/volumesnapshots/app_versions.json index f565942b77..db7cc7f2a6 100644 --- a/system/volumesnapshots/app_versions.json +++ b/system/volumesnapshots/app_versions.json @@ -3,8 +3,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/volumesnapshots/2.0.3", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/volumesnapshots/2.0.3", + "last_update": "2024-07-15 04:01:57", "required_features": [], "human_version": "latest_2.0.3", "version": "2.0.3", @@ -187,8 +187,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/volumesnapshots/2.0.2", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/volumesnapshots/2.0.2", + "last_update": "2024-09-20 02:33:53", "required_features": [], "human_version": "latest_2.0.2", "version": "2.0.2", @@ -204,7 +204,7 @@ "dependencies": [ { "name": "common", - "version": "22.0.2", + "version": "22.0.3", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "", @@ -371,8 +371,8 @@ "healthy": true, "supported": true, "healthy_error": null, - "location": "/home/runner/_work/catalog/catalog/system/volumesnapshots/1.0.0", - "last_update": "2024-05-29 12:35:14", + "location": "/app/catalog/system/volumesnapshots/1.0.0", + "last_update": "2024-09-22 11:56:32", "required_features": [], "human_version": "latest_1.0.0", "version": "1.0.0", @@ -390,7 +390,7 @@ "dependencies": [ { "name": "common", - "version": "20.3.12", + "version": "20.4.1", "repository": "oci://tccr.io/truecharts", "condition": "", "alias": "",