From 28b2d3eeb050990e15e50f778c12a83e3ddff405 Mon Sep 17 00:00:00 2001 From: Chris Date: Mon, 25 Mar 2024 13:35:56 +0200 Subject: [PATCH] Added items from truecharts --- dev/ollama/0.0.2/CHANGELOG.md | 13 + dev/ollama/0.0.2/Chart.yaml | 38 + dev/ollama/0.0.2/README.md | 28 + dev/ollama/0.0.2/app-changelog.md | 3 + dev/ollama/0.0.2/app-readme.md | 8 + dev/ollama/0.0.2/charts/common-17.2.21.tgz | Bin 0 -> 97599 bytes dev/ollama/0.0.2/ix_values.yaml | 99 + dev/ollama/0.0.2/questions.yaml | 3109 + dev/ollama/0.0.2/templates/NOTES.txt | 1 + dev/ollama/0.0.2/templates/common.yaml | 1 + dev/ollama/0.0.2/values.yaml | 0 dev/ollama/app_versions.json | 5518 ++ dev/ollama/item.yaml | 4 + dev/openldap/11.0.14/CHANGELOG.md | 99 + dev/openldap/11.0.14/Chart.yaml | 40 + dev/openldap/11.0.14/README.md | 28 + dev/openldap/11.0.14/app-changelog.md | 9 + dev/openldap/11.0.14/app-readme.md | 8 + .../11.0.14/charts/common-17.2.21.tgz | Bin 0 -> 97582 bytes dev/openldap/11.0.14/ix_values.yaml | 82 + dev/openldap/11.0.14/questions.yaml | 2731 + dev/openldap/11.0.14/templates/_configmap.tpl | 17 + dev/openldap/11.0.14/templates/common.yaml | 8 + dev/openldap/11.0.14/values.yaml | 0 dev/openldap/app_versions.json | 4769 ++ dev/openldap/item.yaml | 4 + dev/postgresql/15.0.17/CHANGELOG.md | 99 + dev/postgresql/15.0.17/Chart.yaml | 39 + dev/postgresql/15.0.17/README.md | 28 + dev/postgresql/15.0.17/app-changelog.md | 9 + dev/postgresql/15.0.17/app-readme.md | 8 + .../15.0.17/charts/common-17.2.21.tgz | Bin 0 -> 97582 bytes dev/postgresql/15.0.17/ix_values.yaml | 45 + dev/postgresql/15.0.17/questions.yaml | 535 + dev/postgresql/15.0.17/templates/NOTES.txt | 1 + dev/postgresql/15.0.17/templates/common.yaml | 2 + dev/postgresql/15.0.17/values.yaml | 0 dev/postgresql/app_versions.json | 1032 + dev/postgresql/item.yaml | 4 + dev/privatebin/4.0.15/CHANGELOG.md | 99 + dev/privatebin/4.0.15/Chart.yaml | 38 + dev/privatebin/4.0.15/README.md | 28 + dev/privatebin/4.0.15/app-changelog.md | 9 + dev/privatebin/4.0.15/app-readme.md | 8 + .../4.0.15/charts/common-17.2.21.tgz | Bin 0 -> 97582 bytes dev/privatebin/4.0.15/ix_values.yaml | 103 + dev/privatebin/4.0.15/questions.yaml | 3308 + .../4.0.15/templates/_configmap.tpl | 16 + dev/privatebin/4.0.15/templates/_secrets.tpl | 228 + dev/privatebin/4.0.15/templates/common.yaml | 11 + dev/privatebin/4.0.15/values.yaml | 0 dev/privatebin/app_versions.json | 5834 ++ dev/privatebin/item.yaml | 4 + dev/rtmpserver/5.0.14/CHANGELOG.md | 18 + dev/rtmpserver/5.0.14/Chart.yaml | 38 + dev/rtmpserver/5.0.14/README.md | 28 + dev/rtmpserver/5.0.14/app-changelog.md | 11 + dev/rtmpserver/5.0.14/app-readme.md | 8 + .../5.0.14/charts/common-17.2.21.tgz | Bin 0 -> 97582 bytes dev/rtmpserver/5.0.14/ix_values.yaml | 49 + dev/rtmpserver/5.0.14/questions.yaml | 3215 + dev/rtmpserver/5.0.14/templates/common.yaml | 2 + dev/rtmpserver/5.0.14/values.yaml | 0 dev/rtmpserver/app_versions.json | 5709 ++ dev/rtmpserver/item.yaml | 4 + dev/testapp/0.0.1/CHANGELOG.md | 13 + dev/testapp/0.0.1/Chart.yaml | 32 + dev/testapp/0.0.1/README.md | 27 + dev/testapp/0.0.1/app-changelog.md | 9 + dev/testapp/0.0.1/app-readme.md | 8 + dev/testapp/0.0.1/charts/common-12.2.0.tgz | Bin 0 -> 238039 bytes dev/testapp/0.0.1/ix_values.yaml | 38 + dev/testapp/0.0.1/questions.yaml | 1855 + dev/testapp/0.0.1/templates/common.yaml | 1 + dev/testapp/0.0.1/values.yaml | 0 dev/testapp/app_versions.json | 3185 + dev/testapp/item.yaml | 5 + stable/firefox/10.1.0/.helmignore | 30 + stable/firefox/10.1.0/CHANGELOG.md | 99 + stable/firefox/10.1.0/Chart.yaml | 37 + stable/firefox/10.1.0/README.md | 28 + stable/firefox/10.1.0/app-readme.md | 8 + .../firefox/10.1.0/charts/common-17.4.2.tgz | Bin 0 -> 100097 bytes stable/firefox/10.1.0/ix_values.yaml | 41 + stable/firefox/10.1.0/questions.yaml | 2879 + stable/firefox/10.1.0/templates/NOTES.txt | 1 + stable/firefox/10.1.0/templates/common.yaml | 1 + stable/firefox/10.1.0/values.yaml | 0 stable/firefox/10.2.0/.helmignore | 30 + stable/firefox/10.2.0/CHANGELOG.md | 99 + stable/firefox/10.2.0/Chart.yaml | 37 + stable/firefox/10.2.0/README.md | 28 + stable/firefox/10.2.0/app-readme.md | 8 + .../firefox/10.2.0/charts/common-17.5.0.tgz | Bin 0 -> 100452 bytes stable/firefox/10.2.0/ix_values.yaml | 41 + stable/firefox/10.2.0/questions.yaml | 2879 + stable/firefox/10.2.0/templates/NOTES.txt | 1 + stable/firefox/10.2.0/templates/common.yaml | 1 + stable/firefox/10.2.0/values.yaml | 0 stable/firefox/11.2.3/.helmignore | 30 + stable/firefox/11.2.3/CHANGELOG.md | 99 + stable/firefox/11.2.3/Chart.yaml | 37 + stable/firefox/11.2.3/README.md | 28 + stable/firefox/11.2.3/app-readme.md | 8 + .../firefox/11.2.3/charts/common-18.1.6.tgz | Bin 0 -> 99389 bytes stable/firefox/11.2.3/ix_values.yaml | 41 + stable/firefox/11.2.3/questions.yaml | 2851 + stable/firefox/11.2.3/templates/NOTES.txt | 1 + stable/firefox/11.2.3/templates/common.yaml | 1 + stable/firefox/11.2.3/values.yaml | 0 stable/firefox/11.3.0/.helmignore | 30 + stable/firefox/11.3.0/CHANGELOG.md | 99 + stable/firefox/11.3.0/Chart.yaml | 37 + stable/firefox/11.3.0/README.md | 28 + stable/firefox/11.3.0/app-readme.md | 8 + .../firefox/11.3.0/charts/common-18.2.0.tgz | Bin 0 -> 99595 bytes stable/firefox/11.3.0/ix_values.yaml | 41 + stable/firefox/11.3.0/questions.yaml | 2851 + stable/firefox/11.3.0/templates/NOTES.txt | 1 + stable/firefox/11.3.0/templates/common.yaml | 1 + stable/firefox/11.3.0/values.yaml | 0 stable/firefox/11.4.0/.helmignore | 30 + stable/firefox/11.4.0/CHANGELOG.md | 99 + stable/firefox/11.4.0/Chart.yaml | 37 + stable/firefox/11.4.0/README.md | 28 + stable/firefox/11.4.0/app-changelog.md | 9 + stable/firefox/11.4.0/app-readme.md | 8 + .../firefox/11.4.0/charts/common-19.0.0.tgz | Bin 0 -> 99991 bytes stable/firefox/11.4.0/ix_values.yaml | 41 + stable/firefox/11.4.0/questions.yaml | 2851 + stable/firefox/11.4.0/templates/NOTES.txt | 1 + stable/firefox/11.4.0/templates/common.yaml | 1 + stable/firefox/11.4.0/values.yaml | 0 stable/firefox/11.4.1/.helmignore | 30 + stable/firefox/11.4.1/CHANGELOG.md | 99 + stable/firefox/11.4.1/Chart.yaml | 37 + stable/firefox/11.4.1/README.md | 28 + stable/firefox/11.4.1/app-readme.md | 8 + .../firefox/11.4.1/charts/common-19.0.0.tgz | Bin 0 -> 100013 bytes stable/firefox/11.4.1/ix_values.yaml | 41 + stable/firefox/11.4.1/questions.yaml | 2851 + stable/firefox/11.4.1/templates/NOTES.txt | 1 + stable/firefox/11.4.1/templates/common.yaml | 1 + stable/firefox/11.4.1/values.yaml | 0 stable/firefox/12.2.0/.helmignore | 30 + stable/firefox/12.2.0/CHANGELOG.md | 100 + stable/firefox/12.2.0/Chart.yaml | 37 + stable/firefox/12.2.0/README.md | 28 + stable/firefox/12.2.0/app-readme.md | 8 + .../firefox/12.2.0/charts/common-20.1.5.tgz | Bin 0 -> 101486 bytes stable/firefox/12.2.0/ix_values.yaml | 41 + stable/firefox/12.2.0/questions.yaml | 2851 + stable/firefox/12.2.0/templates/NOTES.txt | 1 + stable/firefox/12.2.0/templates/common.yaml | 1 + stable/firefox/12.2.0/values.yaml | 0 stable/firefox/12.3.0/.helmignore | 30 + stable/firefox/12.3.0/CHANGELOG.md | 99 + stable/firefox/12.3.0/Chart.yaml | 37 + stable/firefox/12.3.0/README.md | 28 + stable/firefox/12.3.0/app-changelog.md | 9 + stable/firefox/12.3.0/app-readme.md | 8 + .../firefox/12.3.0/charts/common-20.2.0.tgz | Bin 0 -> 101653 bytes stable/firefox/12.3.0/ix_values.yaml | 41 + stable/firefox/12.3.0/questions.yaml | 2851 + stable/firefox/12.3.0/templates/NOTES.txt | 1 + stable/firefox/12.3.0/templates/common.yaml | 1 + stable/firefox/12.3.0/values.yaml | 0 stable/firefox/12.3.1/.helmignore | 30 + stable/firefox/12.3.1/CHANGELOG.md | 99 + stable/firefox/12.3.1/Chart.yaml | 37 + stable/firefox/12.3.1/README.md | 28 + stable/firefox/12.3.1/app-changelog.md | 11 + stable/firefox/12.3.1/app-readme.md | 8 + .../firefox/12.3.1/charts/common-20.2.0.tgz | Bin 0 -> 101653 bytes stable/firefox/12.3.1/ix_values.yaml | 41 + stable/firefox/12.3.1/questions.yaml | 2851 + stable/firefox/12.3.1/templates/NOTES.txt | 1 + stable/firefox/12.3.1/templates/common.yaml | 1 + stable/firefox/12.3.1/values.yaml | 0 stable/firefox/12.3.2/.helmignore | 30 + stable/firefox/12.3.2/CHANGELOG.md | 99 + stable/firefox/12.3.2/Chart.yaml | 37 + stable/firefox/12.3.2/README.md | 28 + stable/firefox/12.3.2/app-changelog.md | 13 + stable/firefox/12.3.2/app-readme.md | 8 + .../firefox/12.3.2/charts/common-20.2.2.tgz | Bin 0 -> 101828 bytes stable/firefox/12.3.2/ix_values.yaml | 41 + stable/firefox/12.3.2/questions.yaml | 2851 + stable/firefox/12.3.2/templates/NOTES.txt | 1 + stable/firefox/12.3.2/templates/common.yaml | 1 + stable/firefox/12.3.2/values.yaml | 0 stable/firefox/13.0.0/.helmignore | 30 + stable/firefox/13.0.0/CHANGELOG.md | 99 + stable/firefox/13.0.0/Chart.yaml | 37 + stable/firefox/13.0.0/README.md | 28 + stable/firefox/13.0.0/app-changelog.md | 17 + stable/firefox/13.0.0/app-readme.md | 8 + .../firefox/13.0.0/charts/common-20.2.3.tgz | Bin 0 -> 101772 bytes stable/firefox/13.0.0/ix_values.yaml | 41 + stable/firefox/13.0.0/questions.yaml | 2851 + stable/firefox/13.0.0/templates/NOTES.txt | 1 + stable/firefox/13.0.0/templates/common.yaml | 1 + stable/firefox/13.0.0/values.yaml | 0 stable/firefox/13.0.1/.helmignore | 30 + stable/firefox/13.0.1/CHANGELOG.md | 99 + stable/firefox/13.0.1/Chart.yaml | 37 + stable/firefox/13.0.1/README.md | 28 + stable/firefox/13.0.1/app-changelog.md | 19 + stable/firefox/13.0.1/app-readme.md | 8 + .../firefox/13.0.1/charts/common-20.2.3.tgz | Bin 0 -> 101772 bytes stable/firefox/13.0.1/ix_values.yaml | 41 + stable/firefox/13.0.1/questions.yaml | 2851 + stable/firefox/13.0.1/templates/NOTES.txt | 1 + stable/firefox/13.0.1/templates/common.yaml | 1 + stable/firefox/13.0.1/values.yaml | 0 stable/firefox/13.0.2/.helmignore | 30 + stable/firefox/13.0.2/CHANGELOG.md | 99 + stable/firefox/13.0.2/Chart.yaml | 37 + stable/firefox/13.0.2/README.md | 28 + stable/firefox/13.0.2/app-changelog.md | 21 + stable/firefox/13.0.2/app-readme.md | 8 + .../firefox/13.0.2/charts/common-20.2.4.tgz | Bin 0 -> 101809 bytes stable/firefox/13.0.2/ix_values.yaml | 41 + stable/firefox/13.0.2/questions.yaml | 2851 + stable/firefox/13.0.2/templates/NOTES.txt | 1 + stable/firefox/13.0.2/templates/common.yaml | 1 + stable/firefox/13.0.2/values.yaml | 0 stable/firefox/app_versions.json | 64633 ++++++++++++++++ stable/firefox/item.yaml | 4 + stable/frigate/12.2.0/.helmignore | 30 + stable/frigate/12.2.0/CHANGELOG.md | 100 + stable/frigate/12.2.0/Chart.yaml | 39 + stable/frigate/12.2.0/README.md | 28 + stable/frigate/12.2.0/app-readme.md | 8 + .../frigate/12.2.0/charts/common-17.4.2.tgz | Bin 0 -> 100097 bytes stable/frigate/12.2.0/ix_values.yaml | 96 + stable/frigate/12.2.0/questions.yaml | 3321 + stable/frigate/12.2.0/templates/NOTES.txt | 1 + .../frigate/12.2.0/templates/_configmap.tpl | 42 + stable/frigate/12.2.0/templates/common.yaml | 20 + stable/frigate/12.2.0/values.yaml | 0 stable/frigate/12.3.0/.helmignore | 30 + stable/frigate/12.3.0/CHANGELOG.md | 99 + stable/frigate/12.3.0/Chart.yaml | 39 + stable/frigate/12.3.0/README.md | 28 + stable/frigate/12.3.0/app-readme.md | 8 + .../frigate/12.3.0/charts/common-17.5.0.tgz | Bin 0 -> 100452 bytes stable/frigate/12.3.0/ix_values.yaml | 96 + stable/frigate/12.3.0/questions.yaml | 3321 + stable/frigate/12.3.0/templates/NOTES.txt | 1 + .../frigate/12.3.0/templates/_configmap.tpl | 42 + stable/frigate/12.3.0/templates/common.yaml | 20 + stable/frigate/12.3.0/values.yaml | 0 stable/frigate/13.2.3/.helmignore | 30 + stable/frigate/13.2.3/CHANGELOG.md | 99 + stable/frigate/13.2.3/Chart.yaml | 39 + stable/frigate/13.2.3/README.md | 28 + stable/frigate/13.2.3/app-readme.md | 8 + .../frigate/13.2.3/charts/common-18.1.6.tgz | Bin 0 -> 99389 bytes stable/frigate/13.2.3/ix_values.yaml | 96 + stable/frigate/13.2.3/questions.yaml | 3293 + stable/frigate/13.2.3/templates/NOTES.txt | 1 + .../frigate/13.2.3/templates/_configmap.tpl | 42 + stable/frigate/13.2.3/templates/common.yaml | 20 + stable/frigate/13.2.3/values.yaml | 0 stable/frigate/13.3.0/.helmignore | 30 + stable/frigate/13.3.0/CHANGELOG.md | 99 + stable/frigate/13.3.0/Chart.yaml | 39 + stable/frigate/13.3.0/README.md | 28 + stable/frigate/13.3.0/app-readme.md | 8 + .../frigate/13.3.0/charts/common-18.2.0.tgz | Bin 0 -> 99595 bytes stable/frigate/13.3.0/ix_values.yaml | 96 + stable/frigate/13.3.0/questions.yaml | 3293 + stable/frigate/13.3.0/templates/NOTES.txt | 1 + .../frigate/13.3.0/templates/_configmap.tpl | 42 + stable/frigate/13.3.0/templates/common.yaml | 20 + stable/frigate/13.3.0/values.yaml | 0 stable/frigate/13.4.0/.helmignore | 30 + stable/frigate/13.4.0/CHANGELOG.md | 99 + stable/frigate/13.4.0/Chart.yaml | 39 + stable/frigate/13.4.0/README.md | 28 + stable/frigate/13.4.0/app-changelog.md | 9 + stable/frigate/13.4.0/app-readme.md | 8 + .../frigate/13.4.0/charts/common-19.0.0.tgz | Bin 0 -> 99991 bytes stable/frigate/13.4.0/ix_values.yaml | 96 + stable/frigate/13.4.0/questions.yaml | 3293 + stable/frigate/13.4.0/templates/NOTES.txt | 1 + .../frigate/13.4.0/templates/_configmap.tpl | 42 + stable/frigate/13.4.0/templates/common.yaml | 20 + stable/frigate/13.4.0/values.yaml | 0 stable/frigate/13.4.1/.helmignore | 30 + stable/frigate/13.4.1/CHANGELOG.md | 99 + stable/frigate/13.4.1/Chart.yaml | 39 + stable/frigate/13.4.1/README.md | 28 + stable/frigate/13.4.1/app-readme.md | 8 + .../frigate/13.4.1/charts/common-19.0.0.tgz | Bin 0 -> 99991 bytes stable/frigate/13.4.1/ix_values.yaml | 96 + stable/frigate/13.4.1/questions.yaml | 3293 + stable/frigate/13.4.1/templates/NOTES.txt | 1 + .../frigate/13.4.1/templates/_configmap.tpl | 42 + stable/frigate/13.4.1/templates/common.yaml | 20 + stable/frigate/13.4.1/values.yaml | 0 stable/frigate/14.3.0/.helmignore | 30 + stable/frigate/14.3.0/CHANGELOG.md | 99 + stable/frigate/14.3.0/Chart.yaml | 39 + stable/frigate/14.3.0/README.md | 28 + stable/frigate/14.3.0/app-changelog.md | 9 + stable/frigate/14.3.0/app-readme.md | 8 + .../frigate/14.3.0/charts/common-20.2.0.tgz | Bin 0 -> 101653 bytes stable/frigate/14.3.0/ix_values.yaml | 101 + stable/frigate/14.3.0/questions.yaml | 3293 + stable/frigate/14.3.0/templates/NOTES.txt | 1 + .../frigate/14.3.0/templates/_configmap.tpl | 43 + stable/frigate/14.3.0/templates/common.yaml | 17 + stable/frigate/14.3.0/values.yaml | 0 stable/frigate/14.3.1/.helmignore | 30 + stable/frigate/14.3.1/CHANGELOG.md | 99 + stable/frigate/14.3.1/Chart.yaml | 39 + stable/frigate/14.3.1/README.md | 28 + stable/frigate/14.3.1/app-changelog.md | 11 + stable/frigate/14.3.1/app-readme.md | 8 + .../frigate/14.3.1/charts/common-20.2.2.tgz | Bin 0 -> 101828 bytes stable/frigate/14.3.1/ix_values.yaml | 101 + stable/frigate/14.3.1/questions.yaml | 3293 + stable/frigate/14.3.1/templates/NOTES.txt | 1 + .../frigate/14.3.1/templates/_configmap.tpl | 43 + stable/frigate/14.3.1/templates/common.yaml | 17 + stable/frigate/14.3.1/values.yaml | 0 stable/frigate/14.3.2/.helmignore | 30 + stable/frigate/14.3.2/CHANGELOG.md | 99 + stable/frigate/14.3.2/Chart.yaml | 39 + stable/frigate/14.3.2/README.md | 28 + stable/frigate/14.3.2/app-changelog.md | 13 + stable/frigate/14.3.2/app-readme.md | 8 + .../frigate/14.3.2/charts/common-20.2.3.tgz | Bin 0 -> 101772 bytes stable/frigate/14.3.2/ix_values.yaml | 101 + stable/frigate/14.3.2/questions.yaml | 3293 + stable/frigate/14.3.2/templates/NOTES.txt | 1 + .../frigate/14.3.2/templates/_configmap.tpl | 43 + stable/frigate/14.3.2/templates/common.yaml | 17 + stable/frigate/14.3.2/values.yaml | 0 stable/frigate/14.3.3/.helmignore | 30 + stable/frigate/14.3.3/CHANGELOG.md | 99 + stable/frigate/14.3.3/Chart.yaml | 39 + stable/frigate/14.3.3/README.md | 28 + stable/frigate/14.3.3/app-changelog.md | 15 + stable/frigate/14.3.3/app-readme.md | 8 + .../frigate/14.3.3/charts/common-20.2.4.tgz | Bin 0 -> 101809 bytes stable/frigate/14.3.3/ix_values.yaml | 101 + stable/frigate/14.3.3/questions.yaml | 3293 + stable/frigate/14.3.3/templates/NOTES.txt | 1 + .../frigate/14.3.3/templates/_configmap.tpl | 43 + stable/frigate/14.3.3/templates/common.yaml | 17 + stable/frigate/14.3.3/values.yaml | 0 stable/frigate/app_versions.json | 57538 ++++++++++++++ stable/frigate/item.yaml | 4 + stable/gitea/17.2.0/.helmignore | 30 + stable/gitea/17.2.0/CHANGELOG.md | 1738 + stable/gitea/17.2.0/Chart.yaml | 49 + stable/gitea/17.2.0/LICENSE | 106 + stable/gitea/17.2.0/README.md | 28 + stable/gitea/17.2.0/app-readme.md | 8 + stable/gitea/17.2.0/charts/common-17.4.2.tgz | Bin 0 -> 100097 bytes .../gitea/17.2.0/charts/memcached-11.1.18.tgz | Bin 0 -> 102342 bytes stable/gitea/17.2.0/ix_values.yaml | 132 + stable/gitea/17.2.0/questions.yaml | 3486 + stable/gitea/17.2.0/templates/NOTES.txt | 1 + stable/gitea/17.2.0/templates/_configmap.tpl | 15 + stable/gitea/17.2.0/templates/_secrets.tpl | 233 + stable/gitea/17.2.0/templates/common.yaml | 52 + stable/gitea/17.2.0/values.yaml | 0 stable/gitea/17.3.0/.helmignore | 30 + stable/gitea/17.3.0/CHANGELOG.md | 99 + stable/gitea/17.3.0/Chart.yaml | 49 + stable/gitea/17.3.0/README.md | 28 + stable/gitea/17.3.0/app-readme.md | 8 + stable/gitea/17.3.0/charts/common-17.4.2.tgz | Bin 0 -> 100097 bytes .../gitea/17.3.0/charts/memcached-11.2.1.tgz | Bin 0 -> 104399 bytes stable/gitea/17.3.0/ix_values.yaml | 132 + stable/gitea/17.3.0/questions.yaml | 3486 + stable/gitea/17.3.0/templates/NOTES.txt | 1 + stable/gitea/17.3.0/templates/_configmap.tpl | 15 + stable/gitea/17.3.0/templates/_secrets.tpl | 233 + stable/gitea/17.3.0/templates/common.yaml | 52 + stable/gitea/17.3.0/values.yaml | 0 stable/gitea/17.4.0/.helmignore | 30 + stable/gitea/17.4.0/CHANGELOG.md | 100 + stable/gitea/17.4.0/Chart.yaml | 49 + stable/gitea/17.4.0/README.md | 28 + stable/gitea/17.4.0/app-readme.md | 8 + stable/gitea/17.4.0/charts/common-17.5.0.tgz | Bin 0 -> 100452 bytes .../gitea/17.4.0/charts/memcached-11.2.1.tgz | Bin 0 -> 104392 bytes stable/gitea/17.4.0/ix_values.yaml | 132 + stable/gitea/17.4.0/questions.yaml | 3486 + stable/gitea/17.4.0/templates/NOTES.txt | 1 + stable/gitea/17.4.0/templates/_configmap.tpl | 15 + stable/gitea/17.4.0/templates/_secrets.tpl | 233 + stable/gitea/17.4.0/templates/common.yaml | 52 + stable/gitea/17.4.0/values.yaml | 0 stable/gitea/18.14.4/.helmignore | 30 + stable/gitea/18.14.4/CHANGELOG.md | 100 + stable/gitea/18.14.4/Chart.yaml | 49 + stable/gitea/18.14.4/README.md | 28 + stable/gitea/18.14.4/app-changelog.md | 27 + stable/gitea/18.14.4/app-readme.md | 8 + stable/gitea/18.14.4/charts/common-20.2.2.tgz | Bin 0 -> 101828 bytes .../gitea/18.14.4/charts/memcached-12.8.2.tgz | Bin 0 -> 109301 bytes stable/gitea/18.14.4/ix_values.yaml | 132 + stable/gitea/18.14.4/questions.yaml | 3424 + stable/gitea/18.14.4/templates/NOTES.txt | 1 + stable/gitea/18.14.4/templates/_configmap.tpl | 15 + stable/gitea/18.14.4/templates/_secrets.tpl | 233 + stable/gitea/18.14.4/templates/common.yaml | 52 + stable/gitea/18.14.4/values.yaml | 0 stable/gitea/18.14.5/.helmignore | 30 + stable/gitea/18.14.5/CHANGELOG.md | 99 + stable/gitea/18.14.5/Chart.yaml | 49 + stable/gitea/18.14.5/README.md | 28 + stable/gitea/18.14.5/app-changelog.md | 29 + stable/gitea/18.14.5/app-readme.md | 8 + stable/gitea/18.14.5/charts/common-20.2.3.tgz | Bin 0 -> 101772 bytes .../gitea/18.14.5/charts/memcached-12.8.2.tgz | Bin 0 -> 109301 bytes stable/gitea/18.14.5/ix_values.yaml | 132 + stable/gitea/18.14.5/questions.yaml | 3425 + stable/gitea/18.14.5/templates/NOTES.txt | 1 + stable/gitea/18.14.5/templates/_configmap.tpl | 15 + stable/gitea/18.14.5/templates/_secrets.tpl | 233 + stable/gitea/18.14.5/templates/common.yaml | 52 + stable/gitea/18.14.5/values.yaml | 0 stable/gitea/18.14.6/.helmignore | 30 + stable/gitea/18.14.6/CHANGELOG.md | 99 + stable/gitea/18.14.6/Chart.yaml | 49 + stable/gitea/18.14.6/README.md | 28 + stable/gitea/18.14.6/app-changelog.md | 31 + stable/gitea/18.14.6/app-readme.md | 8 + stable/gitea/18.14.6/charts/common-20.2.3.tgz | Bin 0 -> 101772 bytes .../gitea/18.14.6/charts/memcached-12.8.3.tgz | Bin 0 -> 109420 bytes stable/gitea/18.14.6/ix_values.yaml | 132 + stable/gitea/18.14.6/questions.yaml | 3425 + stable/gitea/18.14.6/templates/NOTES.txt | 1 + stable/gitea/18.14.6/templates/_configmap.tpl | 15 + stable/gitea/18.14.6/templates/_secrets.tpl | 233 + stable/gitea/18.14.6/templates/common.yaml | 52 + stable/gitea/18.14.6/values.yaml | 0 stable/gitea/18.14.7/.helmignore | 30 + stable/gitea/18.14.7/CHANGELOG.md | 99 + stable/gitea/18.14.7/Chart.yaml | 49 + stable/gitea/18.14.7/README.md | 28 + stable/gitea/18.14.7/app-changelog.md | 33 + stable/gitea/18.14.7/app-readme.md | 8 + stable/gitea/18.14.7/charts/common-20.2.4.tgz | Bin 0 -> 101809 bytes .../gitea/18.14.7/charts/memcached-12.8.3.tgz | Bin 0 -> 109420 bytes stable/gitea/18.14.7/ix_values.yaml | 132 + stable/gitea/18.14.7/questions.yaml | 3425 + stable/gitea/18.14.7/templates/NOTES.txt | 1 + stable/gitea/18.14.7/templates/_configmap.tpl | 15 + stable/gitea/18.14.7/templates/_secrets.tpl | 233 + stable/gitea/18.14.7/templates/common.yaml | 52 + stable/gitea/18.14.7/values.yaml | 0 stable/gitea/app_versions.json | 42286 ++++++++++ stable/gitea/item.yaml | 4 + stable/jellyfin/17.2.0/.helmignore | 30 + stable/jellyfin/17.2.0/CHANGELOG.md | 1396 + stable/jellyfin/17.2.0/Chart.yaml | 39 + stable/jellyfin/17.2.0/README.md | 28 + stable/jellyfin/17.2.0/app-readme.md | 8 + .../jellyfin/17.2.0/charts/common-17.4.2.tgz | Bin 0 -> 100097 bytes stable/jellyfin/17.2.0/ix_values.yaml | 98 + stable/jellyfin/17.2.0/questions.yaml | 3154 + stable/jellyfin/17.2.0/templates/NOTES.txt | 1 + stable/jellyfin/17.2.0/templates/common.yaml | 8 + stable/jellyfin/17.2.0/values.yaml | 0 stable/jellyfin/17.2.1/.helmignore | 30 + stable/jellyfin/17.2.1/CHANGELOG.md | 100 + stable/jellyfin/17.2.1/Chart.yaml | 39 + stable/jellyfin/17.2.1/README.md | 28 + stable/jellyfin/17.2.1/app-readme.md | 8 + .../jellyfin/17.2.1/charts/common-17.4.2.tgz | Bin 0 -> 100097 bytes stable/jellyfin/17.2.1/ix_values.yaml | 98 + stable/jellyfin/17.2.1/questions.yaml | 3154 + stable/jellyfin/17.2.1/templates/NOTES.txt | 1 + stable/jellyfin/17.2.1/templates/common.yaml | 8 + stable/jellyfin/17.2.1/values.yaml | 0 stable/jellyfin/17.3.0/.helmignore | 30 + stable/jellyfin/17.3.0/CHANGELOG.md | 99 + stable/jellyfin/17.3.0/Chart.yaml | 39 + stable/jellyfin/17.3.0/README.md | 28 + stable/jellyfin/17.3.0/app-readme.md | 8 + .../jellyfin/17.3.0/charts/common-17.5.0.tgz | Bin 0 -> 100452 bytes stable/jellyfin/17.3.0/ix_values.yaml | 98 + stable/jellyfin/17.3.0/questions.yaml | 3154 + stable/jellyfin/17.3.0/templates/NOTES.txt | 1 + stable/jellyfin/17.3.0/templates/common.yaml | 8 + stable/jellyfin/17.3.0/values.yaml | 0 stable/jellyfin/18.7.1/.helmignore | 30 + stable/jellyfin/18.7.1/CHANGELOG.md | 99 + stable/jellyfin/18.7.1/Chart.yaml | 39 + stable/jellyfin/18.7.1/README.md | 28 + stable/jellyfin/18.7.1/app-changelog.md | 13 + stable/jellyfin/18.7.1/app-readme.md | 8 + .../jellyfin/18.7.1/charts/common-20.2.2.tgz | Bin 0 -> 101828 bytes stable/jellyfin/18.7.1/ix_values.yaml | 98 + stable/jellyfin/18.7.1/questions.yaml | 3126 + stable/jellyfin/18.7.1/templates/NOTES.txt | 1 + stable/jellyfin/18.7.1/templates/common.yaml | 8 + stable/jellyfin/18.7.1/values.yaml | 0 stable/jellyfin/18.7.2/.helmignore | 30 + stable/jellyfin/18.7.2/CHANGELOG.md | 99 + stable/jellyfin/18.7.2/Chart.yaml | 39 + stable/jellyfin/18.7.2/README.md | 28 + stable/jellyfin/18.7.2/app-changelog.md | 15 + stable/jellyfin/18.7.2/app-readme.md | 8 + .../jellyfin/18.7.2/charts/common-20.2.2.tgz | Bin 0 -> 101828 bytes stable/jellyfin/18.7.2/ix_values.yaml | 98 + stable/jellyfin/18.7.2/questions.yaml | 3126 + stable/jellyfin/18.7.2/templates/NOTES.txt | 1 + stable/jellyfin/18.7.2/templates/common.yaml | 8 + stable/jellyfin/18.7.2/values.yaml | 0 stable/jellyfin/18.7.3/.helmignore | 30 + stable/jellyfin/18.7.3/CHANGELOG.md | 99 + stable/jellyfin/18.7.3/Chart.yaml | 39 + stable/jellyfin/18.7.3/README.md | 28 + stable/jellyfin/18.7.3/app-changelog.md | 17 + stable/jellyfin/18.7.3/app-readme.md | 8 + .../jellyfin/18.7.3/charts/common-20.2.3.tgz | Bin 0 -> 101772 bytes stable/jellyfin/18.7.3/ix_values.yaml | 98 + stable/jellyfin/18.7.3/questions.yaml | 3126 + stable/jellyfin/18.7.3/templates/NOTES.txt | 1 + stable/jellyfin/18.7.3/templates/common.yaml | 8 + stable/jellyfin/18.7.3/values.yaml | 0 stable/jellyfin/18.7.4/.helmignore | 30 + stable/jellyfin/18.7.4/CHANGELOG.md | 100 + stable/jellyfin/18.7.4/Chart.yaml | 39 + stable/jellyfin/18.7.4/README.md | 28 + stable/jellyfin/18.7.4/app-changelog.md | 19 + stable/jellyfin/18.7.4/app-readme.md | 8 + .../jellyfin/18.7.4/charts/common-20.2.4.tgz | Bin 0 -> 101809 bytes stable/jellyfin/18.7.4/ix_values.yaml | 98 + stable/jellyfin/18.7.4/questions.yaml | 3126 + stable/jellyfin/18.7.4/templates/NOTES.txt | 1 + stable/jellyfin/18.7.4/templates/common.yaml | 8 + stable/jellyfin/18.7.4/values.yaml | 0 stable/jellyfin/app_versions.json | 38428 +++++++++ stable/jellyfin/item.yaml | 4 + stable/librespeed/12.2.0/.helmignore | 30 + stable/librespeed/12.2.0/CHANGELOG.md | 1420 + stable/librespeed/12.2.0/Chart.yaml | 37 + stable/librespeed/12.2.0/README.md | 28 + stable/librespeed/12.2.0/app-readme.md | 8 + .../12.2.0/charts/common-17.4.2.tgz | Bin 0 -> 100097 bytes stable/librespeed/12.2.0/ix_values.yaml | 23 + stable/librespeed/12.2.0/questions.yaml | 2867 + stable/librespeed/12.2.0/templates/NOTES.txt | 1 + .../librespeed/12.2.0/templates/common.yaml | 1 + stable/librespeed/12.2.0/values.yaml | 0 stable/librespeed/12.2.1/.helmignore | 30 + stable/librespeed/12.2.1/CHANGELOG.md | 99 + stable/librespeed/12.2.1/Chart.yaml | 37 + stable/librespeed/12.2.1/README.md | 28 + stable/librespeed/12.2.1/app-readme.md | 8 + .../12.2.1/charts/common-17.4.2.tgz | Bin 0 -> 100097 bytes stable/librespeed/12.2.1/ix_values.yaml | 23 + stable/librespeed/12.2.1/questions.yaml | 2867 + stable/librespeed/12.2.1/templates/NOTES.txt | 1 + .../librespeed/12.2.1/templates/common.yaml | 1 + stable/librespeed/12.2.1/values.yaml | 0 stable/librespeed/12.3.0/.helmignore | 30 + stable/librespeed/12.3.0/CHANGELOG.md | 99 + stable/librespeed/12.3.0/Chart.yaml | 37 + stable/librespeed/12.3.0/README.md | 28 + stable/librespeed/12.3.0/app-readme.md | 8 + .../12.3.0/charts/common-17.5.0.tgz | Bin 0 -> 100452 bytes stable/librespeed/12.3.0/ix_values.yaml | 23 + stable/librespeed/12.3.0/questions.yaml | 2867 + stable/librespeed/12.3.0/templates/NOTES.txt | 1 + .../librespeed/12.3.0/templates/common.yaml | 1 + stable/librespeed/12.3.0/values.yaml | 0 stable/librespeed/13.7.2/.helmignore | 30 + stable/librespeed/13.7.2/CHANGELOG.md | 99 + stable/librespeed/13.7.2/Chart.yaml | 37 + stable/librespeed/13.7.2/README.md | 28 + stable/librespeed/13.7.2/app-changelog.md | 13 + stable/librespeed/13.7.2/app-readme.md | 8 + .../13.7.2/charts/common-20.2.2.tgz | Bin 0 -> 101828 bytes stable/librespeed/13.7.2/ix_values.yaml | 23 + stable/librespeed/13.7.2/questions.yaml | 2839 + stable/librespeed/13.7.2/templates/NOTES.txt | 1 + .../librespeed/13.7.2/templates/common.yaml | 1 + stable/librespeed/13.7.2/values.yaml | 0 stable/librespeed/13.7.3/.helmignore | 30 + stable/librespeed/13.7.3/CHANGELOG.md | 99 + stable/librespeed/13.7.3/Chart.yaml | 37 + stable/librespeed/13.7.3/README.md | 28 + stable/librespeed/13.7.3/app-changelog.md | 15 + stable/librespeed/13.7.3/app-readme.md | 8 + .../13.7.3/charts/common-20.2.3.tgz | Bin 0 -> 101772 bytes stable/librespeed/13.7.3/ix_values.yaml | 23 + stable/librespeed/13.7.3/questions.yaml | 2839 + stable/librespeed/13.7.3/templates/NOTES.txt | 1 + .../librespeed/13.7.3/templates/common.yaml | 1 + stable/librespeed/13.7.3/values.yaml | 0 stable/librespeed/13.7.4/.helmignore | 30 + stable/librespeed/13.7.4/CHANGELOG.md | 99 + stable/librespeed/13.7.4/Chart.yaml | 37 + stable/librespeed/13.7.4/README.md | 28 + stable/librespeed/13.7.4/app-changelog.md | 17 + stable/librespeed/13.7.4/app-readme.md | 8 + .../13.7.4/charts/common-20.2.3.tgz | Bin 0 -> 101772 bytes stable/librespeed/13.7.4/ix_values.yaml | 23 + stable/librespeed/13.7.4/questions.yaml | 2839 + stable/librespeed/13.7.4/templates/NOTES.txt | 1 + .../librespeed/13.7.4/templates/common.yaml | 1 + stable/librespeed/13.7.4/values.yaml | 0 stable/librespeed/13.7.5/.helmignore | 30 + stable/librespeed/13.7.5/CHANGELOG.md | 100 + stable/librespeed/13.7.5/Chart.yaml | 37 + stable/librespeed/13.7.5/README.md | 28 + stable/librespeed/13.7.5/app-changelog.md | 19 + stable/librespeed/13.7.5/app-readme.md | 8 + .../13.7.5/charts/common-20.2.4.tgz | Bin 0 -> 101809 bytes stable/librespeed/13.7.5/ix_values.yaml | 23 + stable/librespeed/13.7.5/questions.yaml | 2839 + stable/librespeed/13.7.5/templates/NOTES.txt | 1 + .../librespeed/13.7.5/templates/common.yaml | 1 + stable/librespeed/13.7.5/values.yaml | 0 stable/librespeed/app_versions.json | 34753 +++++++++ stable/librespeed/item.yaml | 4 + stable/lidarr/19.2.0/.helmignore | 30 + stable/lidarr/19.2.0/CHANGELOG.md | 99 + stable/lidarr/19.2.0/Chart.yaml | 39 + 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 0 -> 100097 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 | 39 + 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 0 -> 100452 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.2.0/.helmignore | 30 + stable/lidarr/20.2.0/CHANGELOG.md | 99 + stable/lidarr/20.2.0/Chart.yaml | 39 + stable/lidarr/20.2.0/README.md | 28 + stable/lidarr/20.2.0/app-readme.md | 8 + stable/lidarr/20.2.0/charts/common-18.0.2.tgz | Bin 0 -> 98784 bytes stable/lidarr/20.2.0/ix_values.yaml | 109 + stable/lidarr/20.2.0/questions.yaml | 2899 + stable/lidarr/20.2.0/templates/NOTES.txt | 1 + stable/lidarr/20.2.0/templates/common.yaml | 11 + stable/lidarr/20.2.0/values.yaml | 0 stable/lidarr/20.2.1/.helmignore | 30 + stable/lidarr/20.2.1/CHANGELOG.md | 100 + stable/lidarr/20.2.1/Chart.yaml | 39 + stable/lidarr/20.2.1/README.md | 28 + stable/lidarr/20.2.1/app-readme.md | 8 + stable/lidarr/20.2.1/charts/common-18.0.3.tgz | Bin 0 -> 98756 bytes stable/lidarr/20.2.1/ix_values.yaml | 109 + stable/lidarr/20.2.1/questions.yaml | 2899 + stable/lidarr/20.2.1/templates/NOTES.txt | 1 + stable/lidarr/20.2.1/templates/common.yaml | 11 + stable/lidarr/20.2.1/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 | 39 + 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 0 -> 99288 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 | 39 + 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 0 -> 99288 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.5.2/.helmignore | 30 + stable/lidarr/21.5.2/CHANGELOG.md | 99 + stable/lidarr/21.5.2/Chart.yaml | 39 + stable/lidarr/21.5.2/README.md | 28 + stable/lidarr/21.5.2/app-changelog.md | 15 + stable/lidarr/21.5.2/app-readme.md | 8 + stable/lidarr/21.5.2/charts/common-20.2.0.tgz | Bin 0 -> 101653 bytes stable/lidarr/21.5.2/ix_values.yaml | 109 + stable/lidarr/21.5.2/questions.yaml | 2899 + stable/lidarr/21.5.2/templates/NOTES.txt | 1 + stable/lidarr/21.5.2/templates/common.yaml | 11 + stable/lidarr/21.5.2/values.yaml | 0 stable/lidarr/21.5.3/.helmignore | 30 + stable/lidarr/21.5.3/CHANGELOG.md | 99 + stable/lidarr/21.5.3/Chart.yaml | 39 + stable/lidarr/21.5.3/README.md | 28 + stable/lidarr/21.5.3/app-changelog.md | 17 + stable/lidarr/21.5.3/app-readme.md | 8 + stable/lidarr/21.5.3/charts/common-20.2.2.tgz | Bin 0 -> 101828 bytes stable/lidarr/21.5.3/ix_values.yaml | 109 + stable/lidarr/21.5.3/questions.yaml | 2899 + stable/lidarr/21.5.3/templates/NOTES.txt | 1 + stable/lidarr/21.5.3/templates/common.yaml | 11 + stable/lidarr/21.5.3/values.yaml | 0 stable/lidarr/21.5.4/.helmignore | 30 + stable/lidarr/21.5.4/CHANGELOG.md | 99 + stable/lidarr/21.5.4/Chart.yaml | 39 + stable/lidarr/21.5.4/README.md | 28 + stable/lidarr/21.5.4/app-changelog.md | 19 + stable/lidarr/21.5.4/app-readme.md | 8 + stable/lidarr/21.5.4/charts/common-20.2.3.tgz | Bin 0 -> 101772 bytes stable/lidarr/21.5.4/ix_values.yaml | 109 + stable/lidarr/21.5.4/questions.yaml | 2899 + stable/lidarr/21.5.4/templates/NOTES.txt | 1 + stable/lidarr/21.5.4/templates/common.yaml | 11 + stable/lidarr/21.5.4/values.yaml | 0 stable/lidarr/21.5.5/.helmignore | 30 + stable/lidarr/21.5.5/CHANGELOG.md | 99 + stable/lidarr/21.5.5/Chart.yaml | 39 + stable/lidarr/21.5.5/README.md | 28 + stable/lidarr/21.5.5/app-changelog.md | 21 + stable/lidarr/21.5.5/app-readme.md | 8 + stable/lidarr/21.5.5/charts/common-20.2.4.tgz | Bin 0 -> 101809 bytes stable/lidarr/21.5.5/ix_values.yaml | 109 + stable/lidarr/21.5.5/questions.yaml | 2899 + stable/lidarr/21.5.5/templates/NOTES.txt | 1 + stable/lidarr/21.5.5/templates/common.yaml | 11 + stable/lidarr/21.5.5/values.yaml | 0 stable/lidarr/app_versions.json | 50478 ++++++++++++ stable/lidarr/item.yaml | 4 + 743 files changed, 518951 insertions(+) create mode 100644 dev/ollama/0.0.2/CHANGELOG.md create mode 100644 dev/ollama/0.0.2/Chart.yaml create mode 100644 dev/ollama/0.0.2/README.md create mode 100644 dev/ollama/0.0.2/app-changelog.md create mode 100644 dev/ollama/0.0.2/app-readme.md create mode 100644 dev/ollama/0.0.2/charts/common-17.2.21.tgz create mode 100644 dev/ollama/0.0.2/ix_values.yaml create mode 100644 dev/ollama/0.0.2/questions.yaml create mode 100644 dev/ollama/0.0.2/templates/NOTES.txt create mode 100644 dev/ollama/0.0.2/templates/common.yaml create mode 100644 dev/ollama/0.0.2/values.yaml create mode 100644 dev/ollama/app_versions.json create mode 100644 dev/ollama/item.yaml create mode 100644 dev/openldap/11.0.14/CHANGELOG.md create mode 100644 dev/openldap/11.0.14/Chart.yaml create mode 100644 dev/openldap/11.0.14/README.md create mode 100644 dev/openldap/11.0.14/app-changelog.md create mode 100644 dev/openldap/11.0.14/app-readme.md create mode 100644 dev/openldap/11.0.14/charts/common-17.2.21.tgz create mode 100644 dev/openldap/11.0.14/ix_values.yaml create mode 100644 dev/openldap/11.0.14/questions.yaml create mode 100644 dev/openldap/11.0.14/templates/_configmap.tpl create mode 100644 dev/openldap/11.0.14/templates/common.yaml create mode 100644 dev/openldap/11.0.14/values.yaml create mode 100644 dev/openldap/app_versions.json create mode 100644 dev/openldap/item.yaml create mode 100644 dev/postgresql/15.0.17/CHANGELOG.md create mode 100644 dev/postgresql/15.0.17/Chart.yaml create mode 100644 dev/postgresql/15.0.17/README.md create mode 100644 dev/postgresql/15.0.17/app-changelog.md create mode 100644 dev/postgresql/15.0.17/app-readme.md create mode 100644 dev/postgresql/15.0.17/charts/common-17.2.21.tgz create mode 100644 dev/postgresql/15.0.17/ix_values.yaml create mode 100644 dev/postgresql/15.0.17/questions.yaml create mode 100644 dev/postgresql/15.0.17/templates/NOTES.txt create mode 100644 dev/postgresql/15.0.17/templates/common.yaml create mode 100644 dev/postgresql/15.0.17/values.yaml create mode 100644 dev/postgresql/app_versions.json create mode 100644 dev/postgresql/item.yaml create mode 100644 dev/privatebin/4.0.15/CHANGELOG.md create mode 100644 dev/privatebin/4.0.15/Chart.yaml create mode 100644 dev/privatebin/4.0.15/README.md create mode 100644 dev/privatebin/4.0.15/app-changelog.md create mode 100644 dev/privatebin/4.0.15/app-readme.md create mode 100644 dev/privatebin/4.0.15/charts/common-17.2.21.tgz create mode 100644 dev/privatebin/4.0.15/ix_values.yaml create mode 100644 dev/privatebin/4.0.15/questions.yaml create mode 100644 dev/privatebin/4.0.15/templates/_configmap.tpl create mode 100644 dev/privatebin/4.0.15/templates/_secrets.tpl create mode 100644 dev/privatebin/4.0.15/templates/common.yaml create mode 100644 dev/privatebin/4.0.15/values.yaml create mode 100644 dev/privatebin/app_versions.json create mode 100644 dev/privatebin/item.yaml create mode 100644 dev/rtmpserver/5.0.14/CHANGELOG.md create mode 100644 dev/rtmpserver/5.0.14/Chart.yaml create mode 100644 dev/rtmpserver/5.0.14/README.md create mode 100644 dev/rtmpserver/5.0.14/app-changelog.md create mode 100644 dev/rtmpserver/5.0.14/app-readme.md create mode 100644 dev/rtmpserver/5.0.14/charts/common-17.2.21.tgz create mode 100644 dev/rtmpserver/5.0.14/ix_values.yaml create mode 100644 dev/rtmpserver/5.0.14/questions.yaml create mode 100644 dev/rtmpserver/5.0.14/templates/common.yaml create mode 100644 dev/rtmpserver/5.0.14/values.yaml create mode 100644 dev/rtmpserver/app_versions.json create mode 100644 dev/rtmpserver/item.yaml create mode 100644 dev/testapp/0.0.1/CHANGELOG.md create mode 100644 dev/testapp/0.0.1/Chart.yaml create mode 100644 dev/testapp/0.0.1/README.md create mode 100644 dev/testapp/0.0.1/app-changelog.md create mode 100644 dev/testapp/0.0.1/app-readme.md create mode 100644 dev/testapp/0.0.1/charts/common-12.2.0.tgz create mode 100644 dev/testapp/0.0.1/ix_values.yaml create mode 100644 dev/testapp/0.0.1/questions.yaml create mode 100644 dev/testapp/0.0.1/templates/common.yaml create mode 100644 dev/testapp/0.0.1/values.yaml create mode 100644 dev/testapp/app_versions.json create mode 100644 dev/testapp/item.yaml create mode 100644 stable/firefox/10.1.0/.helmignore create mode 100644 stable/firefox/10.1.0/CHANGELOG.md create mode 100644 stable/firefox/10.1.0/Chart.yaml create mode 100644 stable/firefox/10.1.0/README.md create mode 100644 stable/firefox/10.1.0/app-readme.md create mode 100644 stable/firefox/10.1.0/charts/common-17.4.2.tgz create mode 100644 stable/firefox/10.1.0/ix_values.yaml create mode 100644 stable/firefox/10.1.0/questions.yaml create mode 100644 stable/firefox/10.1.0/templates/NOTES.txt create mode 100644 stable/firefox/10.1.0/templates/common.yaml create mode 100644 stable/firefox/10.1.0/values.yaml create mode 100644 stable/firefox/10.2.0/.helmignore create mode 100644 stable/firefox/10.2.0/CHANGELOG.md create mode 100644 stable/firefox/10.2.0/Chart.yaml create mode 100644 stable/firefox/10.2.0/README.md create mode 100644 stable/firefox/10.2.0/app-readme.md create mode 100644 stable/firefox/10.2.0/charts/common-17.5.0.tgz create mode 100644 stable/firefox/10.2.0/ix_values.yaml create mode 100644 stable/firefox/10.2.0/questions.yaml create mode 100644 stable/firefox/10.2.0/templates/NOTES.txt create mode 100644 stable/firefox/10.2.0/templates/common.yaml create mode 100644 stable/firefox/10.2.0/values.yaml create mode 100644 stable/firefox/11.2.3/.helmignore create mode 100644 stable/firefox/11.2.3/CHANGELOG.md create mode 100644 stable/firefox/11.2.3/Chart.yaml create mode 100644 stable/firefox/11.2.3/README.md create mode 100644 stable/firefox/11.2.3/app-readme.md create mode 100644 stable/firefox/11.2.3/charts/common-18.1.6.tgz create mode 100644 stable/firefox/11.2.3/ix_values.yaml create mode 100644 stable/firefox/11.2.3/questions.yaml create mode 100644 stable/firefox/11.2.3/templates/NOTES.txt create mode 100644 stable/firefox/11.2.3/templates/common.yaml create mode 100644 stable/firefox/11.2.3/values.yaml create mode 100644 stable/firefox/11.3.0/.helmignore create mode 100644 stable/firefox/11.3.0/CHANGELOG.md create mode 100644 stable/firefox/11.3.0/Chart.yaml create mode 100644 stable/firefox/11.3.0/README.md create mode 100644 stable/firefox/11.3.0/app-readme.md create mode 100644 stable/firefox/11.3.0/charts/common-18.2.0.tgz create mode 100644 stable/firefox/11.3.0/ix_values.yaml create mode 100644 stable/firefox/11.3.0/questions.yaml create mode 100644 stable/firefox/11.3.0/templates/NOTES.txt create mode 100644 stable/firefox/11.3.0/templates/common.yaml create mode 100644 stable/firefox/11.3.0/values.yaml create mode 100644 stable/firefox/11.4.0/.helmignore create mode 100644 stable/firefox/11.4.0/CHANGELOG.md create mode 100644 stable/firefox/11.4.0/Chart.yaml create mode 100644 stable/firefox/11.4.0/README.md create mode 100644 stable/firefox/11.4.0/app-changelog.md create mode 100644 stable/firefox/11.4.0/app-readme.md create mode 100644 stable/firefox/11.4.0/charts/common-19.0.0.tgz create mode 100644 stable/firefox/11.4.0/ix_values.yaml create mode 100644 stable/firefox/11.4.0/questions.yaml create mode 100644 stable/firefox/11.4.0/templates/NOTES.txt create mode 100644 stable/firefox/11.4.0/templates/common.yaml create mode 100644 stable/firefox/11.4.0/values.yaml create mode 100644 stable/firefox/11.4.1/.helmignore create mode 100644 stable/firefox/11.4.1/CHANGELOG.md create mode 100644 stable/firefox/11.4.1/Chart.yaml create mode 100644 stable/firefox/11.4.1/README.md create mode 100644 stable/firefox/11.4.1/app-readme.md create mode 100644 stable/firefox/11.4.1/charts/common-19.0.0.tgz create mode 100644 stable/firefox/11.4.1/ix_values.yaml create mode 100644 stable/firefox/11.4.1/questions.yaml create mode 100644 stable/firefox/11.4.1/templates/NOTES.txt create mode 100644 stable/firefox/11.4.1/templates/common.yaml create mode 100644 stable/firefox/11.4.1/values.yaml create mode 100644 stable/firefox/12.2.0/.helmignore create mode 100644 stable/firefox/12.2.0/CHANGELOG.md create mode 100644 stable/firefox/12.2.0/Chart.yaml create mode 100644 stable/firefox/12.2.0/README.md create mode 100644 stable/firefox/12.2.0/app-readme.md create mode 100644 stable/firefox/12.2.0/charts/common-20.1.5.tgz create mode 100644 stable/firefox/12.2.0/ix_values.yaml create mode 100644 stable/firefox/12.2.0/questions.yaml create mode 100644 stable/firefox/12.2.0/templates/NOTES.txt create mode 100644 stable/firefox/12.2.0/templates/common.yaml create mode 100644 stable/firefox/12.2.0/values.yaml create mode 100644 stable/firefox/12.3.0/.helmignore create mode 100644 stable/firefox/12.3.0/CHANGELOG.md create mode 100644 stable/firefox/12.3.0/Chart.yaml create mode 100644 stable/firefox/12.3.0/README.md create mode 100644 stable/firefox/12.3.0/app-changelog.md create mode 100644 stable/firefox/12.3.0/app-readme.md create mode 100644 stable/firefox/12.3.0/charts/common-20.2.0.tgz create mode 100644 stable/firefox/12.3.0/ix_values.yaml create mode 100644 stable/firefox/12.3.0/questions.yaml create mode 100644 stable/firefox/12.3.0/templates/NOTES.txt create mode 100644 stable/firefox/12.3.0/templates/common.yaml create mode 100644 stable/firefox/12.3.0/values.yaml create mode 100644 stable/firefox/12.3.1/.helmignore create mode 100644 stable/firefox/12.3.1/CHANGELOG.md create mode 100644 stable/firefox/12.3.1/Chart.yaml create mode 100644 stable/firefox/12.3.1/README.md create mode 100644 stable/firefox/12.3.1/app-changelog.md create mode 100644 stable/firefox/12.3.1/app-readme.md create mode 100644 stable/firefox/12.3.1/charts/common-20.2.0.tgz create mode 100644 stable/firefox/12.3.1/ix_values.yaml create mode 100644 stable/firefox/12.3.1/questions.yaml create mode 100644 stable/firefox/12.3.1/templates/NOTES.txt create mode 100644 stable/firefox/12.3.1/templates/common.yaml create mode 100644 stable/firefox/12.3.1/values.yaml create mode 100644 stable/firefox/12.3.2/.helmignore create mode 100644 stable/firefox/12.3.2/CHANGELOG.md create mode 100644 stable/firefox/12.3.2/Chart.yaml create mode 100644 stable/firefox/12.3.2/README.md create mode 100644 stable/firefox/12.3.2/app-changelog.md create mode 100644 stable/firefox/12.3.2/app-readme.md create mode 100644 stable/firefox/12.3.2/charts/common-20.2.2.tgz create mode 100644 stable/firefox/12.3.2/ix_values.yaml create mode 100644 stable/firefox/12.3.2/questions.yaml create mode 100644 stable/firefox/12.3.2/templates/NOTES.txt create mode 100644 stable/firefox/12.3.2/templates/common.yaml create mode 100644 stable/firefox/12.3.2/values.yaml create mode 100644 stable/firefox/13.0.0/.helmignore create mode 100644 stable/firefox/13.0.0/CHANGELOG.md create mode 100644 stable/firefox/13.0.0/Chart.yaml create mode 100644 stable/firefox/13.0.0/README.md create mode 100644 stable/firefox/13.0.0/app-changelog.md create mode 100644 stable/firefox/13.0.0/app-readme.md create mode 100644 stable/firefox/13.0.0/charts/common-20.2.3.tgz create mode 100644 stable/firefox/13.0.0/ix_values.yaml create mode 100644 stable/firefox/13.0.0/questions.yaml create mode 100644 stable/firefox/13.0.0/templates/NOTES.txt create mode 100644 stable/firefox/13.0.0/templates/common.yaml create mode 100644 stable/firefox/13.0.0/values.yaml create mode 100644 stable/firefox/13.0.1/.helmignore create mode 100644 stable/firefox/13.0.1/CHANGELOG.md create mode 100644 stable/firefox/13.0.1/Chart.yaml create mode 100644 stable/firefox/13.0.1/README.md create mode 100644 stable/firefox/13.0.1/app-changelog.md create mode 100644 stable/firefox/13.0.1/app-readme.md create mode 100644 stable/firefox/13.0.1/charts/common-20.2.3.tgz create mode 100644 stable/firefox/13.0.1/ix_values.yaml create mode 100644 stable/firefox/13.0.1/questions.yaml create mode 100644 stable/firefox/13.0.1/templates/NOTES.txt create mode 100644 stable/firefox/13.0.1/templates/common.yaml create mode 100644 stable/firefox/13.0.1/values.yaml create mode 100644 stable/firefox/13.0.2/.helmignore create mode 100644 stable/firefox/13.0.2/CHANGELOG.md create mode 100644 stable/firefox/13.0.2/Chart.yaml create mode 100644 stable/firefox/13.0.2/README.md create mode 100644 stable/firefox/13.0.2/app-changelog.md create mode 100644 stable/firefox/13.0.2/app-readme.md create mode 100644 stable/firefox/13.0.2/charts/common-20.2.4.tgz create mode 100644 stable/firefox/13.0.2/ix_values.yaml create mode 100644 stable/firefox/13.0.2/questions.yaml create mode 100644 stable/firefox/13.0.2/templates/NOTES.txt create mode 100644 stable/firefox/13.0.2/templates/common.yaml create mode 100644 stable/firefox/13.0.2/values.yaml create mode 100644 stable/firefox/app_versions.json create mode 100644 stable/firefox/item.yaml create mode 100644 stable/frigate/12.2.0/.helmignore create mode 100644 stable/frigate/12.2.0/CHANGELOG.md create mode 100644 stable/frigate/12.2.0/Chart.yaml create mode 100644 stable/frigate/12.2.0/README.md create mode 100644 stable/frigate/12.2.0/app-readme.md create mode 100644 stable/frigate/12.2.0/charts/common-17.4.2.tgz create mode 100644 stable/frigate/12.2.0/ix_values.yaml create mode 100644 stable/frigate/12.2.0/questions.yaml create mode 100644 stable/frigate/12.2.0/templates/NOTES.txt create mode 100644 stable/frigate/12.2.0/templates/_configmap.tpl create mode 100644 stable/frigate/12.2.0/templates/common.yaml create mode 100644 stable/frigate/12.2.0/values.yaml create mode 100644 stable/frigate/12.3.0/.helmignore create mode 100644 stable/frigate/12.3.0/CHANGELOG.md create mode 100644 stable/frigate/12.3.0/Chart.yaml create mode 100644 stable/frigate/12.3.0/README.md create mode 100644 stable/frigate/12.3.0/app-readme.md create mode 100644 stable/frigate/12.3.0/charts/common-17.5.0.tgz create mode 100644 stable/frigate/12.3.0/ix_values.yaml create mode 100644 stable/frigate/12.3.0/questions.yaml create mode 100644 stable/frigate/12.3.0/templates/NOTES.txt create mode 100644 stable/frigate/12.3.0/templates/_configmap.tpl create mode 100644 stable/frigate/12.3.0/templates/common.yaml create mode 100644 stable/frigate/12.3.0/values.yaml create mode 100644 stable/frigate/13.2.3/.helmignore create mode 100644 stable/frigate/13.2.3/CHANGELOG.md create mode 100644 stable/frigate/13.2.3/Chart.yaml create mode 100644 stable/frigate/13.2.3/README.md create mode 100644 stable/frigate/13.2.3/app-readme.md create mode 100644 stable/frigate/13.2.3/charts/common-18.1.6.tgz create mode 100644 stable/frigate/13.2.3/ix_values.yaml create mode 100644 stable/frigate/13.2.3/questions.yaml create mode 100644 stable/frigate/13.2.3/templates/NOTES.txt create mode 100644 stable/frigate/13.2.3/templates/_configmap.tpl create mode 100644 stable/frigate/13.2.3/templates/common.yaml create mode 100644 stable/frigate/13.2.3/values.yaml create mode 100644 stable/frigate/13.3.0/.helmignore create mode 100644 stable/frigate/13.3.0/CHANGELOG.md create mode 100644 stable/frigate/13.3.0/Chart.yaml create mode 100644 stable/frigate/13.3.0/README.md create mode 100644 stable/frigate/13.3.0/app-readme.md create mode 100644 stable/frigate/13.3.0/charts/common-18.2.0.tgz create mode 100644 stable/frigate/13.3.0/ix_values.yaml create mode 100644 stable/frigate/13.3.0/questions.yaml create mode 100644 stable/frigate/13.3.0/templates/NOTES.txt create mode 100644 stable/frigate/13.3.0/templates/_configmap.tpl create mode 100644 stable/frigate/13.3.0/templates/common.yaml create mode 100644 stable/frigate/13.3.0/values.yaml create mode 100644 stable/frigate/13.4.0/.helmignore create mode 100644 stable/frigate/13.4.0/CHANGELOG.md create mode 100644 stable/frigate/13.4.0/Chart.yaml create mode 100644 stable/frigate/13.4.0/README.md create mode 100644 stable/frigate/13.4.0/app-changelog.md create mode 100644 stable/frigate/13.4.0/app-readme.md create mode 100644 stable/frigate/13.4.0/charts/common-19.0.0.tgz create mode 100644 stable/frigate/13.4.0/ix_values.yaml create mode 100644 stable/frigate/13.4.0/questions.yaml create mode 100644 stable/frigate/13.4.0/templates/NOTES.txt create mode 100644 stable/frigate/13.4.0/templates/_configmap.tpl create mode 100644 stable/frigate/13.4.0/templates/common.yaml create mode 100644 stable/frigate/13.4.0/values.yaml create mode 100644 stable/frigate/13.4.1/.helmignore create mode 100644 stable/frigate/13.4.1/CHANGELOG.md create mode 100644 stable/frigate/13.4.1/Chart.yaml create mode 100644 stable/frigate/13.4.1/README.md create mode 100644 stable/frigate/13.4.1/app-readme.md create mode 100644 stable/frigate/13.4.1/charts/common-19.0.0.tgz create mode 100644 stable/frigate/13.4.1/ix_values.yaml create mode 100644 stable/frigate/13.4.1/questions.yaml create mode 100644 stable/frigate/13.4.1/templates/NOTES.txt create mode 100644 stable/frigate/13.4.1/templates/_configmap.tpl create mode 100644 stable/frigate/13.4.1/templates/common.yaml create mode 100644 stable/frigate/13.4.1/values.yaml create mode 100644 stable/frigate/14.3.0/.helmignore create mode 100644 stable/frigate/14.3.0/CHANGELOG.md create mode 100644 stable/frigate/14.3.0/Chart.yaml create mode 100644 stable/frigate/14.3.0/README.md create mode 100644 stable/frigate/14.3.0/app-changelog.md create mode 100644 stable/frigate/14.3.0/app-readme.md create mode 100644 stable/frigate/14.3.0/charts/common-20.2.0.tgz create mode 100644 stable/frigate/14.3.0/ix_values.yaml create mode 100644 stable/frigate/14.3.0/questions.yaml create mode 100644 stable/frigate/14.3.0/templates/NOTES.txt create mode 100644 stable/frigate/14.3.0/templates/_configmap.tpl create mode 100644 stable/frigate/14.3.0/templates/common.yaml create mode 100644 stable/frigate/14.3.0/values.yaml create mode 100644 stable/frigate/14.3.1/.helmignore create mode 100644 stable/frigate/14.3.1/CHANGELOG.md create mode 100644 stable/frigate/14.3.1/Chart.yaml create mode 100644 stable/frigate/14.3.1/README.md create mode 100644 stable/frigate/14.3.1/app-changelog.md create mode 100644 stable/frigate/14.3.1/app-readme.md create mode 100644 stable/frigate/14.3.1/charts/common-20.2.2.tgz create mode 100644 stable/frigate/14.3.1/ix_values.yaml create mode 100644 stable/frigate/14.3.1/questions.yaml create mode 100644 stable/frigate/14.3.1/templates/NOTES.txt create mode 100644 stable/frigate/14.3.1/templates/_configmap.tpl create mode 100644 stable/frigate/14.3.1/templates/common.yaml create mode 100644 stable/frigate/14.3.1/values.yaml create mode 100644 stable/frigate/14.3.2/.helmignore create mode 100644 stable/frigate/14.3.2/CHANGELOG.md create mode 100644 stable/frigate/14.3.2/Chart.yaml create mode 100644 stable/frigate/14.3.2/README.md create mode 100644 stable/frigate/14.3.2/app-changelog.md create mode 100644 stable/frigate/14.3.2/app-readme.md create mode 100644 stable/frigate/14.3.2/charts/common-20.2.3.tgz create mode 100644 stable/frigate/14.3.2/ix_values.yaml create mode 100644 stable/frigate/14.3.2/questions.yaml create mode 100644 stable/frigate/14.3.2/templates/NOTES.txt create mode 100644 stable/frigate/14.3.2/templates/_configmap.tpl create mode 100644 stable/frigate/14.3.2/templates/common.yaml create mode 100644 stable/frigate/14.3.2/values.yaml create mode 100644 stable/frigate/14.3.3/.helmignore create mode 100644 stable/frigate/14.3.3/CHANGELOG.md create mode 100644 stable/frigate/14.3.3/Chart.yaml create mode 100644 stable/frigate/14.3.3/README.md create mode 100644 stable/frigate/14.3.3/app-changelog.md create mode 100644 stable/frigate/14.3.3/app-readme.md create mode 100644 stable/frigate/14.3.3/charts/common-20.2.4.tgz create mode 100644 stable/frigate/14.3.3/ix_values.yaml create mode 100644 stable/frigate/14.3.3/questions.yaml create mode 100644 stable/frigate/14.3.3/templates/NOTES.txt create mode 100644 stable/frigate/14.3.3/templates/_configmap.tpl create mode 100644 stable/frigate/14.3.3/templates/common.yaml create mode 100644 stable/frigate/14.3.3/values.yaml create mode 100644 stable/frigate/app_versions.json create mode 100644 stable/frigate/item.yaml create mode 100644 stable/gitea/17.2.0/.helmignore create mode 100644 stable/gitea/17.2.0/CHANGELOG.md create mode 100644 stable/gitea/17.2.0/Chart.yaml create mode 100644 stable/gitea/17.2.0/LICENSE create mode 100644 stable/gitea/17.2.0/README.md create mode 100644 stable/gitea/17.2.0/app-readme.md create mode 100644 stable/gitea/17.2.0/charts/common-17.4.2.tgz create mode 100644 stable/gitea/17.2.0/charts/memcached-11.1.18.tgz create mode 100644 stable/gitea/17.2.0/ix_values.yaml create mode 100644 stable/gitea/17.2.0/questions.yaml create mode 100644 stable/gitea/17.2.0/templates/NOTES.txt create mode 100644 stable/gitea/17.2.0/templates/_configmap.tpl create mode 100644 stable/gitea/17.2.0/templates/_secrets.tpl create mode 100644 stable/gitea/17.2.0/templates/common.yaml create mode 100644 stable/gitea/17.2.0/values.yaml create mode 100644 stable/gitea/17.3.0/.helmignore create mode 100644 stable/gitea/17.3.0/CHANGELOG.md create mode 100644 stable/gitea/17.3.0/Chart.yaml create mode 100644 stable/gitea/17.3.0/README.md create mode 100644 stable/gitea/17.3.0/app-readme.md create mode 100644 stable/gitea/17.3.0/charts/common-17.4.2.tgz create mode 100644 stable/gitea/17.3.0/charts/memcached-11.2.1.tgz create mode 100644 stable/gitea/17.3.0/ix_values.yaml create mode 100644 stable/gitea/17.3.0/questions.yaml create mode 100644 stable/gitea/17.3.0/templates/NOTES.txt create mode 100644 stable/gitea/17.3.0/templates/_configmap.tpl create mode 100644 stable/gitea/17.3.0/templates/_secrets.tpl create mode 100644 stable/gitea/17.3.0/templates/common.yaml create mode 100644 stable/gitea/17.3.0/values.yaml create mode 100644 stable/gitea/17.4.0/.helmignore create mode 100644 stable/gitea/17.4.0/CHANGELOG.md create mode 100644 stable/gitea/17.4.0/Chart.yaml create mode 100644 stable/gitea/17.4.0/README.md create mode 100644 stable/gitea/17.4.0/app-readme.md create mode 100644 stable/gitea/17.4.0/charts/common-17.5.0.tgz create mode 100644 stable/gitea/17.4.0/charts/memcached-11.2.1.tgz create mode 100644 stable/gitea/17.4.0/ix_values.yaml create mode 100644 stable/gitea/17.4.0/questions.yaml create mode 100644 stable/gitea/17.4.0/templates/NOTES.txt create mode 100644 stable/gitea/17.4.0/templates/_configmap.tpl create mode 100644 stable/gitea/17.4.0/templates/_secrets.tpl create mode 100644 stable/gitea/17.4.0/templates/common.yaml create mode 100644 stable/gitea/17.4.0/values.yaml create mode 100644 stable/gitea/18.14.4/.helmignore create mode 100644 stable/gitea/18.14.4/CHANGELOG.md create mode 100644 stable/gitea/18.14.4/Chart.yaml create mode 100644 stable/gitea/18.14.4/README.md create mode 100644 stable/gitea/18.14.4/app-changelog.md create mode 100644 stable/gitea/18.14.4/app-readme.md create mode 100644 stable/gitea/18.14.4/charts/common-20.2.2.tgz create mode 100644 stable/gitea/18.14.4/charts/memcached-12.8.2.tgz create mode 100644 stable/gitea/18.14.4/ix_values.yaml create mode 100644 stable/gitea/18.14.4/questions.yaml create mode 100644 stable/gitea/18.14.4/templates/NOTES.txt create mode 100644 stable/gitea/18.14.4/templates/_configmap.tpl create mode 100644 stable/gitea/18.14.4/templates/_secrets.tpl create mode 100644 stable/gitea/18.14.4/templates/common.yaml create mode 100644 stable/gitea/18.14.4/values.yaml create mode 100644 stable/gitea/18.14.5/.helmignore create mode 100644 stable/gitea/18.14.5/CHANGELOG.md create mode 100644 stable/gitea/18.14.5/Chart.yaml create mode 100644 stable/gitea/18.14.5/README.md create mode 100644 stable/gitea/18.14.5/app-changelog.md create mode 100644 stable/gitea/18.14.5/app-readme.md create mode 100644 stable/gitea/18.14.5/charts/common-20.2.3.tgz create mode 100644 stable/gitea/18.14.5/charts/memcached-12.8.2.tgz create mode 100644 stable/gitea/18.14.5/ix_values.yaml create mode 100644 stable/gitea/18.14.5/questions.yaml create mode 100644 stable/gitea/18.14.5/templates/NOTES.txt create mode 100644 stable/gitea/18.14.5/templates/_configmap.tpl create mode 100644 stable/gitea/18.14.5/templates/_secrets.tpl create mode 100644 stable/gitea/18.14.5/templates/common.yaml create mode 100644 stable/gitea/18.14.5/values.yaml create mode 100644 stable/gitea/18.14.6/.helmignore create mode 100644 stable/gitea/18.14.6/CHANGELOG.md create mode 100644 stable/gitea/18.14.6/Chart.yaml create mode 100644 stable/gitea/18.14.6/README.md create mode 100644 stable/gitea/18.14.6/app-changelog.md create mode 100644 stable/gitea/18.14.6/app-readme.md create mode 100644 stable/gitea/18.14.6/charts/common-20.2.3.tgz create mode 100644 stable/gitea/18.14.6/charts/memcached-12.8.3.tgz create mode 100644 stable/gitea/18.14.6/ix_values.yaml create mode 100644 stable/gitea/18.14.6/questions.yaml create mode 100644 stable/gitea/18.14.6/templates/NOTES.txt create mode 100644 stable/gitea/18.14.6/templates/_configmap.tpl create mode 100644 stable/gitea/18.14.6/templates/_secrets.tpl create mode 100644 stable/gitea/18.14.6/templates/common.yaml create mode 100644 stable/gitea/18.14.6/values.yaml create mode 100644 stable/gitea/18.14.7/.helmignore create mode 100644 stable/gitea/18.14.7/CHANGELOG.md create mode 100644 stable/gitea/18.14.7/Chart.yaml create mode 100644 stable/gitea/18.14.7/README.md create mode 100644 stable/gitea/18.14.7/app-changelog.md create mode 100644 stable/gitea/18.14.7/app-readme.md create mode 100644 stable/gitea/18.14.7/charts/common-20.2.4.tgz create mode 100644 stable/gitea/18.14.7/charts/memcached-12.8.3.tgz create mode 100644 stable/gitea/18.14.7/ix_values.yaml create mode 100644 stable/gitea/18.14.7/questions.yaml create mode 100644 stable/gitea/18.14.7/templates/NOTES.txt create mode 100644 stable/gitea/18.14.7/templates/_configmap.tpl create mode 100644 stable/gitea/18.14.7/templates/_secrets.tpl create mode 100644 stable/gitea/18.14.7/templates/common.yaml create mode 100644 stable/gitea/18.14.7/values.yaml create mode 100644 stable/gitea/app_versions.json create mode 100644 stable/gitea/item.yaml create mode 100644 stable/jellyfin/17.2.0/.helmignore create mode 100644 stable/jellyfin/17.2.0/CHANGELOG.md create mode 100644 stable/jellyfin/17.2.0/Chart.yaml create mode 100644 stable/jellyfin/17.2.0/README.md create mode 100644 stable/jellyfin/17.2.0/app-readme.md create mode 100644 stable/jellyfin/17.2.0/charts/common-17.4.2.tgz create mode 100644 stable/jellyfin/17.2.0/ix_values.yaml create mode 100644 stable/jellyfin/17.2.0/questions.yaml create mode 100644 stable/jellyfin/17.2.0/templates/NOTES.txt create mode 100644 stable/jellyfin/17.2.0/templates/common.yaml create mode 100644 stable/jellyfin/17.2.0/values.yaml create mode 100644 stable/jellyfin/17.2.1/.helmignore create mode 100644 stable/jellyfin/17.2.1/CHANGELOG.md create mode 100644 stable/jellyfin/17.2.1/Chart.yaml create mode 100644 stable/jellyfin/17.2.1/README.md create mode 100644 stable/jellyfin/17.2.1/app-readme.md create mode 100644 stable/jellyfin/17.2.1/charts/common-17.4.2.tgz create mode 100644 stable/jellyfin/17.2.1/ix_values.yaml create mode 100644 stable/jellyfin/17.2.1/questions.yaml create mode 100644 stable/jellyfin/17.2.1/templates/NOTES.txt create mode 100644 stable/jellyfin/17.2.1/templates/common.yaml create mode 100644 stable/jellyfin/17.2.1/values.yaml create mode 100644 stable/jellyfin/17.3.0/.helmignore create mode 100644 stable/jellyfin/17.3.0/CHANGELOG.md create mode 100644 stable/jellyfin/17.3.0/Chart.yaml create mode 100644 stable/jellyfin/17.3.0/README.md create mode 100644 stable/jellyfin/17.3.0/app-readme.md create mode 100644 stable/jellyfin/17.3.0/charts/common-17.5.0.tgz create mode 100644 stable/jellyfin/17.3.0/ix_values.yaml create mode 100644 stable/jellyfin/17.3.0/questions.yaml create mode 100644 stable/jellyfin/17.3.0/templates/NOTES.txt create mode 100644 stable/jellyfin/17.3.0/templates/common.yaml create mode 100644 stable/jellyfin/17.3.0/values.yaml create mode 100644 stable/jellyfin/18.7.1/.helmignore create mode 100644 stable/jellyfin/18.7.1/CHANGELOG.md create mode 100644 stable/jellyfin/18.7.1/Chart.yaml create mode 100644 stable/jellyfin/18.7.1/README.md create mode 100644 stable/jellyfin/18.7.1/app-changelog.md create mode 100644 stable/jellyfin/18.7.1/app-readme.md create mode 100644 stable/jellyfin/18.7.1/charts/common-20.2.2.tgz create mode 100644 stable/jellyfin/18.7.1/ix_values.yaml create mode 100644 stable/jellyfin/18.7.1/questions.yaml create mode 100644 stable/jellyfin/18.7.1/templates/NOTES.txt create mode 100644 stable/jellyfin/18.7.1/templates/common.yaml create mode 100644 stable/jellyfin/18.7.1/values.yaml create mode 100644 stable/jellyfin/18.7.2/.helmignore create mode 100644 stable/jellyfin/18.7.2/CHANGELOG.md create mode 100644 stable/jellyfin/18.7.2/Chart.yaml create mode 100644 stable/jellyfin/18.7.2/README.md create mode 100644 stable/jellyfin/18.7.2/app-changelog.md create mode 100644 stable/jellyfin/18.7.2/app-readme.md create mode 100644 stable/jellyfin/18.7.2/charts/common-20.2.2.tgz create mode 100644 stable/jellyfin/18.7.2/ix_values.yaml create mode 100644 stable/jellyfin/18.7.2/questions.yaml create mode 100644 stable/jellyfin/18.7.2/templates/NOTES.txt create mode 100644 stable/jellyfin/18.7.2/templates/common.yaml create mode 100644 stable/jellyfin/18.7.2/values.yaml create mode 100644 stable/jellyfin/18.7.3/.helmignore create mode 100644 stable/jellyfin/18.7.3/CHANGELOG.md create mode 100644 stable/jellyfin/18.7.3/Chart.yaml create mode 100644 stable/jellyfin/18.7.3/README.md create mode 100644 stable/jellyfin/18.7.3/app-changelog.md create mode 100644 stable/jellyfin/18.7.3/app-readme.md create mode 100644 stable/jellyfin/18.7.3/charts/common-20.2.3.tgz create mode 100644 stable/jellyfin/18.7.3/ix_values.yaml create mode 100644 stable/jellyfin/18.7.3/questions.yaml create mode 100644 stable/jellyfin/18.7.3/templates/NOTES.txt create mode 100644 stable/jellyfin/18.7.3/templates/common.yaml create mode 100644 stable/jellyfin/18.7.3/values.yaml create mode 100644 stable/jellyfin/18.7.4/.helmignore create mode 100644 stable/jellyfin/18.7.4/CHANGELOG.md create mode 100644 stable/jellyfin/18.7.4/Chart.yaml create mode 100644 stable/jellyfin/18.7.4/README.md create mode 100644 stable/jellyfin/18.7.4/app-changelog.md create mode 100644 stable/jellyfin/18.7.4/app-readme.md create mode 100644 stable/jellyfin/18.7.4/charts/common-20.2.4.tgz create mode 100644 stable/jellyfin/18.7.4/ix_values.yaml create mode 100644 stable/jellyfin/18.7.4/questions.yaml create mode 100644 stable/jellyfin/18.7.4/templates/NOTES.txt create mode 100644 stable/jellyfin/18.7.4/templates/common.yaml create mode 100644 stable/jellyfin/18.7.4/values.yaml create mode 100644 stable/jellyfin/app_versions.json create mode 100644 stable/jellyfin/item.yaml create mode 100644 stable/librespeed/12.2.0/.helmignore create mode 100644 stable/librespeed/12.2.0/CHANGELOG.md create mode 100644 stable/librespeed/12.2.0/Chart.yaml create mode 100644 stable/librespeed/12.2.0/README.md create mode 100644 stable/librespeed/12.2.0/app-readme.md create mode 100644 stable/librespeed/12.2.0/charts/common-17.4.2.tgz create mode 100644 stable/librespeed/12.2.0/ix_values.yaml create mode 100644 stable/librespeed/12.2.0/questions.yaml create mode 100644 stable/librespeed/12.2.0/templates/NOTES.txt create mode 100644 stable/librespeed/12.2.0/templates/common.yaml create mode 100644 stable/librespeed/12.2.0/values.yaml create mode 100644 stable/librespeed/12.2.1/.helmignore create mode 100644 stable/librespeed/12.2.1/CHANGELOG.md create mode 100644 stable/librespeed/12.2.1/Chart.yaml create mode 100644 stable/librespeed/12.2.1/README.md create mode 100644 stable/librespeed/12.2.1/app-readme.md create mode 100644 stable/librespeed/12.2.1/charts/common-17.4.2.tgz create mode 100644 stable/librespeed/12.2.1/ix_values.yaml create mode 100644 stable/librespeed/12.2.1/questions.yaml create mode 100644 stable/librespeed/12.2.1/templates/NOTES.txt create mode 100644 stable/librespeed/12.2.1/templates/common.yaml create mode 100644 stable/librespeed/12.2.1/values.yaml create mode 100644 stable/librespeed/12.3.0/.helmignore create mode 100644 stable/librespeed/12.3.0/CHANGELOG.md create mode 100644 stable/librespeed/12.3.0/Chart.yaml create mode 100644 stable/librespeed/12.3.0/README.md create mode 100644 stable/librespeed/12.3.0/app-readme.md create mode 100644 stable/librespeed/12.3.0/charts/common-17.5.0.tgz create mode 100644 stable/librespeed/12.3.0/ix_values.yaml create mode 100644 stable/librespeed/12.3.0/questions.yaml create mode 100644 stable/librespeed/12.3.0/templates/NOTES.txt create mode 100644 stable/librespeed/12.3.0/templates/common.yaml create mode 100644 stable/librespeed/12.3.0/values.yaml create mode 100644 stable/librespeed/13.7.2/.helmignore create mode 100644 stable/librespeed/13.7.2/CHANGELOG.md create mode 100644 stable/librespeed/13.7.2/Chart.yaml create mode 100644 stable/librespeed/13.7.2/README.md create mode 100644 stable/librespeed/13.7.2/app-changelog.md create mode 100644 stable/librespeed/13.7.2/app-readme.md create mode 100644 stable/librespeed/13.7.2/charts/common-20.2.2.tgz create mode 100644 stable/librespeed/13.7.2/ix_values.yaml create mode 100644 stable/librespeed/13.7.2/questions.yaml create mode 100644 stable/librespeed/13.7.2/templates/NOTES.txt create mode 100644 stable/librespeed/13.7.2/templates/common.yaml create mode 100644 stable/librespeed/13.7.2/values.yaml create mode 100644 stable/librespeed/13.7.3/.helmignore create mode 100644 stable/librespeed/13.7.3/CHANGELOG.md create mode 100644 stable/librespeed/13.7.3/Chart.yaml create mode 100644 stable/librespeed/13.7.3/README.md create mode 100644 stable/librespeed/13.7.3/app-changelog.md create mode 100644 stable/librespeed/13.7.3/app-readme.md create mode 100644 stable/librespeed/13.7.3/charts/common-20.2.3.tgz create mode 100644 stable/librespeed/13.7.3/ix_values.yaml create mode 100644 stable/librespeed/13.7.3/questions.yaml create mode 100644 stable/librespeed/13.7.3/templates/NOTES.txt create mode 100644 stable/librespeed/13.7.3/templates/common.yaml create mode 100644 stable/librespeed/13.7.3/values.yaml create mode 100644 stable/librespeed/13.7.4/.helmignore create mode 100644 stable/librespeed/13.7.4/CHANGELOG.md create mode 100644 stable/librespeed/13.7.4/Chart.yaml create mode 100644 stable/librespeed/13.7.4/README.md create mode 100644 stable/librespeed/13.7.4/app-changelog.md create mode 100644 stable/librespeed/13.7.4/app-readme.md create mode 100644 stable/librespeed/13.7.4/charts/common-20.2.3.tgz create mode 100644 stable/librespeed/13.7.4/ix_values.yaml create mode 100644 stable/librespeed/13.7.4/questions.yaml create mode 100644 stable/librespeed/13.7.4/templates/NOTES.txt create mode 100644 stable/librespeed/13.7.4/templates/common.yaml create mode 100644 stable/librespeed/13.7.4/values.yaml create mode 100644 stable/librespeed/13.7.5/.helmignore create mode 100644 stable/librespeed/13.7.5/CHANGELOG.md create mode 100644 stable/librespeed/13.7.5/Chart.yaml create mode 100644 stable/librespeed/13.7.5/README.md create mode 100644 stable/librespeed/13.7.5/app-changelog.md create mode 100644 stable/librespeed/13.7.5/app-readme.md create mode 100644 stable/librespeed/13.7.5/charts/common-20.2.4.tgz create mode 100644 stable/librespeed/13.7.5/ix_values.yaml create mode 100644 stable/librespeed/13.7.5/questions.yaml create mode 100644 stable/librespeed/13.7.5/templates/NOTES.txt create mode 100644 stable/librespeed/13.7.5/templates/common.yaml create mode 100644 stable/librespeed/13.7.5/values.yaml create mode 100644 stable/librespeed/app_versions.json create mode 100644 stable/librespeed/item.yaml create mode 100644 stable/lidarr/19.2.0/.helmignore create mode 100644 stable/lidarr/19.2.0/CHANGELOG.md create mode 100644 stable/lidarr/19.2.0/Chart.yaml create mode 100644 stable/lidarr/19.2.0/README.md create mode 100644 stable/lidarr/19.2.0/app-readme.md create mode 100644 stable/lidarr/19.2.0/charts/common-17.4.2.tgz create mode 100644 stable/lidarr/19.2.0/ix_values.yaml create mode 100644 stable/lidarr/19.2.0/questions.yaml create mode 100644 stable/lidarr/19.2.0/templates/NOTES.txt create mode 100644 stable/lidarr/19.2.0/templates/common.yaml create mode 100644 stable/lidarr/19.2.0/values.yaml create mode 100644 stable/lidarr/19.3.0/.helmignore create mode 100644 stable/lidarr/19.3.0/CHANGELOG.md create mode 100644 stable/lidarr/19.3.0/Chart.yaml create mode 100644 stable/lidarr/19.3.0/README.md create mode 100644 stable/lidarr/19.3.0/app-readme.md create mode 100644 stable/lidarr/19.3.0/charts/common-17.5.0.tgz create mode 100644 stable/lidarr/19.3.0/ix_values.yaml create mode 100644 stable/lidarr/19.3.0/questions.yaml create mode 100644 stable/lidarr/19.3.0/templates/NOTES.txt create mode 100644 stable/lidarr/19.3.0/templates/common.yaml create mode 100644 stable/lidarr/19.3.0/values.yaml create mode 100644 stable/lidarr/20.2.0/.helmignore create mode 100644 stable/lidarr/20.2.0/CHANGELOG.md create mode 100644 stable/lidarr/20.2.0/Chart.yaml create mode 100644 stable/lidarr/20.2.0/README.md create mode 100644 stable/lidarr/20.2.0/app-readme.md create mode 100644 stable/lidarr/20.2.0/charts/common-18.0.2.tgz create mode 100644 stable/lidarr/20.2.0/ix_values.yaml create mode 100644 stable/lidarr/20.2.0/questions.yaml create mode 100644 stable/lidarr/20.2.0/templates/NOTES.txt create mode 100644 stable/lidarr/20.2.0/templates/common.yaml create mode 100644 stable/lidarr/20.2.0/values.yaml create mode 100644 stable/lidarr/20.2.1/.helmignore create mode 100644 stable/lidarr/20.2.1/CHANGELOG.md create mode 100644 stable/lidarr/20.2.1/Chart.yaml create mode 100644 stable/lidarr/20.2.1/README.md create mode 100644 stable/lidarr/20.2.1/app-readme.md create mode 100644 stable/lidarr/20.2.1/charts/common-18.0.3.tgz create mode 100644 stable/lidarr/20.2.1/ix_values.yaml create mode 100644 stable/lidarr/20.2.1/questions.yaml create mode 100644 stable/lidarr/20.2.1/templates/NOTES.txt create mode 100644 stable/lidarr/20.2.1/templates/common.yaml create mode 100644 stable/lidarr/20.2.1/values.yaml create mode 100644 stable/lidarr/20.3.0/.helmignore create mode 100644 stable/lidarr/20.3.0/CHANGELOG.md create mode 100644 stable/lidarr/20.3.0/Chart.yaml create mode 100644 stable/lidarr/20.3.0/README.md create mode 100644 stable/lidarr/20.3.0/app-readme.md create mode 100644 stable/lidarr/20.3.0/charts/common-18.1.2.tgz create mode 100644 stable/lidarr/20.3.0/ix_values.yaml create mode 100644 stable/lidarr/20.3.0/questions.yaml create mode 100644 stable/lidarr/20.3.0/templates/NOTES.txt create mode 100644 stable/lidarr/20.3.0/templates/common.yaml create mode 100644 stable/lidarr/20.3.0/values.yaml create mode 100644 stable/lidarr/20.3.1/.helmignore create mode 100644 stable/lidarr/20.3.1/CHANGELOG.md create mode 100644 stable/lidarr/20.3.1/Chart.yaml create mode 100644 stable/lidarr/20.3.1/README.md create mode 100644 stable/lidarr/20.3.1/app-readme.md create mode 100644 stable/lidarr/20.3.1/charts/common-18.1.2.tgz create mode 100644 stable/lidarr/20.3.1/ix_values.yaml create mode 100644 stable/lidarr/20.3.1/questions.yaml create mode 100644 stable/lidarr/20.3.1/templates/NOTES.txt create mode 100644 stable/lidarr/20.3.1/templates/common.yaml create mode 100644 stable/lidarr/20.3.1/values.yaml create mode 100644 stable/lidarr/21.5.2/.helmignore create mode 100644 stable/lidarr/21.5.2/CHANGELOG.md create mode 100644 stable/lidarr/21.5.2/Chart.yaml create mode 100644 stable/lidarr/21.5.2/README.md create mode 100644 stable/lidarr/21.5.2/app-changelog.md create mode 100644 stable/lidarr/21.5.2/app-readme.md create mode 100644 stable/lidarr/21.5.2/charts/common-20.2.0.tgz create mode 100644 stable/lidarr/21.5.2/ix_values.yaml create mode 100644 stable/lidarr/21.5.2/questions.yaml create mode 100644 stable/lidarr/21.5.2/templates/NOTES.txt create mode 100644 stable/lidarr/21.5.2/templates/common.yaml create mode 100644 stable/lidarr/21.5.2/values.yaml create mode 100644 stable/lidarr/21.5.3/.helmignore create mode 100644 stable/lidarr/21.5.3/CHANGELOG.md create mode 100644 stable/lidarr/21.5.3/Chart.yaml create mode 100644 stable/lidarr/21.5.3/README.md create mode 100644 stable/lidarr/21.5.3/app-changelog.md create mode 100644 stable/lidarr/21.5.3/app-readme.md create mode 100644 stable/lidarr/21.5.3/charts/common-20.2.2.tgz create mode 100644 stable/lidarr/21.5.3/ix_values.yaml create mode 100644 stable/lidarr/21.5.3/questions.yaml create mode 100644 stable/lidarr/21.5.3/templates/NOTES.txt create mode 100644 stable/lidarr/21.5.3/templates/common.yaml create mode 100644 stable/lidarr/21.5.3/values.yaml create mode 100644 stable/lidarr/21.5.4/.helmignore create mode 100644 stable/lidarr/21.5.4/CHANGELOG.md create mode 100644 stable/lidarr/21.5.4/Chart.yaml create mode 100644 stable/lidarr/21.5.4/README.md create mode 100644 stable/lidarr/21.5.4/app-changelog.md create mode 100644 stable/lidarr/21.5.4/app-readme.md create mode 100644 stable/lidarr/21.5.4/charts/common-20.2.3.tgz create mode 100644 stable/lidarr/21.5.4/ix_values.yaml create mode 100644 stable/lidarr/21.5.4/questions.yaml create mode 100644 stable/lidarr/21.5.4/templates/NOTES.txt create mode 100644 stable/lidarr/21.5.4/templates/common.yaml create mode 100644 stable/lidarr/21.5.4/values.yaml create mode 100644 stable/lidarr/21.5.5/.helmignore create mode 100644 stable/lidarr/21.5.5/CHANGELOG.md create mode 100644 stable/lidarr/21.5.5/Chart.yaml create mode 100644 stable/lidarr/21.5.5/README.md create mode 100644 stable/lidarr/21.5.5/app-changelog.md create mode 100644 stable/lidarr/21.5.5/app-readme.md create mode 100644 stable/lidarr/21.5.5/charts/common-20.2.4.tgz create mode 100644 stable/lidarr/21.5.5/ix_values.yaml create mode 100644 stable/lidarr/21.5.5/questions.yaml create mode 100644 stable/lidarr/21.5.5/templates/NOTES.txt create mode 100644 stable/lidarr/21.5.5/templates/common.yaml create mode 100644 stable/lidarr/21.5.5/values.yaml create mode 100644 stable/lidarr/app_versions.json create mode 100644 stable/lidarr/item.yaml diff --git a/dev/ollama/0.0.2/CHANGELOG.md b/dev/ollama/0.0.2/CHANGELOG.md new file mode 100644 index 0000000..62347fc --- /dev/null +++ b/dev/ollama/0.0.2/CHANGELOG.md @@ -0,0 +1,13 @@ +--- +title: Changelog +--- + +**Important:** +*for the complete changelog, please refer to the website* + + + +## [ollama-0.0.2](https://github.com/truecharts/charts/compare/ollama-0.0.1...ollama-0.0.2) (2024-01-10) + + +## [ollama-0.0.1]ollama-0.0.1 (2024-01-09) \ No newline at end of file diff --git a/dev/ollama/0.0.2/Chart.yaml b/dev/ollama/0.0.2/Chart.yaml new file mode 100644 index 0000000..78da5f0 --- /dev/null +++ b/dev/ollama/0.0.2/Chart.yaml @@ -0,0 +1,38 @@ +kubeVersion: ">=1.24.0-0" +apiVersion: v2 +name: ollama +version: 0.0.2 +appVersion: 0.1.18 +description: Get up and running with large language models locally. +home: https://truecharts.org/charts/incubator/ollama +icon: https://truecharts.org/img/hotlink-ok/chart-icons/ollama.png +deprecated: false +sources: + - https://github.com/truecharts/charts/tree/master/charts/incubator/ollama + - https://ghcr.io/ollama-webui/ollama-webui + - https://github.com/jmorganca/ollama + - https://github.com/ollama-webui/ollama-webui +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +keywords: + - ollama + - language-models +dependencies: + - name: common + version: 17.2.21 + repository: https://library-charts.truecharts.org + condition: "" + alias: "" + tags: [] + import-values: [] +annotations: + max_scale_version: 23.10.2 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: ai + truecharts.org/max_helm_version: "3.13" + truecharts.org/min_helm_version: "3.12" + truecharts.org/train: incubator +type: application diff --git a/dev/ollama/0.0.2/README.md b/dev/ollama/0.0.2/README.md new file mode 100644 index 0000000..a416ebc --- /dev/null +++ b/dev/ollama/0.0.2/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/incubator/ollama) + +**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/dev/ollama/0.0.2/app-changelog.md b/dev/ollama/0.0.2/app-changelog.md new file mode 100644 index 0000000..353916c --- /dev/null +++ b/dev/ollama/0.0.2/app-changelog.md @@ -0,0 +1,3 @@ + + +## [ollama-0.0.2](https://github.com/truecharts/charts/compare/ollama-0.0.1...ollama-0.0.2) (2024-01-10) \ No newline at end of file diff --git a/dev/ollama/0.0.2/app-readme.md b/dev/ollama/0.0.2/app-readme.md new file mode 100644 index 0000000..3b3090a --- /dev/null +++ b/dev/ollama/0.0.2/app-readme.md @@ -0,0 +1,8 @@ +Get up and running with large language models locally. + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/dev/ollama](https://truecharts.org/charts/dev/ollama) + +--- + +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/dev/ollama/0.0.2/charts/common-17.2.21.tgz b/dev/ollama/0.0.2/charts/common-17.2.21.tgz new file mode 100644 index 0000000000000000000000000000000000000000..8216afb083886d3eae2ba7e1481de989a98f54b8 GIT binary patch literal 97599 zcmV)cK&ZbTiwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PMZ(avQnPFuK2a6)0*`vG#}*zbP?s>Xjv}SMSQQ9#QrtCvQr@ z%zz}K;b3+EQsz3YI=69d?_9|#d=4-lBqdRjy~}x?ti>6i(P%V)?nZaRC(|j3_Kznp zVf6)^hTm=eX*3#*UZ*4eZ8RF$e;d7a>$_&B+v)V$%|^fbU8C9R^xNNo#uMO@duEiu zeEt^*v6sMP0Y)SN z*U1bC2BMV-nW6!hFc#Cn{{9%V$;_+!WV+9i8S+J$eHh1dpCt(GPa$O}*;nr+D^{@2 z8`2=)95R^Dx&$?&DDg?eP{ah(*?zy*X*BxXZsis&?nn~QL8S)L#ws<9X-&MS)PQQ{ zcIF||)j$93b+g{=)f=_OpDR;{BL;DV5&;ZNAr1!sM{koVUj006Tj zOwrF&ki``SY!Rb@Mz1p0xHS9qR=w4%JkR*6`9Fu@4ACcA0G7`GX0u-~|NEWRcK$!d zvjb{1@HQkK41r{V%2@mwQ~(ekhll|f1ei~I7y|hfgwR7FXLtF>0DS(kyaJ3O!XSUg zYgxZ?Rdo$MS!fJ>B)(q1KY2d@$Fn3s5epZ9k|_ej`w#LN1pxsOVSvu!m?R9a38rdt z3IGF8tyTb-A_l|I<2_UD9R&fEug~AuH~~fgMadldh>FrM2!`_ak&QW@-W32?0?`QH zW&x|$Wq`q}y9tUwgiwHj-8GuwuumiCg@^)@fB;kZH=7_Z!kIN$pSE96|IJZ+|J^vppxMT z;6aK4P9y!=RLOFUV7>`*Xv=#W$Ke9t5$`s+J0=N#J06D!V5(>s$T8L5m-LePH4>x9 zCkd^I9=}ju1@FGY5uVPbAR+;}E&^oBs>uy56T*m3LJnKL(r-8~lvcZzji@TJnd5NA zg{ZU399~?YpbSNRie36jR*vU>w%Qfqqoq0?&wcq@(>_!9^5ZcW;@^-g%KsXGW~1>I zXA6EjzSafjK3h`o^5gM7FMQ4fCO^-j5&-X9>EV zB#2H(7^Gk5OmxQj(iC431OxnaAk-3HxMaj;@q^ImmSEE=#irL-LZ6CUXFkOt_OaOh zg`|+KaeO-SZ663}8;~emRNU1~f;gMPG18I_=0D7YmY)(76N(v078PLq;PcW?>X_{F zfA{Yu1WvJAlR>_uF*qK8d9&VZ)SLf{PGGCs8?<{ttA#q=0c>_Vhs{Ippn2#8{nkOd z+ivy`+Q^58jehU2-$Dl?zt?W|I)|RuM=(JBej_+^+lgmk2x1aqpQFfsU5XzAa5lOi z>@qTN=1vGoqY;C&P> zt_Wd2;tG>e_ zx2svid0Z_#;*$?!=;07EobL262nOJv|5Cq#gqUf?*RrGY^NQZYf8jzQXKzL%3VQ&n zy$jA5nL>tr7={Z|0R{m${^|WM7kglMdi~+-MEv`f|NGr&m{J zC#R;KjV5@1asCe=ZhQI21Tr&w=zemon1 zPNUJ7il0+76${&e*o71H>kLt+Xfso=+jxg771NLuOhtu@k7p-mM>oeumqWch!!T5+ zt8y-Nm(VsQfdyKM(nIN5|faO7xMKni6~1T zj+jQ9kq{+XlNE2MKS9APM9GC9g4~Z1OvLu0MRxT*k;`lLwO9$sEMi(+_I>{An%p95 zJ!dGH;z+dpHi166bY+xYLviShDl*_@EiX2#b zOPt^-6jFkIBX@_CxZ-8t{Q@zw>ycm>BVY4Hy1b>kL)xr-@{KD2EQf*;+qlqR_(uM8 zsu2%SyMer9ysGK6ztzv5LH(mNCMq?h&O1<#Ny4c5Q>i-O%a>{fNGw!K4&?h)P#8?c zhzb4lzeX)y*)%VnZ8j%&|GvAMk?QZ!S?0$t)&n_FxdQhaiIfVD<|tX*O;Cb_H3s{< z2bJspdjLLMA3IZ9fwyP2dUgMaEwIznb0=pp4T~pcY!rTBDA4$vW6G>;U!rg6?RFQe z*8{zW1!WzPV~D0PTby7i7>Nb+60*qv?90lsq!=iAE7N9wuOdr@@fad#jGQD4$I{;wn zQ#{~*WgFc|TNQ=mi=sBg2OE%XkI!)!a`~~|sJH6P?x5Z3HFTL+eC4vhpLKzrDDdY! zVBYlQn}2~FqRgMVI{q~p@c-0XjYhN9=+u2Ot)owH8i#1040Uxb7}e>5HtU}jzv-Ic zEE)iV#)wK282ZFIVCQ|d72d70h@oU81VO!C%rV-t7gF5XLz8!-f`GR63&EJj;Ce-)R3c3m@*uVFFziOPx^Pw=cU(1Tvroq zsDbpY_U_#=4KSWR?SKI=7sR~qqM^wMy(gxzw zW1piZf0=Ob(f^bm~0YN%SGh926OQk^a|8rGiR*0SvgX>p&wt%6rt*4VAsvUMtw z2gnuC3t$WK6ug&}a^H%|r)77F`|V;s)LrVq4v4XT3rJ*!Jv}(I z*L~AMJom-+&b1YFnma}ez>uK?1-k}H221J3l^YBxDX7z$=s(D3C;+2`Ou_K@=={_= zhp+5__faT)&=NF4i8$*N{E9!Feqvlu2#pY@>~XV18U6qHucvN97!o(q&@oCF9$_D{ z4FQzHNOPK|unt|$!f=TE1aU1q*sWw<3f8=Dr9!>d7u1@YRjx+jL0^>Pf8^o$FhsfGm2e9`<@zRyS>u-0wO$st`}XofTKetf2Mzn;{q^av z&OWh9M3}VMO%M$Dg8pCQr~;!~upl!r>^Pzfh9Qo|;PYotmrlOIAL7dw;4Lh_#k#N; z%cVlva~SytoQB4%qs&OUglzBg=NiBxW5mIKmzp0hEb-X^$0Ul7&&4jTX$hLCqpN?A z8Sr7mw_bU2D=^_`kr+k10*MeHBkA5m!jRnYmm!XBDZml$WCFZ|-0`iuV(>{|G)Cnp z)j-;}x_-&)p(p^g%D!Lz19+rm~Ia=mgmtS=qyXnF<&5Q4O@4(=-hG2Pt)j5AS z7~+vwYGob$!G>eN{6waxv~xp*z?3BN2>pj2gelMI-48zi$iOT9L4f`8Ww!#rh!AFR z-VQh+{!AQZadhQrUWgz?z@H$#oy?dR$&}|nVAlXd8F@-vXT`VoF^VKr1?v#Lz6r4& z++jA6EHOc0ya!^{Hi;+>P@-J}IR~W}ENgI|#w4O7QPUIuU7jaXX}IIk46vMLm5-IO zZBz`~sj0iOvr`fOZ+CwfBcHDW;EE6i-b+_TS!`!VH7h-uq>G;dF2?C@g8d1QE2i)u z6h3Jl0%H`R1TqvCjjo4!9_k}_(CxK5qeHI`y%y?^+HJ4VYaJery4{0r z_u#P8KS05u?{^x9O&|FU7@(!@84+T1LI_)pq%LW&Y}A|06w3pz9l)S@=pXuUk$UZ;=Re%I@Ey9ZvY-w#j&HN0N)u-otTTg~9G(>*w79*$tY)$jCB z3;99U@AqJ9xw8uilqR?uQC_wt3ma5B^;RP#X}9eiqHb%{?X_Uz;1G?P@UYeE9C+Qs zZfn%&`n`ijtKoG5*bEx2Zp-VT{vq@a4q>w!G`!^l55pKoYtU1cvsklvQ156An=RBB z9dr&meT4cWzu6phyDik{bz!F$bYaWupjO`>`Mm%IjZv@F8Tp5u1HavDAB?<1c(@cp z>L-x-lhr7yf*MB|F``i%`F(_f#^FJ?dFcC%!)~{K02_x**gEWXyZuhD3wtmKpzkBk z>$e+?Myutu8~*4Jq0T{LIT3GX9`aeZ8bwvG1jQz5whw&N88tfHpfeh^eZT9YZa--F zy~B>*>7j#8y9)!8HMqX2omuGjE_Zl~Mw8t|~!YK;zhjn=5!hW$S3!EUqH>NWil>O-Jsj`JP$UI*Kd1%;2nB? ztI=w7`l!`ywLQ=4wh#SgvyFO7QJ%sC!@#>Q#;RH|!kxnwJnVH3yUk|MZXFzW@X+gZ z+r5$3><3NXYqa|#uYJ((jXI51FdD&b;Q3yo(}2F`9dzMRgcB6tdlOhxDn|AIjz+L? z&zsetwiPSD#KOoIE;`wk~)%qx~tJcYfI z*aq4fa57%Gje4umYBmm=W+Uw#w7mnb-wAphorCQ zb(=v8wtFMk?|FyNgS~^pUZd%a*1_RkMAjxGBtV&f8s*`Pl!NmGC8%E60Y_<|Ra(@S zu5~a7P{0Lh7>J+?2m&mkH({~>w`c(Dt6y%&o-@#jD2oTDSbehmL!7HH!;7Iu^?Ezr|*#n6A^?H4`uHc*rb3r14aD-CJ zCNKg`4Q3Bac`H;>7fL_z^s}f1lUo!3NHq%e5zM?SqlF}{f?`Ts!EZ9 zx+DH)R8p(7;%f0<%Zz1BO0E;96VhgG@x^lV-T^g5tDguJVUdCg;3pJL0YlT6FZ+7F z#*k7?bBTyhzU7RssRNgKNPHMtWpdbY-8{vPgRn}Aj|1xkFc@A!HmQSkQA@1=`Ar}cf?5TO%@EZr_M9j(Z zk^?w$>MzUW9bzQpvxJ0Ccj0D0<1<`1`w!-G)iYkka~ne9So_R+7-GrtJw^n z*H}o+gp{uMoRK^Pd@}WL#9PB0Z*5Xf3;U^oT_RycaxR6HtC&_Y&A71Se6Lv4ua!<$ z95FQ3p3vIi7bWZ+jNlk01#X1tRWXMqPri8GAx}g=AgdBf7BLad+m@qe zt+42dC}E(&mHGZi`M6u#2xkh4m?|y0T(EB$+=`o9<@EQIlR_KV8(U6G6Mgz3|r+?v1~! zScLyXxKoVLO13vVs}_iS1hYexTyZOZi7DjdG%2ne5im~3EH>Z9GRkLJQ`ooKkaZx-(>y40pg!>F*I2sS6bzO&g zyY+78*_t)3Kd3slXp#A9LRl=B6+d(A$qQ=rVW(*LcZ%0M4ioFudBxRk;98VnFjLN4SpC=XZp28|$_C1}q*oYSrxGnl}LA*JO&pUq$xF2Eg0ZiSNg z25~ewAyfn|jP}JM;)@74uC$3G+!=2}Y_w#?IB4u6b5N%;c+4mQvnb?Ty&yAi2P47h zOzMV^fdtdr$`1JFKNB?i*S}twOhc07H5lVM#ba8(JrFTbMqr}*G)DgZjw)D>WY`#v z#;WL_TBCUrhVcZpc1ty1LF9Yry`ub5tyim1qNH%MRNp?r5C=ML4Df+`dv$qy#f$BM zpRTVj)t}eL=CAXi`s>4qd?!Fj*G*I7NfpA4DXZ>;(h-dor66O_pNLc(NcctARmls3Mow`>sg@fV=ca-|OJ<>3`1ojXN;+!0ZQ#+7Khj3R z>!m@GS+E}TZ&4HoQ7=J2gwpc0N5`%LIw7+#;4DT_#Oh{SQWaC~knr3))Lbx9QkBw_pYA$bD7zk29Jt*C?mHE1>M=4 zwN$~CeMimKkJ`ESE0vf8CzvKPu>`%DY2l?HS}L=qDL+zeZvp2zS5)d_BwwY9lYIL# zmnr0*AB`ZAG2WzRnJJEr<`9P*2~FZD{PZD$_S?!G@+O1`)o9MwR4BxqvJNP}e^am` zhf#pg>^_~bb%5w%c@UL~6Yi>fJ>7T0Yf{IxC>Kh{%Qx%f%NHtHtibzL4{K9qCo}L6 znu_7o_UKFb=A7K2QXWB3Vz3_0m^WTL77O<@#N zoIE>{C~oSV&C(=>37jG(0>PzIvoO<&AOlU1M5Mn_--I$LT_;aJ#W0cy`)n$UZ*OqK zCAW9NPy1{-MFECP7ZHxnI=)>w_U(X6gNhLs-$4I%77u0r&xv$-c|~{Y)&eq}g$&0b zvcyHgCMW?&CKh-_clCPf6@ddZ6l*U>flE1BoSLH$C4>u5!Ygs!toQa|jBA{+>AnP| zMkZ9C_A7-g7{AX{Cly+b)`*4COxgS+YuA#%^zZ}Sidy*<2KIW-2p1^8*+`{@;Xt`W z8B38Q*fUMSa^NaKl;l%o6f&4ql}K2v8-=1?+-b#5#osDBW;f9oDI61r5SkClkkysy z_CyF!qQT1Cc&c^VyW5-jw}=%IU4D^yyeu-~sID#cLES)-rESPQJVrv}mQHI>7zTPB zfFhr8rRMkuc(W*wslvFZFHAObl;F`qc;=lC`JNa_Im8kbR8K9s>qcdhj`OGE6t13$QR*st-B2@@8~{lrx6M8j#^=h0P|fu7}H=ho{0Zg--Nv* z7>$Eb=F^Tdg%k>c5Z=Njab_Jz*~nfCY;auH7do%X3PJ4#1l!8)&!{~sIi6<3EF*&^ zL#_DezAn~(;ol2AGEWz1z6=FO`1Wz6wCc96qe#FAqcD)$mhivLu1m5RYlq$8o9x(% zdEEhkwtpmvkGNDiWQ!0vpFSj^_4{^8e@2V5U|@rjii}LelfJ*6AaHhKhGym&nMBi+ zGphKe*dNMhfj!PR0UjxZOTfqJUZ+t^0QMlN(aJR}h7_0Vl za6J^t4mf){Ch*5-Oe2mXCskN(P!dJ|8*u7qM2WR44$8>Bkl# zyZ}L=5z9f>)a0By!Xc`^;^<~+;>Km9ALN1~cAr}u+g3Vj%>yKn=^{tGd2uE&yv6bL z`S7FIM%2-Qni^a*+fySaoL(pnkY07EG`*wQ1NrEr*qInLW2F z%d`A~U0Hm9z-;+5ipk1OGoAH9e!~{au8TD|2{q z7RlbZs4#PErki0b9Dr)8)0m_Y*fgsf>x6Q;fXe(F7=yQkcTJ&en~w^Doh=(uc7ZOp z92J>_bb!1tB*`DC4Jkk&vW;a|wrvR0Lep5r##EUimSCT*G^7^!8|oy2T7;UC2s4uG zftUp9Z_E5xbxUcdmB6yYYkw%qKue9CRUOBmC~!PNYAR@JYGo-GVOVn*4nWr!q^Y04 zSZ7?eKe$d~(hp0SgPs19DPj{eqgS&u%1s6{=!;%LxHlp3XZ-- zi}I)f7zD~Oaz)F=FXrRrg=)SI&e$4FbI{qwtsrhbi(=cY!;b0Tjq#1OUf`LbCAB@E z;)(Zku+1JY!76di+{2g$_X91_44-=6*U8yP}*dszRA#yT{02bLN5`D=K zP>G1&TCAuyFc~|w zA(!E93cryV^Y|pb;p1@=C*;%OCKQ=^9ExzNTCP1Kn-w*sbf>azZU(}NSi4o+rDlXP z)W@!gqI|Sf{Es-0tHE6ZLmWKFU0tW@lK1bB*?3|NX~s>|O6yg%dUzCuU=9;39k`5c zDovvLa8UZ^X+v2YY5HZd&dbRpj-cE$7bDX*860M%wjbfKzM4XA<8w=@-2o=E?N^Mj zvEP|dRx&3SIZ-q>?`;=REgDI$|GQd zbYoIpO2?cJFP96VJVNQED9S59UILP{NLaEX;#|AnYa&ia#Me`6spg|#!#7KVUh^Nb z##?Oiprzib|FkQ_K#JTZlFEJ0XqAN;*ouwyte zso8KsnZ=jV{Q8cUlAezeuM;dXw(9LU8(*1DKxj^+Q~e{mGSsv7KuaoTxohzh%iEi> zz9x<&Oz1kv6j}j7PKy8ha#7wkSaJ_XCgH#JLD*B9t#+#^iDSjr=ZF)TsGoaK$5u{? zeD`H5?rkzUI@FiWn9&$V+EqB?u<-yA!8;-1NXDq}9!F$9M+wcow zip||h0O;ge%XR`?=1H~z13bS6h)i&sc`95A6TT6??f*ih;29^VrUf*T*p6z_qYK3- z3Q*)@M8VD`v8wn{Jbut&2$$4mOdjfTAo`q)bmQwSjw z!Hl*nc0b;Vx^cKtFb~Q#=MzL(LKX^Hd4;jTmkC457zsYRGp|L~R+(8}+3Zp!`{>Q^ z{rQLM)AN6Tlhfh#)raHjvybv(HxWvEr7C9FkxvA@Y9C)*z7>{24^mVI#*tnupT;r& z2k>v5@afm^-A;?A-PSPX?p*tKttSB zE3T^jH>jCSg_o*>V{uqX#h8)=%;G@&w6zK`2CAp^6l#J*hC>cg1A#!jG=vey>!rXH zQEZr!BRJ5Zi1DW&#U6MwrcPJI>4(#Xa%tML9a9nS(i}q&k8d~w$s)23DqXt)t|@$? zm`!^=h}W6}2cQaLbsD8|v76sT#u@`m%}OI; zZeo;?UD~j2;9EB}ns@IIn@HVW<~$ZlV?0h^fO2tjDACT=5F|t8-{i&Aot1lToW}&$IxotZru1` zsov>tT8l;r*O^M1785h&7Z-1Pa;X4u={=yS%ZNVQatNY#&?4^A95irhq#SlFvfZc! z_|G6DV-TV_3iparj7$5*0H7ox$sV|a3D*Pmi+Z^_;GGL!|DLr-S`{_Y7Eh-KIvIeI;M+!x-O~@b~>4`wD^M z+-B({MX;A6aT~F)t;qvVdAg!bI~~smVJncy+z}Y^QQ#Z7w1>(GZ9-hMR4BH3v%ja= zrOq4|Q4`1|vg8%D>fDR0-NZPx$kp4#Ri%7jLRUGe3;6?@Vh42jE`#W{Nc62YFq zfDba`<-8C^w<=MWI{2zc?~{JfryjJg86RZUCfP5D1Flwg!OV3%i9=9A--W^MzD$2UIoC+KE^*^S^L*V!$fc`=iGO1ZLE z)g@22Xi+t*zYxUrmtQ3!)m^7Df6J>6PtQ+}ueI8LqcxsayIf=qph%>!2k312YJy;V zW^&on(V-mX5Sutcze3C(PKX7V1gO2 z27L!;n@H*^h}CJwgis{yM0^2BRb`#FQ(teWn%zkkF6r@YAWI=P)i;gZz!-9-qJ(AH z{Q>-2>dss-SAe(*Zfo;e4;SxLe9^1Rv+FB;h=zh)aA6&(szh8uH?pi^=AB7hQMd7s z>ivyS@7KV_gUJ*|u2CS1l>^@~6)bCDjv?goF@h@ng;}|b4ZRLNP&Ar_nK-qqJSsy_ zQ8Y-|hi4N0ICknK2O_mZl_i>?lBu-aw5(CDr*Z367W`F`inZEst%| zu)88*(_F2AS#mAPrxSof8-Qw+W5EIA2weSm+-|oIfjqIW3=jFxdEu!lFcIBL1D`n2 zWLE^gs{zqtC4ZW$)=dj?p#(!Q(8VmT2Jpi5wb{uev@~Hx#*auF&a|t!lPo5kE5mlW z3Db7{uQK4}Z*@3@zmW*u(YjBj#*<3HQdfe29dM4g8YFJg-_m8`w^?F|7k_m_L;qI)t2z$jWc^#+Ckd+G;V2+?v>qY0 z|5uCZS9#eW@yr(-O;Cc_j|rKI(LXxLL^Q~8ThhS-f{t&|X?n<%&7x>s zn`1fMEj6jCbtG?DRcRrLgEGL5xY0Ayf_g9wi&%+Uxkag92%ab-OT-VJ*k0E)tqQw-~DPWddg0MHqYQRF%SaOPyZ z?`hazwcQ9T!Kwz{NgJyUt5IvB7CObpw=hUGDs$L3wCI67)gZi5~*8 zY&W?azag{8FFdM?2?_0!x>`-!6if`Q3O0(zo`NE;HHCq2>X#E)i=m>z)q8h{cpEa? z43#(T+pXR2l*c*C(@?BHPfHD%!cR9ci^L6IAqJq@Y&05GtAtt~Z#aH8<`_zsSbg-E zT4Rh$haLD2qX5j3kaF!No{8)A)D?j$MvE8LpahsJ6kwXVd@RlzbYkZxQI(Oq_rRSJ9-$Zdp7HN9H1c@Zr6;bdy4#hVA-LpK>Eq`C9a-jP%4AZ_N zbN?oFfUUDQymuRoMx)W|biR|hM;qCHyX{`@yJn}`>GayoM!)-Aqt$HnI^TiDlk_6bRA$HU~&Jv;$UT4G>qh4 z3L*T;breSBhy5>KDxW{sRCYvAWqy6$tV>?3i{|Qf9866W|K4?k2ZPsq>%>u70*}m% zGJiM1j88lDO%Kxgvw!(xjtRMoj`gijSM*pHyb7?NYMS;_O$cGf>{Atd52|u=;7U`~!l<|& zSJbMe2cYW1Fyu6<9+LoxfLWC2xY=qk2yvEK&9kQJc6E2xy_X)30Qxm0K$R;))y$pq zoL>y)b?v2;mMI;i*V6ydg;sPOf62)6`4i+Pj~+s6rYxP7IuX4)Jr&mKW1dk;;gqqw z3#sbPlj_omqc8l=lQ47pe`#xKRH`n;i|C!g$W94&Ub+q3Z-jIt%eo_^LsAMyNPS#q zgmk+_v~|D~Zy2%)?-Ql7DN;8cdh!xA>mEX)vbTr`RXe;*^|xTS+)m_}Lo6ol0N6iv z3rDn4F!jz91v2ZSvqIu%tX4=IjZ?CkwLVM5Cs`zyEt3YVvYKk4R2?Z1G+7s@3| zrRu)3RIayJrpu-2LE&;)I%>HEGe3owFQQ9Ul(XVdEoITwD@w)8mvh7bjo}^N#V1ha z0hhPCuyjsjn#*#VyZX4ut=GR^-SS!rAoq1&OW*u}%#Wb&mjl`y&n!T~LOm`a6o|gNh}c zsKf)y1wCEJQEIttrmNRQvS9N|*e8H0oGJ9>%fNXl%l;SqIwQ=~sR6{LDQhbmK^%gr zx|2`mh2a4AB>-P-Q|&+$Cr{;yeR`R=cBz3^?L2KGH1?Th4qHBj@#KQu%r z1~?kw2(!g%VZq)`iuQGL?o_x1%dgqpQujpdmCv)|0pP!@=W1Zhs1i_`0y zqmy@M7tWijqhFS7mRY;D8KiGyuQb^*9<@_0qr%f~l%=h&wNGw#e_Fl%8|)ss{I6X9 zo6T-^{crdC+x7oBp0D=&PqW=UPyfm%_DdbQ6>WoG>ycYZ^rZ)GTeI5l<|$kM=W!%N zf0+jV;cNeQtJnWVx6yLf|7O3_?rqoq=Xi|#ukyBz@K{KFDu1pK{AG^M^_K2=tZ(L- z!njE04)`E`P?$|*=V3ktqGR)^*F=AnwEomTMBG@L$`PE7~6sV z{qEB=U7f0_-ho@H`Pp<}`N}?+N_Wqjx zJsMS)4PKgTT93!~I+=8&l1U3U0uU!SVk1!f(|qqw^J)r9ploH-o5O+`RvA z{pS6Li<6t-hc_3e*F$C8$wJMVE6m)oA#0XU&6b;F1OcLXYAxauSk2|4nQZU;tIb{t z`ioe+YWFmGamnl<)~@BW)wU*`=XyO7|E^@8?XyDuQ&+Y;wfxubw)67eR{wjJ=LzLM z#Xa|u|5Tknxcq0G96hxhx5@oCw~rQp)J&l-Wm;OuB*+txKVDwk9DTU{N$j+*QX%Ir zj!gL2wst|`rn1bLJgLC!%!}aOS=g;D{3|Sg9(<8YO*{is}E9LE_ z;`ZP*s8;jQCHGV+))nXfQYg;Pdq$vldb)z7_alHHdG8T4FOVL$vig(C>T4M)m&$)K zVE%E&|26FY?M6oaYxerx?fLJsJVyT0w>#>)%}n0j2buq6^>W+4xM@`!61Yb9Jnt)f zmKft-nuOoeWpd36X3X9-dhRh`#d4{xlVt3+W%?|XqvPY#%j=tyi{U!Rn0vkRT0yCdo>nivliQ$UPE>xnzP`M< zyn6rlf83m(4X;lxWZ+HS2C;VQ^73)hlF-|RkA|vlFgIXNPKVbwXP1wLYu|%zfOC!< zc5n2V;v<_#?@c!ioc{g#>geX^>a8YBq2hW!0%b30H;r8%ot+PlkIqj|o}yiK|9#5n zeA4}V`i~;AZB_2|Rc`GF?if+-;R;^d?$@WeES3M|RjyC1|99KHe%Al5(b~rUKFed| ze>v9RmAqAVUbTi`sO^aH1Muk}R=t6f01xrgUV;O^T z-A8bWZorBNH?PXsF5j>{ck;ot#dXRimaQ~q=A@)WK}|zOhqn}v%wW8>&IiR_Cc0Zq zM`$-C<%CdCsiOZV>z>4nYp71p@H~!0+_0`LubZy&a@7i)F>;BLDHbV*-Tb&p{q-m0 zE;7I5<)_kzZ=5>xy~wmq>A8`44MrpkP_p^yE#W@HMsiwkQ-9;y7T*8lqbRyTY8+iq_2|31r87XQl^ zloyHn)ytfgO?feWGf=g3IjN;-V2kBhC4!`jjT- zr|2k&R{g$+!Iov}xJR~*dcM+{IXZ-ZRM`0EqLja>Dps|W>a|F?{{#5(?CZNbp`<0!TqsT%OO>Y}d0vTz*$A$`60P!7X$| z`Z|Z#9;Am1vWjPTqFGW9)AMzb@!_+?vUxlS2@U+;9T8W^6Zc($vU^IgWpTBPk$N%V z`-mA9s!Jse2mHN+4O3G%O;t-kEg@~0;qe~&|5E#pVbv$~|7~~j@t^JX*8l%mo+pg| zEL`YTdjFbQf6N$AdDN57=dsF37KS0YyG-yLhiHsW`6{CB&C};f%N=KrKAfCg-~4iQ zc73|UnRa-3{o(Ay{`vOoIfF}wrM>pSGu;mJZ^-3L&i%GE}t?V{_ z^6QA7{MMhG{O5;|(v78l6weCzuhnlgvgd!D{`UOuSstNe9h>8hV?O#oNqGDV3_}@> zqB(@`>Ln_aU>*CEM%`CddV^Q`L%7^jRKWq@0xAC?q)_xp+@dQih7s^#E9o`rypa66u$XhXIxlOzD6AlYSw%_yS78y3lZZ)4QIsJnxx(O;G>5@( zSIXGsLUxYQmZtr^qN4Cq*MD0ZYf3y(!ut8;OQlw;RbY%iay69;kMm~b7DvHAvB*0Z zSEh);z#%=~3{o(9lW_Z9$}}PN>KbI-R4Cvb-IX#Ha_)E2gt4-De6I$ci*VB!W$#cj zM&Ol=xhj!*_i-F{m)&D$Fo$7yE^1qtrbdI^-E36HIxyu?{4!F6x=H!RF5lACU`Hv4XQdi++O>XV=w~kn>k#qF7Zcqsl+HK=uat;kQ!Wte zoz-7Q`cQVSYrf|4?(q+pf(c6G)#O0{Ac)W%2>G&Lbn%A@DW&^=LZbf=Zxil6E8{=< z?QH(%UbElc?*Gs6$Xz}m(f=miMs|P6H_x*7i=y(k+<&E|O5gjhJehc1)xr9j`>O84 zMs`(8>|Av#m<{u~#P>5qp9)Tc7|{_k!y5 z{klt+X6YqM*qS4|{`ju5+-RjcOObB?*@*cb38 zcOvcod>z{ZB9}bJZ8{h6L-c+}Mv7HHqI{RzB*PyW?2AK8I03L`LvIK@0ux^is#it_ zK~HUK?*>zMaQs(dNROzsau$BzVWM>@c_BWg(m5vwX;wL@5KOsnX@f+i2)$fIrIZ$u z*9^!0Fe{ZDEekL}vp>`03y~-P<`K+b3=vWVx!w9N4^sH^UE|P1Rhuj{k|)k;rwaQ7 zqCa07PpS+WH($?rtkn%B-wkD` zy;bq8+wX%i0_+6UrV>ntu6xM_nmMD59nxk3Ooy#|5vk_?9v@%QvROZf#D!(ADH}lS zyFi}SH_+-v9Dzwi39bHa<;)#D#*-!>laDO3$2_U(31fOaGdbybKR7 zxkDFOF8cuB8iQ&%!77(QypgVKULb|`#tl&Rfx{z!WjP%a0;+qfkUYn;sa6HNo?%%0 z#1m~yXZ518`}Mb;kfSU2)$e%!q4QoJt8g%uis6AAfSI%kEACty*iQS_LBpk!jcy4Lzhc!s;q2Gd3 z^YG(9iXLQ14$$`jUb^61s~XS$osNZiSTI%$cYKr*-m1)b{)LKJNyAW_+Ij2!qO4T6 z>Z$x4t8N-byfLZ6LQ)t=^!;!NMrkGO^3z@+^<9tz{xebxDJYqoD~*NpHcnvT1C%Mj z2r@5j?F8Lv5hjA>&@TfqBdPr`g|-9P$oH9IGZ{<~V!H{yHz~6IOl0MhMZLy=!b6~C zqpecI360_^{)_4bFNESpIa}1% z(aH{|&}@c1k|})RMRHJwVF$PW2i=@sPF$}<)AP>HBTcn+Y@bm7-_R@5rxhrp-u)puN^492wqe} zcQu_r9xnH2MoTPEAZopR`x2e7s+9f0l<928qfdSDvUPXSD2( z@;>i(b-`5k?~Jj+c^1@%9$7D5SOaAhp@Jg%x2ci9i#q1KbpJe|)qwlcnvzE;DOQ3B z$YH~==n2_}r?8xg(*~PXCF}Qgu?6+<*zHjxm2=OJjeOB&x%{Sm(%i(k!QIlfX!J*9 z3Hy$92t6LaBK$IqRWb!?lD+KPL$aN?qP{xI|P+d=t&h*D$KLu0oR+m+QlWGDuqs$tiRL zL|s~E=*85XPW@x0772_*sPjv+h5%t4`?eftTa^o2twaHW7=yd2pm37(X&VUkg@%?N zuWwR%2{e<$CD4hD`?M&p&D02Dq_*tRt$zRVlvE-$9hDL-*eIU`s?La{eODU?n2N!R zVcBQggn5KpHSgK}aLnm_&ipVB!`v&ASY+B~6()NxZPP)JiZzNkY3Jdb>T1H#UhuI_ zbjeO3r#B$-v*378-0j^q)x#BUg7pfF@gjiowi_Zl7Y&-E&dd$C0w`CYfF(UmZOKVm z1f=p;eIF)6&`3eU+2Oj?piNvQ?bi-GJ?&z`g1|W}Mn@L7sLWElHFINgi9ASO)ReRa zARu^u*LRpE4U5qtp@6XE`O)}5WeI-pAeS2R6tOq_W{064r@3X#5)Z}dXzFh>Yi;QI zi)$Gx!9;7cHpXm9SoxHDm#2owwn8V+F;;((^MK$WVXF0)sb~Lb?{Cit^d^WV_L{uW zv_73xTVL&pjZYIDWb=gFeJ*jsi6Vvs>s{oXf=4QCHCgSi(o$_7BG-{^*tXrqai4?l zP=4$jO1r72Qh%fi!s~bHhnpm+1&2g-gtm+a{~0j7p*zZ>HO5UL$=J z?Sq03Jlnxnd>QiU?9KG|fx%CbHLmKh_t?DzHIZzRs{JX_F;@2hpb;7m9j5pdK zx_h8&duA)BdEwM%PcZukt!=ZN;$J8HfIS{t=Q%^qm}l4f?zS5HQmc$RR>baEpvHo> z%ii_u>r+>N`^&PeSU#h)C7vwH0f5pXf<|T7JUTr2;a+Dt4r^0K&ZC@0u)N5d>LtqR zkCs;d!rA#rIO7EmVzP`*SgFg>xE-Y6)*1v_x#2Mo{_h!`*XX|BL4Z>~?md+XW-Ue+ z^mcFvfbI_P@VfF0R4;Gu1ifexlFaH2_rRQ3{Bv&MBmraGDN0TRB|Un#g00rn-$a1NHe5&c(Yjp#6z2$=w;VhMH{ z-`8S(KhWR12VubTkFa@H9lim;*|VVWaU9goLCNI(pSx0b0QR*`TaM4-ElZB(H;@w_ z=_e=>rET&EzHhXsrHo|{0Z55lkI-9v^|yhoo{&l@IA-gJ2>DB>W~*p zpIS^%kov{&!#nk%?~$NZSj1h38Yo)otq7>ykNwpy^yr=n_DQO~5_Fq9ZH_;GB~8Er zAG8Qfmc4;$cV>+s{G86#>!qt|uQ6RvVtPS-+Hcc-jrf2lm10A@|J~4;evbm4>ud6? z&=U5!MOG0vKVb2jtdgD`U7^+$ZG|RjfZNaf63hncQCQ*n90fefa8^>k<^O=4b3ZZ1X! z?uTR(lV7M<6_RG=y2uAWp+B}KjEgpvdnk=i!s*!D^p(+Pc~*U1U|lHNL^_z7(M}cL zJ+el8bO#x{<-$tDTO;NngnWOMC1TU!wX!-dnU>YPMjICw{%*q|V+d?;z@{}URdvE1 zQDJwcQ|e06c51mF-T!oPW6fL6^_Z# z?w@s81j$6n?RLXgXU`VHaSkGfDNHQXu@sd!erT~zLfKiSCp6w37<@}=2U{!J0s~lJ z=>5b|Fx$!S#u!?XUCJ$BT*lPk;0Upf%lxrP=YJD^y3v6tzNhEGfyVC1!V}dRU$CoB zuEvI3OdRT9Le6)#8~+w7$VxCH@gHx|%6hzgCemLVj*udCv<)cPO9*5A+SSM5#Fc4^ zl@cxb?yIL*r`!H4AnXfwqe}4dO&<~sGJ#%5EsyfD5(Q0EZO&hhKkH3YfYI7jBVi(g zkxR+!*eOoUIC|Xt!;G)G9p|+G(N^&e`*ObtXU}dC5pHmL$cE%h zNdlcqeNI-v!t#7dc7o1}J?>xwT6$jjn)Rg{;fU$pN9=?bec7^mv=n#hqfPC=A|Pyb?AoUhXcC77E4wBCJzCnRqLR4~Q+!x!8cuN_D`rtfr_a)g zL58~8$$U9BW~G8u44Yq~WBl$MPp0QkU%i~3?fyMGzhSuqSsQmkKAI10Lbfb7{Q^kR z-rtfH<8FI`9ydSO0J=*AbawyB{ZYNPc?j}I`c>k_0uRBqoP~QHS>oqG=&6-i6H=N? z8%lw-IP+bm3_I942~!_yL`(Hz6Feg@|6UawT$xsO4~+3H5`g&mb<}~;Yzis;!7qC8 zQUY{+8xU4NKg~eeM|y*1%@E9wke&LYV0<0WY9X!7IQ$xW7uX%9Ad)4!~4`?!^Gkty2PI8P{gBd^D_#|&*$zZxfdz$o;}yFtTUDfqVJhmR%@-u zTk#$^%Lfzm2{FWmKRTfOnbBL0Hlnp_HUrfYBZvJ}0%V%R;x8@si~;e-Pi3@y!uoP3 zZb7{0MiPXs2gP?4aiH`_`Nz*}eLH;69sQKmjy>(lwxzL$^79kYz7(A;W!Nvh^`_A0 zOw2|Xf4A9LCd}4&Jb&+H`J!$W{l-)dHP^kvLak)!`v9aSXsh0_fYbe!T@l}3me3XrOA!(6NnZby;6tfN-+jaaPh;#MAi~|G! z&Mm(J_{YdDKvp#a%Xa;@c97mi>A=WQ1ZzOkv9_yk^QxNF52B z^_vX0BCD;6En@Z9S*1GC|7e5g+b*tV_5XE+nt%t^WQeTY`CWK)*Jr`P)iQ806x4^g zbat-ixCe3xTYNXKh^f*^)FE~P{s6hkUn=I|8EEQdLJRpjF9m#6MgJ-Mp!aq27dhKI z5h2c*O!$5&xzL3P+|ne2hB0g5(`L%Go~f@u3y)js!1P2=TW96_6aAF5lz6=`E8+~s zieDzjr8TT8Ex@PA5Vo`NyhlDVxeop)xS*RcgXzAY$*8zh`K_kjHgP57E(O5vx=R|h zvKl6HT;GV({l_#HGa#_{v$RrajP!d$p9y)0Zr zKBV|3x3u+M+f!>oU$C%W;ne1+0?!KduA&n5Z%%m>hMla3B3+S~(S4-hRHQk)JC!Pq8vqm}O$tq}-L zR80g+AC?5Q1_b5MZE1f+Ch|8@YmJOtmkfpr+G&b;+m0nlL-xY1H!15I6cofm zrP7C+iRw|Foht%eL^kpG^BVI`wcD>+WUhUY?>^521FbQAmF^$GU&#`v{~x{znEEhi z!hp0t%N4r6(%Ftk?uma848A^as%7a#sUYa=VF9a%#d!p^cX0Ry7%1S z(Uc`}hKW=J9eN&Z$tWNLwI(4g=YBSDwx4y>%@n>nIbQ39uMS#usjM?m9cXI#uogoU z`QX+HMq}1M-7Y-i;50Uf{{x!qd-+1&yXS~_KlQUr)P2*O5AQ~{M_W9qUM?CFvdKFK zNxl0>M>*K_@rLKXJuCWzrwr97&{4 z`gEr4OCH!m6x*qP;E4uZZi{SjpFp*AGiP-tv5}+I9Z5V~EF9EkfVa2WotzH?+65Rv z&I0sr_dEUb(!nlJ4siM>MjgaRLd3fPe!Bbv1wIc{Z90vH7d(4r>#T(^g==(b%Sc1M z?3XEzq@dvIUR@RTu?tIuZ6B=yEdFMuLm%V|~qdI z^LlQIZi7`;((*lT&E|4?bO*wjq_K)8y*wyom`zxuRdxL=4!W_ zQW@+UoSD)hy;z(IDEj|S-*7*9L>FYoNw$V6>cNCl%c9YPek}(hwSp&ej4$P!9yS=~ znzYtm^-ebW728KJnj3L7@Br26z;Eo7cH=DqhCsRGv{tN3`rP+%d1oz0((`n2l`V1B z;9Xm_hcYjG)Vp>Yj?GlrQ?9osZEsF(A5fOQ-@6c4Oj8r7o2?{y|7HDt(wu`rrY~?Y zutb(eMs#pa!&Zn!?9_)9_tk#GKA5wGVtsfsSTk5H!N09S zhg6PLdg;$Ch*xKv>#dpyOP$lv_X5EZBNuU9-6;G={l)r`kRZT>11^Pz-Nb6elZci( z8X_Lp1rKh4KO^i!z%>~`oNJN3@}G8(&7Z)jTk01BLMt0Fa7FA)^J%bxrHbCnYHF`r zzSl1c={0JK66SCUcb5`8aa%F^Xxe6Dkph0STfURQ*kbF#8c&NRmTnPh$6}qiI77BM zn%UPh7g8sxl2_`xFT{z$(o(XhPe76!8WjTS=qM0ll(8VN?b@s2t~PDIMtvv|npOQo z^=Us_i*=Z+Bh8u}gW`;OS8r5*h5kv{V?3-v+sDeg7wIf~o&iL+v4^B z;&8I^*TI{vrM%siF#!m?#vC~2r{?GO)!#|0c$Lbk^j%~_N$@|6`dm_J>W$i65Gq#+ zagHm#gQ!{_W=j54fvGw+`i6Q!q9>1^Zc>=gQI(k{?bzJ#jYjrE}$gZBFtsTSHF{4z3P0oHw$7kN; zQTmMgL=_>WX468;E|L~~e-A=3Noxguhg@0QzK6Y5eZ4L0)qr3**eK0k3>V{z|~|7+8QRgDqzlObVW`Eo+1PR{#e(^B?gBpPx85oi1_E zE$sTopUM6tBe2dmn4Y6=2J45TmjFDTGxbn!Wj~L zJ{6w=b@12-JfyOquMBQKuj5Q^AjUN|$)cK?gF(Jo$}idfSvzBFiQ$|B z-?z@39iId_@c-+W-AcY?e?Q+b^B01|4F1g`KK1(vL;S!F&t*h1^~r5@%H_iPxGwCkb0<$>7fwb%oD>$^H>0u)t=;!}s?kT_yG*MlG!++-@(H zt5GcX{BPf<8oun3P(IF5{zEUPo5}4ORqaakQ zol{sPv!s(UiePl9vK; z*Y_$&roMm1rWPMF7pt1M&|kduYUM;zoRVU?=boS9d z4`e8Itnst-!(_Ca_U*e?@$mMsYDoE&W==`KO|dgsJrS;GQu!4W=RY&0{A7$NX{g&& zF_w1i+isq;MzLHqMw3r{%iPF^nIv1$U7M$hR4@%QWlv3^CRtzXs>UZ~o^kf&;9B{c zoRHTQNOdVdjqP}#YW4E1)vrJtBg0OOUg>egkhKw_9m3UV9dpoOv*{tJ5qYQbQru@4Mgw9KHj&j*_TDgzn#vTv(BXntako?GX;Qwd zmu_{7yQ)J^@XVB3FO;dqJFf^!uS(s5@$G63%q?HD81ND-yv;_{4MvMN3E=zlZqPnA z`~q_J(s|pe=M%|^|0lO#XeYMmMBG*5eY9OCk~Nm7C*wP|piSe}%6`dYZhHKt>X_J5 zGcNEnqeayPjYcclR!QENSfD?eO>N%c=%!bTTzt7pL3GflE;H-QC4l!k>6jYx<*EDY z7CcVXkT=VhB>UXNGt0`WHW|A{Y0OLI9dzF5<+jEZN9_xmEbiW!TB)szeQz@7OJ`fU zXqnrTx2e8x-deF)45lOrH3>6>lZ@gWaRU+Xh2ju-YI-!d%e&E|Q)40s<(4Uylv&T6 z(j9!H?r;qq-{^DN%9$&5=4>vcZKXpd;VnNGDnjNUm-+sV(p{7av z$T)Rh)^UMZxvWJF$Dr>Ge#>*C@}UZ;8q8NyJJW1|dg(PFY~X^;lHb!P5j#-vKe)Lc^fC(&2Z1X(_Z>ch?wY-V>on;D^Sav-YE=vm?Ei2>XdN>u?uQs z^r?rKCl)W1kzKwt@Ohb~Y@MXA&Wp8t!WSa68KbrE2Bl67&$OW*W51~m1JLLt-7w8| zz_9T-wMp}}0=kQyiD1*!Ka(#iGd~tyu9OKG*DOQJu!*1WEbF?8I*O;(w7I8fmnFLD z%YNd$-|t2>Rtpn5E7J%B6)G6q1a%k6MP2oD{F;Hba~E`8*9hvm(gl0h|K`J&f28$c z70PBdRzIZ?{5W!oYLsVcki0v$S|e@DS``?Q;1BGD-3(1)`*q^;?3WD|W5^dYKymJ*7>2)mTRPYwuZ1<%C|?wqthB9#_o!cx z)QlUyRaM&9>qId6MtBQT_*wO%2RkAM{T5xbfA(sqaI#U^j@BcaqM4z-r09rsWmseW zkx!#t8~v4~A(Qq+a10iov)Ra*bCQVnb7=Cf(9iBg{@ZKr8o*K*CVgMaXW0D*?`9kkR564tjLRBa zKmKABdOxD#CB-35C9n(mxDCDSBbh+9HW5xoJpb!PqT+?$W)q|a!ATWiO0fH@c{*dF z&wWV*ckgdSp?8u4Z;_?%+5R`%f#3w?C4*hmFQrHJzd zHD$rt{0T7TKn7<(4W=2*QHnQT$9708UA~lgC7?=4LLVvzu?LCwraMYYn8;2`()F;a z@LuReI%#$c)LgHd8OYRyLnwjwZ;62q;p)G;o|mWLFpC?#^RzPb(jr~<-G?csg_#)F zshJsOiv=VuKzd9maWcgzY4UYU?8S7`DF;9y6D}V|u*piXN-;O`)#>-1VIr0(7 zBT3Ud;}rk5WDl`oxs%^%459sA!43|K9Egj57cY;564j`IvFqB=$E|TX`)JT)(q2n>1}&SrD}>#lddo zCh**0WglVyqK=Sbl8L_4o(?Z^xtJzPqO&e>uFe3$OG&8{8#W7X0CT=#aXk8hHNPZK z<{*Uy>tZ}nXV0D1{2wL0GT1L!^xDNz2EkYETpZ~@KOSVDr)6~b_ zpREpxGN0;9IJ_(S%EmG0uKcaRa#X=-i%1Sr^*`RH=1F-tp6U~jKtG(r7T^pw6WYn~ zgntCmMA-e4Kstu;O*q1=ds~4mGoCA~(`MjRyVG(%+*KZ$VJ}#DY*p63?@kO$NA#2? zYf|h@-^ltQbFI;6k=*o8I-Y~*S(Fkuk6$Hs^AOyq`*zU`Ev>?`E}k;*%TfSoYLKkP zyq!X(&1#k;o4l>%nCoyJZ-jsL0mYaidyxKeBb(dw;#=0=YlP;G4ueYq%q4zmW%tOQIi~ltuV+}v9tn}+o((T6& z-ytC&v{ zoxdnxzm->|2Ud3-KPy@~lBSx3-KUN>+vUI|sH%Z=qyce&U|G}lO5hFWT;5!I2TR}r zQz)lV6=u;7SF(tQdp|4n3Q<94$GBd&tNcWBDNq>a&jWo=86C6XD0*i-b4gRr1brtP zjv%K>D;fu8n1XJNb82L*i!CHPtfs#W}Ba2TGru4 zrmM<@bYQx_*$*wPd)G+bMuu6gwM@7F&_W2N&`W#*)TFUpaVJXPhiWK;PtosNsxy8 zO0ah~99Cdkg*%c~H?uxDhP z9wYNYU2L3ygASe{m!F06x%BPZiFm1iahdSj0oTJZy#emtZny=N=0VLe8%CNAg5m{VQ|xaRX`^ zVcjtVcBnI6^VZ_gg@XztjnmE)^gDBq7P&;vT@P%U0@tD76~7LxU@F>9-}4hGiL%l* z77}oI&A}Nq6mp7sWiQaXXFW424eJi#5d(`h0ffF$9*MMt;Eq{m(K8#J@KH8NbT4|! z`0W;`Ds*%UZXE_{X}sD8tZ!}V{I}sLzpKZQ!ZBVbhO6lg%1?CYmd^@Thi^S!C~x!< zGu4cl;9JE=^wOk(u&uhgZRi6UdC!~{LxnaA4*g{)PRxVT4Xe9z5#AnoJdo16a}fmSxx)^tYzWA1z}L_|Gc z=XTpV(l9HNP`Y~NuL&`8xPR%aCTUgFzYU>NjBj;B9C*cWavuuiA?sJm_RzgJnIe3~ zr~3mnZWd!fLCh0Ie>rUpIXt*0cWzK6-0t+i|HOcr9$lOMylq`hp1uQUP;kzVasS2J zK)jZKF%5Z)-m*>5zuj;bh%?O`&Hhv-f^!dv1FN_Z6sz%X|#L5$f>PCwln5NPvFk`Q>d zfsiYhDf5W@H?=DZ4AkdSO$23US!erd$>EM?R}wL)@n<^EInmmGba;hr{UhH4#gXoa z`cc+U$KloqUoVpN#rQ$}V`ebK6%0`drJxoN#>^!z^4HEhb$9wSWaPox-)}rDB%XX~ zMpV56fs^Bu5GOlZ`>K8d>w#a)=bW%&5|DJueCP{5(lX5K9(hSZDZBVefroUm#Z3zb zLozr*yjLF2eDIjNALYC-lgu4vzQJ6g$Uv!&(r2MdzAxPWMc?l1t-^cqFHvx)ZCCMD z-E4Bxp)|)Reh)5j&jgJa;`+&<790zJrLPwl!)=OoT4k>XzI`~U6(VRbRQP!(NO(%5WoOtL5Y`tH4vJPTl}<_njP=@Lo1WeOG(?ZRTkP%S;o^0 zRJd5GE%0D$#3CW^nBP1zCA4~N)|a2nMMZ=x!uto=uHTrYNLqro8AYGG5ol>@406zz zgLk+kNnQ}myp%-1-cyRD5@PQE3U`P|Yew}VVV)im>UcURcZU?9OqJ5IB1rw*PZrx| z&LFqYoh~IP!xGw=;r=_=-zz*4env95ht^MwYeFqPm}3%lIJij@%&nM-G|u&=Y|M`7 zhqQv5Aadp;%^MZm!hgs(ALp&>4$dEDm)QnLL#SDu(k zN=?(mG-1Z(Dmsg2mAg&TB^CKDgX?L~U56Z?5{TaqUC!KmV5aE&M`?e{B=7C zDqA@0(x`_P*D;@7i%^mKC`r4OXvpby$oHf1wDCwW_FFJFh;YydgxR4RBuDCo+L zX!#vrZk-4+p^0Y1WSPq1V^Y+wLA5);LZ&3OE-gRH)Q>2Q&)58&beed59~n@pXZA{? zDilD|5ILg0%^XUlvQ6J`hj)!FvZc}gktakZ8Dt;9G(?jTc35V{BEPfL{ecwcrMj+{ z^D~sNsGD!^!BM@M&_OAI)b~kaoC#+l_@1dm@-t`6(DUzZK8r9th9h`yJL!GZ|WSX6+@G{i@eT;hpPk77cQDL7ud$d}t0_lF_=WUR>yAeK%YUF?P>)&6?8D~8R zUzmIqx4Rr@c?gW1Eqs5sirlBERFnfSG>1f?69f4-b{zPC8#{|&8#ha8c>ep9g5m;( zamkx*M&T5(D(2Yg8D&h-Lw7Fvqq@NCDhXux5fn}i2>n(SYe~C*9g(aA-=tCGZU9uP z&Ju$nJ?7u;4WofDukOh2G86CDGdD?t5pKbAhB^dxa(mnw%(TR@Gzofa&22j?@i-AL zOnZ|Re^6|J(wk~|y*z?QRHy+^1@X#KPCk^$juiu)e$ZOO1?Y{p{LNs@qs5)cE#;Fd+&u-l z3X2)kr8+BxK284ry=H$Swm&}V(%9wXSM z6|`Ah4B&w)daBdPCjtY1)c_3jIhq<+b>hhV!CdLqr~>_F1!;BW{Hyh8H3V4>$0-Th z!fpcpAP#9h=$@azpg4QzeXu=$_P?%LZpi4YG*IbGeXnKD3XbqW2e>{sQ4|^D5{-K@ zSuA~LXQj-G98A&e1%H1IdP#x;y)mAD)~?kvG!`oT)RVHGNNlJ@FU;eEWSZn?*-c6zxxPQ$q?dCG z65K$uA2QK;&;^|)r^Mi7Wd!`0361s&_oBHMWU0JZQHYY_EF4`KU;LY@_ZHXKxB31t z_ovadJ&(#H-lN;V>~^@mN%^jwnFz$Q1>%x9)_IuNjs z@1cTx4Av6{XoyCoqkMVs+Bx*FZGhq7OITo!DuKctEMe`LCww+NFrCPe^*2A`fHNT^ zB!vS43}-rC0FKHiuFgWGC|n<=bE8)A-q4hGM=rHoj`c-1Rh*Oh5;|fU3LC|5C@ZB& z#lp6EK<=05t75cB3jJS21d$Rp&2pO)TCxf{3KPb0z$I;CIO zQifJVo5nF6seWhC59wojwbB` zcJKsl;95Mxa5NhyKq3l(RV)SS^?+lgq8${X-Ss^&5QMcQp>6bfH+}kt!ozyzs)fwU zrP~)bIJZJW)r2KhR+l?x5mk3HSrt6D7}d@AD%Q19EVkvv;f3a@w$# zSgPeGXZlDPu5{}UP$ir2LKe_UTw|{F|>x$v3wEoS^{`0PMLlCVRM5+ z(U`XkgzeFl0za&(RI5Cd6uK;`tW>Qv0-1c30zYdS`WN{+;(ou5FAOira^>gAcc|~P zS?Q45kmo72{t=hv&(9+@|BzCR&oQro)3c9PP890?>~B8EdVd>BrrOQBB|-fDB6fJ! z9dN|AV8-#UU$P3YW76Fv<$s!u6{`jRX8jWQhj|r8f>P9WTG8xSFU$I1fSy*V0q8m1 z5Z+R-WH)EsqV^SoHZF2+v{?p*a!$1JoXs2Pno9lot5`)b4=` zA{qJQWEINEwcDb^F?zM}O$rmQ$r7fND}tA=Th5ChTF_TOV;>39Ys^uPdpU{>gDtgv zQ}9Obfk>g5@;;z>FCUi716`_zMJGTWQ;73WwVx!?e=)w!Pdlxo)XMG~6LQ-$Y+YEMZsh z-f0`#MJ-HR>1(5G^tQ&isQr#pks{Moz8&%^bw1MmY3~kw_;&jm3zq8#XjB+@9VjWF$8mJctjdT#8B(9l2Dx!WGOIGpV&Byt)Pl}j~D{hSz{ zPW)AdfCI2)UgV$a6Hcq&)bA>qfQAt_36Y9px%5K2wbnQL%X^e4sWmu^BT2AwD?h*H zZRB-Xi@@I*qO>GYn%AW_?&koj-_qg}w}cx>C~4V1@#*+A+2fOIe)!oE_HrXjdd-3 zgU*$}h_UmOf5jiZ0sL{7CC-C&hx-|GpG@F{WuIwXhauUqCMOIh1eI!(84%$0l7@eK z-}rhkhEZv4a&e|Y@-{C=_G0)MFS%uEqtpzx`s4n(+NZ~M2Bz+4qo zWm`1`;OBNK+$!A%f{Xlf_5`ny`dnMzY&a04MX%ZiQt;i40lbwfpoHXuzbeC?%<;ae zqiL-6gs>pja7Ee|j_TO!^W!9pbic=5jfTPSKNLY#{fZn$wnH-n85-}H_%L5Q{KdRG zkVtM6jsI1BA6p(@#vW~~Vf!p$35zau2kp=!O$;eYtv-;;-r3>i_5L|zgmWmFib-Lz zN+DX`pi6wS=cM#B9=T(a_lJH$d>Z%9Ab%~QdF=|>NNcnKa?{wZ=k!zzVLqk*=8l1qa_q)UU0}L?tS~7TZ9%>D$uUA_dhiZyb zB04Hf0`+$R9msxw5l(%P+#vzb#=7nci0LTxOLX(J^J2=6e5DBNKV1v);8C0;c;1R| zy7!xa0;eXxI6|+ddLEVEg4K}>~6&L=*93B>& zQM2@mN@LCI?fl=pPF5~07)YeK1s(9Jv?ksB*VRP^u29W4;k5lnQKb2{xnv%RqCtv9 zrCx@b20UYjtl=042t*COf+HCJBpG+22}nW{MUHixMX>%kT^q$Dn}g(yq^jY z-?sP3{)%H489)BKgpGXPiUPHCHn+F(fDA@WZb80(CBV}9!jqfm?kkcW^o)fq7mLiY zIar=eO(ucXcx4*-)RjVN{+=W3a#EdI>UMF93tZg0uWrOObUng2D^D7{J?m3H-$7vk zT0e@Y(`TV8{(`Ou&(|KaFFrOZ|2s|D5P^eMg!J#M$J%iew?fe1E5$7AgmVkAxxr^Z$iOkvOb zxFtY!*6EW)%d8!uHl^XvV&7X3$*G60>N`Y>JN)ZSRHR|g?2p$f{fXK=;r4KS5~N(~ ztceF|7Hwn}{{eg0t&12!tC%ft<4qo~Y-91~++oJW-bUgat#-zZ=>Gv7LE^pxEA2xA zb`FSnv8+^!TFC!%2LPy-|F^bxHV^Fc--Df%|KC!c_VWKc0RYwt_+gwBF#Z)j@Br;h z7z^aS5r}Zh`UWNz#vKn5WkT?H{@C^oR5%fylv8C69VKAkcmn@Gpo)zKJ}UqbB77h*!3jsWij5SbHSron!S-K_ZkLP-XK z=OA!e^kB6B`VEs?SY#oA6*Q@q-BrygiJ|IAa)f{ahhgRrgEoHNuV{4voli2Vb4Sn) zRh{%fO2E3_t||&XgCrvzur*z;Rejm(0Sm)i05S|Su&H-FW?pbLZ7-nbBNW>s&ga`3 z6hnQ%=tha4fK2Q#4To)45;JUTjkK6H!t84hl7g9KA&E9^j21vkW=r+a^7T>zP$t`xlZm=oJ2R4#f|-S!qD>p41&~v0j4ml^EkY?8yoM8)1~wfyy6l@i7O*H# z5rE)6EHV~#F-WpL3P2FU+cEt~iZFr>w7LlWNM0nPuy}Zz$5i4bMM&V_p<;N%=fq?^;~W-~1jCrhF`4#rmQnGd<1|0_FnODq zWz2M(TKDI12k{L%&8rwf{?Qn}`-DV8x=pYRgQb+7f9QBSW}}N8H4b#9Jw~F_vKI>< zF2^oDla0eBraeYdF6(vVP$wB-9F*+u1|aCCD5QUN%yF4%WV{$E$uXny5FEgwN_6aX z+_|AsS?eMyz&e%sdP>6Ufc1g#Vsm@RMn1b z8H}0CR&m+M6Masdg?mI1P8a18QKcVB5JF3=T@6)?NBW0ZZU;d=xS?9H@=|RpYT51# zmAt27GWa_E&H}nHc4NV9jMLNB+0M(hoBZs&Y^OTjqBExl?72l9v?tn~+39v!NCj9Ofmg1&&de9asT|h@f#v-+AzxVxd&pv{z62r`rC{vu!LP z{`=0s&c1E`-`ZN`e^|=XZ2yoLqQY-xugicrCP~`E1m#C*TDqVb=4rYkGeb8^ z9(nn@>@#l)m`=8hvGe6*oH2I3KE3pbp@fI)^Oxs`;BA%=Kp-X<^id%(774p-Sz^sd z=hYAQ<9cqD`8~X%-9$OewH> z)zr_Oc~_3szCMl5E2r@iC-Oq4^0zmcXPC}t+UY!vTs)mv+${e+dj5y413UlM_U7K+ zD*pRYo@V*a!;z+T|L~qN(nUr&XvY-5Ds2Y>k?Qlr3e8q9liI_?`3@8{%qlXG*ILEp zrZUATzi4rm!+sArzS5aLr{~4MIm+je68PC>hC>#}*`6jIYS4cutk(8YyPkni3wx=D zloHk~W+>Hg4UTQdJIxMI!~ew{ErVAjm-N zm0%o8=2U}Fu^Ia^wLdXV2-ewQh>utuzz*xnfUW@xb5R5a6AQ}XvdzE_ zrC=$st>dN5awz*0+iZ|AzIQe)-|H-pAI~Z>djq$v&R73TPb>aEW8NS6H1hvVNB`U1 zT*ZG_$}g~xtNipkoGrddM}zDlC0dQ+3F zIyj%tkl8L$pCZ#!Y)Cq8biT?^d@`vG`&Y+^UDR2h0TC%Zx=2`UmA)30?tg-bNPi0s z+I6?k6ZJgBDp8Nm0Ygkn4Y}SAED9 zlm*bwahGlaEVm=e1}HB9Ex-!c6o+-{ds$VMK!>I)Q{d{cpH}>T#=MX6Y2yFedsh7K zt%Kc_|HpEkY4pFHd2D}rUNFPrCsTvfcw9K?zzmNIhEpAYS*?V4XKo8&iQM!?K}B!o z5HOPs5bv~ih$shQCRA1R#iF{}c^>y^#sBAY0dL^{n+IFA{J*umzdHY4$}mPmCjbH72|&OPLh9YjOF7ttStpva z?4czue5#+hH#+~yt~1KGp1@`MwSxKl+_8H7<7f!uaSCJ3_vg3>+$8_)?e5v@e}85F zU(VCK{^hV+^8qjJ0Kg3R$=VUJMune{jY^e)&<&iyuX^ciu)AID0lW@xVTvsfDSO!- z$WfLd!Z@i7DJ;L}E}0w8z?<+6f)GR~f1o^t3?a|}n`Y(=-k%!-LiyZF2=ilFd(9ag z(Zo?4Gq{Sp;uOG_W~S_(*;v3T3qy-Ol%|7ey+y|w-^SaJ1_~W8%}rg^lsvg)49^mVVVLmOfZns|oD`~YBhdpXD8-;n`v|Hd z^e8xwL9J#B`10k6D970|{XzLMfgg!t)5EYJJ$BMgA4w4&(Z5ZO%-wF=WV%ZFKyrG_;u{1!^Pfs1 z*Q?ATXZmU@C}|SGK>5R#1w}u?f(5QL8)0v&+p%?y#|(6~dc02)|EJ%>EPh=7FZ=%I z*1_KX&Wisp<1zTZ80-aZ0RrL=u?wiaEO;aEuxcX(iWn4wuX?`w*=!9f_W{wlu3+p9 zs8sJGE6)8LJWc!`W|Miv|0e#wf3Roye{Ag^?62hir91}zKglMGVf!$f{17ak_2ZG` z{^v63v&LXyHfeDYatPC$?ME7#FUL7#3DjqZ)eHiR#s%FH0@mR`ywwN~0G8=?f3d+j>DMY^y82-PSB+!LV~~ z+W`IQ3wyypFw)fyqUL41)C(W?+470zQK~_<%b+0hyV2O??HQK|d)l>2Op$ zxxgGNBcIfUl@Vr>_gwi6K>_=8aSy{u>*%ViW&MqTA4UZ^O7mgZ>9oo6!~Dg{X{>+q zs`L#ccL|d8fjq68aA0Z*$e)MyWJS0CqD}IgO1zXir8Q%->Gd|{aA;O%Djqz=4BC4; zRdyvAefYQ-&w(PjosJg9<+wJr77RhJkl<*AfCpj5KSU z_M}KgSL1#^`3M5JUOs~q-D{UCEfBHTZn;^^yc5nFuqT0DQPyKW*a%m&BPXkIJYyDV zF;|mJFf%HY6w)^&22U~fHZiWw1YkW1M=*^-3}sI=6z%3ct4#E?kH%SS=ese>I8sUM zoJD!Z`L25TTFt*;7s4u_*{LoY`y_{h!(RA!(EhLiNwTW3QT<-fAPMfGr=fU?gF2?c z1!7tc_xj^B6>D0ixACLlaKKW$V;D?rq%~!Pa_1^V2?ZO^XYOksZNZFnl|Tc)Dd8`$u1Qgb}mq(9X+aU z)T9~ps%uIC3ihW{i%O-4F$r5SnnEqoh-rnIGfHrKonuV18sq&iIEq&h67Bg_sM66* zALR;_O5pWE^A_{rr^kU~NS1tV77Rt;uW8V`(gImnxHV}U0+*Rp4yjIPapOwfLlA%; z6HEeyY-6un)v3nH?APeNhN;=SM*S35^tiM|w>B&3%xJOtRMk*uiUd0sWs_Q3=}P@d z!^`h-^A+4)TFC#e6HFe}|Knh1)0O{M=YLCi9QptC!hAo()cH~5f8LkJIShoE?e zx3nF>+>U{sO_DeXkHZ{u6NRG>a*~|q?1okE?6=dGr$;x(M;BL?Tcf_8DMn%!S6FM! zzGz$3gT5qK3}JrqVH~CgWagsqHcLL}Z#xb5o;=nfA5QO0qtQ4^K8&GoQmJ!K@F3zF zmPibUyeg2U0afou`IyknaZHjlArAov21S?;lL!YOm?SYoKI35&^5{AmX*`lfd9$CE zXBf<45cCtP)%|;uQXB#L&opU;UsFpp3(YQ#+g840_kfetmPDFikx2Fe<*>ybOz1T$Cj zBmVj7Re{Dim7Vht(|w4}JhlbpDArm0+QloEf-WF;?(o1)M|n<>5bwmSybC~Z{oj-W z1av~_9H3ogHq4?v`+G(ZH&-XuelQ!)!1ejd^Fwgn@52HN@-e_XBP-9Pz{P$H`ltX| zNRkNzLzs@(JP6}|jWOYJiCD(ZDQPos4?z^t>LWCPjM_oc2T6vL7=q;EF_j#|YzwS? zmQR#so}f_c4f63!8co3juAf*u2~vzIg+f!Na)R&j1znxrC)_U~Q>Fd+$(~~Ps zcF8|$HX7j+qWM{}Fs(@ju8xmhpIBO7dB|@q=0S>X!xRKIl`V~GnqK{OdUg8K>yw+8 zC%>H@%N_+(U<%so0AiY*_CYbuvLqXT5OaZ&P9nCFMF`sUO@IoS_rCL-y(=JFe*k6^ zTO?z=2o)N0DL0v3G0u+gTMP@vSgMP#WlhU;!1@4+LVkwSie|K`SZW-~^dR0|om}3` z4`pr$lp{(IuVw@B>hk>U#m)R+ybvlT8A9aeD>|hL7{+WNonL|&LCmBnG54N>6cT{< zOHBk*Dd;Xk_kavT0{U2jU~;56^H5<8I|F7E7Ym9eH`cc`$|Fk?|?vF4hE zKTY_OqWyvx_;c>nugo>2Ld%X0)NY zBJL+N)Y2u=sZ26b3>Ch*>Kt8wuS=*V&Q&C)y#nS4Cj=FqWC*Q2YD#=Gc<*P#h=ha1 zphCjItT^Q3G`&D+50Qll-I7(};ls1e45(=Q84$z_S@Q@JP5XbE^kMW6 z&5`}PMf~4`1AG79+Fs@VUdm(a|7x%ov*{~vKg5Qw^=8qV{Scu$o$2KTydqSG2y%qU z6$uMsusW8dQm+6%!YBa2kdR#bg99gBr!EqdBdxPRp|w$Tp7Vdi9?b&#m}VS@-O}Qs zE3;klR5-l{?=TxEN&aw^LRMd7uM_fAu zpFx&nG0X_qw!10(RVznIEJN@5o2`cw#w+M^o_e%S+Menahic!3-D34D=4q1ua#WCc z13)&#f7#yOvHgE`c2@G=QXWJ8V}rfG=wA%p4nl*K0f_~DVT z7(il}qqJRe;~6;0Vs=8#PUb|HoDeTUwx|WI3%ry*D$BcjmB65%=camv2nX%!^pY|e zDk+j+b=QLmT%v1vk&Kji)#{mr_=PCCIJB#;4wpFSpiN0ZOxs+L^Ev-ho3Q4naIRvb zwWb!Af8IJIZJ4|!>JlAe_Ug22HGwN&*3DpJ7OO5+&t+>qSGQthaj2NdHMFgWzTlZ4 zm2?d@v{1ec{)w6b0p$iI!t{Z3c*%!@w zN-Mw`ccJ=x+s%f2{+cJCPrKKwSLUhzmF6-b~a#Maz zY*1cgyEX=cm69z92qitnc@7KUG|SCE8VQF8lMWm{;C9`pwPQS?NHX*Bm zd1Ait3|x;3=E*~GID_OK6?Xt-&p|>!#N2nVLJx#vf<_@ps7Cz2oOXz)oe-AX5TJg) zbkHcB#zsAG1qqSuFktXwo+eR3Qs%TuI}YxXG&O3m-dwX?B`hGogcgWG3^8}@P{0zs z#rQdMa)TekQJ%u*bml#vF?S^n!S(S4L;dZ`3(j)bFtS9AbiQQc(Jd@`B0k;_(()P! z7>c)0w!|?!N-?7CLyi@;yDIw^vf~y;TL$Os{2GM)J{7Yy@;?V5Rz*aY*+?*SBv8zo zJ|)~cdI-}TbKzW(kGq}e1534zaY45h)b9(C{cEdCKh)Ex|MN}xw|UY4HTi$+?Cd-F zfA?1Rf0pvd{6EqW?WYhY(c;noN%h&DMYDL%vn^mMrQL0{wT9lHvq@Pe5H*4hSYLC7+X=q0@eKSN zCMgA2>U(Jc!}tM&s`V1QSEAR3(iP|2Goo`DHKqg`g&Ez4WqVXWqgz~x!q^{{tm}kK z(U9;Fw{=V~Il(UBhjBth6#`NiV!|+X2=bf{#e+R7v_aB`oyQU?QT2FQ7^FJV8<$O# zWTPT@6WuBW#;?s?zx}6q|3|lQ&I5q@{eNq7du!LW|L?B+KbP|u_Wuhu*o)foDXbsE z_%FJ$Xtxgrm+JhwX(UZ1FoPHeAfQ`RBL1ecl#FxJ4TJ%>wtPVhtBN$W42nDo#L0Wd z=j3PD;n*yw=h{9e2wt%+385JvTPHx*6f~G)gq7z?BIZkX)y5@4urgmLR|8^=F~YQe zOYEPEza6owBxLo)S_MTX#|+)$7)<5lp|@B5Xoz38mgqvOVSu&lk0M<%16(C8CYrQZ zQL^%YqO5C4LFKye9iKTi!LqakN0`ePR$kvAt)UA4=^Fc&eXt1)0*T}T z1<9Izf2Zr>UqYB4qx``iU$bJzlrU`3!5{wx=P&~0 zCG!a^?u&##zRAk-V`9u4wau#69NRar7{C%j`PtWA#Vrb!`=u0`6K=`IjMKxbg7A9F@wY?3tcm z!6!Ya{MsBsM|P~AqLA$G2DFQW|9^isa1!0Lm!IG3$q+(u`ebMOX6PzZS_{_JiL02n zu3}^>LnTS%EqY0~o;_Y2ur*KDZE%thTL5L8Fsx|MC{G)rlxOzwBVE-EPYGJlo}gAO z`!lU#_rR)Rf2LK;32s#|KhomH^tVbI-@vzW3Hnd`G}-^kSSOEl|7&Y|XK&lN|8=m6 z|GJdN5Z^9U%$7!tcTF0>5h@-k%kj@ZKfuz8 zrO7BEY+vGk9X>H_L3T;eESG67LX4Aa05+dH$hp`a117K>#>$Ewkw+bN;1F5ar>VGCwtGk57*=V`oSi}H?897jeu<0ZD9&Cni~;Om_j=29u29iN&D!N{Tt6UBzOwIA2C}qkK<}@cCkbY z3^nKJzEXZ2XNwYZkH>l03FVF-pILq&oLDWum=v?zL;!Hi&rKv_gE$sW(mch5BBF^z zMM^fu_d$Ata3^`5L8a<`M@O?ed%fnh9(vu5amyU`RC%V(u)Db8y=4n-Mq>C zD*P8g>b>S`yHI(Wg8g?rjOA%Y3e&$-tg<#5KbvwEZ?L8|1xaVJ-lBI6l<7{)wXPaN zMMauv7Nw7%E9NuL-UMEk^yxUpd+?6Ag;mdTK3iU*>@Ng}aJV=c!g!oQut~QvPkQU5 z4+caSIwl>kDNkeA{cE0DaQ-xc+GMo2YRxcsf>^e2>*o8jaMOcW3;jtD7=;}$*f`!O2IgGXMcl)89(2-r#6;l@S*2k_(8CTnh^ z*m$}73mTtpY?WSJ8_&R-lQ)$W&dx4=+kUB6U`PxglLP#@xq^s_7s3CoZ~o8!^xkcC z|Mvbf`~SPm?%&=&>#Wna^v}~ zXkioOBm=h(bP0(vo7=mz(8E7|``{je`!FM1u;qS<>`s6!7L~3cn#L-Tn8B{C zvF&oL@yJasRPXjF2tky?fkDcy?bWI}P}7SwJKDy)-LZP)Hqc@(sPpBqM_!F@$8Uu= z)@O}P2ge;p*V0u@>kPH+C|HR6CX>aOSR7Xp%Ejn6nKwoYpe*)szI#at-*geTz^UV$ zOUg^%u!<5V%3K8^nvi0&-|=UMYje6`&l5XiC*9flC{58lZMKh!QAn^q))_nZ;UQ6Y z0!zt%1@;!s9s#TF_L%!-ij(TEZE5{BpCcXNMb|6j&q zSk6lJa3zKv$ix{75xcF)^g|pAIDJ~^;edI?NF|U6c&PmVAfAKAkj1~DbSHGowCLkp zIjss!E(^cKu<)0pUsN#`J>OrB=gXi4z0uL#O8y|~U%osE>8^KCB$FhC19(F9dZvLn zAgT(o19AB}cB+-1*x5XcA~eb`3e-=iLXBMA~ zJL|Lo@b0}Qcz->Hae;CUf&SGR$FkZqNU|neEM05Kv0Ru-=i0SA;k)PGdhZr}%u9v) zi*mtxu7pZcJ}hv83CvVbDD6%4F^E>kRJvg4u-}+xofoZ6vfk`*YNP4{B2p_`9o5`v z?Wydut%$Vi8jzsl=#A{eKoWr4CvCM?`V!lS3sxD!NfJTVg1a_B=~!g1pKh1s72lw7 zMtTXBF=EtmvZ&&tlY^^|@HJ^Me3bJmxuTOwyFKlL5Qvv7O9_w9z+yy(O7iRFB zVTeJPfe_u#w9H0kKyG&g&>j=Mz{I zNh}<6wIe}K>rQxKs|k}EX{h==QM3ZR8XA@N`Z0?@au2~M84L+6ILiD^61@b;Rp{0_SlZV6euzpg#brQ7biBqQ%lpIx>C zQ+B5ta(MqNOsDhbU09ARlk#QC0gdQ^u1*Bb=IWefwSuCtAAb)k#QD@`n6&G9`@5n7jRuVCGt5kBtMEB^H5(~f zJAE~fNCLEG2|$^c@e0!lH?g*JTel?4JhOEmQ_O1uNBOy-&kD6f`A-Gak#$vQo(k6` zGkgIm$R*>XE$x&%(Vi>8ib$CZR%=70+0Tx(CYkq@La>*jd$69$+eOCv4nJnMG^A3f zz7I3PJXvm&ECwMD;rAaeSS@xEes*$w^V8|s%bTl{%im6qt#qqvVH_WeWZiZ4usT^Y z(3?2@?f4{+VD0Tdwq|;IiI;(mY1JgJ*<#J99fWbLaH$sc8OS#X6C-6NRWplmR;JZV zFt~+LIL44Fqg3Z42t-44pD_TOTi?PyDj>l335kYDHlSs~43Qx$z!<}VM=5*_31)+1 zMv$ax*zqstzn_69%xOtq0^w>w7ua5RzHPeFpqSwBHicLF$1`SOuj3CU^l7&DR_K;H zf4kl_#h{pCP1J1{H3(0$EZB^2(j3=TxjMOKNph#G^J>~UKcD}8c5*pgotH<)H|M{d zTwb2OtXSa-U*Z)KHLDuL1#&d+guszc8aCT*7L9SrOnVI8!q=20C)57;y(QGjU?{Zn zG-AE?`xV*2pL;Vo5zz)PlLFgzkhfRg#hzovXcLH@bt{H2Klv~YQ@*La&5{pt&}JRG zsrxw2k`GjG_w`T{jBCcxFK}tP+(J_NP4zVSe-K!Vl5Ez|GKrcXW#$a+g!ze zTgqeR|1Af5F-M0Qz#rnU(CE*ij|X+?ms-~dVjK?OMM#DL2!is3Os;A=UpfEY5&)bs%H)X(cu5Ncd)Z*@BjM;EC0`>JjVX74fX=Fz-dr_2qD1e&!UBZ2}=25 z^WBABi%<-&U@?Kk=^#S|jGfy$DC;MKQJ4oHz%VKx2|zH3i1+5s%FQVFjXSdN!JNv) zNOXJS8MuD^^70VKSfu|B&JY2=9bYqX2aO51y1sHQF{!)Ewr3KHp1xjQb*}J9;zPQg zIhUY$EW|4k64)Q7SCCkaJ@UG#x@|gQt6j~T4GfD2l8s5kZer01huMVlgy%O=_1?4& zN&ta=ExV#$6%*X!nxq!Wcj$gq<7&mb)OFpWO1@wk?aKH5>I-m|65K*3xYle5X5$%^ zg6Vv)?>Skbse%-+$)~9j>QhgBsZcJw;PCj?3rxJ91{80Z=dIvVc!f(ap}D zp4FMGE_5dAbud$K-UkhOmt3kWCj;y!A3?AY_%N!sqE(=zA;NC2lTfCp3PB$g_hAtO zoQ8M^-fc9Zx|Wv|wfD9&lu_mG7lg?*Qo2_Ff}fH&DIg2t8m4Ygz))W&?zpX+N?^?Z z+qgA&W!2NGgf;!ayNN{&&MhZ~?Ip}Up9`vW0xC+w>w8nm@ zAJtnsAPX&Pz4I3@<;b4Ai|l&jtkQt^ZmCi6gS1nZF^DrurI0T*>Mq?UViL}aYhLMt7mDbHCe z;=W-(HTWFGctdldpp%PNx9h5;n4|Cx0t_<@S&~Ys7a@0y0i2JKF!mEyKSMT+~N6>7x=@hHoi1qZK?|jf4Pl!qamd;-WVl57|N~bM@ zk~8&4)1BSERiodCr6+%;FW3L4@gdP00_BQ9 z0G~lWDKPO^@O*)5%ALZ0(@lM@K(6%`)n+eA`XC`#Y~;3Cx8&dW_*N~4f~ z8D@YpDWBHzDN?})|O4_)AA7Rw?Jh;LCYinnB%R2wv z+235n|6j^uod4261$>AXbM)JgS*zxPx;&v<<9~d!hrwnK7j+sek9%3)Spo59w>EPp z#W1vXf$2g9QYr790P~*Zw4oh)&piIM!7zExmoHCfDHfuiS1qHYw3#KM(qdx8@2-53 zrg>)N|AQi59RJ_jarpn%_KN>6<1zR@9n?qR|8?mtf1pi3Poeqvn?Thrz%Cfhxdl)d zod454HSmAkK+PJr^B_xv%AL!;rn2TB&EN2}y8Q1omx5yVp*YelhZf_+*eZkw$$x=i3=1sqDqlE}J~Qqkts?PQ4mrxvPey}xPbeA}9#0mdMp0n$-oC%B zhy#G`3st&6(TBlOG}d$5@Hjw<=60@_mfl5Qd*@m`i+E<0|CC18LIP~m{|{{Y@9zHA zO8#5QW8VLjgSs*T%q|0J-TbjE0VG2k=T1mcaGC{3cf zAsSzWAN zjdKu8ws-(@hPP1{=V1i(hP|**8czc*aPT#tUWAxoM+fpK&4=OHcm(z~J^q~q1YrSz z>JleCehwJEDvWX#gBV7|Lr#nYZPI%}qlv-B1t#onXbeB<1$!~y=~X|va=HZ_@EP3h z@5V5)y(i4JD9ze7hthcJ7A;?zivs49Rt$_jr{ddRsFJHss7d$f#GXT1%jP``R1g=y z;a|75cLD`mFHbc(tt{0V4>vZRPB!v#JGCo~i_}}^@ag3LKAkYXRnH15|9p#K!Dg={ za@k64Jt_m-hDJ>0wSUF8k&X=geHaaSAGimt-UCU0as3ga5mX*+2j(u2f;=ML6vVVh26s#Yk(FkUQ=fcd>@PX~KD1}taj!;oh9fhaaBS|*s@EIz0xI^Z^_5`w5?E@$Jiu$UIyjwa`z{Pc@5&>2HkO3_+@BpZnLbP(9Pagp*@l%DJj zTh8niqff2N+VrwPBIHrihRmsa_@Y8NZ4xwk;4`~h_RnyXYH&rQcM96rXPhY_M_HFB zo;pH=yJ>eU`15-9wR>8~|MBhbVKQ6hKmOFq|Jyse`}=nMm(AVXmHfYqr`EU;!yNbS z!^ALUX!3UfY0#0z=+Z1l&|ddv>9(CeMVFnifs?#j0b(!S@o9>=V!a7XnQhM|BkyYnh@>xEZYsRd7 z4^yW7YR~e)VkS*HMbs;@b{*xMXYJ*QoSr13Z~*1KzC*w&9j6J*$SM8u#EL#nm3J)- z^4|Vm8_qW z7l1A}dj0wd%qH~3<;ly_tD9fWudexLt_J@KA1+~ER;aRf@UPql<}aT%4I3;H1m)D0N*xxz$Tku4?a?=ID#%+>q z;9dTl-V}_62m~h|VKgR5HUKYw0(5rcUa!X^BEEYE zx)})8OsWLn{d@3l|3+zm3c?XPetmj#^!ECf7f#{7KN0kzWnZ8EcJhKziod4QC=ufQcm5+oQ<4y-KG zAqgqBOENHmBUC&D;Qim}mrS+HC?{64n1XEd%4Vz&yrE0>HHPtX%HwEzl#!MUGt6S{ zSV%vO!XztwAl7k5O$5LWUZ!iBZY8_~ZMWC!fvXfkW-{!f0&H#4g{8Fs0H)u;)~0yT zPvnfqc+)56KhMOim7+QwzZTV29Gh|M0%9~SB3`(FAI1<9Q8CKLhhS@S#D4Gzd(baZuc2!c8w z`P-|Ln~T%4SC74BoikW_*;1*$V%3Gk03Z6+Ub|JsCY7A?pxY%y0`ZG2(Cy+piD3bP zwNDl`z65_S^&;NNG3~%Fv;&|EGNiO6P0HS;^g~&UH6dFpEOT9XAcj!{bJmFnWf_mK zjDwk0A2)Tb*4?+c?yk;XUoK^rq|=~zi)82=pI@F_nVTasz0?04qXJ^KCyK%+XGcH1 zK4Hd(le6p7NDu5^-IH%&W zbc1SAGE=%z2o}%4gx#Z>@Z8w(0I_Ys;H)ni7b)m=*=2-ocZ@l=^U(fFaAdh2B25PcUor#v?==Sy7M7f{L zCQh-Fi0K%5jxZS%aAp2p25X;ETd;J6PoJ!7uk4iU@P&D5rjAwk$y1gO)WMnf)W}Re zec}~mSoxY8W$aEDMF;o#<1`h)+BGCfK!*D@J0)Vi#Ok|oSC-@W5)ys`>hgDxBb378 zIUo=-tko+JPQoPRqx|62n>es*Q8AYK8_KwMq>1L2FWur^uF!mNlVCcrA3*mli}=r2 z8?&ErsSJYd&;!X?Dm&*P^`Q9<#%G7@7|Yb zZU4qEeVNF%zVW49NB({;hRKtT>N{F?w^{%*j!hoZ$X{Ln7NGM5n5vY!Q}b|G=t`c9n>MtK`?J~*>o8?1sf+nqrRnts_&F`rogNvk21!mq;R8v8|X5*>u zF!IrDc^}fgOIZdx^Id|Ze|0(ERbTi3YM%w$EDMN1S;RF;IR)mwLurfai@HELg=@^$ zxjXqIJZK=UdnR4P<|C z{a;+nTa5lMfGt)3Uq}aBcwa^T*WDlM^?&B<QF5aLA3%nMl2kY<@9cR{qz0l^=gH4#T>A@Zt zGwHz|I5X4p&l+8|QO})M?Gz)p0JYPS5|^ZQ>SEUqpmw&<|JaSX*|ops z_@6rmySDzfyR*{&mhyay`X3J~RHyy<0uRln`{|c(m!$c%P}AbuQ>FxHepkHf?Egyi z{7i`&j#C1H&EOl<-^^>wE%X!?X(3LS6JSN>m85R4dKLk@tlItZMUvqGjR7eh=%i%B z4nmM6DepU-%J)f{$}bqa%aZiHmCv;V`vL@k2lZwRt6gkREv`Vle#I_;`@(`+IuHYB zYd~6mTxCbiJPjz72;`jAkYEt~;55YQbr(Lai_%;)Xrk}4YApt&nF4>h5N3(_=|Y)J zxA4Q6O|$U#j4pBtOHG#PVU3H_tDbySncie!6`?fUFq*FXZcvJUQ?#1#q-kNoIUk1k zMRRilUyfj|ZQwtESiZEUh5V0ETFfKW}i@5U_t-q{f+sdr7gRk9(eBU8-yr)>(x`$?7FAPA6Sb zS4g*#A$3SIiRuo3StNA>h#>X!vb7H7n-qtQWh9a=%F${Pd>1aZGHT5)wHn*ba)j2B zlYcFl)hqwOEY4Aqk&T-$jtht}#B+pyZ_NLwx7wGjlRO%UG$U$AcdU z-LKQr3xm1vyW?_K61bdzCoB~5Nk1FD&Pu(CgTFGP~Y5WM3^zJCsG#{>)zVc7`--ih;m z74CL|LiVEzl3eA*t)Rc2kobo-88q;JI=XZ5{{Pd=|F?Jdc5ME?wZF>$v6RQ={}*(? z7sC75)cIcdzCeD#Jb#Tu`9*;UiV*krT2B*9C?0trGv2d*%IMmkoc!YyH7;cO(yN+k zI2BjR@>N02bAb|rC;BGk*nXI%w_$WAqFhkHmQho7qud=t3Cgl%B_JU`=bMiDP4^By z2ywYbXv#6eL_?f}#Q+jIH?^})y?~xsmP4Y`nkg|rt8BHE^gX*E1!cxIFVT7d*4;F; z9gCix@b{uJU1Do4sxmRX-XD#;79R48HyyuGHtB=W7?WQ@tW`7Tpbp+`fKN;t1-E}< zYxU=%_a^WcZHV`>MI&K)_yEwf`^UG4_8ci>m=&gdl(^(DK)JDiJunSgC_QggU5MJb0w6 zKbcCl{&am2UqIg_r2vC zkAMG{0#8O@(GRH%FbUHnX5ms7e*b@Wd&iCccd)wuv6M$}Mn2v^4LJBsjrUw~fIX3V z7uVr4?olq)KQv{J1qaH&=@^~ytpiH4Y~;nrfW zsksKA7MiY(M3RT2dD^D+XK1oV9`d>Rtbo)tzD5h^f@M5pk|ib~Ng_k0ltut0Ab1hx z0Oy!;CE8-Pp$t;toK7)k!u<;+83>+(K(*_|s(#kd<+hFrw<;&X>BX_e6EaW7dAUn8 zCKQA93|7#_rfU0P)rZuN)qB>BcMd-9!Tk_s23bX5_;0-h(9bjd->E?L}`8 z5_lgz%#WG?G(B1?8T*@lyz)Ow+i)>XQ|^VnaT75wQ@-af{Qmd$-mY{1duMxdCI2tu z;c`7=u%j?vkl1g{pI$kAnuLCC9tr1l0AXwF=N+I4tiy z4-!m@hb!f}tP-XxxBM{~(mn5Xe-~yEiXp$3L+G|hyLdlDsd5K5%jv%OAq8XHgE@SP z17XtAwn$1nmWF{}B~T;dFQ~2xl?6Ww47~j`dRVbZ$0ZHz+ArjUk_d_p_z({A@^S$y z>IGn#pm`g{YoHCy zAqdvgkLP+3H8Qk_`e78|#HZi+U&cp9`$G_{EBJ>BOb6VC81CL7W zqu&z%((o3hnD6BL@5;R#fH2Dt;ff-!p}nZ7_IR?woaRDX<94<}uE()lYJfHi1UIVC zFhdef;|wwi^T27p&Hz-42yb2)8tF_(P!<*sy6tCDVQgeA*KDlfSoDr>tHR<{N(I{H zAE=E=?kXLhp<{gjJ+!9{*hhR*kU$#?X5})$EnhA6^Z#s6K#VtT#Ody=il2Cz^uMhw z$NyvVV0Hh0DNj8w;+h_Y3?%xg289z4EQtMo=yFu?8ggN1+rktCM^iso>RMv z8?~KtW>aFU(6#s+(={xPqBeo4qD5ye{Fq=8RN(AxoYFhCjl{=`+Tvcbz$g2tR}uTO z986dE(+hJkP^`3|1R@N)~rRb(5+#5NtCakO%0n8@TD^dez*WZt#jxXNX3 zpO_0=O{&U8Ub(!RS@moLRWx+Cbt^(L^&ZAorMxqj3C26~ou%q++KAQ2)MC4Ynj_Wy z(XX|raOwP#je#Czo^p)Kix=V^jwLB+cO#7NUIp3`Q#}f~(Ip|Xvcu+e4I_T*g`g{T zL#1P!Zwq{a617e(4l8B;&;Hcw|MQ*u%BNoc-`d-A&VM&Iw^sK5r98qw%r}z-o&E~F z-*f6)?yXau0Jru30>Hj5B74T)w>!Y~pub>~MO%A7i}P6P3dXd`UG*i9QJBwj2c*&* zEeblfRjaHNDa>q&tPh9|Xv^&NY@KF8C;S*jJZ1r;&FkHdnIJ0LZ0Mytihd5(CJp`U z+PWK)jwX(hF>R-Mx-cE`=)D10yQ@7x@XtAQ6?Wp@gPj$v+9(cdcjZi*bn5QY)|{7n zSDIMc$7zW1nRCpSM48VcdIwT9$KVFV=VVuJFV%GzyJJG&J|COQtc5WFh^zJJbn zae_essh|&I&_@NoAyWtbjX5GxX*i!}V zov;KUmZnzLS)P@9?;4XjFGNNC?xsX4IH5vH0D{v|p288#xO3xG4x^-R+&?sjsto<0 zurk}4WpmetP4#xltDQCy3cnVT3M;F4At!hhvDb1&z^gRGO|CI@Z^EMAtb6cx7TI=Txr+p9-kirlXHlF-WK#~E=@kk5c((Co?6A2Nr zqi0vDAXl&ApkYcLW;e&cHeOUTF;T%;7K;f5JJprRcEX%sbi`3PQa20`>ES3$;V~?1 zaYbcOG|$!sDY^~QUh?sn>e|Ob|Ms#BjWX{@ip!SXv&10mDEk&tNj0W(>AD!hv!g3; zb$s;t#OAuKk5Y&wmbD)#ilQmLPPyw5TXJo!8>yCC?|H-$TkH2cF1q?jqXdS=LG%y} zW~6vvcY%G>t7h1y@LI*ITT8Aj3GKsn4jHy;wYHaI9|7++5^Wvg^-}Eu5NfCHj3ML^7Yl`3ylpOCQ-~AR|Bwl<;loHPf zRWq?jJQ@wKyV2-J`O5MI*dl38Z-gTz?|;`dOdzQsxjH;9g88j#&TD((iK$`Exmk`( zyi`2pLv$yMcRAQD`rxXx0od>C?S55c3#Ru=8IQI0htLID)0;4WW# zLjy{H_})}(Ts_wRV@NpKNx`REo;}q z%bBRBZK-Ba_O1HbRhLX+yDf}%T81Cd$Mm7Fn`Fx^RDYl044J19YxX+=;g9ypYfGUo z?Y5A93P62|KcP^cQWkG-X})VU&936p^lc| zP5xg8hj#wggX7ba&He8>N-K`0?SrAV3;GX!p>=K_V)ebK17Y9x=)2SoaLem7$^aF! zRTsjjoey)#T+4V3+H`ccWG`AF~7fUhKn3N;Nn(}J*(b5dhVUBk1(c^9= ztL>&F#v$Xj7x4ppq=8R5bLiWm8%aZL>mAkKmf?J$J%%e!$Iu91Rx!5Q`9iVzYkTZ^ zh1LPq_7V8&A@tt5eWxt)PhC3j{|T9*6yBlEreF>BU;C$y{nx?%@h1MqT1scKt#(2G z%wP3fOU8>zyRK}nUKM}&1%UEWhM&rcX2AoF?vQ)^<7cUUs8k=i*I1SM>H$aES-v@qC_>)Ui6)JHuB8M;HC z-=Q>yA-afT5d7<3zx}VktQA=H@VNrm-b(z1h5)@2qX(Jk-sylnH!4mtG&XDUC*G@} z;*GZT$14B6YuKZCMmnvo<%P3oFKr2G8W{H-qK)5R$9JL4NAp~28w0SpmHrXxCg3^U z<9-r+ux-)p7m#OoT3$rAG$_$gF9($&8g$fIo(1+D?jJ@fkD7MYjq4xE&7!fLn;}Dx z3tI2EGDSJ$A@{iNN(w`?K%yFt>T=+$6vLwtY>}kB89$-DwdQx2$N3OZLn*w(6O0^4@yZsJj|~vw+?PVB}u)%t^n$ zXJHmmw7kp6ENvxv)DF(OQ86kjMy?2pT@qb{?oTIdT3IZ zro;Q$Ey@ySTeK?&nOo1>PPy1=6;tQD z<6gz%o$Hy7+;7fBMbk57O5&aBy*(*8*&)B$T;YU=_vjJGIm^L%n|JN~RIfTv?|G=R z3bgyd`B`hi=hZ?AyQg7ygC{RU`natPp{j|eUya)Isru$AoUQx~`J7BLj`rkE_&MZsrg8tRNvg2ANrt0ka1Ab^a zR9!KwS{15P^`J(Dsy4f$IyJ^TcPiGC+~qH%)o_bmMvw7l6urh#6r%^22`>o8u5pXU z7rP`GZLBF~^osRr8>|)6F7WO(DF=btQjUJw0oD!qB+b$lTAUVEk2<)GooSV8y7c0z zv2SmynuGD)58$l|TPyLlE#MnCbLL`QOhOnt#&26~5#>XDV_QGmQi-g<=B;%Y#RD5s zdRjq4N{n4ZA~Ki*zHd_)Yvs<^!pPJ>Mo5wn=H}Dt zF8s@@fSpm48H-uDT+^k%tLw!N;cIx00G(wBJRlH}Bo|QtqFL&Jl1ujyLg~xjXN;&! zXEgsM!M_{3U|{`fC*xm|=`GLctv+9U|0s8WXqLv@GK6}p$n`;+^oB7Z_p`K-VWlvm z%^Z*|U)8cPQk=w(Knz$~=E4jWSYaaJCD#EkfB{jDZUdaZRRk;?9-{RQ}zJnJ{t0#UB#W-_PkANuTF072XM_+iDP&d zMPQcJAygjS#JSCd!vVFpL7tkoKmMBhPRLhXyfEAB{Qxd`ZZH4=o$@;&v9~y(=bjX~ z$}#eQzynNjPdIRQi<({`?t3$mn6ReTF0{&tba%2DlWYp}y!n$+%YY++ty-e@M#pRr z_%<^HC6+M-cX*Bx5m226#C7*D>$h@c>|xKVt5@ww9^2guRGvM8oPaS-B7l9MaUFp% zz60Hu%o2|XZDCh9vAY|9&j837*hfwOw$-XiY&H@hls4bbe5(h%TWZj(H)4g$K7m}416(CJFE!nSX&it z9HQnu)EmewaJLAE{DzT8-Y~3OlopzEiGo+0h-gIIVTxWdW0E~@6*FPN|65)XhFKI? zYhHc?&883j(JV2bouJi1)bb5BsCw*GF}4xEbduak{PK?9orN@C>J>td)OeV8y&0M1 z+?u}-2K8%Hzhv5a8T*4zL$3i}{VG;%K$2+(Zjy!Q{m(aL7z*vQRV$kJHMcybUXziP z+={t6uFh9t3n~-!Q=5KRX>%juX}9EMh^NO6fdV|>bi5#HI(ar>Vp^?mSr8LikKHjb z^%Aj8n5b11G@-+8+!IdhZo4DK0qk2Qq}!CW7VrI^I_K_vf^mFNGK&R+05|x5j*j>3 z{O_aFP5z(t6zR@h$^-mx%_MXfMND=i0LHP5pG%hsu}~;a%smx=Eui8n)Jh7K?G|DSov-POha9_=5T zSl|Et>B-UN`(I1ppN&}J^?dqbtcAXM)s%f}6BJK}bh5`If1iQc;q~Mc{BQa3vOab* zG{+Q^g!fU{2)~n0!58rRjO2(_ca4yFp857;3-#>K-rty=CO*d(V|S!tmE=(7kbeU;=W8^aJS zA`Lds|D%JE9slF-qw?o~lObtghDBD(%A^rmrU_P8{8HLcoZOZ7b+T1TqAqN!ac+H^(P1{oRT81k zuDOM7=*nvB$m-r)dLfL_OB;GkF(9v;webEIam;W?Q4XNc*)xRkksPywq218ZTN=|a z?*WWgVj?D3FJp>q*hp4@mPBk3#ZQ^*v>sfZw@_Y^+xZ*Hz`(k5qS}gfbw@qh$21ce zoR8ZP-I6&H3LiN~6(pwZ~j;jA5sKRer#UXo;t?`A?r zW{fR-9lCZQz}fZL8x-L3Pti35_z~qAwr?K+O=Fzril*RKs`)nlyep-qT_#WMjs_m1 z0MX6ax#;F+ZgRC7=wLVyT(F&v!+Snn3~A2ILI4rgARNI}5jz|5&JmJAeARj<%PtK2};l^Me3f90QjE3-@kd|x1!(tP(>%{gBZ z4cFe+8bt)&8u}8KTiOcmFunJ$X=8fqTNx^G7dv)TeuwVR=hrX~Cm{I0AK>nPM!Wy} z^A4(h_tKBr(8lM| zLRBwIlM%9C(`bH6e`)cdf&Zt*ZN-Z0zYcBtkAu|wQ z?RWWAUmQz2j0`5x1>+8HW>aviTS5Glzwx@#{Qa-q{_F76wf{QV$p338_4Z#qfBK8s zerZix93Hwkil~sqdcI5*mRMEd$_C9-Rr##N2=V*8GWpzPMv{M!+W-XY{{!;^v%D)7 z@ex&fD_(*a?HmN^eNBRhts=Cf2E+@L#^iB|k~{#xO%8K3p2ata{dxh>lq5G=l=BMM z%8->6z!epm(^tqw&S@aHR_h9O!FzQBrP6{zAi`+yU0L`sQhb+)y(z_Dd-$(kpBVu- zIbVIwTj+mAr;h&T;9z6_yOtvLzigE$fFf-H8C&Y#rRaVO-R_ps z=JL_{ye8T*E{59WadZaJNWR1iV<_@Z?WKNa#%k!lJ1D&JZp?{u>=Q`k(#H z{qI_e_xz{S%WC!e5d_S=)SPDHJr5|qRsK*fq|JBvV<4q|ZrLX-z5`mChnJ??L-2lr zcn;S`GE*XeG+b1A?+23I#{_mV^S0;K^_Z$s{S39APNl-wRQsvuvSLVD`z^EDAAe}c zN2D*3US0Abr&V#R>dF79KuEJ2ls|RD<`masX`ugQT>2%>fKBxO_}HQU`=gEj&svIz zVW)5Il`ec}-?XF5QAJ z!jS!XPwr7iX3#|cPu%?PC!^yH{a;5h>_6F(Pb-#u8HT_F@4CLddc4Yj_N8~HAlj9_ zokN{}2*F>tcXBeXS<>VL2wfj(g$>eyAy?OoaJxAKdsrvK7-Zt2^fM*4p;+PCk2PEHRGHuQfT#i0L}YRQ)+_Ql?L zvXot$LEmH?PvISUd;4!r#WOPf2PFyEu2G>BA0lsgQ{;E-oTt_hQnzxHO>rVld!0ei z8ZQRO*RRiZL7_mhEuF=+2cIv0ucgi9=?)bRhZ#x<#W~3ywTC&p(>l1G#ql+XaVWyw zl-1JWg{Yn9j}9<-{-~w85KNa>rg?-Dr#gS?Z%|x1wZboZ2$N_L+{#4H12L@Z=&ayn zL+}M8IEhe_gCo~Dw=1A9yKAA#ZGw{ZvIvO!CLT@^rEI-nK9LJrzI1ZhR#EW`PubU8TdfI6#bKRDE2)DwL0p2s8uG$$EO z?f^>W|3v{M01Nk%TPCfb@E%3HnhFcA^I%_iZV;ek{$iG*Kn$_S0-|L8DkIb7mrr)o ze(_K;FDthJl}8_bnaulIE5qBS9jdB0$>r_#2y zvo#sd;@Gk`aV$8wZ-Rqu$6iv5d=89ELn_UhiAzvnSn1EmQewl%+-A+&TVFG7vLI;F z+6tcOja=BWpKF1%piSh!sy+-uFVh1@bA!HANvYJ`2K!7cd4ETI^|y~eNtI5bDK8Kq zjKditanY-rA2Tvb{TBvKHG5AjtQ7Ts#YGE`xHoEHvD-qxtLFdF!v4N?Y2g3IMA#2x12YcnW8+U6c0@~6V;z+CzZ#^oQrvP4=b5WGzRL16P{n?fn3LV;f4sCnIO)1h6UbtRVO3k#b*w4E;XCS((89 z4=wksXf5zi%E7vS6?)WA%q4e}%~3`J5KsiOaDv#M;=`wbeI`)&yp!S_`wm&3O*u04 z*u1+kHgEBD51-SIf(Yn{mh=C>=JIhEIK$MrQJE^zqEm5sm}=Kb<%c3?Gt^L0Jd@Zc zek(-D&c!Uwtiacv{v2H1Ij!12=kG5H*9LR@4{y=Mc z=EUBXH*CAgZ*FKf6|`Cq4{i!P)**rLU*{dhB}_oJp&m zY7P$-mA_ApQ%(QbvFakmkfLSvfKB&*qmx4?{>z5`ucsLFpB-X>T=QiqzqWmzEXg#IqB?rGFitHV@0KK|WlmE^e983rzv^bRduaLu}u}G@tfy`ca%U07<|H4Z@GZ zz@Pox8I?6kJn5mD2WKsLrXQIrsRabwS{kS2$q1*`!Kwh~%u=#wfHoZwm%2&Xl&4tg z`Ty1RWe<0NP3OPE(_`EJ=iqd6|F@Rn^8c&r%RYGj)%E3*=KCD}zIndvc>RYuIk0v9 zQQ*`b-&Caz^1piW{%Rh`zv`ZWjMNa5c}siyx$?6eycW+-1>{PzP-{P)q(CjaYN zib4Oc*pdUb=0Geu_!-lDS!Q5uq$kT0oO$%k8u0Y4?B1K%OBzEZB5Z@KZ{)_8^0fu4 z$vM(l9IIR++g4PAy6951;S~k~tbt=JrNH#Ygb+@RIn3@*E&^L##4%6d!enGOPkGUq z-Ng3Fv5{$J$+BLS7}?c>HSGNWUb5pEHX$S#0}zVEu|Pz!e(B>F;}8XYxJl+Zsu`&` zy@458b+t4Sd`>pjswE_MR*qyAs)UD=%*mtTLZl?BLR@_qiJqqAwd<=rgvk%j>f4NA z>WTaK{fjv@{6E3@WiK(H8u<|C?r$F1*9@0Hv@Q%5=2XvHrYua=$^CX>-x$NjBsC_F)22mrL|o>iD-HT0~ANP zoJdEhvA)4>q0Cat_p1#U6IU&PibsjDM2LC8D?rs^q6v z^h(H4MmM(PQ#sW_3Ui|9tS)NdlJosVNQ(>3*OWECulcs0g_NZSE$?f3n!-{bbE*GZ z0{s1}UA~)At^Y|#ROA|3?fw7h;l6$Ue>B?M|F5MO_djn)gg~L>UQ!FB@1G~D{V^xe zx7Mf3ufK*spZZkH`=Anxj&T4wg#lP{{32U$%~^4l<9JAOl3v8Ien#YBCG8VV@B*SK zNp2A1RbRh83%G9JGp0FC?t(L^G~r_lU5G1$-0y&`IoA}GQ}CYrx8^?Oib%@8b+1zI zbG^d6W8gLcp9m4K0N<;o|7_jN^T2B2f9)S1oH+R(P7Y5u^nV@2p#Rq-0&2~HT=Zqx zKyyZ>r@;xFdGyQ-6s52TxHT*T#UKMh-^muvujTZ#|5zFMwmZ|=q9{}wus;F^BXDqJWKR{9 zD|bVcnZNb+8f6sI93>&r?$1Q@)hSGQ7-V5=6z~uF1}O-wEMFrNv+UPa+ct^foxO*IH3AEk?MVG zqFhZGBZf{N+Y5X>-J?f_@3Ny{;CKaWyBBYsu+=W)%@$4ig4W*HF~ZR>0Le-dCBDxZ z>w8U=nrKQR5I)+{X1Xqksi70aMad#KZF6<0_u?!ykA&{xfgeEx5%Juo>eQtcuDV;s zicx*U$3xvKJyx2}Bd%ES8r~y7XBh$s;i1YvkWX-OM*|*2o{MG`84B13RYOU7NK-Jd zzSBP}SKXEn`2F1$A6*6tYB{<;-qJ#&%MkPmhGH?cOi$bTeey>cxvsm7M*HMrN^-l@ z)zaNkncH${aWB8;X1=}9HTq*l8J^Q7rR?ERkb3|%MhmU z7RNZphz?;C6<_f-KTkOIGX$fzN&NVZko*;nk+@(OR92rQ7xWEDSoJ~KcbtRmipp#= zfG+?i`2g$>YO9KCzp}0+$}R3R$Eb242papPywcNT{(#QXG)7aD?`IUYP=5o#?L?W<%6n80J;s^7!Px2LsR9csoKUefj$g#*O_j z9{5Xwe{ZNbs7ttF9jZUL&AHLd1kMp4N&E9c@YG zCMafNfJ5Z&P=2lYT8wWfAjQcJmRIxO0VX-+N*A0&0P@W4;Qu)X`=f&+5KcJw`2>Mk zQWCaLtkNfL#bEj93TalsI*iE!*p3mKb8bB!@DT>)sq_5==72uZFpt&2li{3XY)u~~ zC{Zbuv~)_&F*`wP5<#jB5R5O3PltV0y4``kt3(CUOD{-JKE&z#Xo%BK6}S&Tz_)Lp zIfl#w8_$DoH~acw11H>z(EJF-f)NNs{dP`nxP_y?N)ULy*%}3yY*?%G`bC<#uuWN* zx+oo|A(#5{wJQi4AK4Mav5<&*0$0$7jAK?sO#8V%>;8&l<%N z&$NvFIrLa{Hhn>?$wz<_@Iiv1nF;%jzG^5DP`uk%yiLCVZtTG7*hI11_D`Vj3)b^!&B$}_vqkw zbN{=JV&4DCB?o-Xdx-?%?4l=o0qmJc-}XSE>e>zt(!Vv3GaFM0P(so+y2$c*LV5?u zXtd!Y-cn8fGsI7XLI_>T0JJIo$KjzJ|L^qVU=#m)EybY!@5GX;9Pmq$eq#eYS+Z}< zqHmI~C4*O|?nbH~i44;;=tA&~d6<;7NR{24((CR+h2j&B3ty`?biY5y{Mw8+XwI+s zHLb=gh~rtdlH}aRY&^<}Uh;E$e6C-hG$xPi;2r3utsuC`VUEVLSQxtQ+N#xUw(}Kg zigCR$NOGUEYG+)05QBXLW0LtW;*QvijI`W48y?@O)bRgVlH(~_{`l9#{|`_1kL~l{ zCjaA_ipl@QlJ|K0vp3Px6$6}!^eqX<5!xR8783%jS(w~bLGaB4fnK5G9Bu;XKap#S zEY8g!z@IPK_OWcb%Nu!bv!U5)2&3rD97h4@*aFH6n8&Qo zr(>_QdedRk`>lZAw0LZYpJpK_C6R5f#HFulvukH~%Lz$~=q5Wau`5iatF6C1cr8DV zcDpulwyYETt$saf)&x}BVrqt%PG8Q%Rc$7xCd3nj?+(vVvI8Jrct+eEKN5ctwF7Im}R7|n)?1;zUE;qZ| zZ*!Leb1)^8RlYIFh9Im^sa{CJ4gMp3nKJ}`pXK1g^Z7^cfU>eyRoF`%th(zSiNuYZ zw|uFQ|0Xa)*BJ?sPx649ab=R0jA4`hPqcIro2u`y2YdmSWQXa>}h_M#=(F5yW@R1J)ebT0`-q2%^=RMK%_fo8^W*di%wLqz0y zMxD2Z#iK7ks@r*hfiiTk0p&e<)Y`INt(pl7sj{K?-Kr@XkJ*+k+sX&68s{WdT#;KU z6*$v*rHdZjs{G|=OmiB5fQMbNgZkSR^944`zU-JjRi@%Pw^5C|SfLf^keB`)jZe798@T5CTCmo8F>K$Hx4l3A8hLo?2DyDG?^4*vwj0!D$#J<`3_Y z45?8(@tfC)W^(QMbMd!mtUs@7FTN!HxQw?@5hKIBIa_31MBfgk1=t$7_wS@Xo>XSq zO<6~&JO8C5CU=iFX@+2QNfMf85GOeWU5|r}_CH4_w*K$nWMluimSUX$s+WBE<6uS4 zPxx?HIitRhilMd;YdI=b?E>R;p+mLGyfOWPBaUO3r@gFnpKWrPt#*zr`ySMxSRUTQ zl!UA^g`aQk(Zdfw>9zBrnd^#lA z-ChR6``{S>F}y{wGH4Oew0J1DpV@O6UQ5oc^81~l97fzwL-r#YH-|YCsYQj7Kt8HT zdOF~7U?Y^|;6w;835n3fc#IRAKdN|XKaqrF^4)vB+UA?35qUqmMOlJ!M2DE{O$g1o zRohx{^If-Xe zw5;y`e>BT~r-#Ru{I`E{bTZn=f9oiQ{P(L^@@0iRxpSVZXjj1Bvmj?0X#YvmtR!Y` z6}hEWnNCFq&y$tj0lp^7v)+@D<~{Kxlc!bbb%17SEVZEw@*TD9#0K-3m1_XBuqpRs zF0n1zOJ`d4C!FOZMcEWns)^sgGGwlFR1VDc)Jugun1NTVq2(Q}-=I{c;%Q+yZ$(hn35FI)+3cr?#lt9q ztEN_($r?ahuK>pnyq&AS_C0!}9foSL^0kKl{$;kU|1aX$U3rgld3XE&R@sIusM+{c z+fF#6ILU`(;}?S9uy0=yoyxTN>e7%sW>nN%685ybbhO#j7{>7}4DVmapd>oqDiiD5 zI|Ka=f^;4Ra!?O#Xdz|{c@Hfk?x%Xjqc0%O@YFa&IJ>B%hyngAc-fNRmffrYW}dJI z=9491F1uL+%qrpCQV^?7)&Q@TtZylhwSLwBb(u|YDWJ=4)&O%drb~j$dsqjppdrP} z5(?4B8lY8K=#~Okb+RgW-F$Z~9p5&3pt@42|B;8_y-x*QT2=h_0pOx3zkKULITLPb^nsL@UNl^TVvs@VQD z+NyH>ofLIkQ&rB~O6aAbl_TX2xyPuYbA184)@<9_Rv8$-!~*eqMi|%IaaHV~5(;i{ zsUkSy#N1Ii0q8TPc~A|kYu2aj95=ExP0EV;dMMn;7up>BcA4_0+VIN8RBnH#dktEgqiJDd$$#jV z|0)+*g|3&o4OD1xTkv!~9JeHQmG3@Xw;DBt`DE!~Stk|a%166}2`-P@cCW?W1w|{? zO<9LS=2r5Pt<9mX=hA%s69@Zc%mA9~KTq}#Z2!O0(aGlgw~k_*|HM**ZKdxW^m`7h zR1rP3L!g>S--ezF@9*Uuj4fX2OvtEf2pz^7SMo4kw-P<<(}n6`p+l)^ERLiClhx-@ zYf8SuXz|W>6jgHi1k&pajqzs?>;+|i-c-UBLQx5LPJqah#3cjBWTFR{MS#YTPQZt~ zc2g^?dnYh^!RzYwsCoYA%TBXZx$M%og!RS^N%U@a?Hj`q9fd5o7oqtc&-Kh&4m6xQ zcbL`&3oeVH?EKZ;!dl2JR;F}7L$Q&)Ve%m1@~ zwbcEJeKmK)PfhSEr_#6RH$@SiO&y_ci{k&dqM)OZkgW|dP(EuB zLA|0=KD5y#f6^)c&X(25-Vfjg{|B9cNuH-EF-hnLsye|-JVkN9t25P$T)27lWMz;;ep!hv>o>E7$>|TMJ2CxL1TgiT4tc0a#S>kTWD%F)4vK{!)#0 zrhgHto}97xC5AEI_{7cP)0EHH-#@c;5FO~RDwf^^4E(V%yLghNS^iTp?8@Z7gX4|- z_sxnS{}soaUgf_U>(Qqs|CLkOsQ#8!{b~BNKcDiid2$=o&PKKK9h7GN&+U*`ng8$j zz>WWTyz&2CPcisEU+R9Df0Y&cQ{(({9;>(c6l<^ud*v-ZDjYB_B%d^}AlJTyfAM4L z$`?Fz!>b!RcnbQQ9|a)zJf;B%l6*|9llYeG>#Ra|kS;*_MV-0|?5WI2o%T6w(#XOcB5UkMTZJy~oE{+@Ik-xJHwfhL|M9b`2P zoOsp_9Jx#5S;FrKeE?W?j*b=;H-w~O_qIR^|Nm8zqihVrVh-lh(yq^oZhs(6cO)LsEGL<6>S;XG z##v?{$zo(h@vFrYFG_%G-M#b=$X)B44jV zS8Hy-=?!O7&hEUn&+cbvF=!Eb@@fno5V#|NNk{ziE@uprh`o$Rl7lf$A^=6$&K7;{0#>C&#Du{m;SCCjS3giXs2Md3DpT=Cb~K?#JD5+jnTH316lF~QTLg!qX~XEPd08^1HXBPd7A6MsDt6@* zbj9OJ8C5g=Pv_x^>Hp#Wu|xki`JdNQ4Elfl>t(<6-yfUvsnLHvi@p^;={!`rjA~TU zoMiBhLoiHWo1mdJNg-;`UgHJAPmegcyNn^WJWSLS8azT;Q_UhKU@kTxA5zfKko{TQ z`xGN@#Q0@PGyNC$I4g|*aD23H=YKdoJ=)lRt)&?B|AsGhzbv3K67N&v0%{_wKM3?3 z_D=x5iTUS^`6sq~O~607>??@&Cwi`qp0^dEEPvb3M+jqdiLxAzaR_s?P~gCFoW4T| z$|-K*2yWsCZsG`T;s~xgj-VhvXPT|jn@uReO(?<5Jy2Py&VMg3&9fQb!hfGdcPQWc zROW5$co=N5|2nYme+~|g_c!{#wG@87do8n)f?vzjoXeg5USMkMo?*FpilbnKEME%e zTjCEv{kx%?xoC}L|1a=uoUq-BgAh7m2Y5wY?dTAD+)Y*6nk)aBTbBA`w6*5Ob^D{7q79?G?F1 z(-NOM%t4GGHzO=|TbB=8--&F!D?Lj*bNOov=qoOM`9H%X!};T73@Keg@Rz0O{(m&G z;(s6P@1GoQ$5zvF0L*U$v5ft^bT0snAJ>nE$LJR_*F! z>~IA)$Vttqt#~AS)?gf46c(^=ik)RWS>83C?`h~x&Z=N~q1kU0E^H`Y$}qoneM|uq zyQm@?eyMMaMRH-w$XV;mJ%F?Jg>;s1o0GQ9m!7@v&d6Ffw#fo_4FW(i5LkT&I{;FO z?-EXD)K;_z3#Uc}jdhXPc1Jr>uv={<_^H5HYXyZpo@@5RDQ%TP!lFik$_uQcXb3I@ z{#nf##mOD`;Q4;GZwZMJOa?p7Ugu|#!N(fgDM>!7l$i)j@sAmqrM6#u2T;mBJ_fZ`Xll$NslXCr z7JalFbB?mxWya&}E5?#&-}?cS*yNjSw|sDB#V61Z&wJeUgtM~3khy$%?*~xgQVJ!- z182l4v?~<(FIZ~ugOWUZaYp`N)sP^dst;Z$EydjaxehfTRL6``VexES4=9$oTX)mtNG&$!RQgdVoY08UCvKKd6k2R zq|a}a{V4A&gb8ES3eF}yyt}|YjCE5+b1{fB5mUFUPkKk-_t9Qp-3(V-#%*PMcdet_ zi;fF@NYy(>&2&a{4{rK8w|MEl?N!Qc0fc4o3hciQPEJO){TF+^q5o?reB=L!a-cgA zbIEcE;&1Ptq1-;r;Y%uFlk{;KP&G@iTKNB0&!hnTKmxzDblxE0tM?49s~6n#t;|@f zdkRJagIK+W_XyBgX3R)dgDr~OaNwwxB@-*77;6!B-$b>y8-HH$cuy8z|t?%pB(E z9@z=hdCI4UQEZB7Z zJ2 z?pr^kU&ISsg5cNs_si~EI`@~g{hs~meH-@S&T9dt!L@VVv?^fWc_EzUUx?Q(caaNM zoonSIAenN#XT5Y}H5{%62E*#qvK1Fd37X;~k#K8<*`v-(=2gL!^zo{vvF!`O#Y5nE zq5V5FondkrU)SkP0b~qO35=Ky$?2rMDJs8L2VOLCY7c-V^;=#Q$)NvLQ82uf_FbPq1bzSqy^*d66iJ~Z4#2D`A zY_{J4R)2O>2_+BQl6>N``m^S;g;U4Bt+?9!2_{jDtP#OB#mQZa1`RG(Rx5kjb|6n* zlqItZpWBixbvQ`0&{xV(V!SqoaSIC9`O1IU$`ETh39%>Jc05XZ=M;W%4NF(GJQQrJ zkGY|S&qS_j<0lO~|ZM#M)F<@$EF|Wf+i{-_scO6}`_{z_ctrSi@ zPKq5Unl*_sK0?6zUMx_KC8is)(EALcF~09x7Rp7pEoGseM4lz(7=?-jF=y2WPVO>9>F|Dbi?Rgehz>DPCoP%whthC@n7|ZF@;s$g{wIA} zBi5h)Qj)FS{`=_gVC2|;pPp{cf9og~&ATRrIK3Q|<2&bju=h|Wxenw?!rrra_EsLI z*BQx4NMb$2Q68r9gD<{&Pp~{`hsZ#a<{K7|=RiAjt*l>Vc9=?#d{G|8j0wZ={)GsD zU4(s5(*Q*RURi^&4b=#!o_B=gRs05+7UI1n(Q$Y=BpTrSnFY1DQM&fj*4|ic5)vU_ zi{iO0kiO*U9RMHS6+K;1pH*}PBr&IRDNFGmO;WMj7$>>>y8=jU+HF8Bt9t;}`jP?X zwI|joxdwEj8$JPRZ9LN`)}qZMRAtW;ihkq-ir?+Q*Sg@q`?rZwIOzLT`#P+hpx$^@ z4)$TC2!K&EGf9X?iq{4ZbfulNZUxj&%8Xnj%VowbHgoYzjv=3`5x;<0nxah9DHmGQ z(iZ-U3a4N6sfE?h8txSJa#HyTqTd}gJ_z2(g$lfJMY!tUSW6R!mHG?qW<@pU`E}HA zg{Df+v*Tjk+!0fpywS)K-)I$zBCV!pTHCQcExq5x4zcAF#p!i|?WKI7M_}_irjLl=>liC@A-P=yD#_dQ}!{T|%yL}hrp2hz)hw1mx^mPX2-=g#I{bOnbbG?jbG)LLhbpV2& zHEmv?@oW&h{G6jKfw4#qSNy!Xw&T4z=w#e~yE3vXe_epp9eMo9-wE1U6SK7#s?yZJ zhquyyNC^d=1Y-&E$UP?F^x3&*$okWxd4BYq9R0AmPFUtz@y^<9dQa8CVuFmPr`9{a z8H!5DPDz@)i?l}6tOH)p@vi#$=n-rEvZWHu?axps9A;6a+QG90yk{EoTE)nPV71Z{ zBj`}sOWJ8sRZrc%N^5)*P~R5wrNZ)Daa75wjz^94(d>F$XgpI^-(YdbklEBsUqwzq zJ4(#vwMV~Rz=cL_2}j_XK6bx}FR)qy%^g@h+O<7`)r&f(U^T&|{DQTCTDk_S7KV4Q zg>0K5wDS*EJum7aTyFouOIUTe0!Lv9TGJlB7IebdgFeaDP$UnkC`BJ$$#SF>I3|~i z;Pp*b3)0m+*`hX#0^OX2;YpjCSPHR@2_8<6+g~AQ7l(Pv0dvs`j|HsEC zoA|G5DHY$pvAlg!0;A)nN)xO}tXM|yuZixof02%9yD{;a~jN*p>d{^c9@qxQXN&rGfq*93R{9 z{|-looA^I#DHi=#%i9OZSA9J-Dqq6AYOzm^;KE}_B0FNN za=Xc6u&mqJqNHqEx(KobEKvb#OmRE|duCU)<*>+PQvPyMd6<@%TfAo7R;=2LSJ(5S zfd6w6*!#xWX<`)5E?XR@UH2I8!DpDyAMjI{1asxSS?efW`F}dQjWM0PA^AH5qsNOV z$`GaXdE%PRfBTO9=j33M|6@JH;{R34+sln?Mc+?NKB%5YzX!oBIS?DbduyvZ#oQ7S zo1Cc%%z{X@jy)*0a@p7$rHkzkfp#)O7AE z#?pH0e)O}Z(@`$hM=k*J9{;Ry#QCq7f;mt0yY@;$i#fNZl@T=2Ii>Js!%%i=n(fHd z$?+7C88@;T%D-<=NRr6s)rrTz_1~2p_{^t^m&$op{`9!MR+<+%JqiC^@2L7ITGc46 z!PU`Kz8R>!IF1R-PuS5AC&j;kW8`0SPcq@-s74qK!1kT?`@c_)MkBZNg1b~KZLx^f zBB?#B!jXL#fn5QB>lazf+cz)&))j-Z6S*2+oX$-kq-U+1ekZea|C5&X;@_HMZAzb| zt^9YBqL3EmU+jzMPyfHa@7RBhjyC?EYbloeSGec_w&1-;e<=!|t|gcaeP1X1{4qsm zCAObcowYfUU$biE3&=A(EfwZmp4nc#v5y#cpx@nIU2BTzA@~9koJ1(e!GWvKZ|TR; z%W*`asDx((IzX`8*Rb5!OI^zOhu#PWPq=jC|K*3-K>%pd|DPTl+Wh}uw9)^prC9vG z^tSI;04Vp(lav5-@cR-0HZ1=y#Pa(yf9#nDFG&C2z$xm>{{P_U^?I_&>BH6fO!}gQ=#6=hI%8e+Ky^dgeX=~A>TRCsJr?ds zmGJ5w3L8GR6rX!iZ0=j0Y`ArZS8sloeV83Rbi4C9tM8 zZnwC>YDT{B!PfdL7K(irN)!JdIrsmg(dmZ&ucdH;bN%Zj`^x!Z1HRhJ@cVQg4z-Q* zJtP55=V2T1!hyUmS3g-PgmH|xFZWRXsXI?=Bird&^jD?>xZ@dSS1q`d{z7>K>JMw8 zh$!=fmVGy-5q10VIg|5K$AyU$={)uh!RWUP=jd$`qCos+O#L-X9s}*Q{hL+4CQ%vZ zOcUiQCpRS#YH+u7Tqk)OX9o4olh3K)k*2}(5uhZ`9-BQU)eh4=C|w{pbY34y5#EFY z|0JWCY)aQs&;KzEDZZS*4#B=XrGft+j*d_5{C~&CqYeLGN2xz&X zMLWJ3$<|y%Fj4c721=WWQ(Kh6HZo$wIu*lU9<G>!%ARKcL>Zo=Of=$5Q&twwhtB}lQmY!`Zvcgb1b;h$8ImvA zpX`Lq+B1ak2Qt%JD=Aq`y(cq~kYas`mf0uGVUEM0cv~LU+0tbQ<_JJAOYrYA1ST+v zVzeV?zsINbKQj~~NYO4#)7?3VXH&%eHss}jc=8i($VV><^vdHhVQ(JbRgxu7-e1T0#!zczcTr~h<%y9WAyY~TMg`oGct zuce6l|JQ%-i~frp^VI1-Lr7=(ucrQ|rvH0uVgTGk-WYpt@A-W1`CJ}unpwi2x}w1Y z1_F+RMCc}mcjyL%8Oq&^^%)`8bt3-A5F zY0T9a=uiMmCD;)l37?Y57g_lMfM7QO8Omo_LO~GhfQJbVCt!+TLP3UppCOv#_Y&>pI$5m4#0rH;rE+)4y9^%iJY$Yzm>Nw~t z`vxy#ie#^15*fb335<)$>1~B>jW@w#@PGg#;y3{?0p^H10LBmSk?K9$K-lOrdoYJ8 zP1MXqP+i~x0nSCYUVo>A2g}J^CERq2un|BADJtqDB%k2q?imoDV6jsQ_|MKkpl?J= z6>R`&+-4hZ&dz;IQmbHU5UmipYYD2f@FBe+7Z5h?EFsU1{5_u1jT!U|ATn z+j)*TU)}w?7EPgD?>x@JhhiQdjm=VA&HFNo)L@M-&SI1G8Y-aD%C&kt?+&O^ck2t; z3R0ip#M0~8|7v%t&3mgD=Aa5tr{w3q*XUDyev zN&js>hMQtM&_7elAz3IqHY{j{B&OH;iK0W zT{knlc5|b?Lpj7r0D>1NMtPYm!6R*D3`KbAN#o}j23EE*;b=&+P&NGzMxPy1Em#0l zg4*RanfLj3oJ6(-=Wh__uSoU^XOuBTI-Bw|v{%z9iZHB4w@?|eUU72AI&O_}x1|N) zqIh>YUIh0V6tzINS%9{DxSswm>G&s0ll|X`t^e6SJw4sze_cxv`X7{0Ommcks3)Jl zwCvGf98&jFtLQOR8Ew@*0N9Ej4F>sc*vbi@0`#7F-d6sY8Wb^|hXDxYVIF{hv#=MK zQN(0S0}ycQp#TIELi1~wPuQc+zjDG5fPiw9bpV2pXAYUdGyp+_<~VfdXeDW6;7FkA z5}E2-MJIr)VMm%L$FhN__d~FAwF;HKPs=~G8G|6QHY18K<^F68jnmr#;o*$tWZIM= zsbW-ZqPiD*48Zr~Wf9E#vY-b1{%=FnrzD1^AG$y;p|0t(SCsJFbU zhvptT3YXTvEfPCTmix#-_k?2 zt^9XM@tapSE4lwWJaqE^k4{fdHuB#(3K#FB%!m3n1oR1i-`pl-N@hv^Hf2CjQI9_X zL_GQ?W`iqMuc+V+Ugb2CC3Wp|u(*nT0_mGqH*5>}c&yr9yWkDU0iC5O$rxqT%x2ms z6*3VYA<`JCSR*FGG4vZkuXOLkIpX>2%ho>LdWUkac*$DVGtzQyCBt|=_lOHtUu`%a z2aN}9Kx6zF1bcq_8#Z-cKnEXayfTN5(Z5{yD}30i)|Bo20N%fS@%9W{#4&jQB#9pZ zO;L!)IAmWA1$+ED*nD>Tr~;7w%}@!wWiQXp0bjk{uV3}B6>`Byn%i#B`iJXXK8yRO zdG|Hb#`p;MrV%R$xr5XMIUW z<^qg%{>;2)v2sgcl{&KI+{v2h$dY1Ib45)gYa3|evE06NkpFI8|9v&`-^spx|1&y0 z-S~g3rI_+x?}osCE%|Q=v*ACF{CD&E?^W`j+FmP{|3Faszy^i8={JxH%Nh4C73uXF*Mrm1{zm>=N8wa+ZY*w3SHPlEs&>q`x&=1D=yDNU zGlA9HKT-FZO^{#lA%bGDOyegYjh{sGTDvDv<-K(aZEgiF)+PBHDMQwP8z?5@Nm(6Qw(OJlTiCZzA1&pPSZklA*>=8~vp9nfbO<}$*p+@5^% zNUt^^ZvGi_9)ee7mN1zxvN(!{oPhyU&$mX4(SL3L)mQ$n{rwaB{C{|IvdRCvmePR& zuG|c?4^zyD)xad_Xp3nz>tc*)69U&b(CoZFt4y=s?pF#%U&4{Nncw(KZWY%Nop`y< zx0Z7^#a|lef63?Hs~X*Pzzy{O_+Vt`f7(Ai-N^rIDKg-^aO{-dI$v*4EO;NSD~;p)v>yXeYsXSK& z`n{ZZkY_U{GKi-Igu>vJ+uJ&4ih0OSC|pu_flzu$(nqbSk(*GlV|G|r7dS+`8ZJ9`9% z^c(yicXwGjgYCTFhNyVeutKWU1>vsPqS-&U+u>sTz>)^YOh9Rcr0 z?f%{z2fxEod;Ux3;ohfY;kZw#G@SpAMz;QM|Mc*9bN*XPG0uP7@gZj)wIO-29nixW zu!fmgT&(<2e;_RDo$)i=Eu^N+k39LQ*hVmU1TfA~CN8%~1}IFhAiCex>9RzXB9@is zN$oVL0s{@TpH`Ks1Lq$ykKLp^VFrO^bi*ctA~lE>Xl3^~JIl8_T8w9LEYA`}Xdw;! zQnM@EQpY5lg7VN{WN=*eEThlJNC?Ce;OP42(lM|`^DK>mERD0@Us1RTHv17yOBX`p zxT%C(y&Zd2$~2AgZ#oYP`BxXf?eLNObIRd8PVN9sa#G~`Q)Y2VBy8SxG&xy)aEwf_ z^9M}sSo`8ajL;$_C#GB%of1m%ZH$U|SH)ztU1{$+zVQS$y2qn*POsKQ0+~XbxMz$S za0274+gVlYCo?*e2#8g+C6r^Ttzf7IYwkl)NO9}?0)11kVZb;eQ(;nB`h!xG=Qz2e zjP9X?&N5azK@U8(Af_PXJw)JPf)W7rmg3-Qrmbw@blSWxs@B4Gm8^DKt#L)xN$$Bt z9ZeFUf#JZzm4Fw_p06KUAFXRWJFdk-HUj&fv^2~A z?4Y<(`TyW#Waoc4Jv=$w$p7mo9{C^I^8ZbW!k*;+3a!J_x%Vk2(M2+^yyr2+xh^u> zAHF0*n#!{5*{i42G)T|1Op|Agvi0)WT{Q*&^{@zR9pHJK$j-^d^*q?patEu@G6z!hG5+ykV9 zoeh}a96)8@#wkorz=Xt+5G%@_L|ZeJDevM(0>~U?MmREdKfy{bVb1tu1Ov*aTYb_m~3N!*Dn(E@9P~*4t+>q@!0MSyhv8LLQRp zms8@o<>iJOOkAp#lS=%s9p}B&7DMLtYkiFK%37Y=>k1oF5mwFq1bn6drd8?1EGNKN zFd#c9H&QMw$;Tw)>j(6&7G}ufw!~wUJMK#^coOc!vht{(xx`i`ld&%{$N$5=ZhjN0 zzGQ7qd*mTO8J*yiPj?D)%%r79H7Ox@6vG$hOzo$!_XD_yB0$MhD7Qd{?qC+-+*h5)?qHvbs z{84&KpB4Kinq-Yrh{=tO(6t44#_9o4IT(FQ=_gn;0N!OZi+*u3T6 zNc7=nS~P*D5t**gJy>$%TUPs*T{Mj=>zdWEEZzf#FChc0wwX&(Nqd%O2#X7 z=OUL_DFA9r!tG;5MSh+ju$Y==JV;`mFWRY~cX3`*&&!gE=64yHrH0gF5tCs`qT!hS z$m`VsdFQQR40B#rvmVYiXv!Gm6whtROY7tu1iSD2y;O`X?u&~pYOrM+03ld9V>fJ5 z{R?0s7dzmWo9pXW>yuzbaJ%!ZZJNUz?1mtC4g;s*z-lGHB@t$Aazg&*B0-eB8O`=6;{nN-9(|6o zPY*bOVGMR55UAPxk;5pybh))M@CC550N;FUGWIM2u$%gxR&B!)pJEdVAUt@~Zo$3t z5il1Y#_pK^&2jPd>zOl=R^NyX93P_^HmNfA?Wb~2w)}R=2EH$+Vh45pc)Sy^o4>*d zrV|uZ^ZMHJM@y~H@ZaRtaFY2qxozW^qN$a(2H*=fK=?m!8e2E*tT#2|B@PAUdB8f( zsc-awWcM+F5eTdUL!iU({posrrAGhDZ`I^Y+fpjv2L11eoB#jxWRw4YJ;k{H<+(AX zhsSSflgnGwmKtDv(*%ay$#sTOn4waeDm$ixeSyU_uG(;1{ldBgw`cze!KDVG;&Xl@cewU=q zgutOmAP9{BZUv0`3cP1Da2&%sfT@U%#qYy$0xqxieo1f+-Xoe*wjvJ*gfIa-pF}nV z`2^-=pO`9XDSiZZC_x$2Ty<=TMp%C7;>@MWQej?1x`eh!XCbGzTWl=dLop~6eVV!> z5Xe?A^QS(msE(}6v!1(s`h1qQcG8g3uz1}{Gm?`~oOy#uo~Op}6GHi>4E7IBhoj+W zxNp2pNhV$&9UYo4iVF~{esp>D;+^R6^kBGu!aCjCKQU_2d1%%;HEQ{7`qUR@UPD|& z|7L7iXkV@A>r*@j!B#>d^a-bCP%$wR(=L`jD(zy;IXdCvvKe}FaRYc3&oWG0NFro! z??qBwwu_;7Kf6U)f^tMZi4VZG^;8SvT8y;pa2UojnxpJfh@;HzT`lP1y;GFUafr;` zJ=$#D-%vZ>yuwKYcmm&?06a}&G(|}cI8YJFQCLQ%@~`5Rma`WpcNwB|hub4?o>Ew^ zT5gc?1LM!GL@Q;7&_Lwn7|J=a+7!VIlO)|3#}zrYz9+s3_dDcS>;|V z`n8syoq?J_QGfVMs9Ag0tizh?xm~aQ-G?z-yI+GCjB!TupCnCGK^%1y6rmVtj6)QF zA)_wNq_lp{!S=SOq)`;sGvn0kNWs(DHHKK!dUWwuyyF9T?9T-tJU*gT*W-xl(V~=d zQc6(+Ht8mp{TZUAZj@qli*8oP+(pbvn@z}|v-XRdAokAb>(*LtpNrAtPp zV5GlSZW(&#UAq16k+;{x#c8#V{4!fML|OhCCh!hr)o&^`MJaMhiIY06CtmD%Vcp7w zqxtssFpoRXP)3bN#+wgCt~=rCz<-A@Mwckd#ZNXPCbPjDT~RtivXvBgF3YzLneSnu z&EiNxN{QqF0e-N}2|I@YDK%MgCXdrq%jTq5a3h+x6j|h8?L`)gk;~C4B?UDZ4|G<@ zmbPL`DY&S1auw>JO&OlZa_}?-aDnrNeNh3J@L_?yB+ZIbB?kE#(Y*0LBdl|MrsG5fopza zjIVZse>59)wGMh+w`;j!Io**%_Z(*cKypDW3W@yM@fG>|5v7+#WXLHa@~5D`uqaMTdC_dbcGI~QW|kb z5m2$h`eM3us$^07)T-mjd{^0nMXU5r#eCONNnk4jeHz1I4SIih_cQnn$1$fMinDSB z5<6xZ>Z4i4RkNjo?%Cenb9%qlGk}~m)Xh*DLm?f?Y1k5X6-Lgz zPh0m`DdT%Kk1=`u2-h(8`l=Ox_CE85iPr^&*RQv9*U4odZNAT`B7p)(dWVVeGu z#etZy{AIx%_$E`d{)x~$kUN|GW_1Fw5=9-^3*Yhlx16B%ZB*XdvAtfH4}8aW^Xn)z z_y5ZOV@dC?=J@Z&PW-2nF~M8Uc^AZML^{jlV}oIl1zt~Mmb8?#40)4 zHxq5r{C=YFL958$HqP`XhZ+kQJU#L+Xie4yeBVkn0My^Fi8k&ZwIW@ zypew{4N!O!9`@VUM#KXzs#m8o(gS@P1gA7I)d{~5rCYnOa=%f}STbUIi(yo_^NJD7 ztREbwCH5M-H|D$r1@GMADHjap=O0bDQI?2r9!^esE0!b0l_PzxvhSwU(tmk5`bjgX zSV{i>{r%&8JO9)ECjZlViW3r4i=M3vWVv-sM>i0}uMVYQfkxU{U)1npW>tOKo1&&g zElme--kNnMs$1eZe_dtSR8lo#L~;BWwwHIeq#UL@KGy(h3}(Tr8wrXQfkNUyPR7l^ zqQh{mymJrvXU|a!`p=p(vMM@u=s$y_E&Z26u8ILDNX^k| zIRI;7Z~zUh-+%*{kZ(A_pP;m$|H{2-VHVJ+|39?ie;$kuPd57hwUj#gujr;CILiI2 z8!K?U<67JgbRw*{bfBwpSo2;|vR*ZIOc&_+X{~P`PT1p%FUv7YobYE>7AKh0y zYUcp;$a55UUDmEW3uwJ=>D}qXNI}*1OrXYAF}_HZ`PA-4v$CQzIWR1@uZ;F4Zz z4J^_tV-lEhfBBM=y5My|-bjLqt-uH$LlZ2r2@geh5t+`5&eD`*If{m^*}l&NzDIgk zbDj|#Ydc1XjphN^uRKo~XCJjJnvY5g(7xXTQ49Ld7IKyPpM(7aC;tD*CjS3=im<2< zbX5jc#>pKR%ItjHwU}zIr99$3r7Dvf7uCkIM8xF46mXF<0%f`&jkhQ*jX&~k8x z=O_Wnu~9IXVOtJU;l|kB{-|(k2o0cUVITYiKy8nG zs+Ser1(o1hFy-p*Rq23YxVOOE#~Ph9r$ zJgGxh3;M6Z-7m}ln)H98gA<$nA0KY=f3KzV9sj-9EItmP`V{)MB8`Ga?l)@IO8y0$ zj3boIZ1G>cX?+4HyOLKwzv{ylv-Z` zl}M<(26EjswOFd|@|q~W$U%%C%?*r;oF%t5(yKyjeH(VNDNn4_@c#_mVIC!(q$qh(mp_U}MbJj{8Pi<%<=*=N{DwdzoYo&;!gF$S%1II+lh)E5DfX8g@IdGC&58ok1ebMlWUP(ADu0Yb43?|wl)M|m1Im+AZ|nv0+i*INBNrX0 z-%`!5EuPV#y&wRBG9eESt;kx#TQWyl`ud^~Hy7aF+${nk8Uc#fP7N~geesFyio`zr z&pg}}t6?s3ZC;?F&6d~ueB*-LP-^%;%}II@$19KjHab1F{l89*H~zotDJ@jGVjEPd za*gu@tL&V2t1}qaVZo(8o ziYSQjJ)?0Viv}t* zOx4IRig1oe0^_&E5XNmr;f(2qWRl7`A(NYd3Y4d+AzXVDiuxGdbU@WQnvzy{Mlv=0Md2AN~YlwJ509TEY7mgO&RyA38+xo|BkFYc&QnB;m6#*a+S6-|mVKc2_1`fyN{)5Be z&PePD7g9cx=hLXyoUVG;jF)dkf)-9HMMzFUWdLXx_?0~cW8*n^wLb_$fn4ch>wNO) zzmf!({u&jN2uf^F5LYTOwnkYL3AIJ8XW7zAzD#$W4kKSac|{_`gI*$TpXa&mu~xan5iC>YwJh#8jNRp1F;s=v?^bL){Q@Td0zRH##=ZMJj@?%9X~eiwJql640OS z_d!3O_@Y>@4d$I;2@H_ob9Guw{#Vn!L8zX+Z6nBC-Yer+Ea;H2&Mlby4d04#a|mo~ zF-n{=6pa8&36T@tzCmR5hZ zhoOPP8oq9SQZ)T+?Aw$`ZWxnzS4NxvNoL`!hM3xIFEcKQR5ghCA{1evY{JXBUL92_sa#L|?$)56yk_qI$%3F`VW=4a-z#~gzq|F+PUD|5ci!m<7J*PmuAhVaN zxI+*Rd%&H5F*tqzPbf~o6D9G(p#2QU&g*XGHy$t!!35IBqDjd7D579M9w_INOy%-| zN9AJ2u)wRi8R+MGsc+1=_ODy)w7M#a>jU+#)*hLiQ+LiFm@m|1K0qEYjpGn~*a2I? zq?U>F`TuPXaEc}#l)V*9d>dU(t>^y5xds%nSb9L_4V5LWy+w6n^_#P5dwNTIH)h4w zY_lURd|SCEi}5SXQ1!O`M(lww?TnS$FR86=NNM!~pK-6^>IT`4D6h*t_~Lh165Rak|;I!dCu9@>5pc zkaQp}b#4-vxh*Ney>Y@ew``wm^6LMmC_K|Zs_8Ok^(>56`?kB#WIA5avc zIK?npn1Z6JxoH@b-aIZwh^TLVYKj0iOCjbF%^GO2;sOK#V(cw(LceZ_^~ryhG5KYj z;9CU4cX2f9%YO=$Q$-k@Jn*o;Eu((-U}vM$7Q^sUQSZ-6r%Gb+PMJg39WcyN@IX=p zWMBMBa18o8pl=i5C$w8+8+VfBKQ--(&aqWn$K_^~9SpPJ5v9u|NLA{kYXkj0%~Xs3 zv?#bk0Y&rsfNHY;K0VxX?LUrAPB-{(9jOhx(aT`K#5!n1Gi||)%9Kzv!m_FE#gA+|C|J^y%7Cct?Ul38Cb=E$7V*TwZIS-#4 zmrs)V+FJ{Ekl_={2U>w)QA@w3(QS2G_amG{+wOHjWjG?;WFPbu5tzK>{c{xw{*hpZ z)dRr}*FO&IaD~I*C{(XT;7P0ZLICqMxB~)dE6vXxl6ptWs)oX%OJ=mp*n5t4t8Yg7 z+f^~(#bz-_L)^!hMRmlfa^NO2mlgi1BBYd=U)})eNr^}n_Eo=hu+Jt{ALV{xiP1vj}xp`BtZE*ON^B&z+j?<*I!2B6>D0k0xLa z#g3Qu)$4L{ip$40cdGoyHeEr(5z-q3H)H7CQ;g^>8X=0}0I{oB9vU0M;SLFjZ1GWD zm8}tI?%Pk*RcVEQjQNUS+{RFTb6i!amj6#llugiG3==jc>D(6pP5l4#!1e!hba1da z|E(pN{Qtdox|b^ru;5mOuNzCQR=Xpw-WR{Ns;aC`8QfJpg`Ewy{6=0Dw>I7kTsa%Ojfog2TW3 z_M7U^0Ebd>%JaxUHnJM|I6qk)g7xnICo~)r^7!%>7)~%_n8deeiqVtuSkRRdH0}SR z1NZ!YaJ<2P>q)iyU#){d#WJv%Kt&$G7OK8A-y>9%d}T9^s`^FsyZnHeCJ`7Et!&PN zI@Rz0Ai^k4rETx({Qn-7@Ba=CH}Zcisnz~Bmw_$$jSmt4m_IacZ!`NV^Nz$^cL98z z#bJcxuGN3N(%ZTsbKd0d;2#-DQF+f-G?&px=FMnS(Fo5ncm3Ksgvg=(cqPCDKW9|5 zsNL#H`*4em$#TNVxkX|5qQ|Y_x7?$Kw_pO(vChi>{mR2qtzqz+N7uDLXqvY`XzFWW zqtshLs^|YSi_ijrA607N{|B!9@BYc@CjR4kQY-#1mVvFy;=f34F8P0>WxAEWP znNL)r;2KP@iStS&21W*up8$O@uYxD3KVgEur6fzLTalj^X+u7{sP0PfeUVluVkDyh zs%RwtJXafK4lXKX0ZH<_;*ZW!VZ*zhKh^X9>0%fED%JD<{gcCT{KwOi;|>2`M{33Y zD=suzS@$(W{qX3{(^=xt-{*?GA0$!s3-DQjeg-%OKWUP`nu>d2UiT0Iq2{yirrDU# z)O_#gQS5ICQeOQye8e`k+6_Qu)tq`+Q(q)62R=Mcd07hH86x z`2gNCES43$qDK6;X1qL;sR&^md!mc2U{YPP1r}lPZq!3`*YU5VT9_#CRncYBWIr$bMhCfMVCzq#+?l5D}*Ds@QhDpjNQEFyNJMeLTtS^WK~S3|b% zYDGP6?>h{D)y0OG)l8qn3Sq&+h9n&?GMA=z z4I{Xh)hWk=L{)$F>|4q*GgI4{H!E2F%vX#+bswb8Zqbg2T2|ki1$L{cN@(9lQEE;5 zvkE&{J*dBz?%airxWN*ZIf$?cY$suI?M&VLFmy@X=`RXD7x{&jsyp?0*)Yy`zSn^AN_A{>+g zBq#FMx<1udt$`P zxy7cXsKTC?%MUO}`=EdMj|@*?gyOXQi;&lo+8QOsGo+mr}Iq|P79!E#QY4gFmE9y{x`u3*(l7Fj(j z`5H}yG`SjGBNU>r{W`X4oM#<-M}PIp*`a$myoTWrU5-X5NJ|d5k@&fp*O*lp^Fw0J z|M`F3#TRsTo5jsjq?$CVoM(cJ;_DIBCb_B;^RSux$(dGA_ES7TBunp5K;n@32GA3n zTldy3JjXx^PoI*fh!?*<*)^^o4CgDQbar$5s#YP6xwOM^dUDhU{ZT|9|JU|Bi>h7U z`GGVBI8M<6qRTjxIvr~_RxhFyyufiU$ZI@)*d{|`=1HuwMQNNw)_txJF7 zVo`r@Vg0r17`OUw@A7KuPVpj>^;4y>XxZGT`V=a%7(dKisR#IroaNu=Zo-74B8&0E z+?Cp#SeCJW6IBl?4V^2W{x&`%sdnvBS)}RSa~u2)Qi>hWT1eCW@u1huz*sh|9e24d9@;u}uw6lD&o_?i9~_HLf)Sw;nC<|E5E!Rv z!d|_6iQ>T%e#8k1F&q&3@RI-al4l?E0BC@R!IoP+$dxe;Auc z0Q{e70g3<$J+-Rqz^-@k?k>sPRVxxRCgS@!W_kMOB9M|B9gCm&8-nuXftuZjS5DjB z(8_=O(c=UA-(r}5`whGh^3<|<)#F|e=>{~u|L<+1al`h%*p<3!ue&R6SfM zz(pkbcSDrkk|@IQgY=^-B&vU;9bx6mfT4QL#geh znwsAXgd`vqp+2XWPMQ7$e)v9yQ-~utjClR+%G_o20rj`Hl|In?{>r}I=}dxtU}^tc zo(i*)ft?vt-n?`pOZL(rNc_-DipW+?L|Iq#1!`-SpPJ-9N+L3wpm-4g&?Ns)k6r!G z{@(t^|I=EMl>hlGFA)G(D`)KpKuC7xN`3wNU@a)27}a&a1ZTXT6DJ@U1i|(gp@yDU zux~3id|s$^cH5bAQOjQ(h@pP2x>s0&`ow5@udF;NRvededERAWB(_0E8+5d6bkrdK z7ry)Xk7oIQbZ~m&+J7AF?{DP)I+Bp`OTGJfo_ilIg2`y)mEsho6e9+PXhbLyq2lH3 z1ZLuTLMnXitArDI_cKW%B;EHYk4>l%Q6oMfFG>e6V_gv;A zkisZJ5oQzF)C7LOlWgK?(pNdJ8K&YQ!ffc!EGWhG|aD1kQwgsAxtHxX3?aDVhK|5xfpWCphL@ z5vTtHOktEEFv*y(s!a&PqP(&(9e}Hmh>Rnzgm#L1B?e+NMYO0b1Yss=l$I;v`Y4T5 zN6$tnqTi@VdIj$9-}pX&h%X{J6cHXFaZN==0E&Ggx;uufm~8X`1(_JH7wSRvxm-60 z5DLB#i)&l-L9DnDMp4K~XDHpNA`ZZjG%iJ=QPmdP0XXGFQG_2bmrBYUH%rL`rZ|9n z6^4kn9S*<`W4;hn6_~GozUm7aR_x42l58*5CSzzqpao&q4>925qRVn|XDz?k>%@7E;0ibM1Pg?|Sx6b9Vp zi|OzB=T1k1Rb6HpJgX(DH%d6b-mJ@s(r0{GA-uN<@F09!!Z>)%{Al3zV|jsTFOkyi zrL|&=b5yYm`gT3#3qf;L6*a_IxH7e53omH)^^ZS#l?>8pq>5J=H=_r8t`VmhP0lBL zgqLT(RPtLJZq$9tObz%yA>qRAKb!FX>Cth?|L4ixM*p{#B)~qGOH0H52?;&ezXtTr zhxtWT6}(YI`jprpVV|}!#HHv!dns5gN&onxryQ`H1p&!o@eW3?wd!Hy z8?IbvuEP{(tQ>vuO75&G@5v*ITM$xLd|r}h7IQ#-9zn)hj)z-h-lh$)RD%|Hi+BPb z&`lOacin=I+GZ{(#S_u6Q=Q?a6$~s>WEXRc2}`e0%9mz~aWZnxJ4C#So2!eKjon;b zEYi@`&3Vg)u5QlfZHSE_MK_f2Q~I^#D7|45`pV5qggi{BUGxUWkE{g+hBNc8ez$4+KRWN`-ZpIvY0gzDpQ^MWDxsKAoX!^FI)boLO^Xv3lQ4f_u_$vg z>na#i4PWX;YDy9kk%!q`LJsPI2(hhlD*=>_7w5j{#_z!d;K z*UEwyc1$Z&aaqo5-)EXplya9$^h`4fCwF&u1MlaFvE^3>l;6W!_@(^W!E^rdhN(>1 zRju%K(Jx-x_mxMC{sk-y@^NpT_=GYA6PvG>?oK4$%%^1Uw<2c)7Hk6b6_4 zG(+T0@AB}!>wexKiH|t7m;d=YStSQzl$$~Ep@+q!mkzEc^gKx z_42w{VwM+kRZmAjZ8nQ_0VDn*p;L zF2Y0c9fe5@>8vzt+Szug(V9`(NbD~rb&&u01LLj$pjrN(xbpw-=wKuN*OA=!|H}pd zo<;MyBLHugKUxS-Jl0=11SnS71_QLi0R9o%fPhU}R%$Q*=hOZFM+^CXaJc8l|AW(m z&HJCVr2PH=k_G=p@89B8?oxIBR+k-xzxA!8?Jt$A)7M*>btp{zO4WR_+92D?%6qeB z7YwLMcRRpw-xn_#Yre?poi%j>Ap;W~?bo*btiPxR~ z*(ItbqHgW`=_Wdj5=*7C372gU$NE!y`LC?Y=C}Z8JpUgbme2ni`M;J_vj1E%4lryI zzZeZbMV~)f6~Ov#0nCNA(E+s50aOjyMhUPFg?XVf?pwm6Z(J$&#hI_4+nzN?Ezijik@97ujq!!^o|^%N zXG!UB??`#(NO{$mO+$+?$>ziwF^}>bFTVz7acE70T4u#GcqT&Uu{;0rYvJjSXHCb5 zBI$CDA{fp9%DFQGR)VW>Xk;rJ~E_o9(851XPlR@LQ$AZ!t6qHw-k4x@X(jJ(N?!hbn2@DZ^ z`3sDq#XWz?)FA)&4)@&n&&NlHoA;ksg*XN%PU$QmI8H@OKI#2*NON{rEvUtc z8Nev&TW2djGLV^ZjMF|Cw9XHcB%0*~zSPaSf>gc#`G_xv12pXalY>(H_mjQN`=9kB zvH#x?7;?B00VbV2u$Eh1?n)bp|B8YX1Q|=oLq!ivKQQvaeuxGV@8MBNUZihjFs0t9yfZ^r?a)>5qbs$Ln+hATVuaOOY$R;-dOS~^EG#UmWR6m@Ec1u#NJ;TBCvPkh~4QN92h>%N-6 z2Lx`iC{oRI8?}=2!4{nn55j@+&)BUw+uLM|)^1;)op)-14q?!u-pdauqA`rXRh%L^ zf6kbc-hS$)Qt2`dra|V&HOuB7F<-tc4?c7%P0ka!yJ8n3Bpr~U@s!WU8zlAA!f-`V-a|Lcm){$pYUZPDi z-w}%c$pvR5`~;t6DG~gZcI($Tfh`(S?n}i>%vq=UW3yx%sYb#J%xETpnZM4$hmO*~ zQ@%y3PiQzM@!xL5HzqVlXE!(B-@fTGnY?U^j=x6{q6ECR*vT6b2%U6$ZX#-N zm`bE-X-~y#7(8alo#f^75-}8&D1p$OhCB5>xoflfU9-2P&G~+9sq*}fW1KEY0oZW< zKRiA;b@hKI8~dO2BgtL&8cy0u1RgIzww|1pgxThI9=QJ}#y0%Ed@rclgikihh z;Q^|>YC%*OXeX<7^BivX;s$Ls?{LE!Q+@@ z3@xGIqOw+PGZN7yw92cgYVQ_3V3r~Z-X*+ELc6q*?+Ky`52&inY2`hlcr@cxQ+ewc z0$oI^_!5d32NrWQITdvaM}StF@@5hQBt*M1Vi<2vazO41p(zQ&VZ266vC|)oKb+!UnvCKG*^uEvl`=e?knd<^E@X z|LCB6|8u;-f9pt1s7|4w#(P?g%xvBD8_e2W^Qz(rqKxzTI6z&ChDe4<=~jyA=qlZc zDJ5OkVng47y=x^?ukK;NS{5oT)Tve#A0?~XBu^^we|0)|`3pZDtb_mW@0}i$@Ba@s z{y)}|43(aYc+96=J$hjUCL7LLs{`!grNL3QMp+aI|J1MkQiGf1s~(<@4Ri_Xrrou= z6%@bv3)s?7QT$-PdqIVPZ zn0EA|^sj2HZG-iKX3yAjN^J@p^8EY6D$;MLf}%jqQ-h2UdrJ3VpsUnNSw|XCKi{dJ zou>Q7toEHb{vC`cnfwSRQFSMCag&c_#kMhe)y5@(mR0?fW~g6!;a@MkCMbm*ir%hq_sGqD81*eeYRp;pSA(&M7i zQ=MYj-4GHXY8Vl89Na{dpLoW#Rn5ZtQW|H#5g5fa1Ep}_5YJ0iV?GAa#_rOBcPMI&Jt2g8KF9WF&y6T z3}vL~fmqrQ)rYTM7-xoz@sV-E5tSae>$V+~)z>#teJ+28Cr2R)8ZgZz=GXVd4e3zghM$Dd{9t0(2vu^z3?MKiC7Z)UM$S-!~moui_6b336;Cb7SY>zk9KWd zaW%>xqY(;J9z~0s8o3d6_{J)hD0Aium~S%6O{vDdXBMB1! z#OSHWR@%wM9NE5vRQ@6&)e8%Ro*YzdM}tyf$)#)3l;uB+Fp5IA^A*@KUoqCOc)0n+ zYrfq=6sH(QOznsr@PwlXz=#p`761ekh2ow^Zg%lkHwGULMKRTq;&gr~FEu3cP~H?3 z*K=XD6fX@m`oA1rFRBD=wEx+2?SD@9jyL+hwInGX^ApTn0-yNw&-?J-^S;D*>)%3Y zSd=qf=&wp~n0MQFuV4K5Od3SpekV0zt^=vnCFX-`>zG=dJWEwkMdS-d z6RC@p;H{&Qbd-*IHa;XU4t1W!3CVL;%}E;^S1#0fGHNHno{FM_#%x#;+8C$5STM|^ zwQb=pVa1At8$?HhPC#++k&+eI9EgE2oboj`fghwUHbU`3I_Asm;P|kEFgCb>=de{) zL-%DvecnvTA4YXExs>dBqH9w-A9Rk5J5=snh~??9^!ANgxvMI_yFT9HGhE_`GnYVO z1u&lD%vQ*gxejbKpzHIv|cW`jv*#8{t9UpD{KddFmV|3}|<Dcba_?hs(z z0NVjnzN#s>oH}MlOiCa(lXsfv^G8y-Lh^*y>PE+8O9+< zvJ~JH;27B9BS+Z1pRBk;6w!n3Iue&U5lBDW=iwtjx1^pi}r@?Ut{ zSlkAzLH_R@pYFN#U#EMU_g`yCZ3M7#x>ATYEsat%F$Iv$3T&mh&{~VU_VGYEZ@c7$ zgrgXL09;+^&wy9aFR4TS_@lSGyKAN ztu&}N0&Q}LZn=HXoa5!!;9LC$jRTjkXpI5Lyib5^mF+lzCda8*qc+eViDH()iJ_wy zCr~+8di57szpIX53bg4PFHXw4DWVjIh=VHrjhC}Ao6Y|6Rt8q-l1{Gxc?Dg4vxsZM zSgFo4ssjCYVk%{QIa(7_Q?%1gD<#38Eb6_QTH4LjCaoh?^MB_l&jK*8>HhCz|Jc?4 z?4NG@f3GD;JB52}Z}ugeW#X^Lxa z3f+N!{`*3!<4t#ltuDhpma8wl<36o>FIPHze79fa6<@YPQ){h#H>CniHoJ%gpo$nH zU?nG_-Gy5yD-Ml7LBLflir4xnDf9G}Z7B0fFY9f(Koo^Q!rS!Quzk80iQ4(+=XQ%& zga70k=OsJ=ZFv8=e|TDY|9O18(f_R_DgRGms+V@@m;12nhW2!+<)b{)ZeP45ByltY z`+0B*^g;NIYUS5M?~BT?Hhx^GhS)@u>ZjEp$r=nP+ja9-;6^nmZf=DW)mINb%%3Ra zAW=lt>2HG8m`Fs%mBc?)hSs50xgkiWqpMhYwTrKl4V|!jNVH2j z6UZpHAflq85{ej!rbvJZ5h$l@HE-GE72K=Y_|DugF4@~E3XW-r??%G`#+w6ktzjk< zkebmcuXs3RvcD+-Igt&$`D85&Kc-{Tf=3#?;@cn76sPqxH`lqvi~1|r+9!+kb09MJ zNXf8T=ZL0PjAe+rap#O}Z|-Uwr|5w~e@t;59IGO~@TRO?GPlX(xe%!!-Uth3=5k;5 z)CMHCYjms97s}y>9k7)~Ov^&EA8Euqr1B9|1&S~bPClCw4Zj{DGKA3pe-I8m&y^!j zx1@PhT>z1v(uft!{VXD{31BfqAY(Gb$vw@`_1PV`J3o7K+4quE3dojE0H3EE5L9n( zH}J*a0i~^!6Y4V#`<~(3*6-i{%1FHJrCbo`@fsrP*i9q0`&C$e3CN*e_yPP5aGY+} z^!(lM*SzySXzM3C*Ik%?#Vb&5PJW58xCNBXMNf$JxuOq?N*PU@f9RJWT+A^pNf+>< zSP1>DB$O6p2U5JFX+PdoS|tJBg)&)h6AQc4li5w5Q%7HJCSo!nWAS;IUDN(q@y?lJ z0|3w;6X63e@1pp-oUPRJe$A+S3Hzwj>F)a}sNYI+E!*<8GFn;2-m>C4EWE+uumkca z|GlwBs7=-SUlk2x<@(>fgT14Zvi^7T{&y{@{(lYeg1}|dmKd(v2rs>Y36>n{q zBW)X}WV<7)G8W6H(r(WaI2`@M9SLzI*-uEQe43Qsveroxv)q>36@|X4+EjYHx!QHh zdfP6k-=u4ovoMt5zyruiidp|D*`dD(<#d}x<+FF~faOK02(VKk+*N6Bgyol;s^!0W z@N**qsx5>9n(V(14_x_wdV0L^|Gt(~vj4WGeK|JZPH4VrFkoeD2MBC(4On1*aKVAS zxGNxnmB|1K<*K`yi`yNoGaUEO(AtFDNB^qufz?*u+jbWNb7#qHOwCu7s`ZRENdE=yZvJ3LouzE}IBpjOZ#6yL}l-6bf zo`l0LhTk_N1O?$hjbEMdw{N_cXaMe8Y@IA(l5qI>IgM&LO)aOWlNrp$(4*OfLz|ix zv+eLNfOZxbZMM`Jtug8b$%iVsj90Pc%0sh66A-V=`P^*3|Dyr_(G)Jh`$HrCJ32W! zcJ=>9`atxB$lQ$PJGCg_BF&%@s#q^jlmIqhgNp)5RjOqGz(Jy zGfyv8&*5eo$dQqt(}kMFWGnX++Gm;1HrK=_=I^1o%`Tj0bPecoen+KivpsHXsI{}w ze3-jb-`;K}pTrUy^M*KSkLy|(r?mG7>I{NS6#koBMV?47TNy*wBt%y?KD%Fw?>f5} z^tWOXqF-?08jL#iHkjnv}SEIi~$kqeDx$E2LZ)Ld*Eus z)j%uP^Rj)j5l7^HRJKYr_@81zaXJ&xT~~SkcX)E*#(zFNJ=xpf|8*oO^3+rVG1trT z{h=3-;JaN<19sUpXnV~DExoU~4eVq6`c%Fqah;UE*2LCpea(I@Ro`okY&T7>S@bj1 z`8Lc>3h*{UYK_4P;{+Ome#iqfCL6bGK4WE5fXSf%1yKg3LO zP4_Kh9g%W$&J{ee>n=W-oWXej+o7>3iLwc@wEx9BTF(nZ#Z9aF%O*qL>wOc)-o1Sd z&hM_eyp%N844Vwk@2-~NqoZ+bM1WX^iHN$)yEX_I9z6bEY=DX1M}fB@y@2{5#nZ~F z$|Gh+lon4-OEFfBre(hR2hHVVpIh>&Z&NaYLln6yRQ_nJO-{#lo9bX3lT=C#r%vO` zJQZ74ml;E}+-0?f^+zjKZaJI&*xb7R1+$n+v)+(QAdX9UOKYl_Vig2h7VLw8w;lI2 zFlhCVtKC!of|S~q{&l<}9leep7Cot~&{G0dga%ogZOcz)e<^-5sDFmypA1fC9P4}G3z9$wac7Y)* zX7Ifjw!0W6Y)n$meX%<5PD#WwxqgqPPVt(xVjuNnL8c1&R*-J8;>f4ImZ6tY8GMsP zkz5TxlLz?UzLqo@9-k*d`Rw8}-FO9RYg7;0o$q9DPvvNcqoV(i;1&PX zQ)G`(mx=PvLnk)Y%*br=nt57@J|E+)WX1jim3)nlS-`O85&j4e$7LPQIDlC?zC(;l zuEO_ zS4GdaYEUPy<~1Q#si<`h8&lzVuYsEOf@HCCkXir6^U`OQs_*~k5H9Hgu*v@GaNo86 zI@#Ob*nh1hN&io;&(4=+^~IM>#|uDNWcfB;(y~qXy)Hl*7!jJ^UGSFKpq<};u^+lQ z{pUr@OH1+h?sGgE<}G)*rQ|E3_Igsx+4F~m;$$=$hE=#>*Df{;aG~9#f2NjGD=~pu z*Bzx;lI@J0#6Ejo8>g!g2%?Oo=m#7k@Q7w0BuM(=7nhYg05Zl8URtEfHIR}l{u8o``chI2{v%n6mI449{eSJ1-v1sPZtTC- zl1lzRZ~3$@#rvmNK$h`-+2fbYrOD^0BpI+jl;mb?b;Bvm! zE22%o)9k>ioOy{h`c_+AoOkKsR%m>mSj}Sje99yuZ{1ZYSUQD|GnoD- zn5y}I$(8@yqM+&ge|&Q4#(zFM+VKCiBnk8k|L@DP19q2BN1Z^q`0C$)nQrh6A>)$r zJSTXAxGo3zJ5Ibg!L_IQ(x@-8J3%@*QnffvW?3S7 ztBB`c3*2Ox&+pxS)dW-zzCHY3)D=9{fmA6Qc*>ui z33-afyFpJmNA=iK=6QbOAVo=8R9?k6)zT;S1mAfUgxWM+H8^$tIjfzuPN?IXG{Y?qTiEQZ2CyVJnX%jNN6}lV)B&T1(d)pe2E?3uQgwmBH-@x>bJ~iV1vmhW@ zypSHaN&kCrP`dx$J2~9o|8*n_|EsxP@;N}&I^S_1FZ_(B0stiuZC?sFJ7=y_f}V=< zVL^X+&NG9eVUDANUSn;J5IXBebCOU5Z5|waNoX-&vE9&|;u)VEs>>Pj2HbrPsRsWU z-dPq?0yp8mlSB9Z|Md81bN|1VWCyibo(X_lJoC8zw~Ma99KdMLf?K9{qTOe4F>8|6 z32Vu6Exi6)-kFwZE?^F7H>hQl{0vP8>Sv~DR=#9Af_WlueH5ky3!+eKEwqE6b(`;F zclB=){}Fonx24mkkAbW4pY3;UmHNMvBRBs4-u~h72LG)id7R}f4FtNL$2!44xA5wL zpfd^v6s&Z?xK=c1)7J$Ly8i#_5TVo8WrD(LXM)YJ&@TJ=0mH^AYB4=uGCG{w-{(gG z5j(n&T))++?ZdVu4sF=)pR6Xdt4Ga`83ne*e~YLAoABRh>HYWq{^2J6|5}oVc?Nk9 z(B*@`c@%=)8rBU5OX@+-_V_4pVP|EbgFIR&4Lx079ZZ}a~8pWn5+dxNa zxqRCAu~K*TQGiHy$r%5Sq2 zrZ|51K~A~6Y00QGh+7sARO_iD_{&SJ9`H@-M!`USilk>kdv#QHfqklcEzr}0zeI3X zJII|-UR_O}AKa^)u9~U(GC|!ZZF8unxg98~<=fAQj_Sro!-}Q6s8NAsIf-c!l|#;K zEqW6y_l^u-qbZIbJTYwQ&|O|m%~N2`(<0%3%_w=2M$HtvQCP=H7oyK(3LlBWbCax8 zgZ~MAj0g-DKL9k~|Kq*mBNzXl9&YgeT9V+3Kd7l**25pYbh={wyx4O*_Q}_KyGK5G z_HNI6bTR8dp?`ax6NPTR)9FD^RqgRXXIkRqXlP|`ed=NN z26e9lb>|DU73{8D8eJf^)d)w^vI#7`@ROLYNSG>y83Ga){`Yr4#^g^7MJPxKZL14y zRBGz(CM3K|PyiSKI2EBw;yKeEz^&xmR1qdI-v49zf&y%s`m62QFUu=XVLyew?ev`1x;U zq+c^=dheG`W$)GY=7$hdHKr_29H^yo;^k+5OdlM12*aZ z4^ABa4+jUQCma92Ye`})d*^t07T{tf4ZMwXH3hG&YV}Z2Hmsgxzads|Z}*!V#ODE! zE-jtx!NnMZ*P;rb9Tw;g)j~?|5G+&s?_a2$t^!;dO97ZZb&%S1{#wu7bAwh61;k!W zU?80BN^Su1bwDVm=Y=(M~FUv zExp0>PkmXobRsH<;|oV;9~3|Tu7k?fEtwp~<>k770%IXmt$?;M$Bg!ku6-Q18&u1! zPtA6JG1y)?$*qudJAS%mU@aNH0{MKma&#Rsaao^GGQ}aHJDd-Riz@Yl_RT$kX)xyJ zR?N#r5nzuvk?`EpwVD?d5^3n_=ZHK4`UyoN{DJdU7P%ABqHRC&?)t1_MQ4_JB=#x4 zi2brsJYcNq0?6OWd}o8Ix>kQun39NZ2Ium}ze}F!;82h_$I-!c($VVT z$KUU>Zcf&&-S3ve)ihW+~(fr(?WigYvA*_`0;atPwl9Z~TMs&b(_0DbwrUvipdw6;Bmx$q`^W~q|@E2y!^y}wRP{QtP@|K<2# z9b@ILlnSFC|QbG&-?PKzmw~Pu2S%TQU(%8`Ak6u#PNUw44m?n z!e{&eebC1@{;OCtPmqRch2=6%IEu)1O6LNV>;g3|dV#`NQ7e|!1kU(Efq){GMJdN6 zYBdg=f_%{PuD$~QGyb13_-ZQudx!K8z#*9;HNpdPUVQTOqZg=E{6E4hW%~7xV-@}e zvrb2YM*M&3#(y|G*xST^SW9YRZIuha;&tk%FK$FUS0_09umiS+%wUMRNbTzx-cCsi zukUnnE-+-#E?=%fzx*O4cPZsNnYUV2V+)p8kTP&ymzr(pzSL-^%l>ZcZdE?3C^uPX z%-U5Uxo9JOmGxG09$<&WLbfWw&Jm@e5HB$f*SH;%EkblC}K|#MJQv;SlBC>~IW<$(QGe2a#161WqN@ z62a42GyYGqD3VvSU5^1?x>nBromRWa0JreMa=@uj%L4zDZP@PTmYVo~{6G<7iyZ(O z^*{T2F8)6}-thmmq~?3nd;!eC_hsQ4eqYqy2N% z!>!@p@a|12rw0CSoD%1k0nPfKQvBzGqr(mVUq@=<|IPyFE(44Ts^x&wimMKak*A)H zIw4iQtN184`^Bn<$}`zUN7TPDYElX!F>|?sh>gXibCr5X+&T9*8lcsrCjL+8oJt=f zHSqs~gF^@Z@1LG*{C}(`HS&M804f>3{iN=pocEcT_u$_w9-vsJ<3W zn8bN3Pc%g`>d=irSi{pDhA8K~vOOKO$Ya&7XTG10O5dh<+XD)oXK3BKCG{2Txo>sU z8gmD&MhY9<=;vdV(yYp7wO1M&cq6aQ1se7sm{7x8oeMLVyAx_2gO&2yaKhW3uXx8L zyAj~)PYv>4@q(4={|=5y{-5^_Pxd$Re;uhw{u>LR)!9$8&O2GItH@~*Hrr)k&8ES% za^htI3im*xny_Wc%3kE>veEYFr3tKkm#;cx`f@QQq3#*J>f;>#ysF;&l~7${C~a&pw0N-<^P9A z2b=hBYe^mX|3VKyr*#iNs~cL0C|KJA&?*Ou^Gk!}JprxoTB>Ek<_+lQpA`Qej8Qbf z4>6%=`E4}t|Gncw=l$pY!Rg)x|F0$e3EaRmMKl)9L*xnoPh%8=VTPlS^U(wbkMIGp zLGMq}%L~gAd9lmJD2l*CM26CN2aX?h07Vf@@f3jsreouG7>B(-ffzkVCi6miNJOFJ z$p6RoK)xF!u_(z&0tuoZ!Z8~31{Zg~+@*w~-k-p^bi?)j{0@YevfkhUr!U3-O7eSy z;Xmn1@xS_q@xx30Kl)ELjb9cO$%pV@gd@ayUk}(*())Tagpa+i2kC_Wn^64F`}+Uw z{RzB>6qAgBtBXt48zhwcih{H^z#)P!Wp+w_?G2_ZAR&7BDR4%$|KD7lUtZr`uBMIp z{lC9|d~o3G|NZ0Rjs5Rh((8=j7%>L!NJfQ)W`JUb!2V#r*SmofPEd*{>-FRZLSI=I zkN0B)?rDaECmsfF;01R8WFR8( zgZCyC@UJ)(A@DIpK^n~f6GNliNJEoAnsiTRF7a`4&tPNKu@sN&p#w5e#sIQz-m=!8m+LXhkgvB@-gD*{y=%45VXB zLy$n4V#ENBE2@}c5-CUNBk2uIjl-bVJ0FV!+67FJv9S;Kj`w!=_ILO8^Biiw>P&~b zK_uLNy}rB9)%AMc2q$ABLMO64I3!sLV8n&F!~`;{=rt8*!wHI0>E4+S)g2k7PkcS~ zk_bVDq-U-meFY-)0Hgmqr5O_LFWG?5hhFcRq&Psm9$%JKoa}|@a!7)Vx3vRQQ~&r{jdMMtzAgN7`#hR+*5Vvfdb!=Cp1NLM-;Vqm-Ix3rYKIO7qlS)6Br@@rw~VQ z7@=M!{Mo6h9r6S>Vku1J78JC;$)`v6Aw?fj5e|Xkhj9vC1l!7Gm?o}kwcRbF-|*@M{;&69bJb=a8x`+J-(qC z$EhJ^QXnCLP9^7!NxbW9HRZ|Hn)U%_g}G1^+*=ffG4M&K9qBf1heO&4PQ`|f@Psq9 zp55A@*Sj2zP$0GoXYXSKj9r?q-x0}ZItDO~@f1-8X&x$Lgeglwk_{sqM6+JL4nf{u z#S0){2@1F*0lbQwL%1tku3x@1d-WBK#L37EnAa@7NvD$w?-Lp9W*j!C;R=Y(xbPQ2az933IG=M6e1t z8sP{FUV!2hbG9z#8)oU4Q2b96_9$W~iV&3_^5!TSQHWz%amKX3vzKhI$N54)5-u*( zu<)}D=1Wy<0D&t|XqS@{QEVU~5n0bSt~(qI0G25aqQvHB^7N>;H%yWUBi3Vx&t!_C znGgdA2IKnWsF#JYE5!brLOScUtAZjSUP3NK^%M+xy&v^(1|(()4lUx3AIjp=Gf2p{Mfq$rebdSLWyV9n+L}pOrfh5;t*yj;TRy`60w)>Oxc{t1njaJ z2B>`}`U9f~2q4x|Gs^t@n9B&Gs(gbBt|5jT#xo@(gpbgfDeWkT$O8dnRIqdzRi@aJ z47|{AUk=sGICH>;${^#2mLkU2lj1R!db9H|9`pqSHbN0iI$fwTj7vP6?xBmsM?!e9MyZ2WYmlxpOb?@w&qnxul zaCOHe{Ohy3tGj_J^6nOVcX@mH`bThab$9;e?CR|uID7L3{BU-Adv<+)b$JKQt}np( zyX%Xq`>S`?cRRhyzunwk-ra$Bx8UmS&6}&siyd%veg5YAi>vEz!HXZR?!SBY{XKYd z_4exijF;IqYkT)i@9pL7`FCg6_h+xK-dx@PxC6eqy1(W%e)H}YoPnFO+xx5Y@86u= zf}8JeZ{FQq?ttre*SlBO-`rkZe|!1%^7?*gikfpWMX{im zj0&MSL=k!7$lUj}*Sm@ZbHX8_#{M(VPjz24-!!Q1m2sfZ{fn%+n>z(@K~7XkG(OBn z3r0~-9+@Z#aDtH{zI+}}iE!Plcay<{U-f$X18`3iGMVwQD?lyS#Ty^@_|Abv8u8@AHlpfi{=5a5NbZC1wyq+k}ji3ChXe}8;VcM97N@Uz0PKPr`H + 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: data + label: "App Data Storage" + description: "Stores the Application Data." + 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: scaleCert + label: 'Use TrueNAS SCALE Certificate (Deprecated)' + schema: + show_if: [["certificateIssuer", "=", ""]] + type: int + $ref: + - "definitions/certificate" + - 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: scaleCert + label: Use TrueNAS SCALE Certificate (Deprecated) + schema: + show_if: [["certificateIssuer", "=", ""]] + type: int + $ref: + - "definitions/certificate" + - 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: 0 + - variable: runAsGroup + label: "runAsGroup" + description: "The groupID of the user running the application" + schema: + type: int + default: 0 + # 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: 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/dev/ollama/0.0.2/templates/NOTES.txt b/dev/ollama/0.0.2/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/dev/ollama/0.0.2/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/dev/ollama/0.0.2/templates/common.yaml b/dev/ollama/0.0.2/templates/common.yaml new file mode 100644 index 0000000..b51394e --- /dev/null +++ b/dev/ollama/0.0.2/templates/common.yaml @@ -0,0 +1 @@ +{{ include "tc.v1.common.loader.all" . }} diff --git a/dev/ollama/0.0.2/values.yaml b/dev/ollama/0.0.2/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/dev/ollama/app_versions.json b/dev/ollama/app_versions.json new file mode 100644 index 0000000..23ae15f --- /dev/null +++ b/dev/ollama/app_versions.json @@ -0,0 +1,5518 @@ +{ + "0.0.2": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/dev/ollama/0.0.2", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/interface", + "normalize/interfaceConfiguration", + "definitions/gpuConfiguration", + "definitions/timezone", + "definitions/certificate" + ], + "human_version": "0.1.18_0.0.2", + "version": "0.0.2", + "chart_metadata": { + "kubeVersion": ">=1.24.0-0", + "apiVersion": "v2", + "name": "ollama", + "version": "0.0.2", + "appVersion": "0.1.18", + "description": "Get up and running with large language models locally.", + "home": "https://truecharts.org/charts/incubator/ollama", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/ollama.png", + "deprecated": false, + "sources": [ + "https://github.com/truecharts/charts/tree/master/charts/incubator/ollama", + "https://ghcr.io/ollama-webui/ollama-webui", + "https://github.com/jmorganca/ollama", + "https://github.com/ollama-webui/ollama-webui" + ], + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "keywords": [ + "ollama", + "language-models" + ], + "dependencies": [ + { + "name": "common", + "version": "17.2.21", + "repository": "https://library-charts.truecharts.org", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "annotations": { + "max_scale_version": "23.10.2", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "truecharts.org/category": "ai", + "truecharts.org/max_helm_version": "3.13", + "truecharts.org/min_helm_version": "3.12", + "truecharts.org/train": "incubator" + }, + "type": "application" + }, + "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": "Advanced", + "description": "Advanced Configuration" + }, + { + "name": "Postgresql", + "description": "Postgresql" + }, + { + "name": "Documentation", + "description": "Documentation" + } + ], + "portals": { + "open": { + "protocols": [ + "$kubernetes-resource_configmap_tcportal-open_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_tcportal-open_host" + ], + "ports": [ + "$kubernetes-resource_configmap_tcportal-open_port" + ] + } + }, + "questions": [ + { + "variable": "global", + "group": "General Settings", + "label": "Global Settings", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "stopAll", + "label": "Stop All", + "description": "Stops All Running pods and hibernates cnpg", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "workload", + "group": "Workload Settings", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "main", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type (Advanced)", + "schema": { + "type": "string", + "default": "Deployment", + "enum": [ + { + "value": "Deployment", + "description": "Deployment" + }, + { + "value": "DaemonSet", + "description": "DaemonSet" + } + ] + } + }, + { + "variable": "replicas", + "label": "Replicas (Advanced)", + "description": "Set the number of Replicas", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "!=", + "DaemonSet" + ] + ], + "default": 1 + } + }, + { + "variable": "podSpec", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "containers", + "label": "Containers", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "main", + "label": "Main Container", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "envList", + "label": "Extra Environment Variables", + "description": "Please be aware that some variables are set in the background, adding duplicates here might cause issues or prevent the app from starting...", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "envItem", + "label": "Environment Variable", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string" + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + }, + { + "variable": "extraArgs", + "label": "Extra Args", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "arg", + "label": "Arg", + "schema": { + "type": "string" + } + } + ] + } + }, + { + "variable": "advanced", + "label": "Show Advanced Settings", + "description": "Advanced settings are not covered by TrueCharts Support", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "command", + "label": "Command", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "param", + "label": "Param", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "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": 10686, + "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": "data", + "label": "App Data Storage", + "description": "Stores the Application Data.", + "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": "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": "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": "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": "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": 0 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID of the user running the application", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "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": "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": "

Get up and running with large language models locally.

\n

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

\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

Important:\nfor the complete changelog, please refer to the website

\n

ollama-0.0.2 (2024-01-10)

\n

[ollama-0.0.1]ollama-0.0.1 (2024-01-09)

" + } +} \ No newline at end of file diff --git a/dev/ollama/item.yaml b/dev/ollama/item.yaml new file mode 100644 index 0000000..4ca8d60 --- /dev/null +++ b/dev/ollama/item.yaml @@ -0,0 +1,4 @@ +icon_url: https://truecharts.org/img/hotlink-ok/chart-icons/ollama.png +categories: +- ai +screenshots: [] diff --git a/dev/openldap/11.0.14/CHANGELOG.md b/dev/openldap/11.0.14/CHANGELOG.md new file mode 100644 index 0000000..31b9f07 --- /dev/null +++ b/dev/openldap/11.0.14/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + +**Important:** +*for the complete changelog, please refer to the website* + + + +## [openldap-11.0.14](https://github.com/truecharts/charts/compare/openldap-11.0.13...openldap-11.0.14) (2024-01-21) + +### Chore + + + +- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) + + + + +## [openldap-11.0.13](https://github.com/truecharts/charts/compare/openldap-11.0.12...openldap-11.0.13) (2024-01-02) + +### Chore + + + +- force bump to ensure up-to-date catalogs + + +## [openldap-11.0.12](https://github.com/truecharts/charts/compare/openldap-11.0.11...openldap-11.0.12) (2024-01-02) + +### Chore + + + +- bump common ([#16751](https://github.com/truecharts/charts/issues/16751)) + + +## [openldap-11.0.11](https://github.com/truecharts/charts/compare/openldap-11.0.10...openldap-11.0.11) (2024-01-01) + +### Chore + + + +- increase common version for oci fixes + +- remove non-existent template refs ([#16738](https://github.com/truecharts/charts/issues/16738)) + + +## [openldap-11.0.10](https://github.com/truecharts/charts/compare/openldap-11.0.9...openldap-11.0.10) (2024-01-01) + +### Chore + + + +- bump all charts for OCI test push + +- move everything to consume OCI-hosted common-chart dependency + +- standardize ./img references ([#16704](https://github.com/truecharts/charts/issues/16704)) + +- lints some docs, uses front-matter instead of # h1, and fix list items in changelog ([#16589](https://github.com/truecharts/charts/issues/16589)) + +### Fix + + + +- correct mistaken common references + + +## [openldap-11.0.10](https://github.com/truecharts/charts/compare/openldap-11.0.9...openldap-11.0.10) (2024-01-01) + +### Chore + + + +- bump all charts for OCI test push + +- move everything to consume OCI-hosted common-chart dependency + +- standardize ./img references ([#16704](https://github.com/truecharts/charts/issues/16704)) + +- lints some docs, uses front-matter instead of # h1, and fix list items in changelog ([#16589](https://github.com/truecharts/charts/issues/16589)) + +### Fix + + + +- correct mistaken common references +## [openldap-11.0.9](https://github.com/truecharts/charts/compare/openldap-11.0.8...openldap-11.0.9) (2023-12-22) + +### Fix + +- expose custom options for homepage integration + +## [openldap-11.0.8](https://github.com/truecharts/charts/compare/openldap-11.0.7...openldap-11.0.8) (2023-12-21) + +### Fix + diff --git a/dev/openldap/11.0.14/Chart.yaml b/dev/openldap/11.0.14/Chart.yaml new file mode 100644 index 0000000..1777385 --- /dev/null +++ b/dev/openldap/11.0.14/Chart.yaml @@ -0,0 +1,40 @@ +annotations: + max_scale_version: 23.10.2 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: cloud + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.12" + truecharts.org/train: dev +apiVersion: v2 +appVersion: 1.5.0 +dependencies: + - name: common + version: 17.2.21 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: Community developed LDAP software +home: https://truecharts.org/charts/dev/openldap +icon: https://truecharts.org/img/hotlink-ok/chart-icons/openldap.png +keywords: + - ldap + - openldap + - iam-stack + - high availability +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: openldap +sources: + - https://github.com/osixia/docker-openldap + - https://github.com/jp-gouin/helm-openldap + - https://github.com/truecharts/charts/tree/master/charts/dev/openldap + - https://hub.docker.com/r/osixia/openldap +type: application +version: 11.0.14 diff --git a/dev/openldap/11.0.14/README.md b/dev/openldap/11.0.14/README.md new file mode 100644 index 0000000..ca35f6a --- /dev/null +++ b/dev/openldap/11.0.14/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/dev/openldap) + +**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/dev/openldap/11.0.14/app-changelog.md b/dev/openldap/11.0.14/app-changelog.md new file mode 100644 index 0000000..4e74f19 --- /dev/null +++ b/dev/openldap/11.0.14/app-changelog.md @@ -0,0 +1,9 @@ + + +## [openldap-11.0.14](https://github.com/truecharts/charts/compare/openldap-11.0.13...openldap-11.0.14) (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/dev/openldap/11.0.14/app-readme.md b/dev/openldap/11.0.14/app-readme.md new file mode 100644 index 0000000..3fe8962 --- /dev/null +++ b/dev/openldap/11.0.14/app-readme.md @@ -0,0 +1,8 @@ +Community developed LDAP software + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/dev/openldap](https://truecharts.org/charts/dev/openldap) + +--- + +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/dev/openldap/11.0.14/charts/common-17.2.21.tgz b/dev/openldap/11.0.14/charts/common-17.2.21.tgz new file mode 100644 index 0000000000000000000000000000000000000000..247e7e80d51d061dfee4c297c67e8a0e72ae4198 GIT binary patch literal 97582 zcmV)EK)}BriwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PMZ(avQnPFuK2a6)0*`vG#}*zbP?s>Xjv}SMSQQ9#QrtCvQpt zXFw9sa46i(P%V)?nZaRBeNL^_m8JA zX7vS}1>bG{X*3#*UZ*4eZ8RF$e;d7a>$_&B+v)V$okq9+U8C9R^n2fd#uMO@dlJfE z{9WVGZDl+6jXW^IA5ly(2?t=_s=z2RKLf}RWfdP$FUAoQ?|w`|kN*V%Jc?nw0Amt^ z>o`GzfoNq)W@rGWj74;?zdyljnvCimneDSUL7phH52J|gvlyZM8Kexw`|7=9#R~R# zLmC8}Lk447m!J}gVvmFjg-k$A_WQj~qtWknE4OHIM`E82Dm9QcR;g)BYvM(v22?Y* z$q1RQ{`qgOoAqX|-l#SHT$w=}GKfPI3t(slaWDWl9FzZ*0 zML$zP7FQUsMT7<#y~+&X208LX6Jvu)7Z}c z=XiENtp?r(WCQ~snV>QezXlZm#K$3G0Qx@W(;fyuegy#>p@6fy{9^zh1)yYx02%!Ud5i*|fRHdilPDrF18j<^ znw$c_0930L0A`56AQiKjy*(0Y3Tby`TNMmoKNox04#=R zjBm4m)$20A;MLs}g&;)8NB-^_&2ZSKAshvW0ulosQ~5WWA~43EkPl|q_XBhXV_qTz zFbDt+Co!T_^b)<%$GPkrHF-$#I)0V8kj~4G6hSqN<>h z;RrB-6#1M+`n9Q&Q=_cn@x1;At8ZE|-^V*YkA2@t?k(a@J;s=qJkCG%<| zLZL@uS`$5fp}q>KDy-7NvsQe{^0OJy&HhTMx&u?NTw9L%}4}hgfb8j zp8^>AfbZ9GHw8HKg2cz+1bAUI5w(4SsF=I*8v>NU(67OOgh;@s00HzU2nJvb1Bxn@ zF`vcIyFHP_pk}E$L1P>u0C|lVPS9}xDZPL*1lSZRqKyzpI61iB!a4Tx<1ww2vg+l> zV~KzPXE!E>B8tff0lt}6fc$YSHg+xoWXr0_4K8ECh(`hrTfWk7I4_h|yOxcpDzcg5 zAmKvP*<}tdE>KX0LNCQGeI+YLb1z%%3h~iW9gpUo{HLv3 zLnIMWnH(7PTY?Di9EFIQ$%sSDFbqym02f2#ky3b2R8 z_AexbbdBTFnQ!|*NZWvf!J^`>ZWTO(6T~|cqli$y6tZzuOu$dk3vir{VW|qgLBTm5M<4m@74(7{~7D^76ygxmu7T z;vb)#T&Z7l?wMZ|B`|qOjM)Mx02QiUSO7)AW4#IkT|z9(=o2$5VY*P4uZN~g1*CsV z28omKh<>0b9)ND|Abs^VCP`$yL(qR828$~~*pE0sbU_)KS>lD*FE3*}#{rt4Q|iG0 zO65~8L3}o=&%XVZBF`hU=rSf_93aiMQq8(bLe7e6eGs2K7{L(^FvIDF41Iq9{`oKU z%a4iSe!k=!ou60qUi%A|-8dIAB2m}_SZy&dVPpmw_Fxb!Oa}TmJ8l?|->Cz1jmON5?nsKb~G)ot>PTdN!Ki{l)n|fDjuE^*NO(fD~N4e}AnJ zm!jdYcMKzHlSuHw<%hGA;!$5~+<^d)j;Mh7;oZ^j=SKk*5C)*yXtY{J7P%yTIm0UP zpagnEd^v&S2#&Lis9qdTVK_m0#=j3aU%tb12AMaNT$MyofMzIUFc3AU;Sjo@9t-4e zIUlbOB}vS+hLwGeby1FAfM;0mOJ0-=K&R1Y%*4+bnu(R_Kx~#V`ZYn+DcZ~w>^9!v zO2srJZ+Ve-6gb*h;MFPCCSPEZt(1!qGkRu36uXq*H? z#Hghi@IJ}EhN5n&qmqaOWU`R2k4Z>b3~|Ub+KdD!)(WS1L%k{TlK{mRf(UXyiZKz} ziX?^DJR`feg?->_YElt+9_LeBdGbp!x^+xUvDRIS1fAkB)%&tfLVT3%* z7wPhr?ha|Q^2s-@&m8i@ocj>@%Z=M-Hh;kkIphL zda)kJiOTh?-?#!VG;K6T@#1cZVkC?v*yBB@T>sw#@ZtK{nc51xJ+sxT`%i3vou-~U zIg4pnJTW7qmkWJf<8zKFv$lPSzNKE9L52e&<8d!hw(nIt|ST{C$j-~CnSqit;R{|@T}2joP_snlg*+B zHpphteH-)9oK9yCY|lsYeL9`pugx6*F!d-N@V~N+?xd}XLh?mXo8p5FNVmu5I1IS_ zSZ~x@^=5a_ZuJ_vOeDT?S>VsQKu;9-^Byp7`tr@czz$JXN?jfQ8V>k>>a9kjS!;Ca z9+}nACpe1&G*I@mIv0%UbU~Z-PmAAl%^(Q}z@Rav(o%&!u@2aIpKXPA>nvm_9t%NG zuUGkk!gj%kl4Uqz&BMb^tT#mJvRHsGRLGhZ1dY&t|#9M9=@fUj+_6c4ME%#i+B zO-n?O(mN9Ss)YVo&BHj;=w*PJ_XSY1b#m{kHvT7=dR&HId~-dRdu-JVn0qYG|7xk+ z0l;5`aE85FH1}3Piss%jNK2-w)kw{U3=V~I_jK(6kZT2iTO9JSy3{)k`$&RBh~;=@ z20#rt`h+RN;pFn;vG}Ba*F0W&ZNzmo(S{mG&uZ`99n%1#`O^*<0CPc{i*yEDeiTSk z1{wBh;g~)(2C^kHd^6&6ZF5ZZ3odOSK0Wq1dh(YUN707DT>Nb#PiLbSL7vV=k3e3q zH4)O9{3L&vZ;3E3ngzzZFIcB+Vt5H$RFn0 z4mcJd!SV2n?{{KnBO&1OwJyW=dhq#+oK0fOtw~;|A&lshtXxnZKdXkSC2HuQjVaaH zLZe~r32rUhj*u4j_}eOYrDcuXiY;5GBDs%T5xoGmAWy-2St<9esC-&>r?}54;+h7_ zIw={&P{!`1tW4dd9_)Y!d$)juX4up7J$v0ZEktuqZ0}rKQHQP*!~hH!ijlu-pk%O= z?pC?MkdlH_f6l`HAdev*jAJqb!{ej#Q|q|AvIE|Sfpis%(HOFa(7Jkb0 zO%$`nEv;+4EN=Jh<%hKN+sh9c_Qm__(_x)`VwI3EX|tOm=<@~rzs8>ghPPlr5;5#J zqzncD4kzIAXHb{ExWaAW%NH&VK0_Tg|z1|@((x*j9EvSk#q^!-sjIXfXBv& zga0lyKVDekvjdJv7$T30U0l-=G*d@c{~!tQV92*#dB7?#;b@Tvg}ed@5g=pfg+zjY z-0_zI4sR*IA@5`iMlreLTX)6a6T@(V%2BF;v~P9&lGj6_4{Dj;U%pgyKcqY?4>5AI z%(X7R>N9M_-}Byq!D|h{a@MMI{%|nFW3klAI{JeR$AI~X%us3Ph6sTfiRDT6 z4?hS~p3}P@egKexSNwwj`{m1S1%NRj%;LNqa6-I99Ak!qWS6#FRF9( z$Du5?v!j}ojz`iHPXQO>bT`G`6v!1*IQj|Ku@M3j6rvb1I-bFs2GWMnP;8vW! zVc(o;8@r_XJtdTxZzNWKM?!K_Zfv&9rjMq8cE&TMjC+ywMwyROrvowns~q8~>hE6a zRV6$#m8Dl6DdJEsDfNow-cXqY31UfjR_K`Fd2t<+eg5yhDrkH#+Vys?-Y`BG&5qaT zj!og9V9`YK{N6WlE zDj{NYN(ftxq%LW&Y}A|06w8BA+lPMh&^z?tc+}~@aj$*QMeV~wui<&UW^2^&JT&gN zTH|)N-#+NHN277G+4jbbo;Myhmtx5v4#YmR8ckEw@@VPyQjZqTACDWOQLocSZLd4( zcDo0oR=@9~25O9Y&BJcL*Kalb!%p|$pm{ik{Z_xzLoMX_U9aDRt)+N+#8;Z&YD9V2 znk;Nk?bKV1l%(DE=n!>V<8H478wZDI+=Pd%Ugu!cJ?yr|jjq=_XtWxmjt`rDqt$JV zdZ>R0y@Ny8?D~z-@_~mzgu^xHDa%=`**vIsG=|LM~ComDTdUGA@ioIQB(yrjxw-Aqd4~Z z2>Fe}gKqQC^BRZUZvOx_4x6xb*zI=von9CApzlM^L!(i@-Dosgtx>z-jSms(95j{_ z@irMDj|HnyR0T^=Y@%lSz(bvJqto>}<8j;bx*qEG{f5^&?0B6XI_R{!&`0h5;Q?&* zM&7{~9=6Ag-l*v{mQ(R=g4USayp%OzEGBGut=@Rt?I6E1LjED@a4zgO+pT8va0FYe zalhMdHhSHz-#G9(jmF4B<7U_Q8VBP;)bN+j>xfXs*XQE^qi_v0{ZZ`>Vph}jY_GKx zDatb#W9X0Wi?OO!jBu}Y&^;I(G!L7jUa!?}_WXm+L8mc3@DE3A@1WP~cE-(q zw|CHMb`QO7tJjB3@1WQ4``vN-@W5Y+aEyF>Zvu--#mJ(=PP27z*z^uZJ@2qLZZ?~p zw&x!ljJtmG&>y$EtUR5$ar25bdtUbBDL=rvl0W7rw>#;vZ`Z+c4+ zR=!0j{CIf*sFtNXTLG`^fd8dWZiIM&zz7B8uEGV3d6dcrQu+`u7DCoi1%M~WVVovP z$)U>EWchU=a+(z{Os#`v@9?nMXf?Z?R-@Azw>utebvg&519&j<(P0}MpneyMO{#s^ zYK@w3)NgbSoBe|Wgt}{E!08JjLEzQY{sqVAZ31KezVyDsF`Dp-7LA&F%I6F4R2z8r&3$}Y> z*zb)F;RyB)4ttH}XuJ*%_ad@3At3?E#Jwm-WTgC%rzl4C$__Y6JB~g@F!ZJJ zCrzPQpW2wrv5)M)HyIhHbif&0@Uhm=Wm`_{Tsa^+eryS}d`z7cRc8&ausch-Vw$RL zHgWVgUC9P0_}REH0ud^ESg~|R%aEOhOzGep&b69Llx8XX7xg=?KB_833hIvdpHWGz z(u%9ae=ReXH7U7HoK8raxy2XD(R&Bf6s>+DR75WdDuAC*Far$DBEIbF`5Hk=HO(a= zLiv_6zNQXb>H+a!V3o;X$93}*I}XAsEj|vc7r^UU@ z!Av9C8Zu11!|cyXu?XR;6qOttab$HL=)x0jUFfNyCbOknpAWNqTL*6ln*wQA7bZVG zizJKl(T}88G=MH==$ZT$F$%C6Z5cqI0>>y#kRbIK2Rdd^JGCoxYgV%vKCiKWnh7ag z@i`-n5b(%sghSpM=6Gw9dRo{^4eSyLE8ub|tX##kl4-_;CFgs^qJFJ(y5f+biS~rn z4!^N%DE9_^Bnsp**m$(=Hy28Ejmlccfp9*)1 z30leahG*3RkqsFEvgr5Q1WoYW)5l|uq1F-aoxZ6c$5mNkVvs|}fM#43J={Rv_N zhc+&N4C$2Hb+xDlpTJt+tBEpFw%J$~R~PSrVf?_i#?TawIT@Awx>bfgVd>5G=qQiEo9H_y%z_IU!V_ zEDZO>BI1b%IIgsbBiw|yAvRi)Fb*1f$Q;zEL>mc3APED`)eDkqGwOgwB3L@V_?-k{jYQ0*85+#M3rTX>}2H4keV}K9j+pEjtD_(35{B(VNss6k^ zHh-ND)n6Y@ING8_e z6HiS=sSoEcS0yhD8ac%krCM%ioSO;;ElvWp@bS^&lyuZ~+rXnEf256s*Gq#WvtUQi zyG5ZdM7rq@bUl1Z|FhoPgHuR#;OJfQ zxkGp|WjYT7$ZG2z3FSPotR<#XIP}QO?p;0g=Q6W74IUNsP)2SS3c9m7YpH@O`;MBe zAGLGuS1J+lPcV%Wu>`$IwD3|8EtOf*lpm?Kw}5k<(kb;ZlCM(5NxuD=%M|j@k46y5 z7;jRu%nXM|bBF_ugeLI}e)^@7_ zIzV)>Jcvrg33pY#p6)y0HL2rTlnbTf<(qZ#W-#kbx#hEV9(7Z$g=ru9K&qA{ffNdN!5Cw>LQClG{7sr+qe? zAs<7giwMVO9pA1T`*y&kLB)uRZ=iRZL_^vCb0S?{UeVpUwSdf$fZ-@WmbggR6vY6^ z!~(DAu3m3PMc@Dp#M;YI;8Knjr{*X?G2sG~@JgIF>%Dy#;TmUbx-UVgkqH#2{YqgA z#_u!LNrjf9HDX~jQ#Sw5+O;GwJ^VnoqE>!|fxX@{!UYO&HdfhNI8ZK8Mp7j4_e_(p z9JtEkB>7Ysg$!m@B@$NaMxm$|cUrMi@wdv3*-bP?3dh(Xgyw@XWOb#wJrR5qYp^nf zooe0o?j9xHEn4Dr!!n36j%mTy_G(2c8hRYfV^ z%5l@M9@wK_hWoT_ebhdWQNjQYMFK>w z&4X8bGl62z@i?7auU`XrNB3zvjYxoZ)CyY!nD65Lg!<#jRQ$*KChQ&lc;b&UpLU!n zq)-rq7%glPXV!s~jqJ6+2FG=Mq4TP&5Y%o!u&wNVLhV_}@iZf585uMgYQ;zQb+P^n z|6VvE^K^mc%aD(RZy!fWt8V)`iUf=?3VgY33IE&dx+I&icGw-h$xf`8*Bt<8`$rOc zh)bnIwg`~(=|db?zi(&sXS6u;2R1mV$jC%I>HF&`0%s>?Xp)hUNiM0|xX;mD(n|L_0#f2jkm4qhGo#y4aV28&$_cdLwpv1(5TC!`;uWE5b} z?Xj)Ry*<86PdjC8y_lLKq0%XB`6yVZWT468^RZ)p5o@(dg#xgcerzGa3lJ0(=t zsli3FJvDN|>4jn+=~b6X(@ToLIDnHn_>shVc~+H<$!sRh9q=vE3#p>96mv&tFY`Vi z6Po&EL*JJsumDa#t)>yL@qX4=Kx=XfOff0!+Mu#iCM$k)BC8%REY1tzJxp430|ZlX zvA7LOUd)Pz|FzdySsQ4uSpiYMmzJ}Uuuw91i*kZYPAIL{>m{fahUArtbs4>IEm<$y zt5q`I?`)$iCT$&nS6Ud^Kl0}=^z5j@jclLGoA}!IRPoZ@Q^gAyVU?G3V3*2mmE!%9 zty0dY3~T0fulw(rXJhS0$ZNxZ5={yU{_Rq-gfnEJy3?tD%VDKlX3y=)@+`k#R~8>| z=*21_pY@g&PW2r%AGxqT;7a@(wd<idF3{zcqau@#4v-gy zB>5w?A^9jkwz2HWwhdugXd27dm?|^GV(ihChSVZ|L!CrWi%>HXVn*UU5D{PfZJ8gd zZYk}w;#+oj?GI%cXsNNYs^b_G`i@6PO$BYutYqRM3~LU90q7coH1%Q_>BPwP2iIv# z`e7+^u+x7sLu`r?dX=OpR|{PPCMtL4=P%aDJRd-5-gkT{c0hnB6N@gNc+NL@_+Wcd zST#7c)Fl8)c9Lfta}32QC!??5emFA+oMet-u4+%URGe=yJtoVxy#vmRTa}#!3DrVQqQ_&@Dv1Z&Q40WpC7W5WV%*pW>8FIL+l( zbLOrBx{$}NL8!0PNC}TQWs=aB zk?Q)!4dtM*3Yxw!qXe4vo?8=Ix;B*oOiQc_(+f!AhmhepszsABxNfPnVWXJUX41>B z6tY#ua&O^cp}fgQv7?&iT*;oJ7zTWdYb2y~UX&VtVJ*EOU)fy+N8h4Fc~k-PedQRr zqGjV3^YQXRHD3p3Y>lQl=xpOw5I3Jik?q!D$8_+<_{Lf<@XXMX+8$8x#Ctl}W)GNP z6~6x1A+pjjNro@++5C$s2;($x9r?gVQH(qh)1B__y2(n4?X?D87M&wY7E@n-Gr0h8 zI3}s%QUR2ro49oQ)?cH5jP|*xAWZ|e2XsG9!aAL*qg_=l^<3ao#}zV$p5u^T_kIG0L)E(;|eQFeoEPXkK4+wP4?WTjt=74-(j6Q?%hGTcq!Hr`FxnjDf$rq+;V+(fOkURA4yM?nDQFvik>%jl-kB&rVwrGK6_ zltrPYUnc9koJ`^f%1v`IHhq)9VODDUF`nqVvg9^Cx1`z~U^3f&#Rwbwof%~%b8?Xr zg>&=Xb`ez`qG`VtDmRQgy$cqqYYS^R5(Z|O&Ini*5j~z#!KV(lErpsyvPudP0LM8< z>J$oaWo@`VxeN1<`P=2NU4J^|6@!06z8FGh>Pb=<3utQAl7=-gc6EzNKjHvoIDg%S zNWgd0Oj8bnaX!g1)^%po?1Ux49|HM+A|aR{l^tlu9TdJnT9nj__(J(WHNU2oIo2xk1IF!T{B9Hd7 z7nVg(O%qvE<=tmAJwHglaajEG$IFW%Cn@7WC$w}4-bx2%i5j7=*L6|q76-xb4l{3R z?R4mqGSEoJNP2U2Iq#TBUi7u6+??{VoW9;OFU?t5Ih0f<`Y*3*;%q}VCgr7c%=z$g zxgg9VlwOLWyaMDUAUTVKB|9R{wF|x`;+TYdJ++o6|1oR4#U>A0>aF@u zyW%^byVmq4aM=R83jf8 zECWFS`&K$Gc$wHdyVp!zEDL1dv~c#va}>%GQy4`Ogyr_Z--`u1f>V>44abyOd@0SZ z?|3Qc`6%%^!6IX;-k!7ZmFWb8=0rNxKe8)BJ!=oNq;i(Ky-u;by(#P4+(^uXt`pCo z6(HoK_|GpF}(RN ziWf$c2OWlRNiAXWP?rPI=Zt)0rkHcGT=QqdmsRx3Oo|2TI9HxR2$=|Gv}LjT@mAEu zz?Fh|P_8+jAj)F0P{_)gh7G<<7+NMs@Y$VtEwZ-C%=*e^mnzvuZ-(#BKU|-l{{x(y z4zI619ABS(loz{+P}(b1F~g30BIs57_~P=duoR9UMRi~t>BaJC9P@tw|JDhgehvPe zd5Nj@hT$0!<^+HAZ_7-T*49Yq8B50C(tK1tMtgb(HdF|q2!Wv96wOfDT7V|dTj=KH z4bH+jTjmKA8)fR>qHaK!gJ!NnmoPM1YQGTd!f`Vsw`ns=uL%`sh%05qjk5m+HM6Pk zQgv`F4lAh`QxbzD^2JYEs}N(LdRkAR#zJA3Ob@8gzWO@s^uyNWqxbR_bFPPeL-j39)G$Q6EMj6?q4eJKJ zbyK5x_YSeC)a_-?W3eGxzNb09li+ag=0QJ_ztEP5elYo zj=%_^FdZv-H|{tI_@*yl__n@Hg;9X7A>fr-=yrifFQ_=<@(z(`R+vD)ParB&12i)e{)O0id* zsJpmQ)oDw}2X-R^t94aH?cACegtIpc>{LMRlkd4Es-KRb)x6!f@xxNR)8Difjbg4d zl{76TX38%v-uC2D0pikoKvS0yeYoWiMDL(Q+@(2a;M7Pt>{?{IQ48>&K|m%TKywuA z6{i@N_Kg8RaZKVpa0g?q2kgm1F+;gM;GfEa-usJWKF4Zg*!e{ zXZe8`Ys>37UGs)WUHeW4`}^)0u=2W1jX3*CzTAfqzA@qN`#bg(0>`<{(n*S7FGu1w zVqsg82cGhDMV)p!o)N-UAd|TxFyy1aH*#qYl@r>8xM-k#^#kd+fd9S@vkxU_Hq;)$=?jHWnIWSp}H^*pN zsxM-)R2{Hb>-?HKJ9p+3@OOy!!C;{Pg%*tNk}x<9W5qMOGh*L<)O=CbL&l1f!c#a7#JLyI`No z6uGzmSEgu;pua0%i9UiKuin4oYMHn+irny};f4uo(_h^FTb`)tOU?`mr|btHR5LC& zgX;Owo73}ZK>;@s+zwpwjrynl$X2h(4lHT*?a_y~rz;yh=7SEVm;r0hcYwBuq^^Qk zopwwKMbb{h7m!p{)@eKS^@gh1opj-n9^VGC6mnC2)7TA+A!jB^SeD%%z`v#L%oTG5 zh^yeXHm~(?@lM4Ty}CTRzS4(i$lnDQ){&}8#3ghi%PMBxnbZ|^8xN`8-w5@74Qxg* zp25&H3S_Zz;5(**WevY7NZd zYf(O(036x?RI3~d4j6~v>c``DyL|}ciG^i&$cN4gPgQ}5=w2H5#EB-mBKTbmh#o8X z(_FP~T96AR7>a=|W_dM$7p||(P9~wH2{ST&MA~qsUCo_jG3i_xw$n|Rw(EbD0WW{6 z!x{XIgz%2mJu)+%R0@{55(MmkbHvpkag#2mKUCrN(pe^3JeBIK&43phD=Bv4n#Nhw%}6^2l;vk={31UZr99_&_y;A zp*3y;Fbc@Xe8J%q#hCpVlbIO(qmxWTgB-Ud9V{T|drT~h-_DpG~Q^SEjD}V zP)6zDkx-Fp;<#X>jYD$dELn`UE6(p@#Ytlj{WoesDc0nCh=WBg~ z@np&zjUW@(s3RL!)|24fu*U(QC>T4%u+HX`&r%BjO=yHd*9m|#C*yrj!v?GEhHnX0 zHSkW_San#9S`)Rs_+Wk&> zoU=R)#R~Ma)Q}ncbR)A!-0&4*0IJPKqfxa=sP*xN<9B0@p>&DWM~|sB#<+CYf&Vb{ zK@ta)Yd29MuGdpn1gaPdtdO;pvj+{JFNtA_OT*D!f z(NaBnn2&cz7*aW!K3ts-b?%YW5tMJBCvUj2k|Hi92_7Trrc%!#qVA40-PTJ|p&X;A zp>B`5KRr~%LW<;^g;inErRw@5gHKE{MFM%n(*sB#E3QcbS@`QDffr!!c1jZAy>L$| zq;=OLL|Xpqqy;5Ge19tNT7~`RAC8I0Vc%3grT^Vg!lrzN>a+pXP}uTv^x`$XPD-7- zakA2LOq_3`C?Jb8y{&{vAvoa%4lgA$-QktIIQdNj>-@F zU%pg6f3B&ti=fK9`n*|}yjT~_)$IVAnkxRi>tPQDulb&g!?Xk*o2$?z99p-T*R3wE z+Aae8`kqkiTf#H9t>^2jMaVS2{{uLR_&S~Q6L&%mbnrkxpihAyp+Y__Hh67@XE{yl zrcM>q!GDG6SzNZB(u9*Tg=}9-{=LaDH+T&uh^53bAF>2>s^9Q>l-JYc>k;vX5%N;B zs2gIH!z6PryMQ}|^ioVTMyje zHF#A_<^YfC3B!RN<0^RNV=q-~Tr&rcpbgw{-1IxTgEdv|&&tkuUnqm;raV|f=+)tx8Rr4vU5 zR1}cVrCoVzYE-H&#f#{j!pKeucV4;;+;4<*h|Ibpq+?wQM@W5KXM}XSMYMIm6mJ-^ z3hxu8$qcEh6i4!QHtT{zqSC^M&{sQdPW887xZFi&A3HT6Fwd_740Tc!WCI_;eP*KD-6`rmUrQvb_}PT6pD<*|fA zieiTR`)Y8uw!x>L8B2(gYMV|76RfBPd25M5A)X8Jn{=YxtRov4fk%LP4M$Wdy! zY^JN%MHXW7OV}rXDx4|w<;%c%Da-yB{F)GE>eK+@(v-E8jUf&|RbBR{6V7me`x1c8 zFrj8%QT%arjg3v%D3=n#6jcPg-2>mx1^Lnr-|?Vc4i{N+nUrd~)vmN(B!@)|Y4 zRYjo1$7-#{xwp#yd=&FnRZFD+(qsqVzs9Yjx?j!q_N7=!e;w}r=*@ri{@?8N zv-^Le+wN}n|L1s~aR1jVw0!qhNo4r8Q3LxU9PW#(gEdg|#6L7ZC;~Vf;}EmOYGJ|N zPKx$*bD&kY1bopPo{x_T5?E2qnw6^R2 zb39+|`JZOHd!GK4PwbaEbSv5hzt$tSl;}$j+_q-5-_29D{?DUOi2gFa{=?V)?^dt> zjc%jmuK&$`r_ok zUR^a`Pa-LFB~hJD2jIUov!wAQG{m9L<-bl=E?Nt=Pwqkqo&R+&_`jb;Z|VG3Y4VRB zX#rR<|J#k6{@-kD_5bI2%=}kly&>J7&oc#ax%!_`wN)LVXd7L>#IcLFp^X5Syr`Va zwq1bNWJE|=_Iz%c`D`@MrPc&X`+A&VVNJ`yy)6Z{y`kGXc#Q2p|9jBFr@tJXpPNC{FK*s{xPJ5g!^O$X@WY#n z)9ax!?qs26%@t;D*^o6$sAkJeGJ*i%Jhc|_39ROF(M+~?{?%qL1^q=VUbTCgytric z5Np?R+G<;qPN2OWiGNqJ&-Pg%|EarRo?8CvciTDnZ>#@3&+~-xpW>c-$$zTOA6)*k zPL7^hj@#t^o7+bVKx(GYw>>Q_WHRpw$R95+ZjL@&|0H(WSE-Qm7e^+1Y+Jjaa8q4h zgvHUk6D$)u3Z+ZEU)${zinqCDUIQo%+3BmbAXwXZX`@8_=RG6PJ3U=N()$rWki7Q@nioiqTUq@{W%acTl}qJ68HxWm1!kPrD-N1@Po|%vU<7gUtHlT4hdYNd!F|dK1+=8FHOR4`dK>v z&E=zy(*Re@|4z4`_5WzLTaE4fe~!n@|Lg2Uvm4L=4gcIr2dtWE%HQtyrw6)Dj|q+U z#f@9S{n3zWLk4q4Z$#Xor?Hb47%|~96+`b9 zhm(5c7c4?R%^jrfcYXitpBaF`9bC}LZAk8PdSe(xGLAG6`ESJ?U~(S%!tJWUanRSk z>gaBjsZI#O!Z#~GP~J%bgCs_3qN?+n>*0;nbCn_PdU!K@fBZB5y+4QXew>6w7liwD zO1xWD{`%vH)$f_dxEDLg7{pS6}@u?KIm$Iw5x!aY)uZK4uhNoA<%cHfR zq)eZMa&&xrdU<_waxq*78FOKHUMnb-(bMYXmwg*_%!$fR*VmUfmsjuq{*RmUv*GpW zg$%sO+aT6%UEXSLS`vEO@X=7!)#wK7$?5R==Irv(aP14$4RFqp!|shfQ+#9->4og3 zfz!WVUme{XUA@(WDO6nVN1*KO@20WqqqFnj@zMF|$y2neF4j*Oolm--PybOwwyny& zzRIl~!5t&YJzT+y+x_}9m!jtT!y4X- z3ZQaXG$8eFYo*CwNBy}hR#WaNj{CS?;P_G}BliDfH|nK>zGQBc#6(cvuxBr_PVt@A;#mx=CH(-GQDNjW7{RI2Dd z%DN{p;~J_HG(3+&5jU)>%X_S=yj-;c6GkpkJi{WFv72~TslVQo+=b?syj4~D@J&*O zz89I+DLpqbufdoEK8iO#y(Qdd*hucnDgrNCD%=!1e058E$^+7zViXiL==U8`Q@_Yw zCygUeYW=U@Z*{ZhzwPEW|L?OrW%0j!L3xq5U%kv}*_0R4 zR}NK6my=qW2DVt9RU$~b*th|}^C--pe5aS&(oB9jRc1xxuYC|+5b>Lyl!6Ou}B)E;7!^e3L#T2hS zA1`NkxSX!4;Qa_|m~HvWkb=H1X;W@40J08oSLrp&XeXuq)ufZQ`h5P2aFYbJPS#lF;SeYiQ-m0^e<$15sua?G8cp|2y0Bfk%PSH^kt@?ctgDuO{ zagS^r^?ao@b94v+sj%_SMJaz%Rjg_$)oYP({|E5n+27xtruP+2FqZi2q*PE=WOD+{(|@Y}d0v+^SbC$`60P!7X$|`Z|Z#9;Am1vWjPT zqFGW9)AMzb@!_+?vUxlS2@U+;9T8W^6Zc($vU^IgWpTBPk$N%V`-mA9s!Jse2mHN+ z4O3G%O;t-kEg@~0;qe~&|5E#pVbv$~|7~~j@t^I^*8l%mo+pg|EL`YTdjFbQf6N$A zdDN57=dsF376t*iyNvN12WWy$`6{9=M>pSGu;mJZ^-3L&i%GE}t?V{_^6QA7{MMhG{O1Lb z(v78l6weCzuhnlgvgd!D{`UOuSstNe9h>8hV?O#oNqGDV3<4RAqB(@`>Ln_aU>*CE zM%`CddV^Q`L%7^jRKWq@0xAC?q)_xpT+b^kh7s^#E9w30 zypa66u$XgeJ1=X!D6AlYSw%_yS78y3lZZ)4QIsJnxx(O;G>5@pSIXGsLUxYQmZtr^ zqN4Cq*MD0ZYf3y(!ut8;OQlw;RbYfaay69;kMm~b7Ki>ovB*0ZRc44m-yuEU3{o(9 zlW_Z9$}|BU)iubvsZhW>x+`TY7vW|JW$#ctLEx2*xhj!*_i-F{ zm)&D$Fo!{KE^1qtrbdI^-E36HIxyu?{4!Dmx=H!RF5lB)JX5_^Twk8jw9se9=J_SG zvWq>CU`Hv4XQdi++O>XV=w~kn>k#qF7Zcqsl+Gvsuat;kQ_dIboz-7Q`cQVSYrf|4 z?(q+pf+>pSo#(y}APCVN2>7yKbn%A@DW&^=Ov3+=(I(t~R>pty+u8ijy=K3+-T$BC zk-L0M!v9T18`=FO-#p9SFN(_Fa{rZUQ7W?%U70Z_@~QgL_ZYVT8N~@H z-SYX9F0uNk&YrL7v*w)8=Xu3*!+}`-Y+wd$u%(Fjx}^uv{3&pv>fmBs#I6?+s)A}n z{HlI+A+M>n#*R)&EMD&x%_^4_o^4gqkG(qCh}aXX*#ZTqx))TZ@7Gt!hT<{w&?Q`bV{m3&&~0qn$wU*|wlT47Yhv5BF~P*PZA@(2 zcAn?v{p!|Nw{BJcIKNKqsy_Sd?$v9peMd-_7y7j_$~jTcYO5%fkG)R#n7lz@+qGQ_r8q zb>R_qBH)io7zx7&p_jBOVDgMBs^HTY9sZ%WJDD5f=p}A*atuyUgLr3$t$w^O1L3ph<4Uc(`&Y%&vc-y4 z54G+F_PLYq!q33Syz{DYMx_FX zPk(&}6_EPw-ES)eWE0ss3ryYiWG2Bdl<3*s#Nszn7Zjc);0uI-+H7M`lh zG~BD%a{%@OzWi%Nvk8*I&zo`C6tRH`W3m7lreZoM8$7Ui1+9stxOAsgqY=)MA1xFtk zs-^LGA`TM$wFR!$YKLFB#f~OuVa7$Q5>G8j)(GtyHLRpKo9FC)bO@KwXMaC zpccHeVH&cJ!c6|R7Asggqfrs=-5zpSFsQ&%-imwrGWBFKJt}EwIeGqXLMR7SMf0J! zDBSzk98)hx#KiLNmvHZiLm+kJoddZkQyV!zX&_=u_MPno=#JO^nV)<744D1S4?t12 z4O^M52t*mApGqnrp;yeUC52iH%-eERWPDC_Vv|XtFB;W!td?9=w~_&k&`ALtlxUbq zzeBf-pH-4$Z&+- z$W$%Mf;?Gx}4cRQ91h3t`PO<8l>^ZQXW+ND2@K8389PpoaAr9%T&>07_@j~SmF2vdmQBo+-R zQ}rr?j9S{z=ij@;v{iz+DX*U*u3@vBq;i53zIie}HCh6{f@*7r&%HxOX#5=mqks4_ zmW8#U>NQmBHv5khI-owNjV~tKR7;9rq1VL9#3%DGSsb4EIQMP1^siHjmEa=P{=zUs zRxT@j+OF7EP2DZqmpSvURMt@wp&Q8)H{hGu_4Ik$10Mth$j1y(MDb&=a0z#Kvy;@e zc8R2r*M~3e6IJGys{|AWV^bW*+U{D$8FLA%lR++Ohl($Qme$eU%*6~v%Rie_k_Z%w z+U(xH#iy*eZk5RaM)yK4#%B|N)oZ8C&L_a?5f0!*Bj3P)KP9v`dYb<*r$OdP@A+;P zhu=bYtj^2X=7M;d?YsFkw}vtQa#_u)n{~E-2`kn8Qoj`Y@CxR6D7^vv69)(Z3tMC= z)qd8TY}RjU7|=>pd9CF-da&xH8nW+^Y-MCgn5Z05^*4Djr|ocp_w}%+2dZ{xZ;}PZ ztGF@p#Af-*rdLi0CM-s5mkI`?v}?gz*X{+S4m60yj65pApc+I#9t(z9PslMkgZW&X zCfuwhU4Nhlc2GFC)d>S)iQxRm^e;K_Rtj??hwcRpiRe%aE+i<(jytLgJ=!5*ou$V8@x(7}MCJUT(I9!3KQwc~A31hoYEqS}n3r#*_q= zo6&6pLk#IgaJR@jCpKiKs;iCDrjqKE{P_z|q%(y9yePk$HS2)P2MNrumRK zSKMc+Oi2q&y?S9s$Bk@gALLtk$d{sb<d4)cabX)K#@yJY+Yf6{DLs{B0+N zMR23yRUnpa*G1YXuTkP`{EO6vi$fhBw8a@vXgGr}TP7(b?FUV+o2C>B%EM>;7>g}f6YmM7PfHtignIHZ-)iWG` z2T!8Hi*6m3)$Csg>C6k0+h|=?CzFgw`f4t@ogo_iR6Y70YSn6-NQ~9~H?k4w@mCUT z=S3-L00b3)MGR#IOQ_Ftn}?QSFC@LzUiVT;Yu0_E^@MxU&EMs;RB_$znY^CU`I<(@ z_NI~yZTIO;yVsBqdvhzPN0e5d6^XatN}NmP z8$7Y@0b>6;(5iDnwHOBYOM_j~=dl4b8n-UY5B%SA%`G~Cf}>>nz#T3nz;X|HxIu1n zEoOb~DRQwyskdM+{Rwz=KYJu50P;nccM&0kcs@>qeOoRPO?o(M#*9C!v4&-i&)J=A_XiTew-9URdGCg3i#Y2jO(l z;h6Qk`LEcL7-)3E88#0HknNuyaDvGLmaYk6u{^Aah$>Xw4p%C6i%6=F5uNY8IBAZ; z@y&e%OZQg|6wbKUGwx|8nou_{Mu|=y$w2 zu6h>bzxU-DptV#SPS~neqNmB>q(3did#Ihs43wo`6Iar`H#T2lqw7(wglOzDQk}88 z(E1mH1hj~~_@Kxcsx(@UI|7u{4 zQuH8)?#0?xg-MCDqV9U7G?hRqH*J|xZ{~SrDSV4UurwKVi$p#((N?r0n{xJW*;=`4 z1NWZ`nTTRaPk%fZU1XL+#xgc$#0WOrL^td$HxTVQ3w;Uk*WCm^2yZO#1#iX$%uWPR zqo_;2>uoaFq_saa0a}>AH3#!AfBfm?W#EAp(cV9&Ox#QPHXpHv^ry?V&$dlpQ9pxG zNzt?z<8SAKNa1=qt8S2(h%V^&M><)>y-ECo_8J=C% zpRX}Xm@re&cJ)9?>y6&{ynP9suR_Eox3lfi(d3(IZOapplb^bl)UfEQMss$d^?*-c^4v8h8N^X&%df9?+?piCQ{5-Hs z8*)h}q^KyyZ_-HOp~JgSv19kW`QJe9=CkqVv=?YUj8_J|DgT5N!cXh0Gg$iAugr2! zvs#IUu1=vyZ8&{OV$HqJ(7bReUr8TcL``nYKkXW=6?`*|40`SXmwL@}FB?aymDsFF zA#!1LRPCF7$+A>pMY=3MphfiE$xtidgOw_BxYsiE%Q9^|{^>N;b*&D6poOKB#XsS8 ziCg^eCN@ApQ>%Vd& zP)W)iU9rU*(CCYjs7H z3Lp0DQK#Wk1B>8s%(?ioL<#!7zdgmQFB*CEsj-A%uADZSbTzi@S`S~0-7@4KQ>1%c zx}jkz9_*ytvbtyrs0gdSouoe(xUt%u>a&dh8=6*Bc_2!Vl9q%2r zzwoL`bqGTWn|3$qr@P#`!0dg>1dy4M*&N;o%5VM^DABn!bqu_5$I}7UT6h+J86dXc ze8g%3>;f2VA6k{PjIL&}^d@I+)U{_1uahiHu2m}%F!WO4l{g@b?EI;rWk&2K?Dkwe zyO*LspGwCRgNil)3|H)@*<4t^U?!=X_>ouhp!qI515h@c7esg}HCHw!5u-FBj6=+o zM&Qmm)Y>6gUMBAxP7aZVv+hEdmb5^~rQGFT?@RW{&WAOHX4tKL8#g*h`T#8bE*R>q zMW&TsKkDA`3J`V{?tx_}xR{yJaw>VS*qmiwJXK3WRQX(%VOf}ahbymp%_NSCUB zciVm>FPpXCTs%fI^ciI7Ks_#lQ)#E@()M(w%L&n|zRy=iO<_Y5ep8oe*rFH*+sV7!MUAC}aC3G=w1`4P85_5Z%|XXY zd&*#VPkhPbhPgJ)tJQTreSz`%C-`aPsJ#J(XXu>nt9Itzu-SHxml^umivX#PmH!{b z@=w8+ybHjJ!k^qH;AxAF4lv%r6Yju29z4P#8y1YAL-0=PPe8mzC@66)F*IFN8pMhp z-^}m=7!&qk7nPX2AG-U>{v347>Qm*?7Q1m^{0baY3s^74_B~?4u^(=zE_7|21V*Us z6_eo&?0&$)?zUtI7=Gh(M1o-~&Mw9j|6oAxFqb}ab1$rp7YE8W`?po%X(v`GH@aty zx{Ap!i0Qy#Fr;^zaF}N|0p99y&mH4L1gUlZiTIj28F+xYnE_TO0=RM8So&B+NA%x`M>6AsX+H@Mdo60uQ2T8Yzm`&6ufw0+0I6!ruh2xW1E2JC~=@?qH z0-C=Q{y8XhDOm-N^P%%YEEDc#uzl&tT5o&}kg6*c-KpxmW>!xd3B<8a?(HDd=1o+c z!vCCHCP(lI-nnxAE)9Nqjf)Ray~@Ttwk-JaZsmJ+B!lP`GBYBPeSRCPHJNU!fp|RH zcN=@*Mw)k1MEvJ$`1{b495y;BnC~~ecCBmZC9#$-!xB(xfavVmED!VDp!eUk*;B86 zZ|@Q??*R1$sJEd_w402k1VSBPc({o$#y&thgL5t+1h094%5Ax!G+Tq6{F++ET4nVFsL0j`*q#Y7_o-KoQjR44 zwG&9DuIFwV<`hUarS!|oZ?4XE#(9NXKT=^aWN>B$C`KZ21o5a{5Zwz4V#{CRu+k{| zOo0xflu&|1E51?O>lbAtYD>XcTF6lKfmx?`_`{^3sb6&9vgYOn-Z`FUo0bdhWg5u@ zG7c%YUl6YxLt#BD0zpRjk-g6ZUSmoV?w_KrJ zEiNlc4>7v@y_Xl8m5COq(O|#d6;qXdFG1e9=pWdw+1+==^zz5FT)*K^`=Y`;h`Lbj zx5xmyAmK3sweC5u*0HpmAD5eOIxRi&G#-xd4OVE+u~Dbb)_Y5eKVmk`J;R=Qb9S0b zrB)|=ad=5rtL;BVV^RhXI-A63JQ0}$_nuH=?>{!7zfNAp?>sR%Y<<$ z@6luIiOxaqXI}4EbrQmWF48JEKHFYQ^pR)JAr*6A;aD_r;{BSZ`Wvu?xBb&0R^8nO z=ou$@S}V%DntcnBVEfP@021Yz?gd(GwtNRJCEF-otbOQz)Qer_uFzXMaatv_%^TTR z`cbMPE!DPveAaLC%a^#{09|!@h~VCLiU%GgrQD0k+#`m6ECJuqYS0IgTzebUMqU~_1F8u9R z9J|59i7=}FMOr8Sn@>x!;>uS3!qrcyhlN|U0P4vqv351lb=*ht&e1GNM?=tRZy6Uy zXU&K|3r!wgx?Jb3zfMb<9h3yF!Wdl~cDYSYvFM{{1x-USFfZ1QYU{pAVmp4^&@hu= z;-)GR$naPlvCv<-Ju#UF_^BX8-ZX_(XL>g8O?MugJTFbQxjNm|!O?2{W^nyB^xo==_nuhB zP~S=}M+_2c#^fEvA75wh@6LbY=NhQ@#Xv>0-rPmjLYsbJ`^EnjP){aUK5uIflAy^w z&--MRh4Kv1aH%#gG9?V{l3k=V$fS?4TQD~l0Vm%$<1UxBpi;U8I|d!vRCuhUAG)p&v8;JK)q)|;4+cIRgn=Z%Mba` zAVD9`%C|^ge%k>c3-v+|Yv9!QrO2?EcXnJ6ko7#Ok*u#*4_zT>*w9_w zwZIt7a#D9t)T3lBTw_g5nO&2i-d(7#HGi1@+M3>fpTr17D$0nW5@5GSy?g1)7&0zH z)ep5u|EBnMhp9M9ia=?0N&P8$b9A{*wh06q${usm(OY8t*296U4p?$NOwuz_tlA

4-ZVO1Vc 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 H07eV| + 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: slapd + label: "App slapd Storage" + description: "Stores the Application slapd." + 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: 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: 0 + - variable: runAsGroup + label: "runAsGroup" + description: "The groupID of the user running the application" + schema: + type: int + default: 0 + # 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: 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/dev/openldap/11.0.14/templates/_configmap.tpl b/dev/openldap/11.0.14/templates/_configmap.tpl new file mode 100644 index 0000000..bbab445 --- /dev/null +++ b/dev/openldap/11.0.14/templates/_configmap.tpl @@ -0,0 +1,17 @@ +{{/* Define the configmap */}} +{{- define "openldap.configmap" -}} + +enabled: true +data: + LDAP_TLS_CRT_FILENAME: "tls.crt" + LDAP_TLS_KEY_FILENAME: "tls.key" + LDAP_TLS_DH_PARAM_FILENAME: "dhparam.pem" + LDAP_TLS_CA_CRT_FILENAME: "ca.crt" +{{- if .Values.replication.enabled }} + LDAP_REPLICATION: "true" + LDAP_REPLICATION_CONFIG_SYNCPROV: "binddn=\"cn=admin,cn=config\" bindmethod=simple credentials=$LDAP_CONFIG_PASSWORD searchbase=\"cn=config\" type=refreshAndPersist retry=\"{{.Values.replication.retry }} +\" timeout={{.Values.replication.timeout }} starttls={{.Values.replication.starttls }} tls_reqcert={{.Values.replication.tls_reqcert }}" + LDAP_REPLICATION_DB_SYNCPROV: "binddn=\"cn=admin,$LDAP_BASE_DN\" bindmethod=simple credentials=$LDAP_ADMIN_PASSWORD searchbase=\"$LDAP_BASE_DN\" type=refreshAndPersist interval={{.Values.replication.interval }} retry=\"{{.Values.replication.retry }} +\" timeout={{.Values.replication.timeout }} starttls={{.Values.replication.starttls }} tls_reqcert={{.Values.replication.tls_reqcert }}" + LDAP_REPLICATION_HOSTS: "#PYTHON2BASH:[{{ template "replicalist" . }}]" +{{- end }} + +{{- end -}} diff --git a/dev/openldap/11.0.14/templates/common.yaml b/dev/openldap/11.0.14/templates/common.yaml new file mode 100644 index 0000000..ad31acb --- /dev/null +++ b/dev/openldap/11.0.14/templates/common.yaml @@ -0,0 +1,8 @@ +{{/* Make sure all variables are set properly */}} +{{- include "tc.v1.common.loader.init" . }} + +{{/* Render the templates */}} +{{ include "tc.v1.common.loader.apply" . }} + +{{/* Render configmap for openldap */}} +{{- include "openldap.configmap" . }} diff --git a/dev/openldap/11.0.14/values.yaml b/dev/openldap/11.0.14/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/dev/openldap/app_versions.json b/dev/openldap/app_versions.json new file mode 100644 index 0000000..2550936 --- /dev/null +++ b/dev/openldap/app_versions.json @@ -0,0 +1,4769 @@ +{ + "11.0.14": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/dev/openldap/11.0.14", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/interface", + "normalize/interfaceConfiguration", + "definitions/gpuConfiguration", + "definitions/timezone", + "definitions/certificate" + ], + "human_version": "1.5.0_11.0.14", + "version": "11.0.14", + "chart_metadata": { + "annotations": { + "max_scale_version": "23.10.2", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "truecharts.org/category": "cloud", + "truecharts.org/max_helm_version": "3.14", + "truecharts.org/min_helm_version": "3.12", + "truecharts.org/train": "dev" + }, + "apiVersion": "v2", + "appVersion": "1.5.0", + "dependencies": [ + { + "name": "common", + "version": "17.2.21", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "Community developed LDAP software", + "home": "https://truecharts.org/charts/dev/openldap", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/openldap.png", + "keywords": [ + "ldap", + "openldap", + "iam-stack", + "high availability" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "openldap", + "sources": [ + "https://github.com/osixia/docker-openldap", + "https://github.com/jp-gouin/helm-openldap", + "https://github.com/truecharts/charts/tree/master/charts/dev/openldap", + "https://hub.docker.com/r/osixia/openldap" + ], + "type": "application", + "version": "11.0.14" + }, + "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": "Advanced", + "description": "Advanced Configuration" + }, + { + "name": "Postgresql", + "description": "Postgresql" + }, + { + "name": "Documentation", + "description": "Documentation" + } + ], + "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": "LDAP_READONLY_USER_USERNAME", + "label": "LDAP_READONLY_USER_USERNAME", + "schema": { + "type": "string", + "required": true, + "default": "readonly" + } + }, + { + "variable": "LDAP_READONLY_USER_PASSWORD", + "label": "LDAP_READONLY_USER_PASSWORD", + "schema": { + "type": "string", + "required": true, + "private": true, + "default": "REPLACETHIS" + } + }, + { + "variable": "LDAP_ADMIN_PASSWORD", + "label": "LDAP_ADMIN_PASSWORD", + "schema": { + "type": "string", + "required": true, + "private": true, + "default": "REPLACETHIS" + } + }, + { + "variable": "LDAP_CONFIG_PASSWORD", + "label": "LDAP_CONFIG_PASSWORD", + "schema": { + "type": "string", + "required": true, + "private": true, + "default": "REPLACETHIS" + } + }, + { + "variable": "LDAP_LOG_LEVEL", + "label": "LDAP_LOG_LEVEL", + "schema": { + "type": "int", + "required": true, + "default": 256 + } + }, + { + "variable": "LDAP_ORGANISATION", + "label": "LDAP_ORGANISATION", + "schema": { + "type": "string", + "required": true, + "default": "Example Company or Household" + } + }, + { + "variable": "LDAP_DOMAIN", + "label": "LDAP_DOMAIN", + "schema": { + "type": "string", + "required": true, + "default": "example.org" + } + }, + { + "variable": "LDAP_READONLY_USER", + "label": "LDAP_READONLY_USER", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "LDAP_RFC2307BIS_SCHEMA", + "label": "LDAP_RFC2307BIS_SCHEMA", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "LDAP_BACKEND", + "label": "LDAP_BACKEND", + "schema": { + "type": "string", + "required": true, + "default": "mdb" + } + }, + { + "variable": "LDAP_TLS", + "label": "LDAP_TLS", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "LDAP_TLS_ENFORCE", + "label": "LDAP_TLS_ENFORCE", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "LDAP_TLS_VERIFY_CLIENT", + "label": "LDAP_TLS_VERIFY_CLIENT", + "schema": { + "type": "string", + "required": true, + "default": "never" + } + }, + { + "variable": "LDAP_TLS_PROTOCOL_MIN", + "label": "LDAP_TLS_PROTOCOL_MIN", + "schema": { + "type": "string", + "required": true, + "default": "3.0" + } + }, + { + "variable": "LDAP_TLS_CIPHER_SUITE", + "label": "LDAP_TLS_CIPHER_SUITE", + "schema": { + "type": "string", + "required": true, + "default": "NORMAL" + } + }, + { + "variable": "LDAP_TLS_REQCERT", + "label": "LDAP_TLS_REQCERT", + "schema": { + "type": "string", + "required": true, + "default": "never" + } + }, + { + "variable": "CONTAINER_LOG_LEVEL", + "label": "CONTAINER_LOG_LEVEL", + "schema": { + "type": "int", + "required": true, + "default": 4 + } + }, + { + "variable": "KEEP_EXISTING_CONFIG", + "label": "KEEP_EXISTING_CONFIG", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "LDAP_REMOVE_CONFIG_AFTER_SETUP", + "label": "LDAP_REMOVE_CONFIG_AFTER_SETUP", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "LDAP_SSL_HELPER_PREFIX", + "label": "LDAP_SSL_HELPER_PREFIX", + "schema": { + "type": "string", + "required": true, + "default": "ldap" + } + }, + { + "variable": "LDAP_BASE_DN", + "label": "LDAP_BASE_DN", + "schema": { + "type": "string", + "required": true, + "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": 389, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "ldaps", + "label": "ldaps Service", + "description": "The ldaps service", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable the Service", + "schema": { + "type": "boolean", + "default": true, + "hidden": true + } + }, + { + "variable": "type", + "label": "Service Type", + "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", + "schema": { + "type": "string", + "default": "LoadBalancer", + "enum": [ + { + "value": "LoadBalancer", + "description": "LoadBalancer (Expose Ports)" + }, + { + "value": "ClusterIP", + "description": "ClusterIP (Do Not Expose Ports)" + } + ] + } + }, + { + "variable": "loadBalancerIP", + "label": "LoadBalancer IP", + "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", + "schema": { + "show_if": [ + [ + "type", + "=", + "LoadBalancer" + ] + ], + "type": "string", + "default": "" + } + }, + { + "variable": "ports", + "label": "Service's Port(s) Configuration", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "ldaps", + "label": "ldaps 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": 636, + "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": "volumeClaimTemplates", + "label": "Integrated Persistent Storage", + "description": "Integrated Persistent Storage", + "group": "Storage and Persistence", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "data", + "label": "App Data Storage", + "description": "Stores the Application Data.", + "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": "slapd", + "label": "App slapd Storage", + "description": "Stores the Application slapd.", + "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": "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": 0 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID of the user running the application", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "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": "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": "

Community developed LDAP software

\n

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

\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

Important:\nfor the complete changelog, please refer to the website

\n

openldap-11.0.14 (2024-01-21)

\n

Chore

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

openldap-11.0.13 (2024-01-02)

\n

Chore

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

openldap-11.0.12 (2024-01-02)

\n

Chore

\n\n

openldap-11.0.11 (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
\n

openldap-11.0.10 (2024-01-01)

\n

Chore

\n
    \n
  • \n

    bump all charts for OCI test push

    \n
  • \n
  • \n

    move everything to consume OCI-hosted common-chart dependency

    \n
  • \n
  • \n

    standardize ./img references (#16704)

    \n
  • \n
  • \n

    lints some docs, uses front-matter instead of # h1, and fix list items in changelog (#16589)

    \n
  • \n
\n

Fix

\n
    \n
  • correct mistaken common references
  • \n
\n

openldap-11.0.10 (2024-01-01)

\n

Chore

\n
    \n
  • \n

    bump all charts for OCI test push

    \n
  • \n
  • \n

    move everything to consume OCI-hosted common-chart dependency

    \n
  • \n
  • \n

    standardize ./img references (#16704)

    \n
  • \n
  • \n

    lints some docs, uses front-matter instead of # h1, and fix list items in changelog (#16589)

    \n
  • \n
\n

Fix

\n
    \n
  • correct mistaken common references
  • \n
\n

openldap-11.0.9 (2023-12-22)

\n

Fix

\n
    \n
  • expose custom options for homepage integration
  • \n
\n

openldap-11.0.8 (2023-12-21)

\n

Fix

" + } +} \ No newline at end of file diff --git a/dev/openldap/item.yaml b/dev/openldap/item.yaml new file mode 100644 index 0000000..f2efb82 --- /dev/null +++ b/dev/openldap/item.yaml @@ -0,0 +1,4 @@ +icon_url: https://truecharts.org/img/hotlink-ok/chart-icons/openldap.png +categories: +- cloud +screenshots: [] diff --git a/dev/postgresql/15.0.17/CHANGELOG.md b/dev/postgresql/15.0.17/CHANGELOG.md new file mode 100644 index 0000000..8bc745c --- /dev/null +++ b/dev/postgresql/15.0.17/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + +**Important:** +*for the complete changelog, please refer to the website* + + + +## [postgresql-15.0.17](https://github.com/truecharts/charts/compare/postgresql-15.0.15...postgresql-15.0.17) (2024-01-21) + +### Fix + + + +- fix key ([#17458](https://github.com/truecharts/charts/issues/17458)) + + +## [postgresql-15.0.15](https://github.com/truecharts/charts/compare/postgresql-15.0.14...postgresql-15.0.15) (2024-01-21) + +### Chore + + + +- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) + + + + +## [postgresql-15.0.14](https://github.com/truecharts/charts/compare/postgresql-15.0.13...postgresql-15.0.14) (2024-01-02) + +### Chore + + + +- force bump to ensure up-to-date catalogs + + +## [postgresql-15.0.13](https://github.com/truecharts/charts/compare/postgresql-15.0.12...postgresql-15.0.13) (2024-01-02) + +### Chore + + + +- bump common ([#16751](https://github.com/truecharts/charts/issues/16751)) + + +## [postgresql-15.0.12](https://github.com/truecharts/charts/compare/postgresql-15.0.11...postgresql-15.0.12) (2024-01-01) + +### Chore + + + +- increase common version for oci fixes + +- remove non-existent template refs ([#16738](https://github.com/truecharts/charts/issues/16738)) + + +## [postgresql-15.0.11](https://github.com/truecharts/charts/compare/postgresql-15.0.10...postgresql-15.0.11) (2024-01-01) + +### Chore + + + +- bump all charts for OCI test push + +- move everything to consume OCI-hosted common-chart dependency + +- standardize ./img references ([#16704](https://github.com/truecharts/charts/issues/16704)) + +- lints some docs, uses front-matter instead of # h1, and fix list items in changelog ([#16589](https://github.com/truecharts/charts/issues/16589)) + +### Fix + + + +- correct mistaken common references + + +## [postgresql-15.0.11](https://github.com/truecharts/charts/compare/postgresql-15.0.10...postgresql-15.0.11) (2024-01-01) + +### Chore + + + +- bump all charts for OCI test push + +- move everything to consume OCI-hosted common-chart dependency + +- standardize ./img references ([#16704](https://github.com/truecharts/charts/issues/16704)) + +- lints some docs, uses front-matter instead of # h1, and fix list items in changelog ([#16589](https://github.com/truecharts/charts/issues/16589)) + +### Fix + + + +- correct mistaken common references +## [postgresql-15.0.10](https://github.com/truecharts/charts/compare/postgresql-15.0.9...postgresql-15.0.10) (2023-12-22) diff --git a/dev/postgresql/15.0.17/Chart.yaml b/dev/postgresql/15.0.17/Chart.yaml new file mode 100644 index 0000000..d4a6639 --- /dev/null +++ b/dev/postgresql/15.0.17/Chart.yaml @@ -0,0 +1,39 @@ +annotations: + max_scale_version: 23.10.2 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: database + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.12" + truecharts.org/train: dev +apiVersion: v2 +appVersion: 14.10.0 +dependencies: + - name: common + version: 17.2.21 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: PostgresSQL +home: https://truecharts.org/charts/dev/postgresql +icon: https://truecharts.org/img/hotlink-ok/chart-icons/postgresql.png +keywords: + - postgres + - postgressql + - dtabase + - sql +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: postgresql +sources: + - https://www.postgresql.org/ + - https://github.com/truecharts/charts/tree/master/charts/dev/postgresql + - https://hub.docker.com/r/bitnami/postgresql +type: application +version: 15.0.17 diff --git a/dev/postgresql/15.0.17/README.md b/dev/postgresql/15.0.17/README.md new file mode 100644 index 0000000..a47eba5 --- /dev/null +++ b/dev/postgresql/15.0.17/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/dev/postgresql) + +**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/dev/postgresql/15.0.17/app-changelog.md b/dev/postgresql/15.0.17/app-changelog.md new file mode 100644 index 0000000..5f6550e --- /dev/null +++ b/dev/postgresql/15.0.17/app-changelog.md @@ -0,0 +1,9 @@ + + +## [postgresql-15.0.17](https://github.com/truecharts/charts/compare/postgresql-15.0.15...postgresql-15.0.17) (2024-01-21) + +### Fix + + + +- fix key ([#17458](https://github.com/truecharts/charts/issues/17458)) \ No newline at end of file diff --git a/dev/postgresql/15.0.17/app-readme.md b/dev/postgresql/15.0.17/app-readme.md new file mode 100644 index 0000000..027e44a --- /dev/null +++ b/dev/postgresql/15.0.17/app-readme.md @@ -0,0 +1,8 @@ +PostgresSQL + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/dev/postgresql](https://truecharts.org/charts/dev/postgresql) + +--- + +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/dev/postgresql/15.0.17/charts/common-17.2.21.tgz b/dev/postgresql/15.0.17/charts/common-17.2.21.tgz new file mode 100644 index 0000000000000000000000000000000000000000..247e7e80d51d061dfee4c297c67e8a0e72ae4198 GIT binary patch literal 97582 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

4-ZVO1Vc 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 H07eV|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/dev/postgresql/15.0.17/templates/NOTES.txt b/dev/postgresql/15.0.17/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/dev/postgresql/15.0.17/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/dev/postgresql/15.0.17/templates/common.yaml b/dev/postgresql/15.0.17/templates/common.yaml new file mode 100644 index 0000000..992373e --- /dev/null +++ b/dev/postgresql/15.0.17/templates/common.yaml @@ -0,0 +1,2 @@ + +{{ include "tc.v1.common.loader.all" . }} diff --git a/dev/postgresql/15.0.17/values.yaml b/dev/postgresql/15.0.17/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/dev/postgresql/app_versions.json b/dev/postgresql/app_versions.json new file mode 100644 index 0000000..057932b --- /dev/null +++ b/dev/postgresql/app_versions.json @@ -0,0 +1,1032 @@ +{ + "15.0.17": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/dev/postgresql/15.0.17", + "last_update": "2024-03-25 06:34:24", + "required_features": [], + "human_version": "14.10.0_15.0.17", + "version": "15.0.17", + "chart_metadata": { + "annotations": { + "max_scale_version": "23.10.2", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "truecharts.org/category": "database", + "truecharts.org/max_helm_version": "3.14", + "truecharts.org/min_helm_version": "3.12", + "truecharts.org/train": "dev" + }, + "apiVersion": "v2", + "appVersion": "14.10.0", + "dependencies": [ + { + "name": "common", + "version": "17.2.21", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "PostgresSQL", + "home": "https://truecharts.org/charts/dev/postgresql", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/postgresql.png", + "keywords": [ + "postgres", + "postgressql", + "dtabase", + "sql" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "postgresql", + "sources": [ + "https://www.postgresql.org/", + "https://github.com/truecharts/charts/tree/master/charts/dev/postgresql", + "https://hub.docker.com/r/bitnami/postgresql" + ], + "type": "application", + "version": "15.0.17" + }, + "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": "Advanced", + "description": "Advanced Configuration" + }, + { + "name": "Postgresql", + "description": "Postgresql" + }, + { + "name": "Documentation", + "description": "Documentation" + } + ], + "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": "cnpg", + "group": "Postgresql", + "label": "CloudNative-PG (CNPG)", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "main", + "label": "Main Postgresql Database", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "hibernate", + "label": "Hibernate", + "description": "enable to safely hibernate and shutdown the postgresql cluster", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "mode", + "label": "Mode", + "description": "Cluster mode of operation. Available modes: standalone - default mode. Creates new or updates an existing CNPG cluster. recovery - Same as standalone but creates a cluster from a backup, object store or via pg_basebackup replica - Creates a replica cluster from an existing CNPG cluster. # TODO.", + "schema": { + "type": "string", + "default": "standalone", + "enum": [ + { + "value": "standalone", + "description": "standalone" + }, + { + "value": "replica", + "description": "replica" + }, + { + "value": "recovery", + "description": "recovery" + } + ] + } + }, + { + "variable": "cluster", + "label": "Cluster Settings", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "instances", + "label": "Instances", + "schema": { + "type": "int", + "default": 1 + } + }, + { + "variable": "singleNode", + "label": "singleNode", + "schema": { + "type": "boolean", + "default": true, + "hidden": true + } + }, + { + "variable": "storage", + "label": "Storage", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "size", + "label": "Size", + "schema": { + "type": "string", + "default": "256Gi" + } + } + ] + } + }, + { + "variable": "walStorage", + "label": "WAL Storage", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "size", + "label": "Size", + "schema": { + "type": "string", + "default": "256Gi" + } + } + ] + } + } + ] + } + }, + { + "variable": "monitoring", + "label": "Monitoring Settings", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enablePodMonitor", + "label": "enablePodMonitor", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "disableDefaultQueries", + "label": "disableDefaultQueries", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "pooler", + "label": "Pooler Settings", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "instances", + "label": "Instances", + "schema": { + "type": "int", + "default": 1 + } + }, + { + "variable": "createRO", + "label": "Create ReadOnly Instance", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "recovery", + "label": "Recovery Settings (Experimental)", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "enabled", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "endpointURL", + "label": "endpointURL", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "method", + "label": "method", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "object_store" + } + }, + { + "variable": "backupName", + "label": "backupName", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "provider", + "label": "provider", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "s3", + "enum": [ + { + "value": "s3", + "description": "S3" + }, + { + "value": "azure", + "description": "Azure" + }, + { + "value": "google", + "description": "Google" + } + ] + } + }, + { + "variable": "s3", + "label": "s3", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "s3" + ] + ], + "attrs": [ + { + "variable": "region", + "label": "region", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "bucket", + "label": "bucket", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "accessKey", + "label": "accessKey", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "secretKey", + "label": "secretKey", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + }, + { + "variable": "azure", + "label": "azure (EXTREMELY EXPERIMENTAL)", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "azure" + ] + ], + "attrs": [ + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "connectionString", + "label": "connectionString", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageAccount", + "label": "storageAccount", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageKey", + "label": "storageKey", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageSasToken", + "label": "storageSasToken", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "containerName", + "label": "containerName", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "serviceName", + "label": "serviceName", + "schema": { + "type": "string", + "default": "blob" + } + }, + { + "variable": "inheritFromAzureAD", + "label": "inheritFromAzureAD", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "google", + "label": "google (EXTREMELY EXPERIMENTAL)", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "google" + ] + ], + "attrs": [ + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "bucket", + "label": "bucket", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "gkeEnvironment", + "label": "gkeEnvironment", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "applicationCredentials", + "label": "applicationCredentials", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + } + ] + } + }, + { + "variable": "backups", + "label": "Backup Settings (Experimental)", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "enabled", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "endpointURL", + "label": "endpointURL", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "destinationPath", + "label": "destinationPath", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "retentionPolicy", + "label": "retentionPolicy", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "30d" + } + }, + { + "variable": "provider", + "label": "provider", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "s3", + "enum": [ + { + "value": "s3", + "description": "S3" + }, + { + "value": "azure", + "description": "Azure" + }, + { + "value": "google", + "description": "Google" + } + ] + } + }, + { + "variable": "s3", + "label": "s3", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "s3" + ] + ], + "attrs": [ + { + "variable": "region", + "label": "region", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "bucket", + "label": "bucket", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "accessKey", + "label": "accessKey", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "secretKey", + "label": "secretKey", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + }, + { + "variable": "azure", + "label": "azure (EXTREMELY EXPERIMENTAL)", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "azure" + ] + ], + "attrs": [ + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "connectionString", + "label": "connectionString", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageAccount", + "label": "storageAccount", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageKey", + "label": "storageKey", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "storageSasToken", + "label": "storageSasToken", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "containerName", + "label": "containerName", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "serviceName", + "label": "serviceName", + "schema": { + "type": "string", + "default": "blob" + } + }, + { + "variable": "inheritFromAzureAD", + "label": "inheritFromAzureAD", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "google", + "label": "google (EXTREMELY EXPERIMENTAL)", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "google" + ] + ], + "attrs": [ + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "bucket", + "label": "bucket", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "gkeEnvironment", + "label": "gkeEnvironment", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "applicationCredentials", + "label": "applicationCredentials", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + }, + { + "variable": "scheduledBackups", + "label": "ScheduledBackups", + "schema": { + "type": "list", + "default": [], + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "items": [ + { + "variable": "backupschedule", + "label": "BackupSchedule", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "name", + "schema": { + "type": "string", + "default": "daily-backup", + "required": true + } + }, + { + "variable": "schedule", + "label": "schedule", + "schema": { + "type": "string", + "required": true, + "default": "0 0 0 * * *" + } + }, + { + "variable": "backupOwnerReference", + "label": "backupOwnerReference", + "schema": { + "type": "string", + "required": true, + "default": "self" + } + }, + { + "variable": "immediate", + "label": "immediate", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "suspend", + "label": "suspend", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + } + ] + } + }, + { + "variable": "manualBackups", + "label": "manualBackups", + "schema": { + "type": "list", + "default": [], + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "items": [ + { + "variable": "backup", + "label": "Backup", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "name", + "schema": { + "type": "string", + "default": "", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "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": "

PostgresSQL

\n

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

\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

Important:\nfor the complete changelog, please refer to the website

\n

postgresql-15.0.17 (2024-01-21)

\n

Fix

\n\n

postgresql-15.0.15 (2024-01-21)

\n

Chore

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

postgresql-15.0.14 (2024-01-02)

\n

Chore

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

postgresql-15.0.13 (2024-01-02)

\n

Chore

\n\n

postgresql-15.0.12 (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
\n

postgresql-15.0.11 (2024-01-01)

\n

Chore

\n
    \n
  • \n

    bump all charts for OCI test push

    \n
  • \n
  • \n

    move everything to consume OCI-hosted common-chart dependency

    \n
  • \n
  • \n

    standardize ./img references (#16704)

    \n
  • \n
  • \n

    lints some docs, uses front-matter instead of # h1, and fix list items in changelog (#16589)

    \n
  • \n
\n

Fix

\n
    \n
  • correct mistaken common references
  • \n
\n

postgresql-15.0.11 (2024-01-01)

\n

Chore

\n
    \n
  • \n

    bump all charts for OCI test push

    \n
  • \n
  • \n

    move everything to consume OCI-hosted common-chart dependency

    \n
  • \n
  • \n

    standardize ./img references (#16704)

    \n
  • \n
  • \n

    lints some docs, uses front-matter instead of # h1, and fix list items in changelog (#16589)

    \n
  • \n
\n

Fix

\n
    \n
  • correct mistaken common references
  • \n
\n

postgresql-15.0.10 (2023-12-22)

" + } +} \ No newline at end of file diff --git a/dev/postgresql/item.yaml b/dev/postgresql/item.yaml new file mode 100644 index 0000000..6a15c4b --- /dev/null +++ b/dev/postgresql/item.yaml @@ -0,0 +1,4 @@ +icon_url: https://truecharts.org/img/hotlink-ok/chart-icons/postgresql.png +categories: +- database +screenshots: [] diff --git a/dev/privatebin/4.0.15/CHANGELOG.md b/dev/privatebin/4.0.15/CHANGELOG.md new file mode 100644 index 0000000..6fb84fe --- /dev/null +++ b/dev/privatebin/4.0.15/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + +**Important:** +*for the complete changelog, please refer to the website* + + + +## [privatebin-4.0.15](https://github.com/truecharts/charts/compare/privatebin-4.0.14...privatebin-4.0.15) (2024-01-21) + +### Chore + + + +- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) + + + + +## [privatebin-4.0.14](https://github.com/truecharts/charts/compare/privatebin-4.0.13...privatebin-4.0.14) (2024-01-03) + +### Chore + + + +- update ignored by renovate (patch) ([#16673](https://github.com/truecharts/charts/issues/16673)) + + +## [privatebin-4.0.13](https://github.com/truecharts/charts/compare/privatebin-4.0.12...privatebin-4.0.13) (2024-01-02) + +### Chore + + + +- force bump to ensure up-to-date catalogs + + +## [privatebin-4.0.12](https://github.com/truecharts/charts/compare/privatebin-4.0.11...privatebin-4.0.12) (2024-01-02) + +### Chore + + + +- bump common ([#16751](https://github.com/truecharts/charts/issues/16751)) + + +## [privatebin-4.0.11](https://github.com/truecharts/charts/compare/privatebin-4.0.10...privatebin-4.0.11) (2024-01-01) + +### Chore + + + +- increase common version for oci fixes + +- remove non-existent template refs ([#16738](https://github.com/truecharts/charts/issues/16738)) + + +## [privatebin-4.0.10](https://github.com/truecharts/charts/compare/privatebin-4.0.9...privatebin-4.0.10) (2024-01-01) + +### Chore + + + +- bump all charts for OCI test push + +- move everything to consume OCI-hosted common-chart dependency + +- standardize ./img references ([#16704](https://github.com/truecharts/charts/issues/16704)) + +- lints some docs, uses front-matter instead of # h1, and fix list items in changelog ([#16589](https://github.com/truecharts/charts/issues/16589)) + +### Fix + + + +- correct mistaken common references + + +## [privatebin-4.0.10](https://github.com/truecharts/charts/compare/privatebin-4.0.9...privatebin-4.0.10) (2024-01-01) + +### Chore + + + +- bump all charts for OCI test push + +- move everything to consume OCI-hosted common-chart dependency + +- standardize ./img references ([#16704](https://github.com/truecharts/charts/issues/16704)) + +- lints some docs, uses front-matter instead of # h1, and fix list items in changelog ([#16589](https://github.com/truecharts/charts/issues/16589)) + +### Fix + + + +- correct mistaken common references +## [privatebin-4.0.9](https://github.com/truecharts/charts/compare/privatebin-4.0.8...privatebin-4.0.9) (2023-12-22) diff --git a/dev/privatebin/4.0.15/Chart.yaml b/dev/privatebin/4.0.15/Chart.yaml new file mode 100644 index 0000000..bf5b54e --- /dev/null +++ b/dev/privatebin/4.0.15/Chart.yaml @@ -0,0 +1,38 @@ +annotations: + max_scale_version: 23.10.2 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: productivity + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.12" + truecharts.org/train: dev +apiVersion: v2 +appVersion: 1.6.2 +dependencies: + - name: common + version: 17.2.21 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: PrivateBin is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. +home: https://truecharts.org/charts/dev/privatebin +icon: https://truecharts.org/img/hotlink-ok/chart-icons/privatebin.png +keywords: + - privatebin + - pastebin +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: privatebin +sources: + - https://privatebin.info/ + - https://github.com/PrivateBin/PrivateBin + - https://github.com/truecharts/charts/tree/master/charts/dev/privatebin + - https://hub.docker.com/r/privatebin/pdo +type: application +version: 4.0.15 diff --git a/dev/privatebin/4.0.15/README.md b/dev/privatebin/4.0.15/README.md new file mode 100644 index 0000000..192d4e7 --- /dev/null +++ b/dev/privatebin/4.0.15/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/dev/privatebin) + +**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/dev/privatebin/4.0.15/app-changelog.md b/dev/privatebin/4.0.15/app-changelog.md new file mode 100644 index 0000000..0c15194 --- /dev/null +++ b/dev/privatebin/4.0.15/app-changelog.md @@ -0,0 +1,9 @@ + + +## [privatebin-4.0.15](https://github.com/truecharts/charts/compare/privatebin-4.0.14...privatebin-4.0.15) (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/dev/privatebin/4.0.15/app-readme.md b/dev/privatebin/4.0.15/app-readme.md new file mode 100644 index 0000000..c6ab608 --- /dev/null +++ b/dev/privatebin/4.0.15/app-readme.md @@ -0,0 +1,8 @@ +PrivateBin is a minimalist, open source online pastebin where the server has zero knowledge of pasted data. + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/dev/privatebin](https://truecharts.org/charts/dev/privatebin) + +--- + +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/dev/privatebin/4.0.15/charts/common-17.2.21.tgz b/dev/privatebin/4.0.15/charts/common-17.2.21.tgz new file mode 100644 index 0000000000000000000000000000000000000000..247e7e80d51d061dfee4c297c67e8a0e72ae4198 GIT binary patch literal 97582 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

4-ZVO1Vc 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 H07eV| + 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: scaleCert + label: 'Use TrueNAS SCALE Certificate (Deprecated)' + schema: + show_if: [["certificateIssuer", "=", ""]] + type: int + $ref: + - "definitions/certificate" + - 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: scaleCert + label: Use TrueNAS SCALE Certificate (Deprecated) + schema: + show_if: [["certificateIssuer", "=", ""]] + type: int + $ref: + - "definitions/certificate" + - 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: 65534 + - variable: runAsGroup + label: "runAsGroup" + description: "The groupID of the user running the application" + schema: + type: int + default: 82 + # 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: 82 + - 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: 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: cnpg + group: Postgresql + label: "CloudNative-PG (CNPG)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "Main Postgresql Database" + schema: + additional_attrs: true + type: dict + attrs: + - variable: hibernate + label: Hibernate + description: "enable to safely hibernate and shutdown the postgresql cluster" + schema: + type: boolean + default: false + - variable: mode + label: Mode + description: 'Cluster mode of operation. Available modes: standalone - default mode. Creates new or updates an existing CNPG cluster. recovery - Same as standalone but creates a cluster from a backup, object store or via pg_basebackup replica - Creates a replica cluster from an existing CNPG cluster. # TODO.' + schema: + type: string + default: "standalone" + enum: + - value: standalone + description: standalone + - value: replica + description: replica + - value: recovery + description: recovery + - variable: cluster + label: "Cluster Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: instances + label: Instances + schema: + type: int + default: 1 + - variable: singleNode + label: singleNode + schema: + type: boolean + default: true + hidden: true + - variable: storage + label: "Storage" + schema: + additional_attrs: true + type: dict + attrs: + - variable: size + label: Size + schema: + type: string + default: "256Gi" + - variable: walStorage + label: "WAL Storage" + schema: + additional_attrs: true + type: dict + attrs: + - variable: size + label: Size + schema: + type: string + default: "256Gi" + - variable: monitoring + label: "Monitoring Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enablePodMonitor + label: "enablePodMonitor" + schema: + type: boolean + default: true + - variable: disableDefaultQueries + label: "disableDefaultQueries" + schema: + type: boolean + default: false + - variable: pooler + label: "Pooler Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: instances + label: Instances + schema: + type: int + default: 1 + - variable: createRO + label: "Create ReadOnly Instance" + schema: + type: boolean + default: false + - variable: recovery + label: "Recovery Settings (Experimental)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: "enabled" + schema: + type: boolean + default: false + - variable: endpointURL + label: "endpointURL" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: method + label: "method" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "object_store" + - variable: backupName + label: "backupName" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: provider + label: "provider" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "s3" + enum: + - value: s3 + description: S3 + - value: azure + description: Azure + - value: google + description: Google + - variable: s3 + label: "s3" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "s3"]] + attrs: + - variable: region + label: "region" + schema: + type: string + default: "" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: accessKey + label: "accessKey" + schema: + type: string + default: "" + - variable: secretKey + label: "secretKey" + schema: + type: string + default: "" + - variable: azure + label: "azure (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "azure"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: connectionString + label: "connectionString" + schema: + type: string + default: "" + - variable: storageAccount + label: "storageAccount" + schema: + type: string + default: "" + - variable: storageKey + label: "storageKey" + schema: + type: string + default: "" + - variable: storageSasToken + label: "storageSasToken" + schema: + type: string + default: "" + - variable: containerName + label: "containerName" + schema: + type: string + default: "" + - variable: serviceName + label: "serviceName" + schema: + type: string + default: "blob" + - variable: inheritFromAzureAD + label: "inheritFromAzureAD" + schema: + type: boolean + default: false + - variable: google + label: "google (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "google"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: gkeEnvironment + label: "gkeEnvironment" + schema: + type: string + default: "" + - variable: applicationCredentials + label: "applicationCredentials" + schema: + type: string + default: "" + - variable: backups + label: "Backup Settings (Experimental)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: "enabled" + schema: + type: boolean + default: false + - variable: endpointURL + label: "endpointURL" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: destinationPath + label: "destinationPath" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: retentionPolicy + label: "retentionPolicy" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "30d" + - variable: provider + label: "provider" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "s3" + enum: + - value: s3 + description: S3 + - value: azure + description: Azure + - value: google + description: Google + - variable: s3 + label: "s3" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "s3"]] + attrs: + - variable: region + label: "region" + schema: + type: string + default: "" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: accessKey + label: "accessKey" + schema: + type: string + default: "" + - variable: secretKey + label: "secretKey" + schema: + type: string + default: "" + - variable: azure + label: "azure (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "azure"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: connectionString + label: "connectionString" + schema: + type: string + default: "" + - variable: storageAccount + label: "storageAccount" + schema: + type: string + default: "" + - variable: storageKey + label: "storageKey" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: storageSasToken + label: "storageSasToken" + schema: + type: string + default: "" + - variable: containerName + label: "containerName" + schema: + type: string + default: "" + - variable: serviceName + label: "serviceName" + schema: + type: string + default: "blob" + - variable: inheritFromAzureAD + label: "inheritFromAzureAD" + schema: + type: boolean + default: false + - variable: google + label: "google (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "google"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: gkeEnvironment + label: "gkeEnvironment" + schema: + type: string + default: "" + - variable: applicationCredentials + label: "applicationCredentials" + schema: + type: string + default: "" + - variable: scheduledBackups + label: ScheduledBackups + schema: + type: list + default: [] + show_if: [["enabled", "=", true]] + items: + - variable: backupschedule + label: BackupSchedule + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: name + schema: + type: string + default: "daily-backup" + required: true + - variable: schedule + label: schedule + schema: + type: string + required: true + default: "0 0 0 * * *" + - variable: backupOwnerReference + label: backupOwnerReference + schema: + type: string + required: true + default: "self" + - variable: immediate + label: immediate + schema: + type: boolean + default: false + - variable: suspend + label: suspend + schema: + type: boolean + default: false + - variable: manualBackups + label: manualBackups + schema: + type: list + default: [] + show_if: [["enabled", "=", true]] + items: + - variable: backup + label: Backup + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: name + schema: + type: string + default: "" + required: true +# - variable: 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/dev/privatebin/4.0.15/templates/_configmap.tpl b/dev/privatebin/4.0.15/templates/_configmap.tpl new file mode 100644 index 0000000..52bb7b9 --- /dev/null +++ b/dev/privatebin/4.0.15/templates/_configmap.tpl @@ -0,0 +1,16 @@ +{{/* Calculate PHP and NGINX file size limits from PrivateBin configuration */}} +{{- define "privatebin.configmap" -}} +enabled: true +data: + {{/* + Multiply by 1, so large integers aren't rendered in scientific notation + See: https://github.com/helm/helm/issues/1707#issuecomment-1167860346 + */}} + sizelimits-php.ini: |- + upload_max_filesize = {{ mul .Values.privatebin.main.sizelimit 1 }} + post_max_size = {{ mul .Values.privatebin.main.sizelimit 1 }} + memory_limit = {{ mul .Values.privatebin.main.sizelimit 2 }} + sizelimits-nginx.conf: |- + client_max_body_size {{ add (div (div .Values.privatebin.main.sizelimit 1024) 1024) 5 }}M; + +{{- end }} diff --git a/dev/privatebin/4.0.15/templates/_secrets.tpl b/dev/privatebin/4.0.15/templates/_secrets.tpl new file mode 100644 index 0000000..b50cdf5 --- /dev/null +++ b/dev/privatebin/4.0.15/templates/_secrets.tpl @@ -0,0 +1,228 @@ +{{/* + Custom PrivateBin configuration. See also: + https://github.com/PrivateBin/docker-nginx-fpm-alpine#custom-configuration + + The default configuration file can be found here: + https://github.com/PrivateBin/PrivateBin/blob/master/cfg/conf.sample.php +*/}} +{{- define "privatebin.secrets" -}} +--- +apiVersion: v1 +kind: Secret +metadata: + name: {{ include "tc.v1.common.names.fullname" . }}-secret + labels: + +data: + conf.php: |- + ;=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "privatebin", + "sources": [ + "https://privatebin.info/", + "https://github.com/PrivateBin/PrivateBin", + "https://github.com/truecharts/charts/tree/master/charts/dev/privatebin", + "https://hub.docker.com/r/privatebin/pdo" + ], + "type": "application", + "version": "4.0.15" + }, + "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": "Advanced", + "description": "Advanced Configuration" + }, + { + "name": "Postgresql", + "description": "Postgresql" + }, + { + "name": "Documentation", + "description": "Documentation" + } + ], + "portals": { + "open": { + "protocols": [ + "$kubernetes-resource_configmap_tcportal-open_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_tcportal-open_host" + ], + "ports": [ + "$kubernetes-resource_configmap_tcportal-open_port" + ] + } + }, + "questions": [ + { + "variable": "global", + "group": "General Settings", + "label": "Global Settings", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "stopAll", + "label": "Stop All", + "description": "Stops All Running pods and hibernates cnpg", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "workload", + "group": "Workload Settings", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "main", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type (Advanced)", + "schema": { + "type": "string", + "default": "Deployment", + "enum": [ + { + "value": "Deployment", + "description": "Deployment" + }, + { + "value": "DaemonSet", + "description": "DaemonSet" + } + ] + } + }, + { + "variable": "replicas", + "label": "Replicas (Advanced)", + "description": "Set the number of Replicas", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "!=", + "DaemonSet" + ] + ], + "default": 1 + } + }, + { + "variable": "podSpec", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "containers", + "label": "Containers", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "main", + "label": "Main Container", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "envList", + "label": "Extra Environment Variables", + "description": "Please be aware that some variables are set in the background, adding duplicates here might cause issues or prevent the app from starting...", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "envItem", + "label": "Environment Variable", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string" + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + }, + { + "variable": "extraArgs", + "label": "Extra Args", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "arg", + "label": "Arg", + "schema": { + "type": "string" + } + } + ] + } + }, + { + "variable": "advanced", + "label": "Show Advanced Settings", + "description": "Advanced settings are not covered by TrueCharts Support", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "command", + "label": "Command", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "param", + "label": "Param", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "privatebin", + "group": "App Configuration", + "label": "PrivateBin Custom Configuration", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "main", + "label": "Main Configuration", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "name", + "description": "Set a project name to be displayed on the website", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "basepath", + "label": "basepath", + "description": "The full URL, with the domain name and directories that point to the PrivateBin files. This URL is essential to allow Opengraph images to be displayed on social networks.", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "discussion", + "label": "discussion", + "description": "Enable or disable the discussion feature", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "opendiscussion", + "label": "opendiscussion", + "description": "Preselect the discussion feature", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "password", + "label": "password", + "description": "Enable or disable the password feature", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "fileupload", + "label": "fileupload", + "description": "Enable or disable the file upload feature", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "burnafterreadingselected", + "label": "burnafterreadingselected", + "description": "Preselect the burn-after-reading feature", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "defaultformatter", + "label": "defaultformatter", + "description": "Which display mode to preselect by default", + "schema": { + "type": "string", + "default": "plaintext", + "required": true, + "enum": [ + { + "value": "plaintext", + "description": "Plain Text" + }, + { + "value": "syntaxhighlighting", + "description": "Source Code" + }, + { + "value": "markdown", + "description": "Markdown" + } + ] + } + }, + { + "variable": "syntaxhighlightingtheme", + "label": "syntaxhighlightingtheme", + "description": "Set a syntax highlighting theme", + "schema": { + "type": "string", + "default": "", + "enum": [ + { + "value": "", + "description": "PrivateBin Default" + }, + { + "value": "desert", + "description": "Desert" + }, + { + "value": "doxy", + "description": "Doxy" + }, + { + "value": "prettify", + "description": "Default" + }, + { + "value": "sons-of-obsidian", + "description": "Sons-Of-Obsidian" + }, + { + "value": "sunburst", + "description": "Sunburst" + } + ] + } + }, + { + "variable": "sizelimit", + "label": "sizelimit", + "description": "Size limit per paste or comment in bytes", + "schema": { + "type": "int", + "default": 10485760, + "required": true + } + }, + { + "variable": "template", + "label": "template", + "description": "Template to use", + "schema": { + "type": "string", + "default": "bootstrap", + "required": true, + "enum": [ + { + "value": "bootstrap", + "description": "bootstrap" + }, + { + "value": "bootstrap-page", + "description": "bootstrap-page" + }, + { + "value": "bootstrap-dark", + "description": "bootstrap-dark" + }, + { + "value": "bootstrap-dark-page", + "description": "bootstrap-dark-page" + }, + { + "value": "bootstrap-compact", + "description": "bootstrap-compact" + }, + { + "value": "bootstrap-compact-page", + "description": "bootstrap-compact-page" + }, + { + "value": "page", + "description": "page" + } + ] + } + }, + { + "variable": "info", + "label": "info", + "description": "Info text to display. Use single, instead of double quotes for HTML attributes.", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "notice", + "label": "notice", + "description": "Notice to display", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "languageselection", + "label": "languageselection", + "description": "By default PrivateBin will guess the visitors language based on the browsers settings. Optionally you can enable the language selection menu, which uses a session cookie to store the choice until the browser is closed.", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "languagedefault", + "label": "languagedefault", + "description": "Set the language your installs defaults to, defaults to English. If this is set and language selection is disabled, this will be the only language.", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "urlshortener", + "label": "urlshortener", + "description": "URL shortener address to offer after a new paste is created. It is suggested to only use this with self-hosted shorteners as this will leak the pastes encryption key.", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "qrcode", + "label": "qrcode", + "description": "Let users create a QR code for sharing the paste URL with one click. It works both when a new paste is created and when you view a paste.", + "schema": { + "type": "string", + "default": "", + "enum": [ + { + "value": "", + "description": "PrivateBin Default" + }, + { + "value": "true", + "description": "true" + }, + { + "value": "false", + "description": "false" + } + ] + } + }, + { + "variable": "icon", + "label": "icon", + "description": "IP based icons are a weak mechanism to detect if a comment was from. a different user when the same username was used in a comment. It might be used to get the IP of a non anonymous comment poster if the server salt is leaked and a SHA256 HMAC rainbow table is generated for all (relevant) IPs.", + "schema": { + "type": "string", + "default": "", + "enum": [ + { + "value": "", + "description": "PrivateBin Default" + }, + { + "value": "none", + "description": "none" + }, + { + "value": "vizhash", + "description": "vizhash" + }, + { + "value": "identicon", + "description": "identicon" + } + ] + } + }, + { + "variable": "cspheader", + "label": "cspheader", + "description": "Content Security Policy headers allow a website to restrict what sources are allowed to be accessed in its context. You need to change this if you added custom scripts from third-party domains to your templates, e.g. tracking scripts or run your site behind certain DDoS-protection services. Check the documentation at https://content-security-policy.com/", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "zerobincompatibility", + "label": "zerobincompatibility", + "description": "Stay compatible with PrivateBin Alpha 0.19, less secure. f enabled will use base64.js version 1.7 instead of 2.1.9 and sha1 instead of sha256 in HMAC for the deletion token.", + "schema": { + "type": "string", + "default": "", + "enum": [ + { + "value": "", + "description": "PrivateBin Default" + }, + { + "value": "true", + "description": "true" + }, + { + "value": "false", + "description": "false" + } + ] + } + }, + { + "variable": "httpwarning", + "label": "httpwarning", + "description": "Enable or disable the warning message when the site is served over an insecure connection (insecure HTTP instead of HTTPS). Secure transport methods like Tor and I2P domains are automatically whitelisted. It is **strongly discouraged** to disable this.", + "schema": { + "type": "string", + "default": "", + "enum": [ + { + "value": "", + "description": "PrivateBin Default" + }, + { + "value": "true", + "description": "true" + }, + { + "value": "false", + "description": "false" + } + ] + } + }, + { + "variable": "compression", + "label": "compression", + "description": "Pick compression algorithm or disable it. Only applies to pastes/comments created after changing the setting.", + "schema": { + "type": "string", + "default": "", + "enum": [ + { + "value": "", + "description": "PrivateBin Default" + }, + { + "value": "none", + "description": "none" + }, + { + "value": "zlib", + "description": "zlib" + } + ] + } + } + ] + } + }, + { + "variable": "expire", + "label": "Expire Configuration", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "default", + "label": "default", + "description": "Expire value that is selected per default", + "schema": { + "type": "string", + "default": "1week", + "required": true, + "enum": [ + { + "value": "5min", + "description": "5min" + }, + { + "value": "10min", + "description": "10min" + }, + { + "value": "1hour", + "description": "1hour" + }, + { + "value": "1day", + "description": "1day" + }, + { + "value": "1week", + "description": "1week" + }, + { + "value": "1month", + "description": "1month" + }, + { + "value": "1year", + "description": "1year" + }, + { + "value": "never", + "description": "never" + } + ] + } + } + ] + } + }, + { + "variable": "traffic", + "label": "Traffic Configuration", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "limit", + "label": "limit", + "description": "Time limit between calls from the same IP address in seconds", + "schema": { + "type": "int", + "default": 10, + "required": true + } + }, + { + "variable": "exempted", + "label": "exempted", + "description": "Set IPs addresses (v4 or v6) or subnets (CIDR) which are exempted from the rate-limit. Invalid IPs will be ignored. If multiple values are to be exempted, the list needs to be comma separated. Leave unset to disable exemptions.", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "creators", + "label": "creators", + "description": "If you want only some source IP addresses (v4 or v6) or subnets (CIDR) to be allowed to create pastes, set these here. Invalid IPs will be ignored. If multiple values are to be exempted, the list needs to be comma separated. Leave unset to allow anyone to create pastes.", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "header", + "label": "header", + "description": "If your website runs behind a reverse proxy or load balancer, set the HTTP header containing the visitors IP address, i.e. X_FORWARDED_FOR", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + }, + { + "variable": "purge", + "label": "Purge Configuration", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "limit", + "label": "limit", + "description": "Minimum time limit between two purgings of expired pastes, it is only triggered when pastes are created", + "schema": { + "type": "int", + "default": 300, + "required": true + } + }, + { + "variable": "batchsize", + "label": "batchsize", + "description": "Maximum amount of expired pastes to delete in one purge. Set this to 0 to disable purging. Set it higher, if you are running a large site.", + "schema": { + "type": "int", + "default": 10, + "required": true + } + } + ] + } + } + ] + } + }, + { + "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": 10248, + "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": "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": "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": "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": "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": "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": 65534 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID of the user running the application", + "schema": { + "type": "int", + "default": 82 + } + }, + { + "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": 82 + } + } + ] + } + } + ] + } + }, + { + "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": "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": "cnpg", + "group": "Postgresql", + "label": "CloudNative-PG (CNPG)", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "main", + "label": "Main Postgresql Database", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "hibernate", + "label": "Hibernate", + "description": "enable to safely hibernate and shutdown the postgresql cluster", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "mode", + "label": "Mode", + "description": "Cluster mode of operation. Available modes: standalone - default mode. Creates new or updates an existing CNPG cluster. recovery - Same as standalone but creates a cluster from a backup, object store or via pg_basebackup replica - Creates a replica cluster from an existing CNPG cluster. # TODO.", + "schema": { + "type": "string", + "default": "standalone", + "enum": [ + { + "value": "standalone", + "description": "standalone" + }, + { + "value": "replica", + "description": "replica" + }, + { + "value": "recovery", + "description": "recovery" + } + ] + } + }, + { + "variable": "cluster", + "label": "Cluster Settings", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "instances", + "label": "Instances", + "schema": { + "type": "int", + "default": 1 + } + }, + { + "variable": "singleNode", + "label": "singleNode", + "schema": { + "type": "boolean", + "default": true, + "hidden": true + } + }, + { + "variable": "storage", + "label": "Storage", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "size", + "label": "Size", + "schema": { + "type": "string", + "default": "256Gi" + } + } + ] + } + }, + { + "variable": "walStorage", + "label": "WAL Storage", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "size", + "label": "Size", + "schema": { + "type": "string", + "default": "256Gi" + } + } + ] + } + } + ] + } + }, + { + "variable": "monitoring", + "label": "Monitoring Settings", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enablePodMonitor", + "label": "enablePodMonitor", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "disableDefaultQueries", + "label": "disableDefaultQueries", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "pooler", + "label": "Pooler Settings", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "instances", + "label": "Instances", + "schema": { + "type": "int", + "default": 1 + } + }, + { + "variable": "createRO", + "label": "Create ReadOnly Instance", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "recovery", + "label": "Recovery Settings (Experimental)", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "enabled", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "endpointURL", + "label": "endpointURL", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "method", + "label": "method", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "object_store" + } + }, + { + "variable": "backupName", + "label": "backupName", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "provider", + "label": "provider", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "s3", + "enum": [ + { + "value": "s3", + "description": "S3" + }, + { + "value": "azure", + "description": "Azure" + }, + { + "value": "google", + "description": "Google" + } + ] + } + }, + { + "variable": "s3", + "label": "s3", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "s3" + ] + ], + "attrs": [ + { + "variable": "region", + "label": "region", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "bucket", + "label": "bucket", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "accessKey", + "label": "accessKey", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "secretKey", + "label": "secretKey", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + }, + { + "variable": "azure", + "label": "azure (EXTREMELY EXPERIMENTAL)", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "azure" + ] + ], + "attrs": [ + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "connectionString", + "label": "connectionString", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageAccount", + "label": "storageAccount", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageKey", + "label": "storageKey", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageSasToken", + "label": "storageSasToken", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "containerName", + "label": "containerName", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "serviceName", + "label": "serviceName", + "schema": { + "type": "string", + "default": "blob" + } + }, + { + "variable": "inheritFromAzureAD", + "label": "inheritFromAzureAD", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "google", + "label": "google (EXTREMELY EXPERIMENTAL)", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "google" + ] + ], + "attrs": [ + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "bucket", + "label": "bucket", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "gkeEnvironment", + "label": "gkeEnvironment", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "applicationCredentials", + "label": "applicationCredentials", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + } + ] + } + }, + { + "variable": "backups", + "label": "Backup Settings (Experimental)", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "enabled", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "endpointURL", + "label": "endpointURL", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "destinationPath", + "label": "destinationPath", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "retentionPolicy", + "label": "retentionPolicy", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "30d" + } + }, + { + "variable": "provider", + "label": "provider", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "s3", + "enum": [ + { + "value": "s3", + "description": "S3" + }, + { + "value": "azure", + "description": "Azure" + }, + { + "value": "google", + "description": "Google" + } + ] + } + }, + { + "variable": "s3", + "label": "s3", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "s3" + ] + ], + "attrs": [ + { + "variable": "region", + "label": "region", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "bucket", + "label": "bucket", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "accessKey", + "label": "accessKey", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "secretKey", + "label": "secretKey", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + }, + { + "variable": "azure", + "label": "azure (EXTREMELY EXPERIMENTAL)", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "azure" + ] + ], + "attrs": [ + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "connectionString", + "label": "connectionString", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageAccount", + "label": "storageAccount", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageKey", + "label": "storageKey", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "storageSasToken", + "label": "storageSasToken", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "containerName", + "label": "containerName", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "serviceName", + "label": "serviceName", + "schema": { + "type": "string", + "default": "blob" + } + }, + { + "variable": "inheritFromAzureAD", + "label": "inheritFromAzureAD", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "google", + "label": "google (EXTREMELY EXPERIMENTAL)", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "google" + ] + ], + "attrs": [ + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "bucket", + "label": "bucket", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "gkeEnvironment", + "label": "gkeEnvironment", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "applicationCredentials", + "label": "applicationCredentials", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + }, + { + "variable": "scheduledBackups", + "label": "ScheduledBackups", + "schema": { + "type": "list", + "default": [], + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "items": [ + { + "variable": "backupschedule", + "label": "BackupSchedule", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "name", + "schema": { + "type": "string", + "default": "daily-backup", + "required": true + } + }, + { + "variable": "schedule", + "label": "schedule", + "schema": { + "type": "string", + "required": true, + "default": "0 0 0 * * *" + } + }, + { + "variable": "backupOwnerReference", + "label": "backupOwnerReference", + "schema": { + "type": "string", + "required": true, + "default": "self" + } + }, + { + "variable": "immediate", + "label": "immediate", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "suspend", + "label": "suspend", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + } + ] + } + }, + { + "variable": "manualBackups", + "label": "manualBackups", + "schema": { + "type": "list", + "default": [], + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "items": [ + { + "variable": "backup", + "label": "Backup", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "name", + "schema": { + "type": "string", + "default": "", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "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": "

PrivateBin is a minimalist, open source online pastebin where the server has zero knowledge of pasted data.

\n

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

\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

Important:\nfor the complete changelog, please refer to the website

\n

privatebin-4.0.15 (2024-01-21)

\n

Chore

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

privatebin-4.0.14 (2024-01-03)

\n

Chore

\n
    \n
  • update ignored by renovate (patch) (#16673)
  • \n
\n

privatebin-4.0.13 (2024-01-02)

\n

Chore

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

privatebin-4.0.12 (2024-01-02)

\n

Chore

\n\n

privatebin-4.0.11 (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
\n

privatebin-4.0.10 (2024-01-01)

\n

Chore

\n
    \n
  • \n

    bump all charts for OCI test push

    \n
  • \n
  • \n

    move everything to consume OCI-hosted common-chart dependency

    \n
  • \n
  • \n

    standardize ./img references (#16704)

    \n
  • \n
  • \n

    lints some docs, uses front-matter instead of # h1, and fix list items in changelog (#16589)

    \n
  • \n
\n

Fix

\n
    \n
  • correct mistaken common references
  • \n
\n

privatebin-4.0.10 (2024-01-01)

\n

Chore

\n
    \n
  • \n

    bump all charts for OCI test push

    \n
  • \n
  • \n

    move everything to consume OCI-hosted common-chart dependency

    \n
  • \n
  • \n

    standardize ./img references (#16704)

    \n
  • \n
  • \n

    lints some docs, uses front-matter instead of # h1, and fix list items in changelog (#16589)

    \n
  • \n
\n

Fix

\n
    \n
  • correct mistaken common references
  • \n
\n

privatebin-4.0.9 (2023-12-22)

" + } +} \ No newline at end of file diff --git a/dev/privatebin/item.yaml b/dev/privatebin/item.yaml new file mode 100644 index 0000000..bd4a676 --- /dev/null +++ b/dev/privatebin/item.yaml @@ -0,0 +1,4 @@ +icon_url: https://truecharts.org/img/hotlink-ok/chart-icons/privatebin.png +categories: +- productivity +screenshots: [] diff --git a/dev/rtmpserver/5.0.14/CHANGELOG.md b/dev/rtmpserver/5.0.14/CHANGELOG.md new file mode 100644 index 0000000..d389736 --- /dev/null +++ b/dev/rtmpserver/5.0.14/CHANGELOG.md @@ -0,0 +1,18 @@ +--- +title: Changelog +--- + +**Important:** +*for the complete changelog, please refer to the website* + + + +## [rtmpserver-5.0.14](https://github.com/truecharts/charts/compare/rtmpserver-5.0.13...rtmpserver-5.0.14) (2024-01-21) + +### Chore + + + +- move all incubator to dev + +- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) \ No newline at end of file diff --git a/dev/rtmpserver/5.0.14/Chart.yaml b/dev/rtmpserver/5.0.14/Chart.yaml new file mode 100644 index 0000000..e181a6f --- /dev/null +++ b/dev/rtmpserver/5.0.14/Chart.yaml @@ -0,0 +1,38 @@ +annotations: + max_scale_version: 23.10.2 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: GameServers + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.12" + truecharts.org/train: dev +apiVersion: v2 +appVersion: latest +dependencies: + - name: common + version: 17.2.21 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: A video streaming server that supports RTMP, HLS, DASH out of the box. +home: https://truecharts.org/charts/dev/rtmpserver +icon: https://truecharts.org/img/hotlink-ok/chart-icons/rtmpserver.png +keywords: + - rtmpserver + - GameServers + - Network-Other +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: rtmpserver +sources: + - https://github.com/TareqAlqutami/rtmp-hls-server + - https://github.com/truecharts/charts/tree/master/charts/dev/rtmpserver + - https://hub.docker.com/r/alqutami/rtmp-hls +type: application +version: 5.0.14 diff --git a/dev/rtmpserver/5.0.14/README.md b/dev/rtmpserver/5.0.14/README.md new file mode 100644 index 0000000..2f00b55 --- /dev/null +++ b/dev/rtmpserver/5.0.14/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/dev/rtmpserver) + +**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/dev/rtmpserver/5.0.14/app-changelog.md b/dev/rtmpserver/5.0.14/app-changelog.md new file mode 100644 index 0000000..09d1694 --- /dev/null +++ b/dev/rtmpserver/5.0.14/app-changelog.md @@ -0,0 +1,11 @@ + + +## [rtmpserver-5.0.14](https://github.com/truecharts/charts/compare/rtmpserver-5.0.13...rtmpserver-5.0.14) (2024-01-21) + +### Chore + + + +- move all incubator to dev + +- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) \ No newline at end of file diff --git a/dev/rtmpserver/5.0.14/app-readme.md b/dev/rtmpserver/5.0.14/app-readme.md new file mode 100644 index 0000000..4453ac5 --- /dev/null +++ b/dev/rtmpserver/5.0.14/app-readme.md @@ -0,0 +1,8 @@ +A video streaming server that supports RTMP, HLS, DASH out of the box. + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/dev/rtmpserver](https://truecharts.org/charts/dev/rtmpserver) + +--- + +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/dev/rtmpserver/5.0.14/charts/common-17.2.21.tgz b/dev/rtmpserver/5.0.14/charts/common-17.2.21.tgz new file mode 100644 index 0000000000000000000000000000000000000000..247e7e80d51d061dfee4c297c67e8a0e72ae4198 GIT binary patch literal 97582 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

4-ZVO1Vc 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 H07eV| + 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: hls + label: App HLS Storage + description: Stores the Application HLS. + 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: rtmp + label: RTMP 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: scaleCert + label: 'Use TrueNAS SCALE Certificate (Deprecated)' + schema: + show_if: [["certificateIssuer", "=", ""]] + type: int + $ref: + - "definitions/certificate" + - 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: scaleCert + label: Use TrueNAS SCALE Certificate (Deprecated) + schema: + show_if: [["certificateIssuer", "=", ""]] + type: int + $ref: + - "definitions/certificate" + - 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: 0 + - variable: runAsGroup + label: "runAsGroup" + description: "The groupID of the user running the application" + schema: + type: int + default: 0 + # 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: 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/dev/rtmpserver/5.0.14/templates/common.yaml b/dev/rtmpserver/5.0.14/templates/common.yaml new file mode 100644 index 0000000..78d963f --- /dev/null +++ b/dev/rtmpserver/5.0.14/templates/common.yaml @@ -0,0 +1,2 @@ +{{/* Render the templates */}} +{{ include "tc.v1.common.loader.all" . }} diff --git a/dev/rtmpserver/5.0.14/values.yaml b/dev/rtmpserver/5.0.14/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/dev/rtmpserver/app_versions.json b/dev/rtmpserver/app_versions.json new file mode 100644 index 0000000..65bb8c8 --- /dev/null +++ b/dev/rtmpserver/app_versions.json @@ -0,0 +1,5709 @@ +{ + "5.0.14": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/dev/rtmpserver/5.0.14", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/interface", + "normalize/interfaceConfiguration", + "definitions/gpuConfiguration", + "definitions/timezone", + "definitions/certificate" + ], + "human_version": "latest_5.0.14", + "version": "5.0.14", + "chart_metadata": { + "annotations": { + "max_scale_version": "23.10.2", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "truecharts.org/category": "GameServers", + "truecharts.org/max_helm_version": "3.14", + "truecharts.org/min_helm_version": "3.12", + "truecharts.org/train": "dev" + }, + "apiVersion": "v2", + "appVersion": "latest", + "dependencies": [ + { + "name": "common", + "version": "17.2.21", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "A video streaming server that supports RTMP, HLS, DASH out of the box.", + "home": "https://truecharts.org/charts/dev/rtmpserver", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/rtmpserver.png", + "keywords": [ + "rtmpserver", + "GameServers", + "Network-Other" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "rtmpserver", + "sources": [ + "https://github.com/TareqAlqutami/rtmp-hls-server", + "https://github.com/truecharts/charts/tree/master/charts/dev/rtmpserver", + "https://hub.docker.com/r/alqutami/rtmp-hls" + ], + "type": "application", + "version": "5.0.14" + }, + "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": "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": "/players/hls.html" + }, + "stats": { + "protocols": [ + "$kubernetes-resource_configmap_tcportal-open_protocol" + ], + "host": [ + "$kubernetes-resource_configmap_tcportal-open_host" + ], + "ports": [ + "$kubernetes-resource_configmap_tcportal-open_port" + ], + "path": "/stats.html" + } + }, + "questions": [ + { + "variable": "global", + "group": "General Settings", + "label": "Global Settings", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "stopAll", + "label": "Stop All", + "description": "Stops All Running pods and hibernates cnpg", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "workload", + "group": "Workload Settings", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "main", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type (Advanced)", + "schema": { + "type": "string", + "default": "Deployment", + "enum": [ + { + "value": "Deployment", + "description": "Deployment" + }, + { + "value": "DaemonSet", + "description": "DaemonSet" + } + ] + } + }, + { + "variable": "replicas", + "label": "Replicas (Advanced)", + "description": "Set the number of Replicas", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "!=", + "DaemonSet" + ] + ], + "default": 1 + } + }, + { + "variable": "podSpec", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "containers", + "label": "Containers", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "main", + "label": "Main Container", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "envList", + "label": "Extra Environment Variables", + "description": "Please be aware that some variables are set in the background, adding duplicates here might cause issues or prevent the app from starting...", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "envItem", + "label": "Environment Variable", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string" + } + }, + { + "variable": "value", + "label": "Value", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + }, + { + "variable": "extraArgs", + "label": "Extra Args", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "arg", + "label": "Arg", + "schema": { + "type": "string" + } + } + ] + } + }, + { + "variable": "advanced", + "label": "Show Advanced Settings", + "description": "Advanced settings are not covered by TrueCharts Support", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "command", + "label": "Command", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "param", + "label": "Param", + "schema": { + "type": "string" + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "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": 10610, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "rtmp", + "label": "RTMP Service", + "description": "The RTMP service", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable the Service", + "schema": { + "type": "boolean", + "default": true, + "hidden": true + } + }, + { + "variable": "type", + "label": "Service Type", + "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", + "schema": { + "type": "string", + "default": "LoadBalancer", + "enum": [ + { + "value": "LoadBalancer", + "description": "LoadBalancer (Expose Ports)" + }, + { + "value": "ClusterIP", + "description": "ClusterIP (Do Not Expose Ports)" + } + ] + } + }, + { + "variable": "loadBalancerIP", + "label": "LoadBalancer IP", + "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", + "schema": { + "show_if": [ + [ + "type", + "=", + "LoadBalancer" + ] + ], + "type": "string", + "default": "" + } + }, + { + "variable": "ports", + "label": "Service's Port(s) Configuration", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "rtmp", + "label": "RTMP 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": 1935, + "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": "dash", + "label": "App Dash Storage", + "description": "Stores the Application Dash.", + "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": "hls", + "label": "App HLS Storage", + "description": "Stores the Application HLS.", + "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": "rtmp", + "label": "RTMP 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": "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": "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": "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": "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": 0 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID of the user running the application", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "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": "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": "

A video streaming server that supports RTMP, HLS, DASH out of the box.

\n

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

\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

Important:\nfor the complete changelog, please refer to the website

\n

rtmpserver-5.0.14 (2024-01-21)

\n

Chore

\n
    \n
  • \n

    move all incubator to dev

    \n
  • \n
  • \n

    update metadata in chart.yaml (#17457)

    \n
  • \n
" + } +} \ No newline at end of file diff --git a/dev/rtmpserver/item.yaml b/dev/rtmpserver/item.yaml new file mode 100644 index 0000000..55f40b1 --- /dev/null +++ b/dev/rtmpserver/item.yaml @@ -0,0 +1,4 @@ +icon_url: https://truecharts.org/img/hotlink-ok/chart-icons/rtmpserver.png +categories: +- GameServers +screenshots: [] diff --git a/dev/testapp/0.0.1/CHANGELOG.md b/dev/testapp/0.0.1/CHANGELOG.md new file mode 100644 index 0000000..57758a7 --- /dev/null +++ b/dev/testapp/0.0.1/CHANGELOG.md @@ -0,0 +1,13 @@ +**Important:** +*for the complete changelog, please refer to the website* + + + + +## [testapp-0.0.1]testapp-0.0.1 (2023-02-28) + +### Feat + +- Rework GUI templates ([#7545](https://github.com/truecharts/charts/issues/7545)) + + \ No newline at end of file diff --git a/dev/testapp/0.0.1/Chart.yaml b/dev/testapp/0.0.1/Chart.yaml new file mode 100644 index 0000000..c03b0e8 --- /dev/null +++ b/dev/testapp/0.0.1/Chart.yaml @@ -0,0 +1,32 @@ +apiVersion: v2 +appVersion: "0.20.2297" +dependencies: + - name: common + repository: https://library-charts.truecharts.org + version: 12.2.0 +deprecated: false +description: testing app for truecharts +home: https://truecharts.org/charts/stable/jackett +icon: https://truecharts.org/img/hotlink-ok/chart-icons/jackett.png +keywords: + - jackett + - torrent + - usenet +kubeVersion: ">=1.16.0-0" +maintainers: + - email: info@truecharts.org + name: TrueCharts + url: https://truecharts.org +name: testapp +sources: + - https://github.com/truecharts/charts/tree/master/charts/stable/jackett + - https://ghcr.io/onedr0p/jackett + - https://github.com/Jackett/Jackett +type: application +version: 0.0.1 +annotations: + truecharts.org/catagories: | + - media + - test + truecharts.org/SCALE-support: "true" + truecharts.org/grade: U diff --git a/dev/testapp/0.0.1/README.md b/dev/testapp/0.0.1/README.md new file mode 100644 index 0000000..701942c --- /dev/null +++ b/dev/testapp/0.0.1/README.md @@ -0,0 +1,27 @@ +# 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/) + +**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%20Apps/Important-MUST-READ). +- 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/dev/testapp/0.0.1/app-changelog.md b/dev/testapp/0.0.1/app-changelog.md new file mode 100644 index 0000000..383af35 --- /dev/null +++ b/dev/testapp/0.0.1/app-changelog.md @@ -0,0 +1,9 @@ + + +## [testapp-0.0.1]testapp-0.0.1 (2023-02-28) + +### Feat + +- Rework GUI templates ([#7545](https://github.com/truecharts/charts/issues/7545)) + + \ No newline at end of file diff --git a/dev/testapp/0.0.1/app-readme.md b/dev/testapp/0.0.1/app-readme.md new file mode 100644 index 0000000..26157fd --- /dev/null +++ b/dev/testapp/0.0.1/app-readme.md @@ -0,0 +1,8 @@ +testing app for truecharts + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/dev/testapp](https://truecharts.org/charts/dev/testapp) + +--- + +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/dev/testapp/0.0.1/charts/common-12.2.0.tgz b/dev/testapp/0.0.1/charts/common-12.2.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..3d927d9804458cae2517c9669b84e7f47bda23c0 GIT binary patch literal 238039 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

testing app for truecharts

\n

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

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

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

Important:\nfor the complete changelog, please refer to the website

\n

[testapp-0.0.1]testapp-0.0.1 (2023-02-28)

\n

Feat

\n
    \n
  • Rework GUI templates (#7545)
  • \n
" + } +} \ No newline at end of file diff --git a/dev/testapp/item.yaml b/dev/testapp/item.yaml new file mode 100644 index 0000000..aa4ad43 --- /dev/null +++ b/dev/testapp/item.yaml @@ -0,0 +1,5 @@ +icon_url: https://truecharts.org/img/hotlink-ok/chart-icons/jackett.png +categories: +- media +- test + diff --git a/stable/firefox/10.1.0/.helmignore b/stable/firefox/10.1.0/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/firefox/10.1.0/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/firefox/10.1.0/CHANGELOG.md b/stable/firefox/10.1.0/CHANGELOG.md new file mode 100644 index 0000000..da04ec3 --- /dev/null +++ b/stable/firefox/10.1.0/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + + +## [firefox-10.0.9](https://github.com/truecharts/charts/compare/firefox-10.0.8...firefox-10.0.9) (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)) + + +## [firefox-10.0.8](https://github.com/truecharts/charts/compare/firefox-10.0.7...firefox-10.0.8) (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)) + + +## [firefox-10.0.7](https://github.com/truecharts/charts/compare/firefox-10.0.6...firefox-10.0.7) (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)) + + +## [firefox-10.0.6](https://github.com/truecharts/charts/compare/firefox-10.0.5...firefox-10.0.6) (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)) + + +## [firefox-10.0.5](https://github.com/truecharts/charts/compare/firefox-10.0.4...firefox-10.0.5) (2024-01-21) + +### Chore + + + +- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) + + +## [firefox-10.0.4](https://github.com/truecharts/charts/compare/firefox-10.0.3...firefox-10.0.4) (2024-01-21) + +### Chore + + + +- update container image ghcr.io/linuxserver/firefox to 120.0.1[@ac3c881](https://github.com/ac3c881) by renovate ([#17351](https://github.com/truecharts/charts/issues/17351)) + + +## [firefox-10.0.3](https://github.com/truecharts/charts/compare/firefox-10.0.2...firefox-10.0.3) (2024-01-15) + +### Chore + + + +- update container image ghcr.io/linuxserver/firefox to 120.0.1[@34df0f7](https://github.com/34df0f7) by renovate ([#17232](https://github.com/truecharts/charts/issues/17232)) + + + + +## [firefox-10.0.2](https://github.com/truecharts/charts/compare/firefox-10.0.1...firefox-10.0.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)) + + +## [firefox-10.0.1](https://github.com/truecharts/charts/compare/firefox-10.0.0...firefox-10.0.1) (2024-01-08) + +### Chore + + + +- update container image ghcr.io/linuxserver/firefox to 120.0.1[@2bf06b5](https://github.com/2bf06b5) by renovate ([#16940](https://github.com/truecharts/charts/issues/16940)) + + +## [firefox-10.0.0](https://github.com/truecharts/charts/compare/firefox-9.1.5...firefox-10.0.0) (2024-01-03) + +### Chore + + diff --git a/stable/firefox/10.1.0/Chart.yaml b/stable/firefox/10.1.0/Chart.yaml new file mode 100644 index 0000000..7c1a066 --- /dev/null +++ b/stable/firefox/10.1.0/Chart.yaml @@ -0,0 +1,37 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: browser + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.12" + truecharts.org/train: stable +apiVersion: v2 +appVersion: 120.0.1 +dependencies: + - name: common + version: 17.4.2 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation. +home: https://truecharts.org/charts/stable/firefox +icon: https://truecharts.org/img/hotlink-ok/chart-icons/firefox.png +keywords: + - firefox + - browser +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: firefox +sources: + - https://github.com/linuxserver/docker-firefox + - https://github.com/truecharts/charts/tree/master/charts/stable/firefox + - https://ghcr.io/linuxserver/firefox +type: application +version: 10.1.0 diff --git a/stable/firefox/10.1.0/README.md b/stable/firefox/10.1.0/README.md new file mode 100644 index 0000000..af8822b --- /dev/null +++ b/stable/firefox/10.1.0/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/firefox) + +**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/firefox/10.1.0/app-readme.md b/stable/firefox/10.1.0/app-readme.md new file mode 100644 index 0000000..06d4ce1 --- /dev/null +++ b/stable/firefox/10.1.0/app-readme.md @@ -0,0 +1,8 @@ +a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation. + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/firefox](https://truecharts.org/charts/stable/firefox) + +--- + +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/firefox/10.1.0/charts/common-17.4.2.tgz b/stable/firefox/10.1.0/charts/common-17.4.2.tgz new file mode 100644 index 0000000000000000000000000000000000000000..31f3a104561f859f297067776ab86a1503525be4 GIT binary patch literal 100097 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 l8bLay74+E3;;+DksJU3 literal 0 HcmV?d00001 diff --git a/stable/firefox/10.1.0/ix_values.yaml b/stable/firefox/10.1.0/ix_values.yaml new file mode 100644 index 0000000..9749061 --- /dev/null +++ b/stable/firefox/10.1.0/ix_values.yaml @@ -0,0 +1,41 @@ +image: + repository: ghcr.io/linuxserver/firefox + pullPolicy: IfNotPresent + tag: 120.0.1@sha256:ac3c8817dcbf6855b05e55db4799e36a8b935bf57fcb27f9fa3ff71263ddd3de +securityContext: + container: + readOnlyRootFilesystem: false + runAsNonRoot: false + runAsUser: 0 + runAsGroup: 0 +service: + main: + ports: + main: + protocol: http + port: 10131 +workload: + main: + podSpec: + containers: + main: + probes: + liveness: + type: http + readiness: + type: http + startup: + type: http + env: + FM_HOME: "/config" + CUSTOM_PORT: "{{ .Values.service.main.ports.main.port }}" + TITLE: "TrueChartVNC Client" +persistence: + config: + enabled: true + mountPath: /config + varrun: + enabled: false +portal: + open: + enabled: true diff --git a/stable/firefox/10.1.0/questions.yaml b/stable/firefox/10.1.0/questions.yaml new file mode 100644 index 0000000..938e88a --- /dev/null +++ b/stable/firefox/10.1.0/questions.yaml @@ -0,0 +1,2879 @@ +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 + label: Image Environment + schema: + additional_attrs: true + type: dict + attrs: + - variable: TITLE + label: Title + description: The page title displayed on the web browser + schema: + type: string + default: "TrueChartVNC Client" + - 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 Minecraft Server runs on + 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: 10131 + 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 Config. + 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: 0 + - variable: runAsGroup + label: runAsGroup + description: The groupID this App of the user running the application + schema: + type: int + default: 0 + # 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/firefox/10.1.0/templates/NOTES.txt b/stable/firefox/10.1.0/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/firefox/10.1.0/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/firefox/10.1.0/templates/common.yaml b/stable/firefox/10.1.0/templates/common.yaml new file mode 100644 index 0000000..b51394e --- /dev/null +++ b/stable/firefox/10.1.0/templates/common.yaml @@ -0,0 +1 @@ +{{ include "tc.v1.common.loader.all" . }} diff --git a/stable/firefox/10.1.0/values.yaml b/stable/firefox/10.1.0/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/firefox/10.2.0/.helmignore b/stable/firefox/10.2.0/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/firefox/10.2.0/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/firefox/10.2.0/CHANGELOG.md b/stable/firefox/10.2.0/CHANGELOG.md new file mode 100644 index 0000000..e3a653f --- /dev/null +++ b/stable/firefox/10.2.0/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + + + +## [firefox-10.0.9](https://github.com/truecharts/charts/compare/firefox-10.0.8...firefox-10.0.9) (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)) + + +## [firefox-10.0.8](https://github.com/truecharts/charts/compare/firefox-10.0.7...firefox-10.0.8) (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)) + + +## [firefox-10.0.7](https://github.com/truecharts/charts/compare/firefox-10.0.6...firefox-10.0.7) (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)) + + +## [firefox-10.0.6](https://github.com/truecharts/charts/compare/firefox-10.0.5...firefox-10.0.6) (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)) + + +## [firefox-10.0.5](https://github.com/truecharts/charts/compare/firefox-10.0.4...firefox-10.0.5) (2024-01-21) + +### Chore + + + +- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) + + +## [firefox-10.0.4](https://github.com/truecharts/charts/compare/firefox-10.0.3...firefox-10.0.4) (2024-01-21) + +### Chore + + + +- update container image ghcr.io/linuxserver/firefox to 120.0.1[@ac3c881](https://github.com/ac3c881) by renovate ([#17351](https://github.com/truecharts/charts/issues/17351)) + + +## [firefox-10.0.3](https://github.com/truecharts/charts/compare/firefox-10.0.2...firefox-10.0.3) (2024-01-15) + +### Chore + + + +- update container image ghcr.io/linuxserver/firefox to 120.0.1[@34df0f7](https://github.com/34df0f7) by renovate ([#17232](https://github.com/truecharts/charts/issues/17232)) + + + + +## [firefox-10.0.2](https://github.com/truecharts/charts/compare/firefox-10.0.1...firefox-10.0.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)) + + +## [firefox-10.0.1](https://github.com/truecharts/charts/compare/firefox-10.0.0...firefox-10.0.1) (2024-01-08) + +### Chore + + + +- update container image ghcr.io/linuxserver/firefox to 120.0.1[@2bf06b5](https://github.com/2bf06b5) by renovate ([#16940](https://github.com/truecharts/charts/issues/16940)) + + +## [firefox-10.0.0](https://github.com/truecharts/charts/compare/firefox-9.1.5...firefox-10.0.0) (2024-01-03) + +### Chore + diff --git a/stable/firefox/10.2.0/Chart.yaml b/stable/firefox/10.2.0/Chart.yaml new file mode 100644 index 0000000..4352b17 --- /dev/null +++ b/stable/firefox/10.2.0/Chart.yaml @@ -0,0 +1,37 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: browser + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.12" + truecharts.org/train: stable +apiVersion: v2 +appVersion: 120.0.1 +dependencies: + - name: common + version: 17.5.0 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation. +home: https://truecharts.org/charts/stable/firefox +icon: https://truecharts.org/img/hotlink-ok/chart-icons/firefox.png +keywords: + - firefox + - browser +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: firefox +sources: + - https://github.com/linuxserver/docker-firefox + - https://github.com/truecharts/charts/tree/master/charts/stable/firefox + - https://ghcr.io/linuxserver/firefox +type: application +version: 10.2.0 diff --git a/stable/firefox/10.2.0/README.md b/stable/firefox/10.2.0/README.md new file mode 100644 index 0000000..af8822b --- /dev/null +++ b/stable/firefox/10.2.0/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/firefox) + +**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/firefox/10.2.0/app-readme.md b/stable/firefox/10.2.0/app-readme.md new file mode 100644 index 0000000..06d4ce1 --- /dev/null +++ b/stable/firefox/10.2.0/app-readme.md @@ -0,0 +1,8 @@ +a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation. + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/firefox](https://truecharts.org/charts/stable/firefox) + +--- + +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/firefox/10.2.0/charts/common-17.5.0.tgz b/stable/firefox/10.2.0/charts/common-17.5.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..3a5534883aaac1a331bf10ad166cff7fe5d2dd75 GIT binary patch literal 100452 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 z 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 Wm9Bh-<^K-=0RR7ge;?HVjtl_2wPFzf literal 0 HcmV?d00001 diff --git a/stable/firefox/10.2.0/ix_values.yaml b/stable/firefox/10.2.0/ix_values.yaml new file mode 100644 index 0000000..9749061 --- /dev/null +++ b/stable/firefox/10.2.0/ix_values.yaml @@ -0,0 +1,41 @@ +image: + repository: ghcr.io/linuxserver/firefox + pullPolicy: IfNotPresent + tag: 120.0.1@sha256:ac3c8817dcbf6855b05e55db4799e36a8b935bf57fcb27f9fa3ff71263ddd3de +securityContext: + container: + readOnlyRootFilesystem: false + runAsNonRoot: false + runAsUser: 0 + runAsGroup: 0 +service: + main: + ports: + main: + protocol: http + port: 10131 +workload: + main: + podSpec: + containers: + main: + probes: + liveness: + type: http + readiness: + type: http + startup: + type: http + env: + FM_HOME: "/config" + CUSTOM_PORT: "{{ .Values.service.main.ports.main.port }}" + TITLE: "TrueChartVNC Client" +persistence: + config: + enabled: true + mountPath: /config + varrun: + enabled: false +portal: + open: + enabled: true diff --git a/stable/firefox/10.2.0/questions.yaml b/stable/firefox/10.2.0/questions.yaml new file mode 100644 index 0000000..938e88a --- /dev/null +++ b/stable/firefox/10.2.0/questions.yaml @@ -0,0 +1,2879 @@ +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 + label: Image Environment + schema: + additional_attrs: true + type: dict + attrs: + - variable: TITLE + label: Title + description: The page title displayed on the web browser + schema: + type: string + default: "TrueChartVNC Client" + - 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 Minecraft Server runs on + 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: 10131 + 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 Config. + 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: 0 + - variable: runAsGroup + label: runAsGroup + description: The groupID this App of the user running the application + schema: + type: int + default: 0 + # 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/firefox/10.2.0/templates/NOTES.txt b/stable/firefox/10.2.0/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/firefox/10.2.0/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/firefox/10.2.0/templates/common.yaml b/stable/firefox/10.2.0/templates/common.yaml new file mode 100644 index 0000000..b51394e --- /dev/null +++ b/stable/firefox/10.2.0/templates/common.yaml @@ -0,0 +1 @@ +{{ include "tc.v1.common.loader.all" . }} diff --git a/stable/firefox/10.2.0/values.yaml b/stable/firefox/10.2.0/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/firefox/11.2.3/.helmignore b/stable/firefox/11.2.3/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/firefox/11.2.3/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/firefox/11.2.3/CHANGELOG.md b/stable/firefox/11.2.3/CHANGELOG.md new file mode 100644 index 0000000..80f8e2d --- /dev/null +++ b/stable/firefox/11.2.3/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + +## [firefox-11.2.3](https://github.com/truecharts/charts/compare/firefox-11.2.2...firefox-11.2.3) (2024-03-05) + +### Chore + + + +- bump everything to force helm release again + + +## [firefox-11.2.2](https://github.com/truecharts/charts/compare/firefox-11.2.0...firefox-11.2.2) (2024-03-05) + +### Chore + + + +- force rereleases + +- update container image common to v18.1.6[@904d84b](https://github.com/904d84b) by renovate ([#18835](https://github.com/truecharts/charts/issues/18835)) + + + + + + + + + + +## [firefox-10.0.9](https://github.com/truecharts/charts/compare/firefox-10.0.8...firefox-10.0.9) (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)) + + +## [firefox-10.0.8](https://github.com/truecharts/charts/compare/firefox-10.0.7...firefox-10.0.8) (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)) + + +## [firefox-10.0.7](https://github.com/truecharts/charts/compare/firefox-10.0.6...firefox-10.0.7) (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)) + + +## [firefox-10.0.6](https://github.com/truecharts/charts/compare/firefox-10.0.5...firefox-10.0.6) (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)) + + +## [firefox-10.0.5](https://github.com/truecharts/charts/compare/firefox-10.0.4...firefox-10.0.5) (2024-01-21) + +### Chore + + + +- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) + + +## [firefox-10.0.4](https://github.com/truecharts/charts/compare/firefox-10.0.3...firefox-10.0.4) (2024-01-21) + +### Chore + + + +- update container image ghcr.io/linuxserver/firefox to 120.0.1[@ac3c881](https://github.com/ac3c881) by renovate ([#17351](https://github.com/truecharts/charts/issues/17351)) + + +## [firefox-10.0.3](https://github.com/truecharts/charts/compare/firefox-10.0.2...firefox-10.0.3) (2024-01-15) + +### Chore + + + +- update container image ghcr.io/linuxserver/firefox to 120.0.1[@34df0f7](https://github.com/34df0f7) by renovate ([#17232](https://github.com/truecharts/charts/issues/17232)) diff --git a/stable/firefox/11.2.3/Chart.yaml b/stable/firefox/11.2.3/Chart.yaml new file mode 100644 index 0000000..d2d845d --- /dev/null +++ b/stable/firefox/11.2.3/Chart.yaml @@ -0,0 +1,37 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: browser + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.11" + truecharts.org/train: stable +apiVersion: v2 +appVersion: 120.0.1 +dependencies: + - name: common + version: 18.1.6 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation. +home: https://truecharts.org/charts/stable/firefox +icon: https://truecharts.org/img/hotlink-ok/chart-icons/firefox.png +keywords: + - firefox + - browser +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: firefox +sources: + - https://github.com/linuxserver/docker-firefox + - https://github.com/truecharts/charts/tree/master/charts/stable/firefox + - https://ghcr.io/linuxserver/firefox +type: application +version: 11.2.3 diff --git a/stable/firefox/11.2.3/README.md b/stable/firefox/11.2.3/README.md new file mode 100644 index 0000000..af8822b --- /dev/null +++ b/stable/firefox/11.2.3/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/firefox) + +**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/firefox/11.2.3/app-readme.md b/stable/firefox/11.2.3/app-readme.md new file mode 100644 index 0000000..06d4ce1 --- /dev/null +++ b/stable/firefox/11.2.3/app-readme.md @@ -0,0 +1,8 @@ +a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation. + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/firefox](https://truecharts.org/charts/stable/firefox) + +--- + +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/firefox/11.2.3/charts/common-18.1.6.tgz b/stable/firefox/11.2.3/charts/common-18.1.6.tgz new file mode 100644 index 0000000000000000000000000000000000000000..3ada4bb6e11b85db0cb91d1dddb95d9177de3af8 GIT binary patch literal 99389 zcmV)KK)SyliwG0|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-F~yv>9?DW?;6ckr`P%pG@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?DAdb8fEeCc_;eb##v|DVGkLG+n6fTjGu+3YvE-7Np_w|iUu 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!;XHr`v6#vEM#u_^<){jm{x#G)ArdVFz~n zgGR6Ab-D+wZUgp~`9D-b#ORa|wi-!Y(qP%BH(M!|T?AqCu-6)Sy+(7?Y;?SXQLl$Q zuM0=b=J@cSH}1EZ&4veIe+&`yMjhDc`^`qT)f$PFG=Qljq9FJRV*f?mzQO|FT z{EoL2QIGgaDO!ywFI$s^4X&Mf%cAK)x7+BoT1_AN9lzIVA9gy8W)mHF?Q!4p{Z98_ zH0t{PL9^?(V1L~3VQbv$j2azp)apaH990-ZI9!9EvYa(Hn}?~V4D?Z>(d(k-A@U*Y zjC+TTw%_S>5b8I2jc&8qgq?%-VW->f`Dk?58Mm9GUa#5eb^47?w|lS@L+ZtldDGP> zs)8Cv86;ws&p~T68g<6wgTq$;pwnu!MyNmPq7FLjj1M~P&bZY*Jm~iiN3h}bny}yM zAGQv?5$bxV)9AvbDBdL_Im3!%m}h=(k4) z5H-ghZ1NHZ{ZYpoHxHrTfbG%vuyN2sqvce*pP)5XH!o$am_|AYTVAU-9(Oy)?~IUt zh&tmYJnT2yt!DFZ1Y50fzuRv%dfl$yIPf}+#>hkCX4m%`2jfH3@Ru*_#jggnB|cg< z)-!yE#xRD{{l%{u;ZD8NO6Md(e%EjG{noe#dn5ngpfy6>Zu1Zw9(b_j`EB28A2bge zjqX9K;U6?c2W^OY8i zj@y0M^&8%Sf7tN*osN%MZNGWY?Kk>|jl=GEH0pN!)?ufEyu+q{&~9~_<6fiPU(Uy8 zFvidyJrrYAtr+26>!5ouI%pp9HQVYpd;US^pwk#1_=lsmchKu~JL6`*+dJqryN6!4 z)$7BichGD2{qDGZc;GKZI7U8xFo8v-Vr0=_r`b9Io_E+AH=E5)+w%_&#$CU8 z=#Sgo)@a-xb-Vq>xOvd(j(eO5G-1p4k=I;BT@p^nBd9B@6(fAu>K&j~`>@sbI&kD4 zj{HWuiN?JaJb-P!)KRnB?lrw}d)#aG4;#Hk>u?M^qu#jH_4>`_%w0MEpzy=h1)y5Q z^K1>dvIG8?K3Wk{4+0|;koyXkd*)Fpwn(8!z*q45>m5& zaDY&EZ45YlK_m#gn%ckM7`;tk>_3#=_c%rqUa_3wDeRTRHqh39W0P1g{Z^yZY#cT_ zh65b5M+c*R$M1E}$Zzz=hlky6v(xXk4-eWMuf?ZhV~kL@>9=6JH-`P*=n#%z@8FP2 zf#Y>>co31bjRy%(CNM>L3M1txJVi08S9ZWr8nBcW^`!3`^nK)WIUo8WcmV<*i!f3c zFTfpI0E%ZgfHBu-IOM<1AP)bk;nYhoY+XTp#Xi(nR^YqKc~K~sa-12f(VmDGjO-#Yy) zYQgvp`2bRlLcPRMLv>ie!qf%=g$JMRYF#-H|C-=9+i~<%8a=us3UXg<)9I71LCkw27m~=~^~G!OzCW z5d8ghv)(+cSSqb$X-;FBbo30LwR)B)g;zKj>USnEd#6xu-Vy&ZnzB_|&1&&q%fMzW zO0KG>3(}t4;)~^py#s2BRzDFc!V3izz)vWc0fuG~XZw1+MvziXbBTzs3CI;+Qzs(z zfOs&l%H*(%Ae*MxaS&E%@o`|i00zS=$fk9$E^4W9Vn6d%n!P6>iTR3^wlgd28~pt> zXx5vZTB87(begz|(HMU$0(+^9D3VF&VNWgRX1;M?PUM*^FJ}Oso>L+a%rv5nG{e+= z%l^C+ixAFAQOUs(XG#x&E?m{tg`V1vGF!^c`7k?g>);JxQy|Uq!V<|>k(}au^dsrE z44^wR^h$n<7zJ33w)F52Ungt0w6f-VwK!zk- zE6C9-yNX4GTIs5>GD4Vzz`?(RA)KT}?!t{~IVzceT2Sh;XP6l0VfSbxA_b6DiN%YE z2q$ODA+lCjbVblBP|>%1o1&cj7B}Z(LlHCOgbVl0`7n=dOd<+Ke43c3XdeiY<^o~m z9IyjPfgMbmrRGj)B&{6EKGaq*@*X3e@0w)~mdbT^D&tv!YPY*Dk${Ol4B z!e3W-F#fV)5&l!*b}&IJr@fi8YMtf-aviGVid*?iOd%)7Npa)p+>HEUdqS9R{tBJP(J9l8FYmSS&?h&VvDhalmD52Ic81-zO1dNsRW~qdV>LkiZy*3@K#;dMtrK zumJZYz7x9I8^qD%girycFx(eR#1oNXTz3*@ya{hZ9OIFManRU9<`_>Uq(~?NNf_{1 zy&ws=hoPA1OsZ&*ff&=f$`1I~zhX50_rG76%tMmoH5lPK#S>b;I}ou$MsA_|G(z6~ zjw)CWWq1`1C#vXQTH|>W2GJC@c1smdLF5OhpQ8Ly5T4z(vg1_r66O_n~Ka5 zN>7F{3fVOpn|OCFBXXXtoeb1mUr|7wYhh~?$qZh6;i;u4)zTd1s^o=1Bd0&2RM`xT6HvjR#YvzTA0I7FNk@CO z?JPP%Mw%*ky)>9G3w8v(I~4jt)Qb@iA*Y=8=on8xrz8n{KE)^sS>0?)s$x1jB>eoA zu7^*lVb*(la0;mo9Q8*&_Xtm>Oy?^AS*6({pPy{o4lTV^$K>M*sL=wXH>FSftRWt z)}~ChW#Az+6T_>`!dLRmIk`vimBL3AmI{~=SY>bJCs&*nLZ9_Y_(#A-lxS3=&OOpu3aE6!&n3m4J!dfbv@ijqWk8p{5k6X_81itg4e z1~N+mhNA#k;v!*F6ayp!@L$ng&2L9V-~bH-@8u|PDMyP_a}=PMZ~;oVG|rp#-ad?Q zjZbX4FF~o12^6UPN?{Aec{9~Xg_ff=Vqv>druWd=wInb-{6M#&IKRTc=J$+nfdZV3 zRhAPDluMM66iNI&(?Rr`g=6dx zLeGOTWOb#wy%2m9Yp^oan`+(mf*vK_9b$z4Dr z!bFFj1mTLC=vy7Z63Vhn+X(yj>qZZdi@%}d%92Cspmetr&f3$zPh{6KbzY zj;9$h%gCU~P%Az`uM7S!yno?{%u@!<*^rNf=O0H(t8V)`+5(I*3VgY33Gdu2Uy{vO zJM0eMWG7Z^=neq1{UeDz#HG?9TLj4Y^ga%(-*+?mGg_Sa0~?%FWMsmc^!?2gfwL1c zG|9-wB$}ptqKa>7`a|jRzsDzzkH<>k5)l-_gd_{H8V9QGo?$~auu*p$v~5**ki~3B6zh* z83M3aerzG)4-ga@u^e9P z0_o|(;=B;vhdMW%R^pOu#K{qv~>VpX<=ml$e+W|v!m}evVAUZ;%nbi#Y=ln z6)#|fRsPO_T`IR#iuX&lO1YvkQ!}r7J$%nR8*6tyUK<9KXi`w{AD5CPGeZ`tJDvKE z99GI@_S~*4`dYLriw`*TVwJegdP@tJ`i@$UTv#7)CH{@tbyX5DvF4;AS+AIvYRHaw zUyYdx;1C3uiadQY$OdU~iyNL!c)KYe6)`LK8$CPK;X{V$C<#W255jE`2XpE60O3Wi{3FN5N<2Bu{sPv0wnItxjW_22azhx~_AsjU1;NRx*ta}33bkb&H9-=CS2R5C{~*XgHP{LZ(Sp2ua|-T~*ut;)`V zgled!VO2AQspyinSTlYZhC0=6j5-xB7AeQ(O7zaJQ#MC57p2YdzY0D_zOwGfHiYL@In97RB64s|;XTVqKVCKoUQM49`(5nv}tH zORWtX#jG}y4v(dftumIU4VO^m)?#7(KH90ZQP1B=c_2PJxuH<58fExdg}#FB3c66 z11j)&Plw;^0TaH$`HvmTD}AJ7KoeihznFqBP9yA*4}28G$P>Zm>He>qtfbi9Xy9e> zISxN^y5U_v0k2)2TXTR^?JB3eJNQ zHkFDb(FYTn4Rcz#UIH*-Q=$ACe}Wxw#8&~Qo(E%*?_6n3BK#vnGKX=Tgj@wkD2ny< zJwWAdQeKmmTP$zomW0{2o`)iK>xUUXSLs@2q2wdVZn5q3K#6zPy*0U~^lQOUZ(%%f zYC|sN-4=c$2^;Z6e9Ono^qQRJFW}#`aXyl+vBbdfXWZE28gK%`UYf zoS{B;ttI87ts;WN*T^ozDyVICQK;#cNfa*^lQ<1?^Kpz#-({+BSmPEJZb|bpZO_Kv_(TseN|Ma+;TulwOd{` z#j(brB(4y7w9CIRa)N4_aHA@(E2HUAM*5Az;-5cUT@?9i8D~DB$4l^5?lDW$2z|}h zMX5U+1jBpGys5R*p^wsdq;5x`w`W)Lj#=bIUwg{qDlg0FD^2s#oRvL9Np+(C@`fco zZRp0Nyp)bPcVaFVgn5M0drXvrg1omQXS1+mN5p6Cg7ZWilaTXMi&gVcu;Cllpn3jN zc)T@D9>wad`p?Vp9b#FndgkmeL;%JUfue~fJvPawq|y&+HNM4*e6}?o3mqL=Sq2?; z6~(dNP@^%hXuoq;MAm% z!!c#nyp#socf6Ez!jyQOV3A~1Z_n9?%X9%kb2y&rA6d>&&sq#Eshs65oKsWY-jwwP zY$Rqv*NJD)idAy5^5@w_dD~#g)ft%_{niIzac#ERt)?W76>*;o{2m}u)@|mga4Afj_;|J}4wZsu6r-9J&`50i%t_}m6rs>Z zp@$I#JDbF+;)T)VQO6}*QcIXTU*3-zlxxl>h_aY06tePiV1q9chL#Bu^X%Td7Aaz7GJIvTOO@=SH^a;G z_cy2K{{$ze!<*~($2Vsm=Fg!!ToZyfCW0|Sa+8PPHV#yd>nUBidX;1IKh6*7R(HPX5q8UnC z3(y353*EfDbXoX`%Y=qvqfA|G)UEGw(99L^5{5=g?H6LYaNG>ZZQ9Jzn>_^@;uctO z3G9DB&1@>XR2>|P<4h{Xl*Ay3eDTxPD#RG5p4L;SF%qd5IY zVagf7feuB~KLsiFV3aU*{whvCoHmqq)t>Dmi+Gpj7=mbW%O{X5BKx2+tQ+8(!Y697 zX(tTvTF<}%sKQ8{SE=;r=68{?#sJf}=50~xOS+4$x6*B1Qnud}u5{kSMKT-lwL6w4 zHKAt?z0B_cXr<+q(;R1OfP{eJa1x+e$mgI!fvP*J$-TG(SSh`CC}O;VhN|zBQ-CF$ z3o#J(-mgyDwT~jjzokN!aL$S5-e0Lz_(zcb_b}KnQuiQ#i;KGN!y8mlF`UK9=?b#hGV`! z_ztF+2nAC(M_`0dn2wda&UTyxeA5>&d|Th9!YIIb2zaF!-7XO6uxn8OJp^8wSZfC9HE%a=T*6fE z^f#?VqnPVVB~6Qkna&p%Z+mg6Sas=NpsCAmU+%*Q-_}W7ENpA?z*C;CsMAizGeX!3Wa4=QhI|zGMlS84azUGD8!Z)zt={bKX}+m5 z$6M9Jl!?4~MXfql8EZ!}5~BLjZltHSd5AK_QDIj+dDX<8bQnY8K4o#vUVwzZXE5M{ z%y_v`0K+?#x=Wo{=@sITWwbDMDJ%$h@&5e0o{o&V%T{A2ucFs(GP;m6(z+cbcMt#j z9GGm)o117_sxO*ksXAayu{VS;&JLrq5VMmv+DF?fLVcvmnnYEC_Bh1MAL(GIr*+3P zvA8AA-G5~s!Rzt6Mjk&drVk8V!E=|65xFNSBA7vStiaB+D9PXBQ> zycvSIFcAK&0M=2O-~HiWg(deRLn8L}Z>e6Z#8){JZMPWZ2dVS{;h|_kx3z|UMf`X2 zlVd7Vt5UgJ{&#|6j56oz@`%cOa-7!8{XNm-)`Q*@-A*yP6_d#IhRdg7%%s6mPW4rF zEz=!ZR1NbNa=8BTt3;%_>s01%dG+Dx`RVbE*7|R?!t-jEORPQ=DIN9zO=hpA2u8P~ z;Er;XcfmdvDROWBuT0SxL4Q}k5`6?eUSGcBTA8@!iQIC|aLa_T>2GfTEmzg_C7%ll zr|btHG&3$XgX;Owo73}ZK>;@=-43DhjrOPh$X2h(4lHT*?a}+Urz;yh=7SEVm;r0h zcYrpDq@IFU9d=9!Mbb>f`A4cL>pY(NLPFK-PRh5W@4102W!zNVG-d;1$C-%|mSOh? z@E@rrfz1fUGZ?xyfh<-Ie8*C-tbsX(kc-C%sze-yaTybO9lWP#oCKMOxvV%UgJIJt zCkS-R+4qHD-&b$<0Ggvv_K74+1gfPuN*yx_P@^{hHl-@5;&(-G$ONJB%o=lfc9Vty z7D=4uA`r~t8&N)81{~S|RI3~p4j6~v`p4sTyM3r47cA>TK9pa$s|rj+C(}SIPCD5k zG3(W^=n<1Y%@ygU1<5YKPz-nR#8<<3;X2&xWb#~^uqWe8q^)P#Bi%_}ldhOyJKc$C zyZ&D?0O#*@ID@~D5Z=?eM`p&IO2JYWn1CH{j<_x)ZouUfNFA+p^TW2O^m; za=T{Eg)Xw05v_3>fKfn3<_iv|D8}r^n9RiJADv_ZALO_#>0kjtCwJ&HJ!#5jb+j(| zu{`gV+Eo=F$(vVInu_As4X`7wBGYa9EB)%QYBxP`+R6nBQz#4dN0kxj{#Y> ze_T!8kRC{_fhrGCud$6J}l;+FG-0jM?`jYicfp*Z3#$M4phKIsyxPaIPt zjPc~KQxCw<2T2@IuGK_|2=Y}|7^=`LURZ+?V6KsmY3k{*So5wIae)!(j+{J6 zNt9t<+{Yo(;Zi+%n2&cz7*biH-d~>&b@r3g|C4W-CvUiVk|M5|^uTmTvzJ1dMDf8UJuhM7H{-`YGMpjuJNI>qST7S3_Yd%Ta>Ycxf7(y8))s z%O2pEv7rF4jeJbvs(8riy>>y6c0%Yc3DqFfD<{<_>rXht}=M>sFT+ zj28iZ{Xi)8-RPNX=JWN{PGXwh{{b9Dd{@djojdUhIuaou(5FCO~*;CErd7MIMYG~uL7A={U+e{XW<4PJu@VkxoAhb%#z>bJZe<@I#=dPMwTguE0j z>c(s3Fv;9TFW^ogy^>ZC9oss1t*mBgC3)ff_jK-Ei1R`Im&9INW3M`*10@{1^}r2Y zgIC354)Ca+FdXPHu7X!S_H2zfeX21b?3jJ5g6~09?!;Wjt6CTp*W-F+)${;VJs1R> zM%82DBN5h%VjbOEEe0WuT&wx1sk&X=-F2_|$76tgO$kutx?44Kg+HG!2J^c1rAo_` z4$^DsrRhS`W1Ih-8+pEd{QTn4Lujp(rOQ%h?su1`!diXIPn1$PWmDdTRCU)$b?L%U z(HR9KbZJ-Kni`d=OYtIlr!cZh!d;hc0}mS^9dEPl2->GC=pmad6RbJ^ME zavv9&JohR4`%6pRU(d6q{-=bmN2!0S^uJc8ozwps{q9!(dx=Nte_7Ef8{4k@pKwS~ z%#i<34bIj!`0{fDeC18lg9-ov*Ah*9ZaxfH#`Avqw1yNX0*&ntVmnqm#y)sT{Z7ccO)KjHw<1!ZWazoT$Is94g8N{_Hy(9?w+rIyQP zx_Vt?S2n+deFCV$nL?jG51f~>?C;>$gfLU51`wB~tgUPeaR9375<{K6h6CJ}0Cc(v zwepIBnX7ATY{G84ln|zGUNbC>v(ONSK9~PGS-EH}*gm-rC3ODRgW&&hnBLO$uX64mKhXlP zV*R%pIsL!c*y{f;^O*Io#(G1#KVN4G;&SyrqiU-`}67P)$PU6yVK$6^@r2z0jQF&%D-LS@W037>axL0Q)27!_+F>H z4pqu);YI+W7>8^Os(+d9{bgQFVTlZ=ik4iSJw7|RF8NC5p7^?(RqqS%D$L4ldkf~U zEJ89@sBSfG>GBW5qqhu?dGFDf0Py44_31B1=jUb+^^4of_cw1Y-(Q^E4&T4IIK3Gv z<4zW8)?8uMmJL}?3Ds=5Nk$MLoTt_zzJS$QE?UX<&cE91rJ#Qii&yP|CND0TJ;vI# zoVME5q_c6aN8&$}?6ZAV$baf$ndg@O`rUR;{@dz*FY`R3{HJEmgXBL|=T9#GStm!& zEyrzg|IO{A1t9gL&{sz-Eo9R83CJI=E^d$B-~1$Y+E=NN^EXE(d}>>}pm0-NUxdZc zyb~-FI|`*sya_3U%tONz5Vn_-02}pgJyapS0Z~A_jjedy;R&Dyav^3KDy+AO2xY3 z{ND=2`FYO>^iEG#kn~{$5G3zCf#wC$<5pIGR#|;5L*-KWPi6sln(==P`+vKUk^h># zes_ER`y!8#|MVS{`UWSpS`FKkNU|Y&Tom_5Tu&S^qcLTWdF<0h;;qARVx3swscFKb{`wIz1*d-WS(* z3HL`ssu3ZqNMl?=hLqsuwq=EEs%17CjjW<+zgqk3K}9RL}Gq=K;OaKoYcqxIp6 znCU~rz|ZgBoZb#kkFQT}M2>BdZIFtza_Y(`4_Wt#>+CAxLOzY1ybXy7pQ#vncQ~BX zE5Be70%|Tab-(M&Z2!st4DR8AR_;P_uahOiD3WociO8laE)^6Br~hQVUg`*W3(mt)8n)b2r1=;pOqq{P+GG#`|#+7Tq@P*D3Mt zRQa2uo73Bqvujl)z$2@Q=(8-yb@kiJi{n!%ZZDm#<{EHU4!;@Rz8{`m53i2af|5@9 zER>_;?yY$Maf2sf?ahFTXk5pkq!{e!982y1lx-{Kr3U&(DT8rx!Bt zCU1jSyLEX*x@k%1ZNn!+RrjnLuqUU(o7=OiC&RUGYd668j2w1v^_k)mn@DeWHw~Qr zrMP%Em-0Q2{ z+7a9_qCCJAytv)3Pjgu+|H}(!pIiU$wtM}o|6ilIjsJa-$H@P3tidaNu?m-1_|j6| za=RHN0N_yGR;BNQTVE?svq}NB{JTexqASRzOL9l#py)bPP#2baSF?~;Wg1_^3b8IF znMdjxds@lgSR!Rl6&WbAoK_qCe!p7549!wqWToq3P2P1P{1+=aB3J$@IAU1CTTua2 zE{g`F{%vuZ{N2`{%3?L;p5nNVYX-+zos_TVQK$uNaZ|O-Ma?;%8Msvpcg0+j1GV|7 zCgE;)rU^iX5Mmd#>5!R;YJf?+#Ku)~}dFWITc-d0nrl!MJ$J*05Ak8U8K~aPL&>=PTi|mDR zFhoNqINmrhOxpz{$y+>DX&CGEH=TW!d#62(6`!en{w#yn-f)dbeB?UNC0}K38a4E5 zVdobS0@ZsQqe%i|zv>=9n+AD%hN!J?Lb(IxEW1y^2ygYq|8hJjtAsO`7PWyx;Y z(VtUrf2^R54L-~DKR#MdRQ^`$fBk-|n?3(+H@EqJU*su^|K$wji^TnEHm7A%UQAzI zR4rvEwKNTEu{^6pkd)cD0l@Pp%%6OxH|5eyemYfVMdYu25MB`Ro1Ww-aAi67(hQuU zSk*|$)m+s)4@^C-mZ~6@*1AdwT}Hzs+81T4@WJ%P*%^$ogft)4p`{g5xRjhJ&{Y&o zOIA~JK(z?MqX}zi4NuYh)|j}8)|Mn)NbG2J$a;b5yavG|6t5(>jhr)&^B{^TUVFK@ zoSDPrbX5f(Mp!f1mUD&_^g~IT&gKFj>kxO9UbBpLQtDq#I$7>vl+)_oQo^NxA4)e3 zz5v7us_p*(PD7f+NZqgojFMqrZajlH1QGG&1*v!pl8~cg=a$GPx)8pvRZn@GdTG-35tovkd-dyRgzG={Nh z$ktKMS6VYihY*ko8~;?4@;6n*s+Ll{776!%06(7nxI&(IC=1H&DaDq>)iOrv#e^RsW>}~$l{6gi4-z&^ zP2n_EEdjNJv}K0J2k8Gx?LTI!KCAz4yOWRqY`3@m|1a`9WBg|!qg(0yYij*DV?gCm zPd=Z=DkoVO1mylI#&aB?2|DFmL|s3q&y|)t&K|u#IlH<2<@)UAbcr+V@bu>W*@^x0 z?b%BPmkv*_j;@bxF0Tim`nPHYfU~Qcqc`WL!`nAU$3LH5oD4uU9J2>x9Rc9yv-9)e zFK0K$KMmAf9i{PpooqUizilQR33!Is!OnWIgPpS2!IUhwr~f!Ue}8g%a&da|%jNaY z!`ri~51ry9AoET(4akFHEv=)QZ!Xw!1;Kiyj>pBMSdmtC8$bDV#7}0J zudMV2uk?p-xv8jv1Hc7R{zFKi=%cu@SXdDG9$K%Y_4sO*_w4g3f<5V?W&&5zTiz3c%p>$^YiCQtyZhR2!G&eDiGP< zd+ZG6FbK{?Z41-XXt2ARjp|qjraX#YMv6c;DgW5zds>WVs@H1Pm!~u>^qH~e{1RH( z#U4qpqZGu8QVlxoTE8;%v)REqMEv~OM7Im2GYY^fC1Ti=^98@N`s+v^%I#!u@Au{71i?&HvnM_8Z&%|0N!| z%f}@A-(<9r-Cxd|7uowoQTbc$ztU2bP~=;lOuVk@V13PfRrg^dyQ-yfl`=15g;z~~ zfC2Ue=P`s_M!f8fb4ygW0JcC$zx(!f-+s}3n?}eRJb0N7Bji0| zzH@ZlEuTLri`7SU_Igd9HP?hb&nsRV4#e_j11o5QEk(rFEj^0n&w&$F2N&xicC(03 z6;vbQSM{q4c}=x7c63T&@p`vtRk>5)#ki7wZ0=+uVlS{}3lyO0UQnIBUzc_1DZPY+ ztvRymkMBC{ZsU!jj|{~j49-G^;xY8l74aP`US#^Ok8hMgZ`q!ZK3`~e&`)lcu<=@N zGFz|p24WXkVor^1`2SvaoB!)&9--%* zh`}Brwh0Z;M^Qi)GZeC~ObIl-TvH7+OW;c=f~N5&s)8_zXsQVs5_}7~ph0%44Q{o; zuUQ*3YjtD#Ahm*-0hmGNP0t;%dpTw=sGVfQ5S1<3)n)T~>`UpeFQdPHZMy4Mt+&3o z&YIO%v&;VgWU$Mssb5M(eR1{lTT)G*M=kw=DruoQy4GA(uWSwUrM1uASD4vu`>gYn z>i-w zhhS?3*jfR;W-EZ1sarF^)(o&U18mIzTQk7c46ro=Y@e_BDbxQ^=tl%^Li=AM{;QL_ z|F7NM>i;kDsH|0Tus5Oo>xuJnx<8dEgM{+GCofSF2`h_@04l+dvKXvs2uM3+DOb-D zXQhXNehbREMs};3Z&mY`Rn3zTMNHjt0DV73l%h4YVzaZEdK(mec=Hj7*+X#=b-siU zwrc+$2H1P*4L~dQ|4yUb%-;XgZf*Df7kQlhUkvspg#ZEY4=D+#o^9+@z-$YWDcvk0 zc}u&!6#U|7?=xR)+I2^~fB>i~8LGtz)vE6Y2!! z-;!Vlp#XBp9p=z*tmyA#xB8CL@6*H)XIs2rb?^aO!GYE>-l9tQN<~*N2SCp)_ zo|Hy~EVMyUttBrSQqUiUhWWKYRJNwOKiyL%|4&Jbeh35=KN`(&xGVzthO& z|Lioj_kX^~qw;@R!o8595e1L}2u4AIg#0D4v!#Wp@cp|qkuPVJQa=#FP<@;Pfs_I2HYomj zBY>t6)NoRu)^~aNjga|OX1ZwvGpUiMkp7Gopbo0?#zR@qy&FqxxOMxx0hCJ2y0zC< z*5_gg*6qQ$k?Ir#EycOTj$Bzpm$hXNw_`B$!7J4}ja!uy@p6vh82end)KKi#uGXPR z{Mt&-SQF_P^_L|uENLJsv6pMHRw z;J(*rtnvpJxES*Ha%qSg(dD$2T>EDn`W7)?l`K8UYdsROm~d@WdYsgOIU`TklLOvf z3)VIvD$Q_sjiLa1kUBN3_g3|$ssuk4S4!VomD;KjVlnnC`r>g0&*Q82?->s8Z(<~_ zQ0$?Q!3omcs{whvLNH_`0!KjrFy)=z<7&HyfDI5-DI-yY{Ava8 zWwJns=>lT5h!vw=q;gp1dg&$8H(@xa^EQrxpqfLyoD5aw)ii2LE)rU~Y^*s|_fX8< z!4OWCTcAtV&pH7+MeVW}qA|XEYMbKv+dQqZl#)z*ECyY^-UB`fnP!1gGD8uUglx6P zxg_afz0>fX*u4_1TwS$*!%6NSP4V$>;RsEk`cy9ubl+jer<3B|kayOfb?-uuW?g!z|l(8t)|02kyG@C$8H7zcO z{(f2)Wr{NhYC&Z!xoQNxI~4jN5w{wpT);umsHsLQxu{CC854XT)%6c0KkeG$m(zgL zgPQ2OAf2FGB>I^)o9Qn9XpS>Qig8sV>lbnrqcQ$i-7STr$S}zCU7ed}U)zjUb>HH$ z?h}!iq$*FnJdc09%&Way021jT&+lVZIOu)Kf%eo6u( z%Wyy^@5T&yPKtJEZ?-o0$Tfv zU*Oa5ih~wWgv<&l5pdJtsI9+93n;H|%7naU97o=NoA8pv`d*7f63EDvF|tXof!Q75 zU{_F%Whuu3nmq?espp96z`nS#ZWYQ!dRgC;ca&2;=N^^m5v%8?=khilJiz5G2MJ{; zK28x>vuO+Enz+k1uKk6p@~Zm9DJ69U&)_LRwg$_eL)G3ZTaC}bym3&4*N z|5oPz>h-hnf2~$`>;L;Aj}YlDW~#IIJh9EggdA64SUq=7qTKh2Gea%r45Y`4$ATrNdSxu037;%7`f6t~9nG z$?8Su@d76jdXZ=5xmxeP18O`PHZJ0<*#ECcfW5`D=KpH8d);jOPruXXZTJ6|ctrgF z8z;)&+Lz?;tF!jCBKFn1iA2Tfvjp5bQ}cnL_fFl-1mWjFrZ(qCh2uLUTqiK!sqlqD z^z(y~57y6@SwC#w5gR0gM}+b_l*$M77fT*_vBorA3$fK^!HX%79g`d!mzJFR z%dxQ|hzdB8*%_BZ`5mauE#1YMt#$mNmLO=;B8R2*aa~kxc#pvM5%b3u1=gE6R*n3e z$$eZlTR2Y&sYSVr)B-?$N2-+;DjB&lbl06!W%ZvlotBd6K@({yq>WFZf+>}1&LVlL zhHfRw*HUW^mtL9NzwS<^GaHDa>PPWj=9H`nkukTOi8!|HhPK_%wj0`ZL;E^5wC#TO z2j0&%e%_OP%Fcfx6jMwY3fTt|B(o=70kbOpv)|16|2CSft^dc1Ji?>nDl^!daQTSl zU)HnZ>cevP4f%Z?9}QVDipd;v7K370(s}_H5qS^v=~2U-41-_*5Au$u=@+ z$W+6x3rd!27vIOo3m~4UBfr6GAYy>x1*l5Y#J%+aVyJ3bu&YONZ^*}G&F+e_nbQR) z$}Ih!X+S2fsArQ^d@9eqWgK*}ljR{^Im=G0wtmXrgr72(Qk`X>&`q-`+89;;Pj!ld zS)ESzb!Ok1G)e!TY86!P5Q>U2`YneU&Fk)kJ}JZXYomp`xNT;u~{h6hCZF3`8-epjtmV%eb2UfU#q30n=-x1$V16EGOXztamDo^vQOZg6v zy{i`be!DZ(>cxyCA(J62N-nqG-G zs!C_0YC+NZjQBYNSm|t1^R!N9qvPS(rY<*f`kEfFRl_me9LnLCJ{QW*rW}^)f5bn* zG)}}ic$4@O^!Tg5SLlD8UO%V*b=%wgKQHnK^)4d5Zw7lL274naV15pLS)H(GQZH2! zODe3RHI`H@4(Ti@yeg8jsM>=AI15MVxdH;DRG7vAT;&`87X1IOh!0Y{fuh00!FvH=|9O3|u0;GJ>>{n^BVn&86#^Jlp#ieSK|i!0)v&audiYwO_U-wkH+tF7xT5Gl+c~*Mv7Y!s>T(!> z1nKewuDT%V#W+eYbF><@zS-?v5MY0q;5iDb&k_^;XL?HIzq$8P`QJN@b|;_zeH;J% zB2S_J&v5|pY%@+kMfsCo)C=f%l^f9U`hGy7Xo+*phvS?-4FGdN&Wl3ScSnJCIN(AWef%8- zIhTX2F#V@{%H;oe1UIGttn&Zw=I(#*b~;=Cj~97_WPknU=y((2KA$vSR^AuWcB#Ox zOROXD>$2+NyI-)6EMZ&~0GR3m;2!%3kQjtS_;1LYRAs;TpINvx5na+^x%%anT1y(2 zgnurl4S@(u*p$Thx8h9OpFX8N@W+xE*CaqyP?i5UN5CmH%abmZI+iQj^%8(zPG;rn z$QDpdc-~f8{pO|BZ$o}GcQ-E=AjOInWj81~ZjNod!J&`CiQ*pS*Oz1>M!{c_rER<1 zx6A#7mpcj2H5&8cFv4$Rl0-|^T?K$A@761pmyu}JV?pY!@gvV8Nm%3@{8(PJUh4|k zKePH=s{fIMJt^qhdRFLv{YJZ&)&F|^=2riEiAUuBy|J}Cz!xQ=08#+K$jJ=MHNtB? zF;qriDlgNAF#=wUAVYqI^G$U=A*U7y@F<4yqP|x8U@`5g#@nqRgRdxI3am`q`>8l- zZwdvJrs^$oy-QWBgrRlv^NND&=H>mgnOw=AHj>=eMJAuo*L*64ktL!e#?LtPZ7T3> z$v*4<>E`C@I-LsAAn_J4F|RV-T{FIosf}b$_IUx!T>D;?7|H^gs7rSCgyBGMOm$Ve zV24oBg27DH0E)=9+)*feGIyc&M?rCn4Bb74~IDNC~&jd1b4;MP;wBz6ggJ=p{ z&X9!2UK`c7*H_1K1?=X&rK=V6bhm23+I7b5^XF92v)U_F*vyPA(!jn*hHab4Z!>FW=<>`NwTrZ(P0?%pt7z9h zw2NSjLUxVDB?$)8?`gR9MCxpxKBb#qDdVVux+tE8j+n(|D!-MLt3d9lrleV8G5R&Z zG4j)uZP1cCE2e1~F7*9n4g~*Bm#wRG(SV-$&iiVFuL z>!r+yXqWmOn2S~12%}JOQ@V;%jaa~hhrCX zXQe!u5T$Bh1id>H`g#uAD*h!^ou4D7XX&E z$VCkyCCHp_X~lblCsVg-6V&C~Y#7yNCuPDb^lRz1o)5{BneNh=pnke(B@3oTLHt}1 zR@M*e&o8Z=ZlC9V%IrTBdGQlcJ~+=R|KD~e>;KzpH2Yio&r3W)e;ta!-h>B$oHk$9 z2S82TrCtDOnRWaC($Z`ZsTTQP`R~Q)9n$ZsGCHV|4^HBs>AvYuG6`4QJTZ6;s+SS` zH9<}@>ZS_oEI?4E>Yd6wB-N{)g%dFx@6|?Uh3>DY}k(u0*{erxjOnEx->u*8EaF4~qC(x7_W?=Zl?u zy6*m*Za+bqUxu#&Oj(8#<+z5lGw4P30G=jrU;(XrN^@{x*u>FkT0A{29Q8UV^wQdQ zC?9s`%h)?ShYa1JMRDcFa7a9FbH8!FED2vVuXaLe{R^iS$%AP!rzQ;iTMhGMn`7&mXZ&U(^?x}>b zrgyFB)5hc7=-kt?b&h*m2N$b?%M^k)TK23c_IVa!2Ierva1XIbY?Kt5ZcsaiYqx z(l3fz)gPBOx;!(enO_m|Fbu@SfI`NU64B{L;r+mUDtsto6f6J<#i@2ge0~0H%{85E#K>uS);s9gL7D1E{fhWN&7l$GYng;fNmh5a zyi%F-;fSJ8D$$tj>b7$e@k^%y)7EY!Zf9n-#?l^dixBpDlcHM^3z0ePZo$f2<~|Y; zziyRXyKe^7-7K!ZOi}0{im8a=Q{xs9e-DgFEOr{^27s>-lHIJCp@1`HXF$%$6Jcx3YMag8!{4sqaaWNT!a{~G1IEr zDsK!%qN5%f0x zzC$Cdxj7H*ID0$g;nr}p$$0KUE5td0{u>y;(Bq_X#JTbaXQh5}WPcz5z2`HlDp?ew1uOt7*)E>-Yp-dy{$hSK8K|GOGpR zfdk-0alatGaAvkhU`xTmzp@jhU+p@X2W*t6k4-8Ia9r>v%F;1XQQ^c0#M1-IwkHw zt9Sddx&D1Z(J)Xh?v7zYK`YPNWNKzq8T0=2^5O+rmYe`3fS1`fQRqhmhfLJl%yMkx zCdtFmc@9jz%!Q=e=S80t=RYbk^J&LGEBwD&{bn}*OTXLbZqI*S;&IM@)M#(;9H>09 z_eCAToVmQhF)UklJqNK|t%Q+x{KpNsLv9L3alxE@8l}n3cu|u+<{?K@hRn~E0w!w_ zQw@GYhA}<4zZwJC*5LFf@KpNzxxzVtSn}@DQG6k@T$UBKXev)zHzAId?*9xjG)@A# z0VnVk`+u*~>1Ox;W@8)w|00jv|J7g*H{%5EqbMMY8G508Ulf(UrPnnhW!@iYKiAz~ z(`B%6=jw9Cbx-2EfI#1F{sRoKFF21O>M}xRH*gq5G|jtY5#pQJ!c%m&+xK?+{t7el z7OmLf<1_QR&af-)_xl32#In=Wj6F%k9;O?Iz~ACGmN9SjT8@Z66bC1TYkKK<^ZKXG zPdU|IzmkdNU{Ma-;&p$JA93UO~7vrA%37mzKX8;EvgPrZJV+bu1l7o(N{Xe}m=BWmN75aa> z*UIMq>o za{qw@rynCI^XpmX?4Q=X_ftbjW=H^{m}GBE$~5$PW&PC=(Rw4uW{4hIeCVNBp11aa zt$pCx?E_Iv=9tf66c=2dX})QZB6sUo1Y5jz4Bnx$kX^;+_ z{2$WuR6EOlX#pFxyf?+NHZy(Yygy`io23PowYe1ybI*G6-_wqPSK9xw=fAB+x3iW1 zUgRl||HKT~yb$;m90(U6^bm3ILC3>|RUaYSJ=b9|rYe14QT9GO&Lz>Zc(kdSITlVq zzAi2g);I@#n83L`7yh%zdByTpe!4h`-Z8Byd}?AH$%&E9$K09b7jgGnEj0Quo~!d^ zc|w^|Uw(4VD}59o-crditoym-9JWL}D?P2wToz=XPwTU1f%%<{sX$Go>zs3{kfF%H zx9gbsoI9Gf0^Mex68XV=&=LZWat5pPPgtG{>^hI zPqnHS;-5BEe*|MAMHh&!>bS4Xjz73K`lFg1d48eu`qdI9%(7^o_Kxgx-Vwq?%LOTg zxs6ek{AOHI5eZIyhg04OKOUkiBBSvUI6ZlJear>?=nr@VcJ>e0uS|4XO18)GgFnSj z0EjToVRi)v9F*b)wzRDAs54f@a`cl)DrHPcR))P7i7qY1Yk2^W-ST5*1dj)r%L}z(qaGh z&JXVM^s(c=>}~JZ@!t;C{=X}FnpBS@9rpM%&;#u+LG$Q81LyuYN`^*S8r~E;=sS7= zWZLkjlP>?zWtqWknMHr00caCxg)5Ux*jK)*nm=;FFSTnxy%;7#GV;LA{%)sL6N+s+ z;I~j9&M#kqU-$rY4C=iRa1HvQyMMk`LPVnmp%2+GMt6S9TXKWoRKU%k?izu-o(aSY zQ0(637p=dp4(Pfvy8Gv`DHF6)8meei156UC9niaW;Ev}6<{+N_*``ZnA0NeJASsn1 zOokc6A7jpOY=c3J^6=az(FArcUsae4$}kG60q;(Q!9ZKx-_}-OEcKG2EITCv-j~!j z@&3HUQJ1-hepD;Ma%=~VHL1egtpNO>Pp$kf2KjO0KkRI6@0H>|Z||<- zKd42)rm5={Ig;MpMcJRlom6!IMZv_R;`D1k;zo^kUHN+NL;Yb97_%2IpRc?z?)7-o)W78_A=nIS6jxtqvfj^X9I z6IazVgE8{M*U??(S7Gqr$Jdn7R2&zRtuh1aBp|G;Rvj-;H_f84pH1JUp-+8RBNX!Ce27ReLKAEK#%TB&P9O^w;6=#*d8Tsd-$Q`&41#+& z#Q=Vyw7G)=ltG!F(GLPjc|Vx~oZsE1XD=^aqK zi2`%Aq_!&qyn0(dMKqzMejrpa2}>`^m5fI0^GipgPT8u| zvReXsQBl1X2S%WtDX3YknIG+7MD>Y;nP`_&(auT|TYD-DohOZ>}7e$#FX4oYc@4>IjLMuPGtx@?uKzW#5#pBVN3Q(M_mn>C;KT za&a#}3kj<_V16O-EYRHoi0ZKvmcB)&3v}ue1w;df*37;ZYB?u@tw-y;*{%zKQ|;wd z+#0c|saP7W+3LMll`hFErzW! ziALjaeypx4PRs<#71CgJ^?Nw=bUV9gW$-%c)JvPLTr<*$;ZY^nGw7w0^aa>d{)4zn z#ij03+;Q@fRc4PMvkYdu!j0 z|9EhCu=f97$@95|{|}!AEAjv5O_lurahHGK+jpJ+znrqubeR_bG_<~nH_#;?fk(Xn z!29T~ET}pg4CAoa`0|K{;Jlq0Frq8-LUVMg_+B7X?5*G6s9QgR-&%#4 zofG2mt?Ya`RT$Z|wf^l5>uTXI!LDvB!L?c4Wma!8k(U?zzo3PD=F0(125P!lmvbj+ z8#y;a5ART(1hQfJ-I;PnRFvO!z26T|lE8reX2Nll4Ez6|Lab{fyXYd3gh+7f3d6ZX*9fcy8tvwA`kbX@%Aw18 z4yUI5oRyo;hQ8M1e(I-I|HHuuhItIbUlzIu-lYHSmEwPG?eDGcf2`zbqyMRC@I71v zXUP0(UkAUIq9M5qfDoK|z`J0}otO6Pr^b_6qqs{^)8`d2%cbO{~Lm$K5 zx%%252yT`q>Y~A8A5Q>UVnpdSg5hSxvRq0a*vF*O3gp9oqB}O=N5D^0E8hy8nk>L^ z3FAmiP!@B{iho@peu1Y^ z{#V=SRUXfk{iRv{-{0A{^S|uutn5M_F*q97i9wb4e{HbQ3i01T(CskJ4g|c?`GI)p&@gX2OMvSWggKrH`F{dqm?4<~P(<)~jRLm( zXVn6l|F7U-Zrj2;mydERMtK>T;Q2J_IpKfX)bLJ}>XXD*R%w$i zzOr&t;&^w(QVRK|9P;%e(fw|d$~zHO-Lc%q-?6t9;=HP2r-ie)+mDb|-aU-#obv0O z^54Q^Jk8J~3LV!H2b~VsOdyptuL+AjxH0Jf&(p+lE2ODea^C2sEjld( zxM>nx!Yq=(WbL<{n5`*UTwVM%gCBF41Y#5%A6%gMgkzC)omcpaPx{4xE9i%R&mtmk z2k;6;#LT-qxQCw}46p|I|8Q%|j{kLduzk3e|5x!a$zI*(S)Rx*L4I2)Urpay!Co)b zMwZvhH;M16?7R|tLCB>D=|!0W)%vKi%a&cakgl#hYQbJb$|S7A;-qrNCqLxvz2z%{#OBEa8k!AX{Ca zghO>vhn!Bd5cHpmG>}G)B2h$2s$!5tIOHo8^`8Yr&`X5s1X3L|bXRLhDeXqG58@0% zp7m(>IZj9DQ$E>}Va`M@29Xdnnk z=e)Uic|qkODnIg57(7CG9D--h5=5Ro19uRxos;R;(?Y<5!95l*?qG}_0AJH=qfLNM z^?$nUrWwRAAw6)CXBkXLJbf-I^J)SFO5&-2U;&^LSpazs9!60xqHo6tlXwcSKY#)P zL2Lu}W0VXz1t^}pPkgsFw`+$RnQ;hdrBdwyuVTp*^RanNxs*=PP|u#t>sfAst)pF; zS6O579dog2d(pq(S?BsGKMnSu35xSEyiWWSj}V#j0J!P=cWYe@|Kq>7sJ+LWq>k8fu8;1=8)VH7PG7my2A9TiJ;X?=A39UL96Re^uqrzHOif8_ox zOeQb$6rPM=aKBgzs0R6edw+MwKL6d@S)c!|P8AyP+f+`}p3kaH*mtSJ8tSeR^rz#RlRh9Uh^*a=x(h5r*l zhzjAlp}$KFm)=#Rpe4kg8VHs!gMPA7V6mhS^gaDohZg23q(e_do}ragR`f&A+q`L} zD(V}|z>nf0@8*dl2SwyBMoRRnRc{sDh=u!8FOB6Qk4DCC%)J+0xq!KdY>zrt# zXgKn~7Vu*9;DIe}9x;>{5sw2Gci7aaiFx1JzAntKYuUl(yG0gg35oCnLkxU%Ww3x#hGgB?>zZk$`_Gtj4xPCX2C5qxJOvSctOV-L zBHh(s*mN?|1C-S@U4zr9sna1rMgJqLcEG!w$nKzGGNEHo$ zRPHg;&ONgsvxWnc7hsd+>eAm8NhZF4C?Sq!tpU)mK^eC>6r7+JqlXUIjEU&7Y=yz@ zh?lCQcy0H!BqtS&hO?ELUeAm$Wmp}sIc$M3EjkCvoF&eRvpvrnXTD3+EU@?j2>K6< zl5b&*sg?h?qNy(J3LsQ|E=WViDl)c&b)8ss8ji783J9)h`7xu=joED z6V#;3HSbMp*{|W`thp=865T{0ez?O5h(ArX5f+=GmF21In^l&6w9Q8X;+ddcLYSVQ zbSkU>mfZJ%vilhMA?S5V+qvM{5}e5uO^d)&47$Yxqk;-I0dQ9=A;fr!2E9(BEMYco zZ2a>fAt1CxqW=v1eH6tIJV0=tpa(t$l@vJ0&={D*@EpXD{0XzYC?WuUO5-SqNIYc_ zuaOd#13v+oN|C~rUKnLCV18}{aX%=2Nf?g&Nrdu@PHkVU01A)J36v8H2PH3V`WWY9 zh=G@5C`CrEV|kzJd#4;`Pj%9a=cFW7Ljg#TjX@!_KBu(fc<2k5mdJ6G47qkGq*SG4 zD(J^CMihPmxrW9(0GTCooW~?eV_7+Zn7JE12N9*eG9IA>0>pJ#HO-5gY$hp$h??>M z*Gx(cU3!uN)GetdDGD9a)cjr}lUJ@=hKgN*ad%=(N^H(CI`V9Gp~R_EwVno&ER}k~ ze8Q5lPyi9oDoOyAm)Ig;?wi>JvMj>dWf2`mC19-&yX>cx{3ip&JWl@C-Tm!S{?~)u zb^Py@JazJ)e7#&5uqnFH4<-j%-C3zDi1oG?l?P2=ZDc~Zhg6A#CdBpXh>Eg>21yYYAf9OXEzic02@DRl@z$A-O5JNwtTLlG% zizd(W@g2-?0gwVZ1=0%^+)a5uC?wUEA3yk0EYHCihxDMwq)9&@FzeBc`T?@*hpLij z0gw^GEP#X--GIA_ilWT@_%|POr_l=;3$+6_;|LSrMG5iP{}1*&;0Ypn9T{_AQ{FGU z&i}i8xVyd1|GSb$7mAo?Pnu>Z%~&q&;?@ikk&8U1px)`F zP5#t^4=}Y0c+SY}ES`(aB%aKGvl(}N7QAcXx~~X#GiB6FG_OucwIbZlA$dUA{UwT{ zU^)Zl39py3di98lq7?D_KVupEXAz`-Ls|3(-3H@J6dvaU;lQWby?^h6-!6}5=*B4Z z>yh^b^e7qjCp%@dSGNA0{6Byhi3ZFEynkEhw~u81-P_vVE7^b7`CnG^aI1t5BaxN_TH*)EZL*q5mHBM`3&P6W@R^f zj|Gf;<0t+QW=0RY;Pg|<&6f#Ex^SG5DR^H3`N6C9gm<7cLYUyi(O_U&G_5Yn;h1Fz zD527+yLr$8CxMCZ@AbiZ*3gIN%!hJ_h`36i^siF;H5Unl@o&ToeYG@{gdVwU(lgQ) zCM27(OAscJD@^1Yv=qgVIUbIRxoqL5tC1r@(xZOgTYU-`6Gygh|TmGkFRR5NpjtN5$iQ>5pK~46b{XIMW&-T{-TK-?j zQ?1Xkd*8ZNYlyug7>}jyOa!;f?xAehA4kb8ZTWU$YURZlDut-?_Wm<)oTl*<_#lI^ z{|Sab)D;KE*1aR6V@1Bi|MTK0_Dty2{MM3zF&s}Qz;Wtl&}={-f{xu6GYw#Qv$fI$ zMxPk{#LYDKF014VwWU%76h)|zz(s}u$`kHV+XHXYVdjSr++;aCKfVUnC&#Z(!Ns-L zrY{u-yylIl<>1GP25|%kLUFGZc0b3SS;zl**4D*r|NpCn|KGOl|F?axd$2zLUCG1E zJ5s|KOAq@mYs_2oFq+{26DS>!L)o$!*Gavnhr3-mN!JzlALoVtxIz?x}5Xv?pB88nulWCPTtZPCfBwSNAPoW+vl< zS?>kyTBAh5)bw$V$rT*JPj8riq4z)U{q7%I-M@U;-0c2M{@wjs=b8Mw^S2F;W8MLq zF{J+`^0#QeQ)ka((^PlCWW?!#H#wHZ7K#|fnb{!x1o&|}@{@cFvnb$GH}Emk-80Sz zb4-yok3V())MMAdY44axkg!nD;OV5Og?pkO3T+q3%2VNlrG(%HYR)hzzEU{xF^?~B zH!aNAJc`|nbB6t0u{`*~*I29gTT18)PWf-WldYe5o?7`2kyXfl+gp3vw*0rZ_WxMT z(}uIqX<%yS4O{F8`YaMVigdnNzB z!?pgulBb@PBidnQl(?vUh&hA(!ImMuxEa)fz>o@Kbr0IXLxG(e|UGIB5L!a^LJryk{=5C?wBubD;(fmw=T?i1;YT%Iidm-NG6?-9G(B%0Q9 zmSPg#jMG?0EJc_MGl)ONNB#a&{C_DUeTt9v_jY&s3}e=l+WjH)iGSx~!vL5djN{qb z`Wwda7=`df7-70I%-wd1GV&Y3#BN?|&ava^r^1z$>+Ah9ybJ7l^xcuwaf`yO`={n_ z21Bf(X|k=+!zA>Skx~t`mpyp=UX{m2L@QE^kXA^NPAg|nQ!6?$i;WybXy3IWiafGN zr`)Tn3rFw(J4z%%G0b{Awe8h~B_0SUI&o^qgFJcdtd>Apv1Sr!g{z6A6{;qaEL7v( z*_4xmF;31Y8OKpRUi?RiA$gRWd6F-6^i&{Ka&qbRIBl#jm{Sb8PjR>0pt@?^G4JCq z(8DY)0(r2h;K}9UiJ9T4IkMEwv4&^uT>lyPJ5(V6#yO!ZoLvnGNbbjAlY;NaE8;BN zEY)FnMEG=Ss{>jdN501i5>$3hFJv#e>UiW_7vn^gd!JX{$tvrxwa5pdhl#Omx+{p4 zDXOqv&6Vh)4R+IE-un1iml)I@w!2ZOyq@Miy>(?hD`h`e%D)Vw-67t+Z z#mr`q7|Hc7d<@t(NoD=BA~Gvse;uhWOtR3vFfti?riL;@@9IJ;FJ@7JqW#r@rd_0r zs$IfF*Zyjv>~dO~VO+6kWZq!g867$Hhb|uq8J-F5u&IWRxJfrc3FZS+f!97ZAm=wps{N6eWaJ>N0M51O&3{ zmEZQMS^v_g%!KgAUH@C<^}qK2U&+(r{DOUkfTYv#Ho&RnhlY`N}981W~;??wZP*%<}hdOtN4?Mtu%U@{C zh>WLh{byr8xnM(fO;85=xBee_HistIu>N-s4|i?EP zvGl2%~@}+Ub9Q_21P@NNt7_|d+Bo@7qh^9>6J)X$;jtP9oh0u)Z2Vvd+xCc zJ-vug*G8$LzFo|KaSvXUar-QFj@a+pAU%-20%vDC?rQvQsTt4=WS*%c$QK#6oSQgr|_Yfr^ zdSF2|`%f`#&*JhQpA>5WkkerS32=B1 zPm_tALtX4rDjMb;Lb2rAyhenQF-)w`d=lCVSJ4`Wv$Yty7DL&DxyyrlxTyFkHVh7H zweru93qP8aBYO0`$Ss^Umf#|mX~x$nuPatE!^2P0I0_gXt7Z#v;P~?L_1VcWlW$J0 zPG6p$-<%!4zFwQe{)L~J9P+FpQ&=F~0O>+o*xDen1W{|}V- z4=fvxXLRckMN+(L36*{jK#YHf)3dOxjCpc$dVPKS`{_S!&t5(OfEPQKaAt#YeR^_r zdc#a$YZ>)%o@)6|?EC#&;Q;V>{(pPB_WAGD*4qDnHP0;apS}+-F6(i4NBVtJ*GA0K zL38fF|7M({2W%z?Kn4lrT`1vc$2f;^fV9f-$|doZv#JL_J`$TqfW~PCF^*7j1crY^ zsdx{QAe*Lyy*@s@-q}B3AEe*%9904MC%VIx_|uQtR=NYUTUJ6St@5K(-{mm%pMhT? z2}VGDVWPDjzd#DzJO_LkXwj;^HAx{{ZE*8x7fhZg;Lq%g2)vNLV!iO_mhCB-vZDn) z+xyq_4r;^y5yB+%(<>?2FZujudw0i*|Gl%bz2^U`c|?3>5k5-hhItNHW|!B zC}dgoRg|d~F=>spjSyios8?uwZFdP-<4DPpmI$e7=H*xidUPq)qKxcO;;ky=2P=ji z5}1|B6xU5PHQS~7jv*PLuuxsa1|#=7T>y4f*L)+LdU0Ko{M#+2EL1d%QJw|xNaVd^ z%vBEf38zn$#^r1&jYxLGH)UO~DQ)163Oy3ZKFP2A1E&h#-ftp7n;!TAKIVuh)u4>y z+NpEVryc(%#s+ZuiNGxJV=;Rg_k%|MZ^wV!+27k*pZ~AqG5P->Lt_BV;l(T46?#_7 z`Yy4gG@CQCPn#J0vN7l1wG7p%Q5067DnY&Anx>@QEUPz3>uQ`z;`$FDuq(kq7ugTi zJHf)wEd2kP_(|x;D4Ed(tbzaU9Uj>BpPhrO`#@w(5 z*PJ)C_?ks4Q0qSfm+rwZ1JPNc4L>}k3KtIi7}5#VZc+p&34BsnV3U$j22nh@Iz7HQ z1*iY-=Jfpf?BX1p{R+-6ZoujPJG;KQ23qTX^=i-doXE2Po)P{Ah>Mp0>djXEmY@{H zXgFH6B=aV)U z5KICTil`sVn$CW?4hXufVaABg*b@}9(7vpi@oFj1*#y^N^9V_cKz{J!Yd9Rkgj`2| z2;k(D;`JzU3sU(M5A{$C^jz(xi?=1~U2-{F+U z&}PDzC-)6cL`K#(FtIT1d5|a*g2VI2ws)|ab}nIu50DmLz}F)TJjEZtJ)C+Loa!Z} z$&qD^pvYxnNsElCA_JdJ8Iet-l-QYdb(~}Jn~$COLQIIW5#YT5@&OP8?jS%3%a>ZD zP97q{etBT?pD0Rz_Z)bo79ChEfqtXt4rYl@Ungw96^)wu&`N0p8SASPf_Z&wusUqFGwZ}+wTJ~b;!&S12&t>DViD{3Kl*@V@In+@?7zZT>dmiuxG4knO9dlgf8W|^s zN^(qC8mS@7szk?Lr#v@wDr;Rt8Q7#!Ur$MR9k4kxUTp2`J$9GwAbEf=0oyDk7HzR4 z8um(Jpu1;vGpcGwwhYEhW~;dDul#_+f9CUPPRPbOwiz2lVZLp z?i4!Zt+UdkpsUb*4~_-XuJf&T?ULLt&rk~Zwm_$61_veU3QM3NOot zVtD({z&n281HmOPru&=JhpQLK_8j5rYh%XChEJHunPptO`nznM7Y5B(Xff>Nq?j{? zy>_^(4UgKwZ!TV59D%nNv1YO&PuH@l=j&t6Sk<;ZWiKkG?8+wX z5~uC=HgV^ex@fkkJC_^95BoIBe~+I3Vf)a||FyHVzrT+EzLKX|{&R4~ncY8}r;K#b zvuxX@09I)`5QtQtCst^-g0AW;-Ciohr()YFSY9#2(_@6I!GyD&0~gA4cFk$~e4~JuuZ8RIZb5C4c*(L0@Bg zD}-FdgmavyIH>hIoOWFA<$ybPjoC=`JDj@6WHq!DDpkuV>^P~kC@LoT3|&S^JXM=w zRrjBRRd@YoSMw^LR{K96jd$}Zf=&A0)}HPEzq7Z!j{mcgXNIlEo&_`LfzpaJOLVf9 zmS%}v$#SO-JgdxQMFDnLUj%gZSeT2UyNB!e4=Z_Q;QwM4%&!1eLuKE8eo*9@XXZ+G1Xm;tp!CR=D^uyx0S~8FlZ@rWZkWWz{<|ycbb0m*@ z9()Xj(F7(nHX=hs@!Y$D9pUaThE>fQ&(^G6nI_2nm zm7(}#QXBTKjuE@4vpEMMQhF>SVYOBGepI^u2__;vKse~K1Bjle=P6c+dR#6cVp?j* z^?q{ksnz~pUS~7uf{ps$f$jghyS4WJUClGY{_oxX*#PAwpe0xV zo8qv}d@rlY5?G??+7!5c?57p~pEK{He46vwDwBr8@x_~$E|Ef-?q?|Q)F2O;%t=7k(=!mJa`S@zI^7e3X`+#8*LW!D*H%AUYQ z`?Z4k;@q)%{o`N+!#su|=lcs>1a6Z5_V@Pf^?$Io|F7n0UjK5~t@(hLcK~1p{ABG2 zS);;F$VR34@}RWL^Q&ii8|R(LJ*H#QNEg zOcnrg6o>)lsE}*=6E{A@1rLGaJ~8n+>D_3TdKZA z3r_&hlxAL5*P>k&*r60F$u!$?5!UyHqatS?mmm;_re3Z@OxE5Tze=p6)mj|(sNHPr zr(UVuT2BNQ0=!wZ710rnP~vA(eK(p^>_)7`wZFkPeX96B@uLK0{aZg9;)M?X+vNYY z^FM7LZg1_c`Tr^&k^h_IS%Lu_Y@Q}_G3L)FPmh9g7}RREfUjSlh;p1g(;t*C6ZnZJ zHa+q)($jYeR#e1VW89Ooqa4GK{+YofWU*`*ix;>(X_2km>PUN6_ExOl%x@(Ru2@SR z{6sSUnEq{YWbSs`Ceu|k0Fu*V7T>_*ng3K8xn5-!In!5LL5ZUPddeTRC@A{jXDo1~ z*$8`E-HxqvxZbSQl1F`-_&@#bC*kAzf7$mxw-5IZw$}WA6_3IH#b7US3lI>0id{hU zWyu?XgH;N@K&5&gS#$0m;A!IjFqteW{x|XegTsBx z|6`lITJ!%EJO=+iO(x4>`!JdO6fB?hk#91ml$LM;e+h^AxfK z>T|@61|CLvMz;iyb=VVmZ#$gPt7P#T_bwLiHY`nC$=7mdT&t~u5GBl{rl4@|l#3*u zvK^-|dNGhjuxg{N7nH)by5ibx%~BQ&JLk3y(5=3(7Yqa=UF|@Q{d;(pkc;dbq12Nt zyLMA+BNwFB8v8Xv<0CUCjd7|QNF(0waC!v??0{FenDd{52*x4()1gqJ3~VM4Y{oDF zn;R4G1>D0a?(hU;X5uyV6?_4MD8r<~QE}t~D_I%&q&BRKFqwSd%C8SHIG~Gr`b zlIK+7rOH!UGd7!EZ!->uW_70G!BfnjeXvtySCY|%PZ{F{(7A`x25i*JdpPC1O(LN! zJDbRiW-pWg&S|(|c`_O`;HT72!gDcWHmkSJoJ4W2C~e7Z9Td?Q*3B zA{5&#H;b8f!g&MsB+x6$dh7=q;fi+TWHpXw%pxu3YLp0OMun10I){YdDdrjHjjJ;r z*bMwJi~}D-*%J*#yLrbd6FnWEJPGZ5H)ffVR1%iXqMYM=U%h;-=3lT2VHMEqRF{o? zlEcAaFMT{{f7pOTN!8e>elKZ|1b5NXVm!rO9n;_fF|CJtgFKGKnifl-0*w*}EW|s8 z!OTWlQ${Fuu0oWMu;hy)d%I&JIqAvo{EthYj2yVD)6m9^pbYMV=ak;mD^-xw!--J^ zeWHO;-cO@Ljdo~l8phC`kAgN=xTztR|}jRHU#$Ca%C*ynad@ufOo79IuZ>YjaAwj zg`@c?+RB2h-3uIy8)}(O=T;^6eq&lI+jVpK$K>&V=F!2ZiD($AvArwOL7LM$6Tws)j;SB-ptqo7B=uSLjz7UT&A0Z{YUQLjHdpVe+W{ABVeJ zCI64Z_4(gQo|63kdTG8NV(R=X@;~p(;~WOU#B~(NhQe_pi59nozL`uTY()zx&%to` zdE04m#0DY^*pXbDOtz1EI>|>t>&ZizbrDAjsVLgUB`e$snT(vu?G}9 zUk#PP@t1cnxaiK%#Qz7;Cm5bC<^)pD|F^gHcS`*KaC@EqVI_~j|9_=}y*w`vId^`F z9iZsUQn!HqGjKdXQ3#SK1}TaX0yAvnxEIb54Tgk7b&}8)jNN8_VVob_T>2T+Hz~u_cO&v?BWV*t=SiCt2)q^1PdWdPe0~< zY(Qo%3U8C>qyDzjaPP@sEpp-X!897>N%S#?!bzphJ;8y9Yghs?Ao8j}9D7u~AE!B? zn`2I*I3iOIc*D$3M^S)1;7y_sBA4+n@Og9{jWiBPqqx~m%QFn-F$lVeHOKvXjsX2< zmNdf{1}B1l9KB#+#s34Nq*fDD%O1lZ&muAv0D6HR2RY?}^W^6@;sb9ms!)vLLe66! zZvM*_1{DEs{!5E;X|K$i|I(qneRF*MdnF+LwHj8b--;rts*Do-}S%+>q|f4zQ{p**FsbLwNd57C*& zwxAS+I*Z@9d{w4k8Blrd@W4*TX-bh0@5HRU_kefvUz7uQbVBJIpj~A)%%VQ~drlCy z*QYmSFy>ZcyCxJi%vNhOgIq(vy^)V!UA~=5$rz^j%`~Nql;cF3>JQW0>vU{Wt&X|j z)!^QZ*u1qTzQVav^Q{+0mM2M+41tfiW3w z&I>3Cxp$UUM50v%&*V^M2l4j$^y+qTC<{ZNTbl&&YCaIJt}fnQ-YyQt3Bj?2(@BO9 z`SqGksSNrd^E|(}0wIE!iN#{>JqIx)03Q@8C8px+eS#hU8TkYZumr&r0(0h}%$!J~ zp)1;S6hl141dhvd?Hnbv$Q%T?KDfO)J$`w6asK)rw^tVzVq5mMtCw8KK*@o2zoikd zP-8VKVEL{Bds}67s}L(H%x=u;*IBOJ?R$Be?0?bNAHr)G!+@YULjSU-;rwUkaA(hs z|8uyvzW=+D$FToV-GmLe7RY5era)sF{S@{S|NhEmD8;19mfy;6jMC{PPA~OPLrhzZ`H)?7GI5q1;93u{?+`} zEtv%#E3CS071-qgjC6=Lc{ms`y3gZ=Y zInO;>C+(XG71rk;+T5{ztfxu-OHoD^4FK8{|7Yi5*Y^L~-C4_jD|rn0j}7(`qrWkD zKZWooda`7}PiDM=*(3_!xj%-_)vrSGD*H^Z0;Ue0qL5p7pyQ&yJl2pkBMd~A)?Tk? z`ScDf40@uZDZOxbWCSw?%?C=!)q?T3;SoO@LSmSsv|Y0Q3>+sR^N?T%dZJ6E5I;h; zs0FPHyp%pF%YV0YmBgT5#fhy$goAcC1xc9%6%>iEy6Zy)F446#i^j^lYW2)Q{8AKM z9@^Dc#|s>E(59pyrfn+7`JDf$O;~eOI9DkhkE_Myp0_2EHcVa z>t?Vqi&Yn^=dv}Qt6MSBcvQ^f8roJw-*8Nj%DLTgejA;3&ho06?wsb!?UQv^&RJBO z92Fxd_7gf-?g?1N)v6voD(WoK}D}UWV$r+h8{2B9~R<1=wWQ9n81I zMYwXaRafyykX~kppa8|Xy@CX3mAS&Go{GBiQt_ri0r|1oy>Q^i@tq&szvSQ5-YIeF zxWl?BQtJ6(d0S?WoU~MBUx<#n$z`2aOK!@Kmkr8`Z0E*cuu`%m0imEro~AGZrDnMq zNF(70VN!sTzZke)xjN$rR>>rflsUpQQiVFFuZf<)wj= z>a#tI=D9t=wt$(G_HwJOHS`88U-=3q5sCab`U6_QX!*I0kEQPB@NlP}PlbA7t3C|) zD+JKQuv@^yyc{Mpv4m@3g|KS*I#X3Hg+WjAQ|ubarOyVYq${U zuG~ zvMkP(&xkH$)Sv=v;3sq+mhDjijc#!<@f5`@WSzA7Z^>Y~iMOT*X_QBv%onJSN#L)yM5MvK` zbc>3_-*lFeJT=`w7=Rng7sRltNK?x&O9M}wymwqqeuf>6&4PNa?Q(+P73-2vngP;v z0(4D5gE>Z6dCnwau5@Q@Tp|Q3bA|FXAl4WoO#8RQ{<-+OBz6^qtiD*Spy=e7qk9~K znVdZI_KF`3@e4O1U1&87u$KK%F+KsKS4`#{T7=2@IIFu;=pr5p#ipnteiuW{V#+PCv!u{rZ({9+vx$t8-3Y znbkVWaQYN}GJ?U+;0eUeYE+lXX5LwQK!Wrd1^3^w4}6PQq!S#%x59tLUS$j5@8AV( z1*)593{mcMs;EU%EmY6o^cA=^Y=f4%Webo%BDq9CvZmiZs61KpXjx*VEmg8I#V=j* zByxm~_?^+05T++6ox0v?RYO?>`$*@fRd2P&UCBIGk7z~AReJOq;hy31Q28W zm1w@GmclGTq5SO#z9Z#dhJ@k9!w+**DxacfdV&p?^q}&qa|j*Tu|bS{a{44W*Y{#S%ad93?i+uNo1k2_o22kZPFD|rm@?Me>zawIo3cYX?~P3z6F z4S@=DNgk^V?o=abnPrq{QM`6bQN{Nm^aHGoQYfgeU!U;5j-HsdAiJb!mdmu4KE_cp z1Y6I!Ck*%RVbd-m&%qe_%=0KuSl!|rO?Ip2PMlrazUt0mC}>2h#ljA#wTZ?NaS+f8 z(%b_c2kUhdeiyVjrJ0|EqEY5NL`HDR9HvHo62>qD{vDdY;-C?1u)AeEZPsl0#W@!f zJ^&DdVnP!H#y$x~zz3;M2+Wq`>@d$i07^grByzSabcX|8nm)l%Msti;?U<18+{>R8}}YzkIjzQm?>}7(&Kj-HBhs zWc#1Zt^fY--uvzDUp{ztydJXRVwOVM*W+p z|0?RgiTb}ss%%6Hn47;M+72$o zxs$dXN+jk`nzhrhVy*G85M`*&lMX=$qE0gmQg&^Z8P$QBUToM`c^B=D)uVC)Gx+@l&jNZwl1bP;99ygiq zUeb2vN`_vx6fK8_ryd>mqkd6xfT4n*XSC1L`wd~$mE2+0|2Q4v-jfwO694$esMoB4KisNXj zmgcItM-TNp(IPx=kaA4t=8v>Pe-97#?D${Xdt19}`|m0q!~R=HaMxnkflQpS z6w8P;nSKhhaH&sAH4d9sOjH61Zy2LHKlT9PId}|n$#<0QgpQdOw3-|6sv=s;!f!Fm z+$HH3Rg48)cbDV&GH5|(Q0;OhckJ!2U!V9?F}cj5Nfg5&JjH<@Gb33EL{&j{ASz#n zrE0||b~X!x0FBej3=N`~`O;B=sZ_}<#$6M2!JG%is4ecjMu8uX5GEe48q43Z@rFiI z{x7hPvI9T$@1i&&5oFf$&ngB;P|T^KNY4*L4#N+_BU^fHtOP)}#%BH5xU)LPqiHU$^u+;&LONo9aM8vq}Omn^vjzn{-y1dO4dh(HHs@RX5{fu8^$ z<7k+`5O9*ZY?byRX$WfMe$&Q)!VDa3vymB)+g*lfgjs!0W^tjf)`y_JmlA`E3Cyx6 z6b_o2smRfKDZH%JgvpIGRNbBkT7g~-jf#8Sm>nWNKroJmBSH)2DMyM$u@IJVe?VXc z#9N%n&#inegVk6U@h0}E*b*2C1#KPFJr*Zn8+N5a+IEL7b;bl!x*A$-2o@T!ex!Dl zCnOp}aZkcCv~2Hf5}<@btxa3ept-AdXU|~KuIugZ3JNqDFs{!qGNY}+G0j^TDI8ON zE)q$A)+_-i5i?$4`oUXhZtIqWxo5TxWQKW7;5fZ7^jV>nsHl@(b!1f)nx!I!sd;@J zW#o!+(w25go}aBO!HP(U3|4DHrP!mbXic_Z{vDWobx-Q2pR1 zggG1DMM(&J9>VS4U$9!tS?T=r=JuDf^Ov{Rr&sUJPEM^o-w(qRk*vGU9#$u7dU_LQ z?@mrV3D({YWNT(BLGjYFF|C^9HCwDXwLL!!6)x4HJ_Gp%VPa%jq-tiCCq*{K2!lHq z_&J7D8KpWWK_D2RhlBy(-1-gUc6UGqe^Vw-d8SeU|OL6}rXF->!E} zF$iW@6Ls4~4Z^c53pOL{gdg=)u1{}RZq*s1#@plWBk44sB{>FcjK3gR}O{5)v`m`Q1ml`2JojiEHwJF?BhY5`i0gth8X)pcyFjeLVokb+jIi}IqSq&^jhS1bV3hJb9yFn9kM)tH~wA@yK0^I6%srB<% zPt*Rd9aYaA0-(YFbN_I+bpQY0aP9xOlE>KpwZUFu7BCI!Pay;t{aLmUFhMb2Y_t#? z1O01&LU;|c3Czxh3Cdttx=@LdK{OousRuj^gA5W6c$0uQFITSJjJ$W;k%bTDOfE*E z+x=(Y=Jm^~BOqf@{%>%O2zYmL!^9nw6L5WVUAkw=E?W$t{8U~6 zfZ|(-TJC;TOmK&5l3FM~p!-#gs}=83x9k>G@CDOoSG;#uUxKrg;1)W;wPp)2{by7P zrt`tRifW0b3X;brpQcKvPd)XeLb-5)!}*;Pn0P-6DBgaCQhzAbR~Lds0hgkpo1Gm! zt20?$>P*(@V5Z=F@EY_kxl~z9emICe0k7}5FsiqrRiLCHLOBMD&Bj$d9}H0T;AbJg zv5!aKeZLXajkKVsy|6$WMKV@y>Gzt1ixp&Gfq||V^16JBJRV7im z)6{&lN)!u^6_agPrQ~a1^q8AfN(_aS5kKs#X>QJI0V+*0tp~;1deEP%vR}+0&>H)p zepGMmfGo7A_0CJkG^NI&0TBI#q}%X#jbV8+s0K~hHDVM z&X_77MLsk-d3>x;j|P0qQ~F+{hLg@Ev+be|)QWkpXOb)xQ+O4nJi}9|&VOuQ^fB$;GSNbyZTtv40N%h6#o&Ng-7X90`CNE5ZWEl$CmY#+Y29 ztECIt{b%4B5)kB=pfO-81|`f-BZb*G!kBrdJJLDXs+U_~u>g4;7t*xQrPf->u-sgy zGPFWP$6GHtxh?nEOWc1tDRZ|TmDcb5H{jcE8y~pTbWA!vlVf=%BRuAvMs890rzlP za?09}qgKd3++U>;UKK7?M_A?vn$0$yVznEwo*wj@4_e6+qLP4x^Ou2Givz8~Y0IGG zTs_is=W^ew(Qm}kkw4Lu>-}?aA;vZ3ur}YU-iq1PX>DgS$>b;l#w5Ox%rg1sH>3mA5o403)34mhyJaTotfZX7*vUihv7)*|cSQbFtm^0D)+-~Wer9H>YHDze z^Kw&{(kLWg`U&7nis`EcME1r7%n>D^?fGBB`7g_2(2b)345mR0yCPLi{}z6NLEH1- z2LG?^-Mww={C9W%aDRRNyNbs+|D}Tp_z*AW=(i!WQq2W*c|y0r|M+eXgUuc;>oiy% z_p-jT0^-kZZRSRbp>OR1vqg2KQr>$3<^#)VLOb?>dHidGVe+1@U!TxYEJQo6T0}`{ zGfPCJxpIP+GFa`ceUfH*=H>sxEL|S|-`}|9hiML9zQ# z9O;%ri}B+;R$;vpG(Yq5f01&v)fUje|97_zcP#$Dx3l*DT+L(fe=(?!vISJ<=>3T{ z0M*HFtOzW33!uGP))pYk_+&)OczuIbI2b|hT_Ey9KiaO*t+_Ij>dsjOx)mwD-9{vr z!&PdyShXA$F&ORKtL7N4@`a&NNPjUZ4gLT6^@*7NM^&Il2ovtbLjPhrwFT0K=-Sf( zJMs0MLD*3KuB)Fj$JlT4oOs2T0Kzd;uSGL|}7Xt+hDy(>?Rb ze@dfkApth(|A)5yckf_(E&r|LG4KD%L0uaG=9dArZvI@B01_-s3VbX>fTI1{8qo4_ z^8XN~bU7qJ1abd1h@;?sgmMhel7DiCiPWV1o>X*aN*Q7(*Y! zp6%xz-lZ9wL@4LiH4(bcQ{YXuc>r^Uw^0|TegO4`ov=_G&H~OW;cGy>^fAMZ4&-s1 zj{Ng{4EDDi{+$_QIe1lvIFvzAUF>+{1?+J}21{)Wcu)Col{G=D` zg?y)1{piZ+=5@dqaCfj5s`O@tyQ4|7w#}h9oVi8Im*z5qDWw$yqtB`E?l-FB>Jw_x zeLAt{kk+z!&jMwn4B+U`+dI3S0*8l6^_YK=$z{?kc6Ew)p;Ql7=mI!8|@|M%&H z`K>xuSn=mu3^O)+C6S9(YU@!M;LbN=%Lw zXhT46m9B*603+b1DF!)9i_LF~q|aHhSaBc2n7@UOud5>zB=FMMkC-FB7!9F4yYB)t zfZ;(+7X?+kxs;Qb!DM5z2zr$C?8<^1f<=MJ{w@rVP3}!T{pY0`8mBR2Sxnf9m=g@0 zuoMKF$Oa6dIAxG-sm!yI@l&vQg2rQ*5T33$jr}RxXHg8Pm>r-jqdE%Dgi4}h*x@r& z>~KfSf$a%oH*I@DG0L2c%fez>a66iugYwgF%0OofSs_Jh1)^jq z-qS%~@A53>uP8m)8@8O;D@LDMm$lhtgGk7urVW`>`RGN3a@r(l^uQN(x9lJOIM(2b zNbeN1vCovIh#X~IqIg;oBFdX~$AZ78XJ5Ogh5R4h{oRk|%lyZmdij56cYpi9j{mZ? zyY~NE$y00G2w{qQ4}N5rGBo)+gJD#@Ps42$%C=Cs5RDc%EDvmyS6{LI%K2Dy1HHuR z0cH0w^2^@X+Of>#>%6L(e#5lNE!+*NXF>uVBSx1~zOvV| zX1tN~8B=8_yj#+^325t)<0B`?@n~a*k|A2&*l}p4&c6z)@N(b;vd{i1V0Kr&(0%GD(Lv-5r;Nb(phe4d=It zSk(oWe3A|qnlT$c!jx&h+LLs+oJrG85p{~J-I8+7v-a{tPEVq-KZNpL-w|MyPT~kA z+g@`XrvEZ$UPHfHUM3M%Wecv+pynA;8j&@&awcjctSGA*&0 z?&t{scJg06>8_qW7l1A}e*O9hOeXZj)#=N#>)YQhu5b8ft_J@Or&n+wD^%G#_*d=& z^QX_B89qb2YVd;tIUZH?i6l9}UG-G|>4PCLXAq<~W z9!J}wjI>~weiCxWLi%a!M@iuWv57lsA^>*qGF#JhE8!(*yS-iyT*nYHli>hmV0()$ zEUg6qF#Qg;x5SG_i$5&^^FMnCdjv$7&c~6i?U0qz< ztZZwj#ZHHm9)WI`x%qE=)~Wv$bh}LU+d16YKGZ%+D$oKS^9YhhTeh~xMf;WeFof#` zyOITa^7`!L_unqwUZ37xo}IsX>@{0DgSD3}mHI1Iou3Wyk!$U>TV-rg$vF?YU6Mr* zzt{%dE>5EmX29F{Y*FK@_t!!%;;o#}4*W(t0J>Wx!l!RClvc<1Q;$$1mTUo!`E_KD|0W zesfv@MESs#Dy~X5s3s*dr7MMC`3y|hJ*o-MjU7{nZ3_lxeL@&i{0j{f|YKkxQw$NTaFn?GN@KGP+bJEX=wWiPK$oPl~Xg^PijEL3Nr z#W_$`!rT&Hz?j32O`Soizdyp$M9o|Nm zPV6b@zGV^r8EgFd6?8-PGc1%r&>cA-*{ajNDdF*9VnGzyP>C+-KY9UkSG~HZqRmB_ zHW!aa8?-dqpk~@=x2o%Y>D6sr^jmxL&Hl9T{}gt{IWK=T-~T$;-M9Tew-0yL_rF&1 zu=`)%+3hdspjdbH%k9Lt*u5{)+Wwti`ZAGied9~Jj{M_X43j4v)pxY)ZnXer9Gg7y zJ+tL>pbW1~AKKqs8@0N*W}KteUt8PV-8%3TWUaisd!v`fALFW9XmYWOe_Px?vue0* zp5pOKW7{zVG#o)|$ zZLkW`e0K&dX!>P8#eC)gB)NvTHOM*0JbG*4 z$}+A|$|!*Z;-EyyfWs0@zCR|D|-G4DXxh|GN8Qz5dUfy_^OB zr=lw$*Q$vX?s2AGuS3>>x=afuz&2`pD-3;ep z+!bklE!4E|?u;n`n%@=gI{Uv8J-<+*`gu%%x8;3@`kQ%;xrLs>A}xdwa{{dBypq%n zR?i|}7gf7oze+MpQ4UBprIV5kJMcjg#k}uyDnCSVEWcpzK8fNFRzBAP>ii z!lqCQ^uj_hFm9?foWa->o29wpWL`e*@NfbaX ziPm3pc6Gq=o|!wDpJlAn(&NETgznez*`>i;_}y_iM%Qr^z>0)@1%MAO`=r_OW-0Za z6BRZLTpYMa;whjTeGI|bC5SM)Qg}a`IzKAk7sxM}=Wmc8z043n0pk8%n{k8*#Uu4( z#(VZp5ncOpDgQV{jSHEs^s1&BPQ}%td{t2MRG`G*iM~lWcHqbHogdtbC>K<)Wz>}2 zD0T-?g0gH`2}sD#`KF_O)4hWaLRjn(nsUrA(GVwoHiU%EP3^2xFQ8|Z<&fyKW=agu zDqC$u1II2%L7B153$$K<&2k#rjzv#L_AF0qX=sxmRX-XD#;79R48GabKCHX49& zj>&I6)~cCvPzPUbfKN;tg>wJI*6Pkh?@Zt?+5qH08@~|mWs63_{z}^Tsp1)Rw6Pe(Jsde>Ls@Og8J^%AfNJ0!{kg{??(L|LgE@Z@vGo;xYDrDT}KC zUxpxnDbV8A4=NFqda+gqe+qR_vv}}GS^r{sVH^Ixs1n$y{~g---?z5+*7m=ZJWl?< zG$oL8%^z74GJ{@y2?Vvff8DN55D?%XAS0j1tW}t8_Oflt zW<{rXHj6x??W3gEN)D*)!5ms13%{!E(tJCTF_OWisf$tR!>cLZ>6CTDLZ>PZtFBm? zkTm6rN+GROs|sAIl}x?z2w|cjR@QK9vDegG15gW1S4SdB{qZ7g)B1BX*(1|*p*|}h zb&YS(0=i%sj+kVLiBF=ykSV1RKnVy=ggL+krd)xxm~AM5R5+(otTf^NiJ}B}&w;1f zbz)UN>*#XZL|M5iC&Jm~iN+HWN5^@&E0hz8!Da$0Xk$~g{jlmo>c;8=>&E*MJ|Dot z2qp$uMPT^%yja83gdZC^V`~r2xm-a>Qzo2eepeC0)oHuKr7r8zW8D~Ac#BlQC8<{s zqZhJZ)_kKZOV2a*S_Ae0M2Ty}tL1MedPASU2Ym4Ti(w-t#cRB%59<*JYJ3UAg7wWJLG8yMsNL1So|3 zUJjw#BJJYC2*t`B+$^X2;`-~Q<&r0_H1&n@A0EqoN7-PPZ^S>+iasd1!L4+%cyoUCo zrrP7l3JaPGZH>FM6>>d}wuv7dUS_UjBlwTSTMm7$T&ga{>m zHq~uElL})aYq@4)7006Yd|MS3uR z32yajv77%V!wh2FzZIvu^D2JgY103;w@dyXTLWfeOHmuB0xLJ)! zPNKM1loq>PAtE>UzVv`6aHszi)dD|`Vdeqvj1PzhynFcnv-jrBZR6PD=G7Q`t~lLO_htM`!6am1Opy#h$?+ul?ys;C8#jqo;%>33I~IxM z-~c%1;NUEjddZPo@_ouB+`&NCd5W+IRxB&@C6mM1P~$CY2vZ442oZ{Os|-zZtYIbK zk!p3Sxcv9<#!khxAmM<#-D7d&l5|ex_Jv)YmdU5%h?|JkX3k z^fR&sCT(meJ5r`8=VRIVbLOS4R+$Ehg{Kp3Em~U5n8*HAO;gt4Z~nhPV=uP9aM`OE zvR|cIt?*WRP#u)T3X^>XJd)Hj#wo31+em!8s4ea_3w&~ndKJN+nW!g>4!}4w3 zOr|g|H!5iYef?b4&ZfZEnUte(K_v1$R?JK~cPHJp5Rd@t60&XnThf#bOZfHd_6^Sj zRL^y0nPB^;TiJh$ZY;BQdr0(a#dv%K&NnEZ{X*5-Zk7&RNStpgIwpH*4xqDlN>W$1 z7cKE#aXd-0O>`@qd5p%&x;1LS4s?a_KQ`?`MJCsv7YKVG%kK5YT`oua#N6O&QB`j8 z%I)1usux43!l6U0TOpDi?@@GF$~#M`V7x2e*{a^IjaZHBSZtS2YovNSx?771m(HDR z4DcxNlyh7TVqxJcJ6^~F5b7s=h?XNiZdv1M8-rDH~ zxUKyc0Jgh`92tM#?gG~Xe$Oh4w)%h;_pz1>M%Tk#wG+q`X3O}1RH~yzLC0IQN=p%= z#Ky?xO`$imV~%>UK{KHfeSsm5S%7Hw`tTzrh{`@2Mk%kNpM#Bg!#KC>vm29+=FTCb z>!60ZFb#S1-T-Xe*4`la*PL>Nox6Upi-J`f#bM*NTxs(`oj+~OeYtn1iM@RmLqgs< z*L*lkd=`05B}=R|BuCmtP=s5gNVAN}+HH?^b}tM~bRMn|_*gc0^_g+vizbxW2F>!&moUllzFe9#O8*8K1xWt1u-m$i(XuGW_7w@jw zqGV!kVHZOZjgz64=(IEXSmh=UmJOMul`T`zVbzMqVBsXfeKzyAteC8`812s6eZla@iIdp9vl9L=2VrT9~4w(UyCqzZQ9gm zJGyq-Kq&ZHNGhzXqJV2NSbi#L7@+Qc7rYgCGIuiMyVQYV&G9OcgHuw zwNBeSM9uB3UTLl0H=K_FEI^DPDcF2+p8%Wy%kW4G;4&Nz?HdUZvSVmhszBGU;-aA= z4YRvr%{DqJnvkgAEd4@4o9*N>*-n@fgsyOo9I;JmKWY?@^^?kaq@kq9@0t6o4|~-#&Xo76$Xjb+uO*^=&@LhNRW0!L zqTd6+-9`wk1H4`k>;d5RB4NvW$Bhu>#k-7qLzMiFy9#oP)qobEk_0T!IUzH4lNH7@ zQlR{-{A8KTZ=_j4F1f!VYjexJzfUtxnRFOjq_WG$f|d4!-ICp$FzXeOpGduBU35eV z9)p_#Y^pYx#%Ta{x>6=)prgq=f;m8#Rd}PNbJU5Z9g`Gh1vb+Z_KYJtS34qwz zl$Ip&-B#}=LBPCYw)EhlU%PwP=C zDlEQbl$Hr3%vDv^2t@f{05&(QRb!Ke?PuT>-Jw_}w_`?fIfBu>W+5S4b}X>z*-l$h z%@W@`x!YxvAx!9YmmpWlb|yK~`t+f&n*hiRIX};Ej!dE58vS#Q@OyjawW-jjc9Tmy z3Q%8sn-VXlddIQ@i6cs~JxHpgWIy_D?9cGj-v8pHKsO@n&h{tDtKPr_-k^?_;7$Ht zyL)#2*WH7oz4iU?DxOxXT3ZK0Z58w%{6cHoKEQ3t}l?a^1M9pILgX%ucMMk_Cb zQ9B>zQfesUHE6@p-IAHey)_lx;B;Gv+gn)3-^QRE`P>x5yZ4smcn%A+b&Kw|a#3t6 zOJf{TG2%47gZCuxiJcDNUUVU8sBOKX`dc!L!L`S5%HR#^Yzo$3|Fv`E#Q)gc*M^Fb#r}%32NTvrgia>Y{5zm=bH!O}_+}y(wM6H~K#-k#GWY7#1ieES0rL&o0t3(6&wYLA}=#kfR&)!;Zrgs^NrC@IusPMCp=EL3% zDm1b--&T5QkB89$&1n%AH>_xjOSViGwrrU#^4?n3sJrZdv4Gw>pyXb*%t*h#Wo{Os zYTo4OENdlt)OOCAkufSOdaekIT@qb{Zzj$*><$ZWCjgs6!(*v_O-mzdJv1rIvf=IQ z8s!Np5EHW60>Z&H5el=>-R`rdOJ6riH_BD2+(YEea6(IG35p74; z%zb6$2f@qjyn|7A6=3zuR!})yplJR-`tEfbSvw)_DB(5*W4RI zp`(1SUAS-~@;h`*P&msS)9`5p4Jk2p8u7?r4*0%BVa$~~VhbZv0~ukOgs?E*RyX0F zUJ2}spxl_u%ITUe1zue%ehA;dTLj1~N8k>DC`}3;1t6Mb9w?b~A0d>z{5+#XWjZ6p zZwdZvtb&2{tDTI0mQJr(PH(w=_4Olt8=_ejGs_U-F^|_fZMv?gx5u8N9FOnAJgQUg zv(JHsXhp7Z%03Xn%x{7Z2FEIwdYq=Wv#gP6W-uqsT$nDQs-;8OK@#5s-eGC>40EJ1 zse9LE9iW?{wV)jJ_IwA%*#zzcASg@on5y<22RAJ*;h<+C@*L!73lf5Fcv_t~%rV`* z6-MA5z}#0u*0QTSbnBk9sqNJZZa)JTbe0%~w@?ITSsg;f@sXb$T{s+2)h+hayn*tU zWcO0O;{1bIXZsmAWBJJd1Z2wYrTE%n%!awC6f)1r9RhbSDLf&`-6d+e+_>M(XlC41 zLAz8d2h!bZX`JR$SQO1$Mot5cIJRmD?^_+SLEu}=5R_QP1l-^`N_bFr7L?ar!?fMX znX$V)sV-i%CRu!WFHl8(4~i6waS{RS1C8k^jQ$qX zC7`zY*gG!{{w!Ob+WF5a7E80L`iX@+HoZOsvUS7KyxrkA1~4Wmh%m`wc+WHGN*=;9 z2a{QrrFnrOu!(L!l;3aVvt;0l)7oK1Xv5m9Fas4i?x9{mWTLx9fah3@cmj!G<)pOG z-U}4GVnjqE;to^vk{Ofid5f4y8~)$&qLRrI=A4(CpxOMw-AMgfO9F0Tjgixt-Il zUUjJYUc-Xe#Q@on3&-+?v*UPGO zuT4-q9g@j5i~M~IYP;8yQ?S3q=A~_H=)U*S%VJ z|I;|8I3%b5kn77S!dOp^*}>4RXz2`%VVF92;}ai<3D(P)ARD$cSD+;kokadqqFvlkjrK9jL_{5Ac0||d9C2lf7^95-)ozITDBLW1%YodW zY!&3dLWX&3zrZHo?K!^4;|-aM@OLFX4Yhg@*0x zdqA=n7louL_?4`_iN9%4f4OE_gX{`)TIC2+qdKY?CkFzuI2w#JWl?1Wwl%qjSk|j zM^CC>V>O=za+E|U_lo?`(7u{x_1d?=`f8}d(`x@OsRC}?|GPW({m6tp1)r2^<|%i{a;$?J>31z?*8t`$^SYUt@r;bo_2d%v*XrO zQ9S4oJN}A4`&MR|#_zsBE~V-0lbUnBAR4Z%t$O!bX0MnEd;Bc?3MTUV|(yp^Yg;AD&o#8L+LhelHn|%gaTGAW* zWvkjfLfUR)B3w6^Hf2Uw#u0FK&Qe`@ief&XX5ZN&rGf9=`!AG@QYgPk@1U&YhH{;SWczRbG)>S_gI*WY4S zeQ_-8Fmjkgr<6OqolU`kZUymY-s5#o^ZtK$`>(wt*Z%8pE&s3Nski^?dFwA~`=wQF zad_zFq#;8V>-jQeSYla-DH}8|QRy!hBgF3W%1nA^d7AuBdL4j({(oRzV3v2qJU*hV zZ^cXCy`6wSey>Rov7tgsYCya|S)ATaQBnjTxGZ3S##fggq7CC>s9l0erxT6j3%pQUUC4G z27HF)ii%%5v`*172*<4*toExfk^HR=s+_xxTk!omqq%N0S|yB|mK)l5P0J1K!^Ul; z#m0h40FESgiXISCr`B3r99{YXaB-%8?Gtfp-ucIS8u-7AAimTgu<`sivg3b_jz;VI z-<3Sx^Pf~N%h~To5HQzLbDE70ETH^G`9ppXHs9rsfsp!{WuLJ44oGPpUYc$X!G{TA z$!YJ?nG^wp;iA-g-=+C&oWf3K-uBqK9#dtipP}~CDWr@|wV#qMONOM?-!O}P{i-D& z5xz)zalwb2TIyKUlmC-KNV6N1KXt?U6xZX^K>y3Q^h=xpo9O?+fkXdyMr;3{l{`F# zkeF{!Cgbmg;q*8n2~UCx{voL_~13lARct;aGJpUUXSB3 zzbbELRXmUCe*OAEdq_qekos}yNBa(g)2b~yLLUT=?8M}y|5+Mse}c0jeUr|TLbwH= zh9Uj+A-zQ%nL!i%KXmiIAC7j{^nVqPVgE^|d|EN(%P<5gc-OV<)#FtLv@g9oInl24 z?Hua-gA4xLy_1o7&61`_0oV1hx)*6QY$5wM5329GD%G1AqEq<-CAh#a#{WiTy3c?c z@dO~vO0HgB`dC5JEd!t|joxM4@S|>^)(ue!rR!AMvc(#QClv&r>F=^M`cKksY`SA3 zztvoLP#v49xxFi!{ZW2V)%0H&&nyFsCb@E|A(Xr*sM{ZsEx>KUaI_#o%7ThLh43=@+nUEX|FRV zTIIz6`TqUM7ElT#+tQg|d$94c?^@bimhMpEaG0YkCAdiQd+lWbZ?pz3W^sIx#yI5R zZpvbr`oK#U#k~VeQQT{(E;!R=g-H?N#3|0+`YWhQr&jo-FJV%ft)Oxn@kGx9-mPfp zSn;wU_y!W3L?|i1zU!RZ6;PPpw9w@?K}lO#1Vnui52uI_I^VFEhzTt}zA3-)&_vyv z)mMt!aJj(hn{I_vWxcXIW=lhuhgtzynioAR0oKfe0Xa|O*%Yz!?DC*$jdg{%6+-j$ z8ZCoS4UpZ1u$3c{&hl_6AOx;dQ>_riNh=CxIWF#n%fWF6)LB*g!J!7Do?L^qJWg{! ziZsW`4M55KKM5cyz})@hno27uyhRZ!CPT98JlGc+8w4nsznEnx;9V>-fhd{3%G2rc z(1Oy+&fmEmpE4pl#}>(`j{wo2`FHA|{j);bQy`uRWY&i|Jg zyjw~Q&}9F4bl~{^?;fqs|0{X;8DCEIQidMJu~{sd$AA7;1L;`}&`uC!5!ilruTi^j ziY+JjpX%W)oTBI2Z?2}b{UM~1Gc1>h<5W|2vYiW#w4hDoz^XP3Lod?KqcBeY?Kf&<;I1l0J8LasC1#IZCWfLqiHd=nx9?r`z8IL>6`qxHKg0#szK*Udp)qy$nV=zfc@s`Kj1egFJXNicP zGlGD=r2c`6$=`SdqfgODy);GFzt-ErqNftK(p-d`QOT)_oO!oOcm`k-eJ-Knson+y ztCqOWS9Qw2{8JrNV5HWomR80xD>C=&HMVMXqrnS)^%H>LZJHq4&(?GdlCv%Qt21LO zE!foJmiB8R0QASF#7(rN#bhme5gk{W=50R%|DX#>z$YSS7b&1aVp&0M(LG_l0y+9T z!+Dv&|ErewmDlEYDCJ;=7xq-L8}Sz;6~xG4l##|A?DCPjO?j1R%FFhp+qh;HzQ>mf+#C{%o2H|msw1?Ar6RvgNwCZVX!1?50JH%zMk@{vF}}Q zB&}MiIXqMp{y8~LHT|c@s?!)lf|k_-Hr@Y?4)>h+FKhb0n#Z93^biZgoG(lHwdM0@ zNxm_L-n}^lo}Bx1{7Uz|N^zR%$Ao9By$SAVDz z9b4xg2~O?tO&01PA1r=kYlO49PR)r-FR|ui##2xK#ogb-p8t0C_jaB0-`f6jHIGaG zzEZ^}Ilg%0p)@%%PtC zU!1@ALGu66TK~6_$EE)l=P&x8{TJsi9yQ%(@IM62r}+ILH2>oKg@=4na2n}7EwnQE zzZTBwIt?UVmiY6L_}ZtQ{{Kc$zPuH96a7DQ>HpC>|I2C~m;SRkUvmJl_#cJ`a2&f_ zfICywdY=4ERd+}ve|-Xqe1_VP>j&X742Xe!Pt&H7b&patq`GU02jWN-W2!6N*I3;&JEc5SjETD=0?~a`N|GhQ+U(Msu|G+8ggZy)s#z##5`2Ze*{7YBXAZX=y zqN+F)UwEc=Nc_9uZLFP7ttXtb@LQFQ*2MZXJ6=oSKgm-~|5fa?OBCj)c)0lQyPo*( zqy2UM*Ofd5{XeHu4(OZ%KIz~!CdIPMz*rE0?~3^-T=$5={&>5U1&of-?6-=KmAwmgkvmcoU~ z$Zno;)tFty_R6u5X=cf?K9(5S(t|Z@KLao6@eG>~ra1)=^2xD4M527@;~3)*1%9~G z+;vnlQgM0%Gqh@IX(afZY^+&J(!!a!G`CR2J)A^N9vK%ROQR~p)rXPjX;@ynzS={W z*mzdkW(-qL+{d3^%&Fo32`EX|Bv?e?f6eSJG<-rFDrS}%|nktpnNOm@p66d zV0vf$dN17VoS_Q@te>5w6TK_7jlM2MxRL3$&ADcZN zI1RDJO2N)-lJB3Upaqp<;v?x63PSW~0#X&vpzjE7#*t&`Q-_61HyYYH_}YTO*K}I+ z9!=9Z;$c5np3o@e1Sremdypo8(q<4^GDK7VTAXt&)NupMB09EHVfz{QAcPcv*ybRB z7v^O-n~wmRql6JQL2z0?DnfEofafSdq;zQ$jRc(TIZM8-tsKD!_thAcVvAW;+tj0o zre`ofexxf>;V3oM7uYovS!&sOwE?5zswGgdC^41@QBMH1;nmjTgiszpt*-SbeyuP4 z^ea=D{Pdihb2-Xr#+H04hpMD7CyLI)MJ-%%yuWd2al!GLvgXe<-u9yqvh<+keN9h8 zSPEn&_5VnKe}1*gPxDmkf08s(xrQG0{{Lui$G-pHAFc2ISMnJ5KX20r0j1<#QVXQ7 zpGT|xF$dAN)~C#`zk)!Y`cTaKpc0IZaR54n0a&tsl`XjDtT-!hJS0V$oyM_#Mr2_n z?GsM$0-|Y}Tq4S=zJGrbFx|ixObVRb1jj;Y!usaA5LXDfeGWF}OjA@2!F%%GnER9~ zJSqRitxUbo^a}Hif!jEIJVd|(e6O1R(|I$`0}m7bYiIvp*UtYtI^0{||F7gR=>J6; z0XgSDO!~5HpgAMck(GKr&Tp*)B4F}q|$!6@>Q@`X@%Cq4Fl3y== zTRc;z>^DMl93rM9(e7Cez|IKlj==7|k=K(KK8+%Ni=ivzzt$L_TVF3wPB1A@5+dzp zhsOnFsrUmT%wPhx)L!5`06~=AC3i57PA|>_rmFiFTaiW-SGW+epT zI!Ak>UFg^%j|RB02(+7>CK*C$&)CFy?#3FY(gD@ih)_IR17!-dm>z}$A3+X$E#0Df zitnl8`E`r zt!iqA>q=`i1};j4zX(p-T&n4*; z(JU#u4DSuRMS#q51d@~m(E>p+!O0B?Sa@?LG*raSryHt)6)YJ*e_-v?ua*;OO9=d) zSc~^ALfEwI-5&{Pq25JsbP0o+j1AKVw0@m@En}*6w;pJp7E8($XS%|)Tas;CVp2CI z-Swp6N_GHDo&*AjtotLZ8?ryX8X4 zMOq2#Fi!8lW{l{V3+w%W^`KAb_A~Hd0t-OyNmwwmce;)!&eNRE>D>e+GUJby?Wer# zma7k~NDisKA2)Uw8xGx8`n9;es(1m@i7ZG^F~r$?e~7bB6}S&Tz?N^I`7O)?8_$Do z7ti{M11HSM&D;cI&JDO8d9z3_nE{@^NDz4TY>j?KRIJs>{3fh0=%Q4X7*Yji2&cYu z;!;lW+hw?8@F}I-QfF+RcyesD9I#%$dhq^KOsDZ3ye9z&-Z9?)29qf)!byFqrG_E2 zO2K54T;Et0PRUdcpiOnZe}5uMv8x0B?&s8XIEA<9JSpDgZ_~75&dcWXPI-o+2FzKi zxq8m`{reO5trM|W3sl@?V8fa?#^S!k(>eHf^~6`j9gd({v>E>Aaidt`8J4j=haRKD zrX579TmhVbj{=OVpn~3+UGaF=-TGp6nmQA+RhRq6O5bCp`QeaN6|R|0F%9k%+N9Hr zX0s5@{973kT?bSg4OC`;WaNC;$8Y?(X{jZxxSu|0kv# zusQD~5`?pg9_*zdS;v1~$z#y}_k7A_4)7&Ozp;QGE!nq5(KpH0l7Y)( zZ6no>c!psTbRqc0I84f_QYCk%^t$_q(k$Y!^0jG0_xpp)uP%6t=IkgHT-{;6nKi3KmIlG|Gk}EC;#j2?*5wpui`QJ zKcDg*kAL|$MbmwD`CgAey^!3Z(aA;lJ zO(6L@a;;SPks1W}%Nbo+mbtHlh0ap9l|LjQj2F7gw3WFVxqS^+qGls+fAyuR*=)1> zZjgg}_&p&$By${LxEfnr5Zq)l?j|4berYG$H`y#0SOOLLtUz;&JGP&JNl|3vczgQ> z7n9jFYlW6dAlaVcD2mY?%+dCBoL+B_uE*i%VCV2K+#CPp;CcsM?}u<7{^f9I|L`w6 z!t>GS0|Fg5Vzi;b*4%YrZt9cCh?@~^AFS4Jp zfF7;jXN{t74yT%bc$L2~63bLoL9se@f3M&emDb#-{Zm8#QO@i=!!VsC#WGBw>HNR9 zvu~gO4|do3|CKx@{pV8-#GLoT1)OE{cv*pGD82IosP2Eo3E$|0e?DWgb9@3udR;R( zvvq{)&Q$oGhs%T}Ze>XyP`E5f_Ip8pb^1N(y*-IR1tIb9i zIWey%8u%4u_~f1d7)3kgyRC-`PF*vY1!GiqXt5oFI-p3e@Y98^?rR-X46%*9^G#tk zx6|e>2NqzO5?c7uBpaNtLPGFO!sD?)hNO>A$<+}2GAqExr}Hathw`#iRoFuvth(zS zfyA|(xBOEh|4m?yF7h-)T*pT;7%nCPHl6#k17ArDFA-dg1&B6pE%YFhUJpy2eme-tiMVJUBluD{gxV0+xF_1S7rGh!ON=Y ze}VETPMG8GuQ?3S1E)LUCK0flgN(zn%Ag${AK7^1Ik-;uhpf$T2hI>u z0cHZv!UId#)lfInT!bFFMfWla5u3Y#cT|Bl%aAs%TXcWLIyBx27i+d>D$qa>)3bhL zkX3klHw}tU*R6IRr=gUX zy}U&tW`%lVUy10|#N4y@{BK@ae_vOh?#!hy}7^4as;EZG$BO}aZ(V_^*GpQ|FduV|LpD_uI)cp@)+m8>M39T zI9Sp0BR(8fj;QaWVyI2TN{)(EtH3y2=ukam-jII5;m0w|(jHd2&o;TtRy)U*Z4c^D zEDmpcNL<#L!Y`M%=34l=qNIGQ!NO8n3nP8sIk_aG3 z?kOdn!dnEUm=y39ks)}U-m#EGrW$7mzJVhBUpS4yH;{-?jviy~{h#5fmjC8yJe#6r zb^rgTP5%Ew%l>EQaQ|SP|7|6YA^-i(r+isqPpq6rE7~dedluwO1MNR(GLyv2U?P^( zLnbZJ!SiG#cYv?S@~gLGr1?&K$;3%j5*whI8VhYGh5Wf(c6@>P%*r(YTG*6(@`KnG z?ZP8pSTVy{k!C2LVnQ_W8(429duvDR+Ywmqz_d+5fl7>0?1n z`>$Gd+!@75@gpj~-~@;6eL-|8)27QyL;9LhQFBV@+w#)UW>aGr$Ja2teIbI9=zOb8 ztZuIi^ce)%JPbsq9@@}C%ows3S_XB<^t?jfK#}9AafonMQArU4mSP4LlO@3|n^^(O zGDX``5X(kZ0I!x_ZYhwpc2)p&ng4Dnpvz`f0CO@XOM=Tyjen2D!&5)wn(ZUTd~ZZK({5UwnetJtK_k?YJsdPzeRI zxRenbabm8hA_eFRCPh#UtZUY%tsFP9LtReH+DH=v9|+!ME%4&Ye659q)MNk2DuLJZ zwc6cqsVVpn~Sd_rGrhs%S50WH}_S5hVfRG@nAoen0**7#$rQ{WCC7`}s=i+ZqtF zb5L2L{M49L2qhurm+E$vvY6A zCi|+;^)k1C3N3C6p3b^smgKJT-KXo8y=JhOEZr?_q@rK(YD<~mvbb%xT7X@kYSCuO zG7K`eke_U=k90jh&F4RUtY5|qpvnI8aA(){|2rD(t(WZqKAFDkS#29D3z7@k(6Vy`aEh4 z$#)o4-+V_=DW^{$xyaENe*wXEP`2mI)mtGHm4Fv1;CYgmWB{p5bO-YYkQkB)__*C} zXv(^G0`nKFtZt856!*UDG#i!EE{scPYs`>DZ+6SRF)Y!cWWntS&9_-HWm=o%^Z)E0 zIQf6}*YO`#@)+`;oa%nXzM6aO$0qodL+M-eo1zHMrf#AWg8%J`f{sQ))HcLG@vcP# z^@>JW*G7}ws%aEe?8EE zsqos_`pXs5dOh3x`10bzuW$Z-h5z~uu~+{!`0GXhHjDI2vNSpzozrR8_+*hOuY#h__{W_c$81G{3m7D2b2GH57zSE4|@#xPaSi5 zmH%oiULTwMR}N*Z`de1@r|HxFc*?)#!L3z0Yt_zA@HF#(W;^|m`Tq`f-T0pe2M25Z zzlz7;|7@!JW&Tx`_m7S9i*Y=>%_pCOMc6B=c_nc`xsZ6%z=B-+7PjNZ#FZ~t=!RF9 zcJLJRrPvQZ@MTN_5G2KzSSRrf(bjQ=?#R{hFcu_g8NDuMPRCoivXRn_9hqPV=xS9Y zjpCG`t<3T8BFzgJFEsOd1I{38X1)?4{5e@{34TsG_V0;h=s*+Ck`A((22MO{2aZ^! z@ho9?ggyW)J4eTg(Seb*CInXcr&{vgfQaW;BNW0}F}XzCN!w$p%D%tABuwWhzppT6 zb%&w1YJjSLF#J+oBvm$Cg5xw@e)2X>$K6hbW4&6-a%@Gp$Sm$qwL3ZTsD`5X8=OA7=V?}DXu;pe1gbab2AgNkRohMzl6P@JKBIEA<9 zJSpDgZ__m6tG5MG*#FOy0_9^Esxg>vOS?WVy8VGP-JV!Pvm(uPQ%~ci*3U8>2^J#? z@?R~6Aby4un4Ok;hc91!Gg;--Mkq^`d&A^}X>PW(;ooCY$Ie`ImBU5vcJ+32DXBGP z-M&ZTV`T?XZetCm$9p{b!#~aEzhwNt`5$%;5032f-|qf8{^v>_|n?Q9S&~FI!Zvnkk)XGA7L$$E-q^nmKyZS~Y6cQH7dyP@lFLhX;cM<#UuTghO7n zq4(Cx#$-%vJ!7Wn76x7Y!VeQ?y_U>HByHi(B#c_IvqD!%SOGR-Q z&q#st5BZD~zs!<|-CZhg&j18bdY4dn;Pm1=D8p9;W;*!~=`BivL3?(rmj7`-KBHo9 z9oudO{JpJ1w0E(Z^qT@~$~xZwi-Y$K#3&hPDcM_X`!tE~nHF0##&p{m%9(R2bKKVm z04HQs{s_8OfqP8Y0FH4^>>TtP^D?G^D8F$#up1QCg17$pv|T^Dv6i8?$?8x<9LfM} z%m-T3p+ieCCu|(koW~)(RZDW9UX-hMu;d8B=~i>7wGwU+2-Cyc79$YA8ry3*XpN?N z!m~uFhe|AoT2G68!0g?n6$JR4UvLQDN4Xh7wzT zEk`EH@ISoHv291HTDSr;c2xf;8*e>+2Lk}eHjWLLIJq%L05kkM1+u)oW3)`Yt+^fa z_AL6oaHqh7H1B<*5RS}QaaL!|?AT?8VVV>WCnz^U%XOV8qZKt;5s>6~Gpf7#?)PaT9wnir>WHi5P_ zt2qko0y2hnI$T!55Fcfv_n`{<>u1_^Q7D_Hr6wBXQ+3J0AX!?7=m3f)Omv2#RB^^U zWU>y`B7&I!MoM9#r&g^7v_dKt*mMD>MI z+54KSNkRY=LF>N5#vaRUvLSLHQ0kDIit+A|KYigpMPJ@vmWHC(7yMJAW0|OvPf6>D zpByVcci>NU3}A_oxrtZ1V1gbkL>U59lrv)nTBxtk8EbI@Tc0320+1a&a1rvy^3dx- zO$8BbDU&&&1s8$IJ>aweO1&_{4wjhmNjY5(Lw)gXkNUAEHGxmerHl8Y+vgR)giYH$ zDgd5lF`A;J5c|Bm`lZMgK^`B}@?ib^3{MODk9qjO_J4aj2af&U-rE0rC68hMaq;_E z&z2wF+)R(o=7Wx+XKRm*Y#vI1x*CUqthmVKJ(Ki4`uVEo^M-Gf6X{_oz= zn*OiiG3fs#o9cd9K&45;W8(tdwQq}>{naVl7ErWtz}Gonyg6U^lCRMWNrRvMv%T<^ ze`u-~0m3@Z%R0}?+7fte3B2k&FP!`wYrdp!*Qs9Csa~peuRmH^{^LDW=f4-26#0y8 zkzZ!f4Jx)jG4oYscGvMR*l_;a-?jaJcXtnV*80DdJnVe;1{IK}01(4#6cc{r{{U%AV?64~C5lYn(qHcBP;*o?#|BPXf6M*;;ENp#X1P-I(SGKmdDn- zaGCN&jwp$Io!+7RLO>IM;4PY?+zx4N#IoV_{M_FOG+I~D1g(Lc3kU(*IA-)4tKE*= z+XA8v;;y#nKY9hOpC9>n>3@C=!|hK@q}N?P7mWkgK>zoSc5MC6=xDT#|Fe?Ey8ma> z4a9td*OUg2(;UzRv5ZED*0+4ee=duF_rIK;DSLqJXW#h0M}fj;Anp?dBz<{oYU~HK#W9YWo>D9|IW2 z7KH_LPtmii%75n-Z#)& z>5tW~=u4n|`xz*)$rjsI`NH-o)ez5G-0}o0vC>eue0uvCC~+x-67|CAu?p=HMg9wx z8vLN7$nV*WLc_#ZR!Pf_m2p`)UNM59`O!cHdsT@JUSSm|VLkPX76(aup$p`&AI`{q zd!gSE+qik5DYbnr! zlAZ-YS2&Yh=?76kA2)OKd4_WoHH#^V4$ua!0>J(qRM6K%k3_XdC$s_D30I@}JCPF3 zQXR=gXlL^8st*6ScV{*9f7xq)^)%7{qh0&_f3!aTujt|QpYE9pp)Bmj2AJ(Np?~~c zGaT4p`=*5zZB+w`;B7wx=PV;!jQ@?moQF`-ME4DruZEAwXTCOpM!q zq*vU3u-}@Vlk0`qTTFnwo>1Ccsheek(l0MGjjRTbX3wT;o==lVbs<%|?mYpshn4no ztau;_2LrIVq2twv&@MW8MWu4gSXz#lnm^7FjP3zcecGDpa(o)fs~k`SeSRnHM_FSb zOem|Ca5m}T-3j(#teY~Li9w8sn7U}j#O>^1es2f#_j(hXJ=P6o)8~24;xc$#RD4nIng*gL1!o!0Z_$0w%HIEv zb*x!GEuRYh&j`ZyCm2PTdr6;`w6(J=(7^vGEofL^xuXJ;RNO=60Ts&+V%0%tZ)+qylLh+CC-7; zr6@zWQp%z^qTh-;gc2~F#Rbk{F{8$@-*E{nAvdiQ)$4}vb*4B~o~%uS$eTF5hA{}( zl*QMszo5UuP?R6SD3T^Z)(mI|-cJR74yE)bDT?MX${Zcc`p<#Yp6yj8#joqMn6$}Rhcm~% zRjD@q29qd8R*ztl;N&Jog9ejJtCq*|uF=cdY{F-@Xp46a5-s#;VdGhUZJetuC|u)9 zzp{lQ)-)2NZ#M0CH}=X=cCpO{vEJz+U{h}PZZqVr%&GwX)lKvoC(|dU58R$5tkwYvQWXB zZ7B=&B=RgN$4FExD98AQ++L1pDWbGs&H|3s%vqFQiaE(75#nm@e#$Nt{#$g%%8TI+vT@>n$QB30t_a#W73oCOYf4|bC4 zK&}MrJ)3826k&Fer$rj3vF_qrgqhgzYTtW;Wr%x73Yy3kWAS(fv_sd*@>SQ4nE=V> z2hmcz`|S_9cfw+v2jDC_&kVtOR7s&$;BKegjODcyCE`3|=+8-O)8o?)oDXfp^|*fRvxju?RY-5z|c2?o4>nMj3$ zzFxK6VXXxD#jA3#4=c(6PE|8Wh)0UoI^cArowRNR>`cmt{Apf@i2HQp{GI4Syq7(G z1G6kcBEMfb(Y%y4@!w>)PSvL7R;N{buF4f@Oze0A)V$7w9!%F>y zcC{j_v-sMwJEf_zvqILLs;4-4tC1zP&?*!~T1n5aHe-EQdb^7qV#^`&)9VD^Ok~3A zk5A`UPNr)ezM7q>EVX43vE*dc1Nkw;FCe2$c* zYh$JmUUG>vArur}J#jag*a<-#TKHRmL^=V&b8vrPlPM8H!4IS<3IMiL6F|uLEAsIx5?_@*EcY61zO`*u;&iab{7a zGRGK&7=iDkXznZ{!mL$G4>zkrWlw3RNtG>iqjgsQCZN70=1XAU*)mlpfG75fur`gy zYR)%gxfRvXP2|8ZEx;LH>Ua(@FO&N9tx$T(CEP1&+SvLb9u{&6G$#xB%COt0V@mZb zNe2_{iDGTr%O!NiImBbpssdTf`4%EsHXRJNls`3#y-u*CA!;poOg-OnjR_(QVYW2V3Un=oKSHUZ>w^`BrM_>)b|9t-nAwALITUGt z_n`%@$yZb2`}_AN>c_DsiqQknny&jFDRpdnyRgRne_-c-*gM!=$A4JKW9@%!di$UN zT62$$1{k3Cd>7=90UhnG;(o{tG%9F9oq*L$A{O2MA96Sz9HSH~5eYuj=PH!J1U$*twsC)_cLyLW~CtrrrF`Qo1k@d19DPVZ3Q}s*c z(0WN<2P}o!809Z!FqUtGx~+UwpWIXfMfBC3?3*L)NbhB*B_LjcZ}!0{eF=J%!Hvg| zNHj!Qfm|}T4_KdD-$zdMJy8PvYayBh-H(1HKrC7BX z&oAct0sH4Lu-A>V(s(bPRkk=zyRI?Tg3p+Ty0p^4I=B?uC%Kx+3b&Sd6ZCboX zFuFgDq8t%YpC_d0{I}!ie-3xo@t;@oSp2_gdV9GUt!VqP$p_Wr==UJFAv&TRcyCX2 zr>N^RjZMx}1?Ipy6>6QFv}&NncvWxgu~5K2_tTaB6GRA3lhg4SC%9;L3~ZqPd!s{} z{_pSat^L1O@>ul$l20#?^VusEbgL!7981IHafHJ|3($5r+)8i36k?e~8l?vF-p?FCmU zpISAE)+EU_EW^=#9Dywkfa@2l#_b!If9dkh>4{wS&rjzj5W=%s48N0sz5h*1%l045 zvDQzYPh0u#GD9Iz=3jJ2^r!#daq_?KjrMoe^4}^ROa4h3r#US1m8e{lL#dR z*md>!E&VBaIgSVvmGF!}2MCti4a@bt)TNxi>$Pz3h@X!9zucG|1b`;}|IzNA&Hs1T z`CnG^Sp2_?w$QHtP_COtDFNu<_ay?XS^l4h<@aa)*fS4akp91gQ`DFJ|L*?bp=1Al zxIX`_XlI}JXXJKChB|_eQ{0n$}C8sF|T@{!lCWP zSe{PxI#2W#m3vYpyt;?Nn$Io8=N=WC`;jNxpO(e`)K5qLuP0&XjsG9*?Ku2@wD$j7 z$z$<iKIznJiciHs>4?;~n)O;bN6a-|8ECx)^7QW?$? ziUM_EEv?b_65vwnw_E&PIU-*eUu%9A41Q^YxNICuH3x2ZU)jau35O{`e!#GpCBAAS z@k-qNA;V+-;U7Q$FVY;|pzTjE3=tu3(x~3SyWwf#|0C!Ae>6H=^Z%7RjNn}SenxjW zn{2>ldl`P8&BLL#aDIj)u-QCpBVIU=_vPv*3h}`Htbq7acb?XIw$t zs<@Q?L3#x0FKeQRNb`i2Z8xTob=&bdle1IDsfiTfJoX;J=pQ*Q(7Pl=0sl>z`Wu+s z2ij-*H!XgVMrE8cO_Zw~+%%0)gS(~UI?3udBdB+td`b+DG!33BfRZA=Z}yy&D@^yG zbb(;dd3`8(coPQvql{*3(K}p2Z>5&Ipu_b(M*K7@Z53qP$ z{Iy;kEfCr7I(Bi{2dq6UY2MK{P^AAu1eIM2et+PnUj9qQh3j`pTCHV6UfeB2a7(ExG-)6)5j~vAa60`-gY-^szvngVJ8{+bSzxf-h$a*eS z6i>;2JSBk-6oFme7lvB>1Dh+YtJ9*$@%5~b_K@A0`*_bW zJbWuZ|D3$0f&TM9&SFSNCzo&IX`ui6JA3=K{nz^bcSVnO|9i80b&{Oa#~wNE0?BlP}We834gn0CH5!@`QjOcnkHH-Rl!)U5zyz2* zJ_j(qgZD&l*#^Q!pV@-hRcWGTPJ(O#D+D+f-Fo@wB|KOR<~(7hTPf`UgpeRrCP|A4 zPHvt6z6I4vQScw1fIwe}mMYo+)VR$yz8s(Un50&~)F4_Rbm{Wi@b=_@djf)g2LB8K zQxPc;Oq?v~sQP&$|Mu)ZO|-wu01WII;A6_CK4R8MEi>!Dg!gt+iyv+^CJ<)wkt^%DONJ zjp_LLB;55=_q3P)e_z-Mq)GpCv~SD*yL+Rx{l`k4HWDz~;lsJ*WzmOSWOewXEKlc{ z;50$G&qUogs`%-=*20z77+p6ryl``)zDEVbNdSTuC`Lt@EWsmfPh407zS3> zGT~@Qvrsksk4BpvQ!Q8kRD#;&Hkq~g3r-^2g7Y5`7q8O%70wA|iexrrX=u-o_XFz zai19!F`I`02GWD*Je-jtoi?RNs_0egsh*=$VN+{t5l-UaB3g@!TR29rfINDU_Z06f zIrLaFaw)EA@K#-k043W6^`>|A(A;820ogc{REP?uP*5l^08RC zytcsGv;bt5Wob?ct7bOSMyZhV_z024Px%~C5ssqYka>lBCoT}nUtiYtvDO<@c%@5P zyPl7hV=MW^)44}lu-a%T++X42cD1H# z`x*G~?!~)fa2m(y9Y~Y-9*_)$c#K23a|qaG*TLqy>w6i1^sk0W=pFrdd;-|)ZGHc) zhpiA3mS%Sa03@W4l2#T5)|Btr+7YU#8aD7}lQ ze|>~9s&57TP#M(&(BqR)8?gH4kx|>qf2P8^n;h6^|Fdhyf89MiI$X*9_p{?VpHy%f`ts--tj>mTCM1gz*!vUTgQni+r$dq0Obh z#JZ$-D+DRu9ToegOID)cGZ_hY9tfV|3Q}Mt^;nM{|CDxJO9(p(cxPDU&$i^ z&U433vDevr12y4&XoGzVsk1`34-a5YduIei^v@h65z1NJi!|z@we=6EXNG7dnV5$K z*S&IurKyh9ja?0!M^q-UsLA6rD{w3mN{D$;o|5I$=(DXr^i}5SST-6EaNoK>@fT~& z1-=Gu(Y<~O2~jX`{Zd)33iP=gcu?dsDl+i53PNu0%Is~OGsQe)Cln?ryg(>BOS5~e zs*%rvA3~T(mz^p^D^LdVqiqLdlIG%6wV})-bvM^u46Em%b6l!!nC~4H%)-~On7nyd z3>EP08=s;AM$DI?8RX`*Vd0-AQn8EyF`?*w4#EivZ|SDkn4{3~$+HgC~A@wGJ=7_HeWN6Q?d7qBvp$k8ULf50HkjSr`B?Bbvz(Tn99>=m!G z%3Le0N76Vp3T53isc&`<6zP}v-^fQF9Y0rD)^3Cc?quuS{%rM984+F|9}B83m%kNJ zrkQPK^Kh873YziOvp=hd^FU7}yAi`{6myF-uELaoQZfXNxF_O11R*-w(8@VFHj z)|VBn)jAf7wsf5Qd;7qYPw`y*Tbw{x_&zdrx1 zaom(bu3nG6D`lES`8S(~O8(Uaa65b?+fD_%#mNo8Ns+32 zf6^>2iMY+%b4^Z`8;+6*dj5dP4Xv*(#8RSCa$>@C(OF6ezK)TKccliatx9{|k;sG~_DG%y_a=_ZCzjPku*GMiSHH9B)<*XW$JQ3<$W_H6#> z{Af+<*>NovvKH9?pii^>PY;R@D*x{uj_mvoM|+2(wfw(|$0PqkTmHYyP}r0FU!iq) zJoi53Ai7BAmG?ZRIM+pH`|3+Fq^T^+mc4pPO@s7A%QSi1C|fU|-BnZYU;KU+cvMQe zY}OICdSWn%XtgprIG+q2aGQ-$4cS477Tx^&_b25ql_X+lC6REYp(b@;kD-n$aKpBN z-8>t?uombxaumn1Iy)NCI=-q{uUuBD2vcDRqpWLY!6z5Aemkjm=t$QlFfDN2SwpV% zU`)brP#2n2+b$&@>0+d4;S<3S#EO?8Z-0WbBF#`fT_*K6d+PcB z&d$NUlmBz)Xm`#3SMhL`o+bsvBC5OX;5SKhMSWKR?x6>IZX&iA`qHKxRHS?FUCVovpI!Cz?gA67S zxPdIzcY;ua?AA2zFZGg(qIj#m3SCP1_>91hjZt31eh z+f-dT%9J#(suE7pyQKQ#H1%BVGHVSgBUKAWC4T5K^WJ3hE(`m!-p5I0DbJO4g<&ZV zrDm^t-~GR7N_sjgQeaFN5Dk z2=)T!BeO(CTNyJ%4vqnPNoHZl=-l&bG){B0#ojVSAWoC#>=#`dD0-5m(WSV>&JpwW zI@_}ae(x@LmY5rPlWyXZzZ2Fk#ydP^IfJ+r z&M|;-h7)v7Uy1?*g|i$N_rgW`Sgo6UmYkBeY4Sczi(_s!W`6sPp!^t&)XNZN@EXUs zz=#}cn@mJ7ygWRE88LukOdiRgF zFW-xo#<7e)F`nYWfGEsn$6$9f8cnsAQ#4H}@^*j43ZLn<+0Yy%h!{=rm5jciP;Wn- zPGRDVD};shX1kbX+YmO0S2*p>CL2q_c2h0_C)KYS8R3&2tp8_BFDeM0!W86N`md zhOlYOM1hj{>1ZkiGb!Vh3Ui)7tP}t>CgHX*BRnZj5Lir2vlvWcmL%FKpf_<+Q_jnh zRP~!Yon?m9V-b^KmPW%d`IVKc1MhYqz zW7BXenhH8h^*co}8YY?^FS<^2Nsktv=GpPno93A=p{>u8^ZmOX(jtlgqaZ99RgtED zb&yGJiBG-=IS?K^YFFRh@o<>c#@HIOzZovRe?N8x(rS;`z_C86VH0|C-+C(7WXru% zR`BhdiWSs(^LPhfSAT^QOeQF*=JmDbkCv*S;lI*r!!zbz>2(`#6it`3F#z9~)xrP5 zX>47u)7IpOmpBxZ=K-Gn%~ALj6h%=7y=!JpHIQt@YLvk*{zzmXn5oF?)zWV*NarZeafAX;zB4^$^e-9LL34T1&jlA zC^yXmIOP6fUWWoybBGRR~ zDzk+c-j-Tex`$$*bbgxVBjCuEFtfKltEi4#%`=}{efoTswsyjh)3A8m$nvyELw@`X zCPk4M-A_`&7G{V$OYmU(g zAD7S2+tW+HvUrwZ;=(jS_VQjN)n&UFinp_ClqaY_oo{<9O zpF$kvcI$FN7jK=Qe2zn8w(e1E>;8t?QRfv-BES;(7Ae5fEJjn56o3I0p#p_vWGeqG zo@+UKadML*LY^~w1jbX8^{V9tDK;2;cg|}`JA?)zFZz(qk=3RMW|$=5#whw?+{7@N z5Lg$j`(QJef@APe;mRu3qH5QgetH~g0!9AeGohySU9%2rtS5H4_SYcBXzg|lVlc)z zDgGvCq734wqd!EwMsE%S7?Vb-#OO64Qt=&T2g*h zgcJUDD@>mpm_&4a7w9GzE+@vXVUa^L#<%t&(ZVcP-p^XQn<5OazeOd-3`*Qzr)eDc z%gdX0&pb$APU>qmuM>)Nx3KD^$nUch3k!(Ns=mrn5d`#;=6Z9m4o82&~kj!pquC5<(C5G35?mOq7-r0 zKoOc9@CvT!jnThc4gTJ2)YW?AbzQFIf@O5Wv#jI^ybeV6kIz($;?UEu9|^va-IBunWoBr$Ai0?|t!3IF!Pq=9qQ?Cy8nVXYiw@-QP@9GNR}%W{qL_!{ zdY!`P7Z}4NM0wy_3gxMUA<89B!&qzL{KB`B%(J7vo`08VhcC@-q@1_j#XP@&@lGhW z4dtLisH6(qIr&%2us)e?nJVGaKBnq;GQU-}V9_dltC-(fY6WcVpHD?NtU>Q@?_Yy| z;5cR!L~>T9F{0;6Ltiw@nJ%{U$UWZPeoBs+|FJ?LM~6<5W!-<^VnR3FX%fl9xZ6~9 zV;gFCN_iY3n1ETvz@_6blv_G)a2Bn$H(3E!>Sd!n;s0>Iq|4curTjQ}dpDvX?X-?nbCQpWcz9%JzOnXO^$^+hWH?S1481Fwq&uis~BcVb-29F+RzK&XZT zr6lGhVV3=t#{nO)_+`Nz_y(hD|1Bj&AXYa0P0Iv)CR7>G3S05)w-}(dH!3gc=vr5% z1CQfgepOG+{l9btSK_v z46)aVJU(zwR9z<4N^vh)R$u(7?|V%dt4Cw~YUV=Iy>6{R8fP9Qa^i#q6Ef3Vd9<*W z4%SoJlxW;|v8Kz+QzPCw3%tT+j3-|DDB8SYDVUy;;ZvTyh=P8NfXpu@(8RMOnZ7ZN zVwJ9mm14JVB-)_a{e*HytH|HvhUu-wqM=p)Y6Z(tjj-viX~hiA+bn6nefQzzF*uF+ zb!3hpw^YfQ!3>H(j>s%703?7T#*nvk6#cABr;h%A$zZ~Q$}GtOn&|)0;ht^(wY#_W z|6R$`g8r*z@TgdTg4(*0lX?U%7hsj%mEi)MYls&7z-q%~3?*bIwKe-?5?14@<`(6k zO@^T(gY%5?jjIFWW)p8xJ zsS3uUx3yZ{VK60vu?lmr$QrZr()DBZ^WRq>E|`ce_o8+4 zcx%jCQ1Z?#k#fOee*WI%i^_cB>$_9K-ilODQE5*ftL)pAO8T$vN`EmtEY_0$e}DgY z-_8HD-{pVWOeur}HKJ#02ibE()3(n*khn=yeg+0<=dhUdq?uRsS#PqM4z;x3f{WH1 zoUHDM>*D7!&!(KJSv^YiW6)gQ-BN;>`3AZIQL8ftU(-oYw&?3g+*X4rW?(UK_}a)P z)KplP+5KgEi|l7GWl9@~@$W#mSe7zK6H-U`Kl;*y{>RC~n&tn3{paMcqyHNzP3S-0 z0Bz|%-!ne?&wpTMSTh0KL;m@9)PVl;=A5ibzy|8AsI(SJ=hHNnx(zuK{a!t1yO z_XDj6E6yL#l|5MVUQ%+XhS|1(nO_g3{?2#FRI9ZSqZKB_hW;e0H);j-dxGy%92H}o zs06DDw)rIIw-VRA+6!FuBGB9bMh$7`Ht_gij3X7c;|WKRh@tvKaVkvi@=XP#W^lU+ zp}anf!M?jqcK}YM6EKVcX3P$X$MPo{d4?bmk|%i#BEF%;t9Oov(NJ8vn8;M2khLp1 zt(S0XmyfoPJ{DuM4e0*_r4$Eir2i*-M+N%d+5b0Fn#liZ1GJ?3dfWKuzJ_S%0s50i z6?m7|uG9q#s9PpDlNf2Nn(73)ZynCn19kDlkMeu#bbS5_;s*R?xjLCr+5F%#?@^nE4Z_!jpc-V{h<=_F&Pz>}tN6BCY zO*u@-tH$R3N7*Y!Q6c}UHT~8P`*Mi+6SY++9^wc-zt)jCnEU# zWW!k;gcT_u3Gv>WtVjFcojs@OVXe`}t9Nwe<0uXIKPA&eZ~kSe)Bg^N`rqEse#iee zQJUy~Vgt0){^X|d^W#x=w#p zw?VRzc^za;^7GvXY2>>Lp--~a z5S2yzS&`1Ahw}Vtm%^m2=B4MOQu$JqR;Ft?8({6~mg?_0H7<8~J}ITE0sYsJ?-ynO zb@so#gAjmQleY_ggh9CI1Xh&JprvuK2HiX{-U{ zpw!jR4<@=R)CH^o6gn@v{>fTZ-v9jItj6*eKsjcg%@t5Kq{f#(`6QHH0~McZ8nIN1 z%WF^hSqdTqS!&I=OkXl|C%r7<*7LBFu6$ypg8x(WfJKyek{}9GLKhVP>iGYm>;HYQ zce>a4e{ZDJbM$QW^?oo}86IU09EEzO0wJT~Vv#$9OXxD=EYNL0Fh;?nkUz3dSqw+? z0khP6%l+~z@B;#&e6;=qW09U)P)-s9mA{tlD6u~WD3lB+pHmOHpo18S)50V1t-&qg z)E5md*`>nM;R+nIVctzL=|^PZAkjVQU}~D-4QZ1G1pP`DnzfupK$> zl!(h)98Zy{ei({dhH^o3GZ;@6OyFAgA~G!VHH#>M;ao2q3J2g^NCeTG&t>)*kT|Fu zNo|PSECb5R?~@RwGVq?v81oJ$PC5`z`k#_~Fl9yMiP6iF2D^HOccpd>fHj&La1L-2 z+ze5MNt{p4d-=iAykCALl2i;_JS4nbaIa1D)?TpBMgf58IRl{oR%U)<@hpJuf&d8e zggheBB5w_cWQL4P_E{t0E+Ed_5CIvE0EK*~_NhEyVqm*6v5)v?8tlr|uot;9FHqKI z%lrDgdxBh3D)>K3NpcoNYmfi7cY5r;|2jGD-v4fG0KMV! zg;OES^=-U?lK})$1aOKbYzI)Z3mL-?^3GufDdq?kh=ed)74fu*LLv0m7>aCZmMAVR zPEViAi5tsi*(TT7PQu|Lz?f7T^Dz9Ch@66QzayNA3ql6!aN@N-6NmufVrN z-17p{`orYqYmB6RI20Nx9^pKvY-V?n4RmO*vYufW3i1r2>#PgwHhZg>9?A_CY}kV| zb1AfO$+EiGk@g%r$W5`WnYpTX5y0owmwBxm|3cz9-&KqMi-?p^gjl$tvF874aUpS* zBpjaoQ$NoMx=YbW=UZ-N2lCCP)rlh}k5C$nQFxtbYtSkUbMhZXBC8Uk+!K^0%MqEz zVTmQqMzk0>Qi1+P+B2iMX!jwBaDdZj4j_9(VbRCH+^Ftx;L^f%d_k#`uBgWH$9}F9 zE6h2m+Hi83oMEdwLNR!e7>$j|Gzw*Yw7=e6UpW>f@2y(4D>DP2(~C@>{Z~d}PXe5x zSt(maz2`J&W7&b7%v{7-64sc=hg`6Av`X1HwoWPpS~ueXRh=0$ESEfUe1Yqd(#oe`XY z`lqQ{o3?*9xV*6y9iN44s%w(Q3u~wdsK^GoNlE@-xzkMjMXD-#;qzwMg$5rCOJINu z-C>q5{-0-k15v$t+lB&{jml8L1RgS7zs2dl;YU#(4#D0nLWxs`q7h&zp)vzK|5e#? z4J)(F{%07T*AF_!N6uqmyt&C(kJUd$leA`C7Z|6|*YwZ!G}KU7BV6-O3a6iqbDI)L z4Pz4Tim=S!Cs~D)8e(41c!_a=rK(BHHlav#W+Ps_{wR1o>brv`5cG|Qmv1UcEy+`M z*EfOutGu}DYhpAQ3_QFvM%pvSIHirIJ)h%z-ZKo;BS?F@ifb_OHVxd72};K}egID> zPQeo;@x!3`3dq6hVP=9D zjWyRHqVtnh1tPxzQ~zolRNPSumiS&NhJ~K^Z(l(2+NI6 zR-X6{x?Eb%6{2&KEqJkv;>|lMa$5U{>dvYUXW8-ew)P&(lB3z=L|XD~>6y&uudqVp z$Mzd>2Er+qf4Q7vEWJYqnV$}poWyLr@4TnZmnpLR;4OK!3g;`Bv^!ZliB*u<~S zTDxq=SPGDsz#YBAampkef=mkbu1c>Y^^|Zq-RxV*R{l;hEi3Ct2EmtR11XrfJt@S! zneV<-3#ixrH$xGkn#}BDd5)?kFa^h*TGY{82_`hOr*N zMa&#mWm21cefdveuPI4` zl;xrJ_hrC$wIW-@YcLHz<#2yi21yc&cj{d3+X2IA3LZ$Rq`()y5*&m64(QuR_z`WF z*~ndF`A?1evTJNXYq{O5wu9j`ctq)H5mG?CcztPd)8|qulolLC*q;V9IOD`4EPP_jhj{Ta<|1ArgwqLG@=W z>f206Lbthc*45XZs--xWF$n_+)vynrn2Sa(S->YJW|^G+$~y~pm%t~M?Gz==3n=}H zPPf%v-H&h*ZM&BVnYq`TNy{{#AAi5Ud%FXs`Hfh$Fug1#rkptp0xcm6bML|JCcA%EENf{Nrzg0YfH$A)>D_BV?OMg zE`jm}Rt?&mWO3nTHq}|_ipkx~T2_j@lC*PXeR;*EcVa}QVPB0)cfM`9d*rW7inF5T z#d{Qj2(rS)uMeo9=hDT&xJ@?{TJ;1zd-EccOMb+;URU;5#jhK;T_}4K)Iyg*J=Am? ztiZZCH|6w7`H%6PJB?6#lb==U{J)R(-1ndR2VMNv%@ouAcc+$nwI)BkiJr~Mrx94d zu;;~n{kFUejd9T(nz z9d`Erjg(gQf78ZjdZKF+{UEnnRV+c)7)srAn&m1NeX;ozq7-^pP6*D{z?A*GsrE1X3u^N102eW6JAG7vQgEj$7$&5G#Kyse?r4CA&)PA zfuVRjOyXNK!{|vxtZ7RL>dybsfh+$X93OP=KQ~e;&%fFSgOY7v5rL9Af-IE%R)3FJ z((;u}ILhD)@Vnr*-$0r~V37CH*#mT`KL0_4QJhN0`1QqqKRn!X`TxN|$Nx7{8l8W0 z8`zxR_(2K)=7;*@ZB~C}-hY|akf@>lcqN1hu3MG#sKctu#}yVClkLP4fd-A`b2t~mZ&^eoZ^Hzp zV_lX1`;~{JTGQZvTTs;lp=s6wp{cKj&ZxVFQceHqG(t-x{#B)p{vWvh|NAGWUH;$A zlt%PlYy;bt$-hWyF8)P0Z3@(1yB}{B&#d_Xw4Nm+Wq{cn*Pt0 zbNo=Hn*Q&f92WEco}L_Z^nVkj5&bW@&}!t}TOY*Fy)Q`TiRaEDGwl5!k+Q=l%oFr8 zz%lqqqx|QY@C)FuhX@EWpY5B##)PKkV`0x_#+E?k)z?y{c2V5&T;lN`%;z+E=HiDw z=uf7p{O7iJeBmP@4U!KKOh_IF;(aqMdsIJ=z zi?Dcf?LoTj{8wTvTvYh3XgK{Gzw417uZrO*#;>XYJwU?0x<2pT<g{b4X{^F41^`Bkod6i5D`wt zh=QM{H2N733Vu?MDwa>m3Smyeh9n&?vzDeWzLDI~8k7@$rEI)<^(|wWS*hvDn*dh7 z@+C7+J_c#CTXrA<%KAsM#A!863C+hST5afjmdOs*2&(U;TMwb7++Z=wOo*@%Y{p?S z>rB=9WU1C{lgR>{M7LeX7A+w-F7h6x*#iCb$pOsu(CveM7HBc-gZ@{AD0&4mnmb|%Tg$owSJf=cV6HvNh6*=d9IOURgSV}q zMy)kTn5_Ty9x%5caxUe1JjP2mOnGOz{jxC{CL% zjsVy6$B9Q-Udy!4mZ0uYijRB5R^nmCplu~D4&F1Pwl!6yH zPRr+Kf2~vSAfgpenHha=foW*4hbu<^P&fL+y|oTMLX63=A8ugqp2_&Fd+xJ}QhooQ ztJxky@B`FuH)S5zrD-ARB7>|lJ%+7S+wYG zRIY`JD#nL}fqDdgQM34c;Vw*ZR8%oOEDY49#IlY3O@JPhIy#p={jPmRQXaOav`O8) z=Qj8qq!drU?;yr;h~g9+v_jVQc`wJ%uIIhGTN)STe_4)%s^H#3RCa5xes)82hh(}g zxy*&nxrZU&V=q$jBb-DPV75(PKpz@aTT(?IwJ@^3)u3ZnZj8$pBu@DGKcSBif#J(v z0!rdv$?z^g!P?&c93Jc!-v1tS@!vO7ROB@h|CI~@U*=_EeCT~MFt$zOploi4kETIA z>`)*&@{tqz3CCiPU_|HyraOQk1jcEauvaf%qImFxA8~?03CYo4e!P{Ild|4N4JJIqo-=Wp=@ zrxL?>IvFC$ha_u(5son%qY(T`h5`&lDa5f2dY^-3Q}H}_G>z&&=QW#wKNR3oNK+g? zyg@LGaEvk`;5w1HH9@F;;j_z>*f1hAYbjRgS2E-ZD^3CD(}-nj5(?=;G=T9OPy`uq z@Q86VP*TW0NvzgX|E2OVne}yIy8Hj`0r3A<8&G5)>8V{^CG2`P@9v7+U9}-`%0#|Q z$1P8P&a;rYspYuNUz5=?OVsbCi*x$+rq=)Cj~<`c{}$8y+i&27;HQ?)tDg59NjLrW z{eN#8og2RY`Ki>Pz2VNhZ9NC@x8K|tFm??C#lAeHeGaMY96I3q)eM;XVn`LI&jDCo z)c|@ZfR>#(7oxwO0q$gPPhu(7TmsM=;Ez9gzmnm7M$-Xc2?}yissVvthPeL@l<0M| z!Z-$9S*+B^e<4H@5;K%8BLUXge-8IgUHR{1uY3Quks<`WH)56VP`Ww^(Aqc~mH{c6 zVTMUuB@&S+6jB=w;2la0Nl1jV=8_wrB#MSGc$C5rg(-TNOEB5svhTdrlpzU5$bvH2 zAD4m>5;CdS#^?!<7_mVcam1O)RSP6~0Io!$zZ|kn#U8m-6hJ++UEJA%jQJpsZ3HzI-Z!3GC`THyTdZ#rC`hlhWxwsT2kbzwpl-|6wLrad*KuCP3M@3XCN1|ve z`U0&rt1or@A0-i)Pf)y!08q#OPmf*u&;H(i7yoG^Me_e_l~*VLSUYFq5`f_B%;oy} z`(PtdLO!dT5EGpFeoi?7$pja6#0WL@9KgP9*ziRm*VXM{-Z_-79T7u)F1uG)f%(Mf zdar0a$#)#*b6MS0%1Eq}jymaR)zVQ7|6ls<=RfNC|IxweiR=Gyw0F|+|4kIZC1SXI^%G(Ld#Px(U_}W(qC-UxRl0-;`?@=tBVTwZU z)k-waFINOF*S8;ROr}u?h6vDUEI7R9GADr)MiGiIo5-#v@B^MqC!Q{Sz&T`?ii?y7 zJVUX#CGm6vgA~tD!Mw~D43Dr%^B+#-Q!w*hhoT7brW}&U(3C=&-s1@Z=@_ONIuke- z{-L59J>jDMoTX?2P`n&$zN;O#5Wu`&18cOv>3rDawVL53!jbGL% z-rERxBz&90IP#kLqan8+%L`0pV;nLwh>*W8_qvJyS z&y&5*{;Ns(+UQbE3zwd zj0sDxP|CMvgLyJ)FFHjW#LeZKhMnD9zFDTD%bW9t9bMj>FWM0sLyB%F;ad8Y6)3&t z5c=9JiiA`q)G2z4<44v2gJPqF&m0o!y5T-obKuPS>pyMU|Bo(uxVKFoLz+>Q(x)m- zkV+^f6sPm0sE$Ca0BL#TViIOAES4osCajz=RnVn&sHP+#5qX&3B^1H%oWv}p5Xb3a zo7up-6!01b!D-N0gdwYbhSLOX1Js%jjhET18o;7&y*LtK^_#9r>u-yVrEGqf#NSdF zpc_On33V8OMaN$Wb@_vvl1RtdT7LgW#n|%I;sis%R8S%*T)%3xnogr7&~|a-d+mFM zXcK0b)m@GqVLPC1LPBx9#kCEHV?>$qI9Go)@rmZxWi9R!_!OgMXmX=xawWsSF;35| zq1a!V4##S>p&>OnJu2VsvL{D@(c8apX1*kAQ;q$Hr7%UKX|$9Fc-{NIy`zHv*Zyhu z{%<2i7<=y2DzDT7+}S!`q6e5U1)FdIE6n)E<15}dg00dKOqv8TRnlxP0&0954)wch z_8ChcO|eKy@>x5L<-^QV@To5~$Yk|8ullZ(lxq1ePyCaGf_UFPB~+dN|NgQ2{_pT) zzw`gwNU`ES`_VvT!X;pdRg$sj%$T#F57wi`%E{ALhXW!p6N#6)NUVc z;Qb;ww*2OR;(K^YekuO!$aDVohO105RIP}0(a&Go_fbS=)!y(3S1kZ|HqGZQ0eFY}(TV{1WBs*@0QoNKWPoNefPcn1 zA)qU(D$V)-Vz&SPXu$su4)+}Xe{g!xz5m%r$=?63nDKXZ{|2veS8DUOhU^&pt=|gP z{zA(td%aazr^3{)RLv)=HN358yf-1c!hiz01M&`v8O>}E_38i6KMDiNhf=tycTM`{ zp2;hlmi_V}GCe+qQkCz}9e@5NUJw3f7paPjx|Q#z>+m#MtQ5~WxvY~oHeZ_af8|}a zzy(09{(pQ}(EpD*{=bn@@c&$~9ANk)elZq+k}-d@CV~YYf?qY|rVpn^}kdd?B9NhxX4J__qX*8KOWVW5T8|en4O= zh7+^{wz3+WsjHkg**AkbaEwPeJj_(Iu?%$1ow6CwH5`Rcq^>uad2TcATg;={qq@dh8T%I{xUUg>U&>&5+xv)mgqpZfuufSOx zTFaoeS-uROh0t~E!N2@UMEc`Z(=nn*hMc1ahI0Tjxb7CRyD;{t3EWiGjXAxJqq&&E z45$hpr#kBwmdBZ+;_2|sQgiiPO~Wnv#}rcpU@EY4hrS~vqq)1~O_|A9I3YI~IBt79 zD6L6B8Q^SQvbd7=#B{a?FaIYnMD*n^Fp8Fs{3S~b|KB^@bMrqRA02k@KQ~guk$neo z3{afXc|vfUiky5h`st8nV^uZiXqWT923aJ75kWzS`M13n{!=BauMa-tu2s;cCL{)-t z28=Ktkc(&nS4RY?ejCi;a)@m3D;J=*tiIpDM+8LoQUv6EaPfspJ3pSidkYYygtGeX z)a>XN8-1-zIC7SVa41uZzk|sOw%vRx1JO#Dp~~k{^`PTd1rcPdRWDY{20h8}c&)l% zDnMT??8^y!K;UK?MXH;2Ln%ZAY%mz{N*k!4iS4?xLqIm@?e_KAd8;1i5C#q4UVKOq zjbQ{X;}p>m3{b0HkZPW_ZqTI`=Ua88h5hCWv(SPx0MAlF;e(7;*{%!Ou<2pBdEaiq zlUbAXma%c}VwkWoX?GM=SRK{0bzki#%XXGVl(i6bJ2=Xd>G*=;$2LboU*M z;e+}Ek8r?c`gW2*-mt#Umv<-y388!+W+KH-X8Xi{yAi)JVb(djx%vL~ZJWj9Z5s^y zJ&F(|;Jrmo-jYBViknjt0mUIIk%H13i`OuCoF;dYmM@CLPykU3p*;?F>d|o9ZuMhh zZ%>`l{W+FW{U66TU6BE>M*lxNId=8`?4(ax)Tzs-$I?-s;NF*Fgm{c3fw@-5Qs2KWiK#E zIFU<<=OVGvLMcGF(3Lgfo=(v@$C)YAwIdUbM}$sPvMmPkz){UD5&~eLW3$@bbFuIN z#fZXGWYtQ!6#I_|B#^NuLPI7l`Vb16*g!G?Ax<9pG77G@ABsZE7V9EJeDYBoV8jLj z&Oq8|2(9XI0x5>!a0PuTNX>dB@dH^+uM$$DUV{h+k7F`rXaybTz#8?Eo@*Yt7|stC}Z>GET7L0JUuzBAF(oT`Q)utF&vT?162Y4SlwOwm@cHGslupmTE05 zx2lNaXpn=g(KL!geCk(UR|r7zRS&Pn2D*iH)9!lR3XETU4Yst*CqCHkUQq7f zTNnOYRaI}43@^;Ql;<_%UHhA;VTkef0~keI7Vn>5-F(~kH+V$zKIn^CRBttM@8NS1 zvI9U6kYsK<4Lfg(CR3KaK`1%r6}PgPacWh7Oe-&i(@yp72nlF7ft zPc|aIaEJ`0c06}A4@SQ^J{;bd&{RUhazm0>ozulo4KoCuZ z;@Nm0s)0%kRUHX<}Y zVZLBk5>muc6b=T1qLaTdf1>TJZdrpQg>iTmC1ZFsoq*#S#B`t^Wk^+XZ9A;zID6)v zV`^jIpyxj)R+D}W2#Nx^PBlD2oGCqqfd;9!vd%Q3KHsU&PS<^7Rr}5w{|-i!On!uu zsC7-T1=H7FqpM`4DUH}PO_GXh+m>9P=C8nLI1>Q#F&J- z!(YTk>ASDFyj#nVL7sba83V1~UgtUI)5|77Hd{U6T4t@^a$D^F`pxw#ja0@yn3!U{ zK_(=|DdCK3Af2iI?Dlrx=4yMPms$q;ZRNk zpA-}h^y4&f!TX3%BDRFS;0m+LEdVK*#>MBDgvwK8v*_(?M7uVvxEy7V(Fg^qj>1JQ zjXVfD{9xrV+kQo*a}NM*~ygG^QbG%(4$7jH1vTe2HwC?HFrXJk$!PaNtA{P`(Gwr zFKYy>^Zz;CbMpV}pY9!X_P>o3$sRKe<}QIxeEAoB`0sgNV!ZWlU^L9z887tLWjM@+ zZM@gdKR%NMQTN}Zm=$viWjJwrz-f;aDPdvx0c*m?Rye zqh5^<35-Ksr*=WI+GT6fM2;&qYP}eh3t=xsK0sqNEDmkV)7O?5=CRr~2$!&C!@>=s zBSI%2S9~OA1vUj@U<_w`k4@kQX^V|e{E&|Mb~`veY{85TYT!|}ie~7(?5NMXDa6Al z?CtJn~$bAn17j+Dahwv@gnY zSfFeOapEo9h1;}&HzFsx#f@J_eMSGr&|F0gBF=+guFk&WIz?4cCb6cXdt@s|?&UqhI0VTw1vmvb26p<$ z5q9qH~iRQYy53^>*vQxKgm+b|3$Qo<$b_v`2XJV z>7MKVb-LHZf8I!G!hluKm7Kk4Zj_>l$$)fKU>nVa)mqfG)dLy4?SeNFfnxj#a5d1M z0SD19m_z^gqqn=eYxbvu>}qcS*|*g-?@oT+vL3pcup@?wjb6xBzk`(g2q)2YMf*6k zUkn&_+K-6Jm7o7{7GmIrgn5901;|02|Nnj={`>yvahLynBZUhIJ#e{ZBn zKZQbUG-3Z)f%&HpHm#NMr_g%+cY=8GkauWVS8QCK>2}aUugwi%VTmhm3f+l+{`*2} z;B|L~jV{AJma8v);y$f=FPA%fe79f49bfcAQ+uuXFr@)acDsxRpvo8{#7d4tvkSLS z0uGHtLBKUFif8vJDbn7=R{2mFGY}$%A7bh7{Y2=aTzTQ+u7T*5 zeb-fL(MMY4cc-$$c7m^LR1_gDW1MP6<}*Eg@_uwBTd#8Sweq18o)3wREoTZcDlCWq zlmnrNk!Xg5Fd-7<6ussxpS+xU)jQvr2gXHvTV=s99r4|4IKX&wVD2@{gaJ|$Iu+gy zr%aAFB_KnxW;CCyhvCPhHZ7^r=pEl&O;eQC)7?UPi&yF|A#0zkte*)Y3(u5Ht96cO zddb)nQ8(|LaqP`gjpGzOQ0UJou9IVx)E9x9b@b;Zl{^_eCSxMPZ)HOie;2D2M&7TO6{~s4h?XUkdW_rNC0GG{ zG-td(Ai;~mptt*NQ87TYBA*6k-pRF}qZ++PsZ@V_$rRWx0zCi|D{RjDnfu|xhu*YKvWgf(EmeKH_a&e zlk4-L_iu^chx*y@{V)N!{vU3vap34}LdLN`T8XdAacb2VmYrB|f*N~F! zfvn3}BwI?mKTqOduEN?gA+99)2?Y-TbmH7gAQ!=*l3-Cf%zb9xC4o!aI!NMX+8*>3o!eJZ7 z&l?hg9C4uLugdw;H{UCC0QGIQRyX2FIQ;yA#xz`}hD+4y8oayct$)JZ1oCosyZ#N( z>;|^Uk=o#GY}F+Bq>484l^?m{)U5Cd*voT1H{Z|ysFD9@3Rm#@yH@@?IypLa?f*yn zo&V=XiX^BqgY)V{KAE_=rIaTd8PUP#sGp5&0F&fKeU&aD_HW-2WGpdX{eaUk zZ+{ktR(0 zO^tN9c%Z_K`5xAG)HqmSHqC9oH+SC27O_CayeSTv%XJMrWSU0=bSA+@3ja;+B2OlW zttmrSBt(}tKEFSU?mDL!^tWOXqF->*_qpZeaBE!hY;^G7ZfZ!5_}P@_`&n0gqubAd zOc@g*%=yYCIuio&AMJ^&U{?ceT+iC}%}yMa`%yVeRmlGo6N=Nh$nLn#`@h4JlY`>@ z-*G4ZZ=y(+rUREb0}qiA=!^60?k)bS(5qfVn5D9k=kb7eOu;wacaVX?#*t7w&*4S< z4jez6M-WeZ);ga^#K%&!-BpP~74(Fqgu(~JiP<1FvwRm<*|M{hEqvqakt%5mlsz0~ zDNJ$T`6RQ5ipMG?zx6}RB-L~uR8}D=XXjjrM>g#ICzCQbuW(y*HY3q=f-LKQ{+QSE z%u!L(vhlLX&^5-oa_rr^*Wmo_vdwc%bI-8J@ciy_6>s!w=SC!mWSEGot9)pKfZ@U8 z|6l`5e4{J@q&HAMq9>mRLLnZ;`Q$NJv=*xns7rhfjBPI zE$pd$iB%F<*{}}=-hSLC$)M3gu4bXza#Z}Up^dj@Wwat5u{v6D_08Qfv?3m{=b;tx zh^>lN_&_Z%*)lD%m((;HlkXhlzb`RD4`BI|cc|{29Vi3|xOwkxms*3wY^l8R`2v_j z$r-C}9BXF%b@!aBz9$w^>`GGezZcVX7sG^&N$R;TRtoQoM7)w4_hjZYuh=WLswW#V z)zG(tbeAP6pZc{ZdMT5^H`6GRy8&qQ0RP+9lSac6ctseWT{%s6ULv*CnuqPdw{q54 zjg8nEaJj?A%Je#ODGkN${W;iGJ1|=$*U6$nM{2N#@?&qI;G2d@5#DNTYBhzO&=3Tf z(jeEvGG#oKvmsPPzmni(|K&?$&rzF&@~=ZHGFDH>Z1n1BS^+;F;VmV_euYZD#>XsR z*z*Wq0d(aUqXLcRC`*f?zAS& zNe8!noDLCuzh8g;kE4Ur!u`+jQK$cJq$tuM(;cqp3P|mo z)&ihv^&A&Ldb2mX3evUP-3IBTl9u2pKRuJ=DLQW_ddfAbmOW*i=f50Mn0z9sQ|p$i zLQY+L%_>)|mDKt))KknkISXkC zdMS#^g8t<>bq0mQ0;+@FV@*^DUG<~UBosoO!`YW4EoM8moiwLt#%CwhWdyks?mmZ7 zA^#b#bC)v$*U5h;hwlCV>G5HA|G$x92Q^=v3xM1_i-dl)n{L1z!068sx6Ie+yU!A0 z%tWn~tR>qui27>1&R?awfH|q{L@lG`XXrXmy)t#H@+JEbERuQQqi`iyQVO;9LNgJx z>hOK+pW@Z~w5%|Gkmo36`=lA<&IH(Mk+- z8?RpwbY{U21xrKlY*ZSw@oOUwy76DCBtmDbs}u^$gUQs3g?8J|PcW=qq6W+JB}<13 z$9wuHM8uXMgf{PWYR52ZD2LXZ_fOUm+BTxn$1DXlmH(D81J=oZrzh_H@BaQ_m;ZGm z#X~%UED6-=g}_A&f?f!l76%LFLC^8{DCEM{#zIH(Xkaw-41IlK;sPc_4}i~JV63qy z)-72lI$GQ1)0Q7gZD${a5b18&MP$j3!L+$HfpVj^#d7)Y2@S`DJZ|Fs&q4A1&tVt; zZ6if&<#*E*rZ|51K`yzxX_->#5VtBpQ0=Fd!e7>E{Q}>lY8DL1PoeZo(q0voZNxs+ zzEaTBlfOdYu5yxFNqJR}K0k4)>dO@BK53srz0A#oqDs2`jM7on{AjUaB`<1J zVlj?lnncBr<6Fz#1k1A{!JQmmwbB)ItD;zy#iMj( ztD271_SUCb?CzxQwMgCBMr|Z^mu`(VBDU2Dm!@SGSVmzbG2f9eRRl8xB+lcn?tm$i zpBRczkP_O|7Fui6)Wc0kc$c66FamHYLRZIsNx=x>h<6*~2qXl@sb&?0eeaE2t$=!> zRtvz{GJsuh@gYG$ibC*{YV@;+p`8*LJ-c6b4i*;mT@9lD1|<=hPf(n;lc__a-D)KK z0%~_DOwni>-JzDaG1ZVQ5=*Nga&I7-khnE!p=h>F#QsW#?NIuaH&_!g=aj^)5eg`Y zmqn`6%)0U)Rr+6mXu3OrF?`_4ApZ-GZ~zwx3192~3k7~A7is^;@*dMXR2dH_s^t}aSYmMV|@Lk#jMoM%vm-<&R6SahJ;zE zaB<+D-z7}*c`l#h=f9beam^qwkdr}W@73|s(j({m7tT$lV=M~l1;&)5C{n&ri$?v7|-wZ{Fl9#^>VemLj z)U(Hk1Y%9w$$)kC|AP}J{=>n+=}8y=cOymYW$zlV&I4TRq=C1Swyxlnpw=%c%8u2O z?6<^9?&$s|C-Hd%NEeq@{@`Mc!D|5m=zs-!K$Rk;cM4W%{r7LwR#yQojxKxq z>(_Ygo?B?;qJTK72@FKAT}cfZazT3+6I{fb>S17-j~_3hcB|Ec~LP~PtJ)KzI~+4x#$XhlBl#QoFr*e>RuYPG

-61c2{C4( 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 literal 0 HcmV?d00001 diff --git a/stable/firefox/11.3.0/ix_values.yaml b/stable/firefox/11.3.0/ix_values.yaml new file mode 100644 index 0000000..9749061 --- /dev/null +++ b/stable/firefox/11.3.0/ix_values.yaml @@ -0,0 +1,41 @@ +image: + repository: ghcr.io/linuxserver/firefox + pullPolicy: IfNotPresent + tag: 120.0.1@sha256:ac3c8817dcbf6855b05e55db4799e36a8b935bf57fcb27f9fa3ff71263ddd3de +securityContext: + container: + readOnlyRootFilesystem: false + runAsNonRoot: false + runAsUser: 0 + runAsGroup: 0 +service: + main: + ports: + main: + protocol: http + port: 10131 +workload: + main: + podSpec: + containers: + main: + probes: + liveness: + type: http + readiness: + type: http + startup: + type: http + env: + FM_HOME: "/config" + CUSTOM_PORT: "{{ .Values.service.main.ports.main.port }}" + TITLE: "TrueChartVNC Client" +persistence: + config: + enabled: true + mountPath: /config + varrun: + enabled: false +portal: + open: + enabled: true diff --git a/stable/firefox/11.3.0/questions.yaml b/stable/firefox/11.3.0/questions.yaml new file mode 100644 index 0000000..9e48fe5 --- /dev/null +++ b/stable/firefox/11.3.0/questions.yaml @@ -0,0 +1,2851 @@ +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 + label: Image Environment + schema: + additional_attrs: true + type: dict + attrs: + - variable: TITLE + label: Title + description: The page title displayed on the web browser + schema: + type: string + default: "TrueChartVNC Client" + - 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 Minecraft Server runs on + 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: 10131 + 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 Config. + 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: 0 + - variable: runAsGroup + label: runAsGroup + description: The groupID this App of the user running the application + schema: + type: int + default: 0 + # 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: 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/firefox/11.3.0/templates/NOTES.txt b/stable/firefox/11.3.0/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/firefox/11.3.0/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/firefox/11.3.0/templates/common.yaml b/stable/firefox/11.3.0/templates/common.yaml new file mode 100644 index 0000000..b51394e --- /dev/null +++ b/stable/firefox/11.3.0/templates/common.yaml @@ -0,0 +1 @@ +{{ include "tc.v1.common.loader.all" . }} diff --git a/stable/firefox/11.3.0/values.yaml b/stable/firefox/11.3.0/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/firefox/11.4.0/.helmignore b/stable/firefox/11.4.0/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/firefox/11.4.0/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/firefox/11.4.0/CHANGELOG.md b/stable/firefox/11.4.0/CHANGELOG.md new file mode 100644 index 0000000..2cad7fc --- /dev/null +++ b/stable/firefox/11.4.0/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + +## [firefox-11.4.0](https://github.com/truecharts/charts/compare/firefox-11.3.0...firefox-11.4.0) (2024-03-07) + +### Chore + + + +- update container image common to v19.0.0[@eef2062](https://github.com/eef2062) by renovate ([#18956](https://github.com/truecharts/charts/issues/18956)) + + +## [firefox-11.3.0](https://github.com/truecharts/charts/compare/firefox-11.2.3...firefox-11.3.0) (2024-03-06) + +### Chore + + + +- update container image common to v18.2.0[@9e8b7d4](https://github.com/9e8b7d4) by renovate ([#18943](https://github.com/truecharts/charts/issues/18943)) + + +## [firefox-11.2.3](https://github.com/truecharts/charts/compare/firefox-11.2.2...firefox-11.2.3) (2024-03-05) + +### Chore + + + +- bump everything to force helm release again + + +## [firefox-11.2.2](https://github.com/truecharts/charts/compare/firefox-11.2.0...firefox-11.2.2) (2024-03-05) + +### Chore + + + +- force rereleases + +- update container image common to v18.1.6[@904d84b](https://github.com/904d84b) by renovate ([#18835](https://github.com/truecharts/charts/issues/18835)) + + + + + + + + + + +## [firefox-10.0.9](https://github.com/truecharts/charts/compare/firefox-10.0.8...firefox-10.0.9) (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)) + + +## [firefox-10.0.8](https://github.com/truecharts/charts/compare/firefox-10.0.7...firefox-10.0.8) (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)) + + +## [firefox-10.0.7](https://github.com/truecharts/charts/compare/firefox-10.0.6...firefox-10.0.7) (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)) + + +## [firefox-10.0.6](https://github.com/truecharts/charts/compare/firefox-10.0.5...firefox-10.0.6) (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)) + + +## [firefox-10.0.5](https://github.com/truecharts/charts/compare/firefox-10.0.4...firefox-10.0.5) (2024-01-21) + +### Chore + + + +- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) diff --git a/stable/firefox/11.4.0/Chart.yaml b/stable/firefox/11.4.0/Chart.yaml new file mode 100644 index 0000000..54f16ec --- /dev/null +++ b/stable/firefox/11.4.0/Chart.yaml @@ -0,0 +1,37 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: browser + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.11" + truecharts.org/train: stable +apiVersion: v2 +appVersion: 120.0.1 +dependencies: + - name: common + version: 19.0.0 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation. +home: https://truecharts.org/charts/stable/firefox +icon: https://truecharts.org/img/hotlink-ok/chart-icons/firefox.png +keywords: + - firefox + - browser +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: firefox +sources: + - https://github.com/linuxserver/docker-firefox + - https://github.com/truecharts/charts/tree/master/charts/stable/firefox + - https://ghcr.io/linuxserver/firefox +type: application +version: 11.4.0 diff --git a/stable/firefox/11.4.0/README.md b/stable/firefox/11.4.0/README.md new file mode 100644 index 0000000..af8822b --- /dev/null +++ b/stable/firefox/11.4.0/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/firefox) + +**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/firefox/11.4.0/app-changelog.md b/stable/firefox/11.4.0/app-changelog.md new file mode 100644 index 0000000..b1ad29b --- /dev/null +++ b/stable/firefox/11.4.0/app-changelog.md @@ -0,0 +1,9 @@ + + +## [firefox-11.4.0](https://github.com/truecharts/charts/compare/firefox-11.3.0...firefox-11.4.0) (2024-03-07) + +### Chore + + + +- update container image common to v19.0.0[@eef2062](https://github.com/eef2062) by renovate ([#18956](https://github.com/truecharts/charts/issues/18956)) \ No newline at end of file diff --git a/stable/firefox/11.4.0/app-readme.md b/stable/firefox/11.4.0/app-readme.md new file mode 100644 index 0000000..06d4ce1 --- /dev/null +++ b/stable/firefox/11.4.0/app-readme.md @@ -0,0 +1,8 @@ +a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation. + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/firefox](https://truecharts.org/charts/stable/firefox) + +--- + +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/firefox/11.4.0/charts/common-19.0.0.tgz b/stable/firefox/11.4.0/charts/common-19.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..d8852c18c5a656b47ae3433e07b362b4a5c7e8f3 GIT binary patch literal 99991 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

mg5=B?;V2=`k7*xQD4jaM9?D+^FTBH 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 z77 + 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: 0 + - variable: runAsGroup + label: runAsGroup + description: The groupID this App of the user running the application + schema: + type: int + default: 0 + # 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: 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/firefox/11.4.0/templates/NOTES.txt b/stable/firefox/11.4.0/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/firefox/11.4.0/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/firefox/11.4.0/templates/common.yaml b/stable/firefox/11.4.0/templates/common.yaml new file mode 100644 index 0000000..b51394e --- /dev/null +++ b/stable/firefox/11.4.0/templates/common.yaml @@ -0,0 +1 @@ +{{ include "tc.v1.common.loader.all" . }} diff --git a/stable/firefox/11.4.0/values.yaml b/stable/firefox/11.4.0/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/firefox/11.4.1/.helmignore b/stable/firefox/11.4.1/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/firefox/11.4.1/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/firefox/11.4.1/CHANGELOG.md b/stable/firefox/11.4.1/CHANGELOG.md new file mode 100644 index 0000000..7aa425d --- /dev/null +++ b/stable/firefox/11.4.1/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + +## [firefox-11.4.1](https://github.com/truecharts/charts/compare/firefox-11.4.0...firefox-11.4.1) (2024-03-07) + +### Chore + + + +- bump everything to trigger re-release + + +## [firefox-11.4.0](https://github.com/truecharts/charts/compare/firefox-11.3.0...firefox-11.4.0) (2024-03-07) + +### Chore + + + +- update container image common to v19.0.0[@eef2062](https://github.com/eef2062) by renovate ([#18956](https://github.com/truecharts/charts/issues/18956)) + + +## [firefox-11.3.0](https://github.com/truecharts/charts/compare/firefox-11.2.3...firefox-11.3.0) (2024-03-06) + +### Chore + + + +- update container image common to v18.2.0[@9e8b7d4](https://github.com/9e8b7d4) by renovate ([#18943](https://github.com/truecharts/charts/issues/18943)) + + +## [firefox-11.2.3](https://github.com/truecharts/charts/compare/firefox-11.2.2...firefox-11.2.3) (2024-03-05) + +### Chore + + + +- bump everything to force helm release again + + +## [firefox-11.2.2](https://github.com/truecharts/charts/compare/firefox-11.2.0...firefox-11.2.2) (2024-03-05) + +### Chore + + + +- force rereleases + +- update container image common to v18.1.6[@904d84b](https://github.com/904d84b) by renovate ([#18835](https://github.com/truecharts/charts/issues/18835)) + + + + + + + + + + +## [firefox-10.0.9](https://github.com/truecharts/charts/compare/firefox-10.0.8...firefox-10.0.9) (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)) + + +## [firefox-10.0.8](https://github.com/truecharts/charts/compare/firefox-10.0.7...firefox-10.0.8) (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)) + + +## [firefox-10.0.7](https://github.com/truecharts/charts/compare/firefox-10.0.6...firefox-10.0.7) (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)) + + +## [firefox-10.0.6](https://github.com/truecharts/charts/compare/firefox-10.0.5...firefox-10.0.6) (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/firefox/11.4.1/Chart.yaml b/stable/firefox/11.4.1/Chart.yaml new file mode 100644 index 0000000..b3f7d93 --- /dev/null +++ b/stable/firefox/11.4.1/Chart.yaml @@ -0,0 +1,37 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: browser + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.11" + truecharts.org/train: stable +apiVersion: v2 +appVersion: 120.0.1 +dependencies: + - name: common + version: 19.0.0 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation. +home: https://truecharts.org/charts/stable/firefox +icon: https://truecharts.org/img/hotlink-ok/chart-icons/firefox.png +keywords: + - firefox + - browser +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: firefox +sources: + - https://github.com/linuxserver/docker-firefox + - https://github.com/truecharts/charts/tree/master/charts/stable/firefox + - https://ghcr.io/linuxserver/firefox +type: application +version: 11.4.1 diff --git a/stable/firefox/11.4.1/README.md b/stable/firefox/11.4.1/README.md new file mode 100644 index 0000000..af8822b --- /dev/null +++ b/stable/firefox/11.4.1/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/firefox) + +**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/firefox/11.4.1/app-readme.md b/stable/firefox/11.4.1/app-readme.md new file mode 100644 index 0000000..06d4ce1 --- /dev/null +++ b/stable/firefox/11.4.1/app-readme.md @@ -0,0 +1,8 @@ +a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation. + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/firefox](https://truecharts.org/charts/stable/firefox) + +--- + +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/firefox/11.4.1/charts/common-19.0.0.tgz b/stable/firefox/11.4.1/charts/common-19.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..6b07782a3c25125ef32433d220f944bada8c7fec GIT binary patch literal 100013 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%0AHNyA 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

mw>7Dj2FGEc3;R~ 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%0AobVhfOc?j1+~A4K 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 z\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 F3;=difN=l- literal 0 HcmV?d00001 diff --git a/stable/firefox/11.4.1/ix_values.yaml b/stable/firefox/11.4.1/ix_values.yaml new file mode 100644 index 0000000..9749061 --- /dev/null +++ b/stable/firefox/11.4.1/ix_values.yaml @@ -0,0 +1,41 @@ +image: + repository: ghcr.io/linuxserver/firefox + pullPolicy: IfNotPresent + tag: 120.0.1@sha256:ac3c8817dcbf6855b05e55db4799e36a8b935bf57fcb27f9fa3ff71263ddd3de +securityContext: + container: + readOnlyRootFilesystem: false + runAsNonRoot: false + runAsUser: 0 + runAsGroup: 0 +service: + main: + ports: + main: + protocol: http + port: 10131 +workload: + main: + podSpec: + containers: + main: + probes: + liveness: + type: http + readiness: + type: http + startup: + type: http + env: + FM_HOME: "/config" + CUSTOM_PORT: "{{ .Values.service.main.ports.main.port }}" + TITLE: "TrueChartVNC Client" +persistence: + config: + enabled: true + mountPath: /config + varrun: + enabled: false +portal: + open: + enabled: true diff --git a/stable/firefox/11.4.1/questions.yaml b/stable/firefox/11.4.1/questions.yaml new file mode 100644 index 0000000..9e48fe5 --- /dev/null +++ b/stable/firefox/11.4.1/questions.yaml @@ -0,0 +1,2851 @@ +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 + label: Image Environment + schema: + additional_attrs: true + type: dict + attrs: + - variable: TITLE + label: Title + description: The page title displayed on the web browser + schema: + type: string + default: "TrueChartVNC Client" + - 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 Minecraft Server runs on + 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: 10131 + 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 Config. + 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: 0 + - variable: runAsGroup + label: runAsGroup + description: The groupID this App of the user running the application + schema: + type: int + default: 0 + # 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: 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/firefox/11.4.1/templates/NOTES.txt b/stable/firefox/11.4.1/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/firefox/11.4.1/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/firefox/11.4.1/templates/common.yaml b/stable/firefox/11.4.1/templates/common.yaml new file mode 100644 index 0000000..b51394e --- /dev/null +++ b/stable/firefox/11.4.1/templates/common.yaml @@ -0,0 +1 @@ +{{ include "tc.v1.common.loader.all" . }} diff --git a/stable/firefox/11.4.1/values.yaml b/stable/firefox/11.4.1/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/firefox/12.2.0/.helmignore b/stable/firefox/12.2.0/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/firefox/12.2.0/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/firefox/12.2.0/CHANGELOG.md b/stable/firefox/12.2.0/CHANGELOG.md new file mode 100644 index 0000000..dbbc9d0 --- /dev/null +++ b/stable/firefox/12.2.0/CHANGELOG.md @@ -0,0 +1,100 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + +## [firefox-12.2.0](https://github.com/truecharts/charts/compare/firefox-12.1.2...firefox-12.2.0) (2024-03-16) + +### Chore + + + +- update container image common to v20.1.5[@dc867e0](https://github.com/dc867e0) by renovate ([#19210](https://github.com/truecharts/charts/issues/19210)) + + +## [firefox-12.1.2](https://github.com/truecharts/charts/compare/firefox-12.1.1...firefox-12.1.2) (2024-03-12) + +### Chore + + + +- update container image common to v20.0.9[@caa8bac](https://github.com/caa8bac) by renovate ([#19179](https://github.com/truecharts/charts/issues/19179)) + + +## [firefox-12.1.1](https://github.com/truecharts/charts/compare/firefox-12.1.0...firefox-12.1.1) (2024-03-12) + +### Chore + + + +- update container image common to v20.0.8[@021a874](https://github.com/021a874) by renovate ([#19175](https://github.com/truecharts/charts/issues/19175)) + + +## [firefox-12.1.0](https://github.com/truecharts/charts/compare/firefox-12.0.0...firefox-12.1.0) (2024-03-11) + +### Chore + + + +- update container image common to v20.0.6[@5f6c753](https://github.com/5f6c753) by renovate ([#19131](https://github.com/truecharts/charts/issues/19131)) + + +## [firefox-12.0.0](https://github.com/truecharts/charts/compare/firefox-11.4.1...firefox-12.0.0) (2024-03-11) + +### Chore + + + +- update container image ghcr.io/linuxserver/firefox to v123.0.1[@b616ef4](https://github.com/b616ef4) by renovate ([#19132](https://github.com/truecharts/charts/issues/19132)) + + +## [firefox-11.4.1](https://github.com/truecharts/charts/compare/firefox-11.4.0...firefox-11.4.1) (2024-03-07) + +### Chore + + + +- bump everything to trigger re-release + + +## [firefox-11.4.0](https://github.com/truecharts/charts/compare/firefox-11.3.0...firefox-11.4.0) (2024-03-07) + +### Chore + + + +- update container image common to v19.0.0[@eef2062](https://github.com/eef2062) by renovate ([#18956](https://github.com/truecharts/charts/issues/18956)) + + +## [firefox-11.3.0](https://github.com/truecharts/charts/compare/firefox-11.2.3...firefox-11.3.0) (2024-03-06) + +### Chore + + + +- update container image common to v18.2.0[@9e8b7d4](https://github.com/9e8b7d4) by renovate ([#18943](https://github.com/truecharts/charts/issues/18943)) + + +## [firefox-11.2.3](https://github.com/truecharts/charts/compare/firefox-11.2.2...firefox-11.2.3) (2024-03-05) + +### Chore + + + +- bump everything to force helm release again + + +## [firefox-11.2.2](https://github.com/truecharts/charts/compare/firefox-11.2.0...firefox-11.2.2) (2024-03-05) + +### Chore + + + +- force rereleases + +- update container image common to v18.1.6[@904d84b](https://github.com/904d84b) by renovate ([#18835](https://github.com/truecharts/charts/issues/18835)) \ No newline at end of file diff --git a/stable/firefox/12.2.0/Chart.yaml b/stable/firefox/12.2.0/Chart.yaml new file mode 100644 index 0000000..50f9bac --- /dev/null +++ b/stable/firefox/12.2.0/Chart.yaml @@ -0,0 +1,37 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: browser + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.11" + truecharts.org/train: stable +apiVersion: v2 +appVersion: 123.0.1 +dependencies: + - name: common + version: 20.1.5 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation. +home: https://truecharts.org/charts/stable/firefox +icon: https://truecharts.org/img/hotlink-ok/chart-icons/firefox.png +keywords: + - firefox + - browser +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: firefox +sources: + - https://github.com/linuxserver/docker-firefox + - https://github.com/truecharts/charts/tree/master/charts/stable/firefox + - https://ghcr.io/linuxserver/firefox +type: application +version: 12.2.0 diff --git a/stable/firefox/12.2.0/README.md b/stable/firefox/12.2.0/README.md new file mode 100644 index 0000000..af8822b --- /dev/null +++ b/stable/firefox/12.2.0/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/firefox) + +**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/firefox/12.2.0/app-readme.md b/stable/firefox/12.2.0/app-readme.md new file mode 100644 index 0000000..06d4ce1 --- /dev/null +++ b/stable/firefox/12.2.0/app-readme.md @@ -0,0 +1,8 @@ +a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation. + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/firefox](https://truecharts.org/charts/stable/firefox) + +--- + +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/firefox/12.2.0/charts/common-20.1.5.tgz b/stable/firefox/12.2.0/charts/common-20.1.5.tgz new file mode 100644 index 0000000000000000000000000000000000000000..4c98dba77357cdfe009e16326b058942a9edd6e8 GIT binary patch literal 101486 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�HZ)$zsIiJ(_%W+z1Fk7Jf&%&&x||gm(a>B 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

DtYoen3uIu#}vK&DH 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 literal 0 HcmV?d00001 diff --git a/stable/firefox/12.2.0/ix_values.yaml b/stable/firefox/12.2.0/ix_values.yaml new file mode 100644 index 0000000..1b09ac7 --- /dev/null +++ b/stable/firefox/12.2.0/ix_values.yaml @@ -0,0 +1,41 @@ +image: + repository: ghcr.io/linuxserver/firefox + pullPolicy: IfNotPresent + tag: 123.0.1@sha256:b616ef4f65f3a3f461ee1b56b16090050de44b3b38015478d89a52dcbe87afb1 +securityContext: + container: + readOnlyRootFilesystem: false + runAsNonRoot: false + runAsUser: 0 + runAsGroup: 0 +service: + main: + ports: + main: + protocol: http + port: 10131 +workload: + main: + podSpec: + containers: + main: + probes: + liveness: + type: http + readiness: + type: http + startup: + type: http + env: + FM_HOME: "/config" + CUSTOM_PORT: "{{ .Values.service.main.ports.main.port }}" + TITLE: "TrueChartVNC Client" +persistence: + config: + enabled: true + mountPath: /config + varrun: + enabled: false +portal: + open: + enabled: true diff --git a/stable/firefox/12.2.0/questions.yaml b/stable/firefox/12.2.0/questions.yaml new file mode 100644 index 0000000..9e48fe5 --- /dev/null +++ b/stable/firefox/12.2.0/questions.yaml @@ -0,0 +1,2851 @@ +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 + label: Image Environment + schema: + additional_attrs: true + type: dict + attrs: + - variable: TITLE + label: Title + description: The page title displayed on the web browser + schema: + type: string + default: "TrueChartVNC Client" + - 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 Minecraft Server runs on + 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: 10131 + 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 Config. + 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: 0 + - variable: runAsGroup + label: runAsGroup + description: The groupID this App of the user running the application + schema: + type: int + default: 0 + # 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: 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/firefox/12.2.0/templates/NOTES.txt b/stable/firefox/12.2.0/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/firefox/12.2.0/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/firefox/12.2.0/templates/common.yaml b/stable/firefox/12.2.0/templates/common.yaml new file mode 100644 index 0000000..b51394e --- /dev/null +++ b/stable/firefox/12.2.0/templates/common.yaml @@ -0,0 +1 @@ +{{ include "tc.v1.common.loader.all" . }} diff --git a/stable/firefox/12.2.0/values.yaml b/stable/firefox/12.2.0/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/firefox/12.3.0/.helmignore b/stable/firefox/12.3.0/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/firefox/12.3.0/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/firefox/12.3.0/CHANGELOG.md b/stable/firefox/12.3.0/CHANGELOG.md new file mode 100644 index 0000000..4363ae0 --- /dev/null +++ b/stable/firefox/12.3.0/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + +## [firefox-12.3.0](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-12.3.0) (2024-03-16) + +### Chore + + + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [firefox-12.3.0](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-12.3.0) (2024-03-16) + +### Chore + + + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [firefox-12.3.0](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-12.3.0) (2024-03-16) + +### Chore + + + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [firefox-12.3.0](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-12.3.0) (2024-03-16) + +### Chore + + + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [firefox-12.3.0](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-12.3.0) (2024-03-16) + +### Chore + + + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [firefox-12.3.0](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-12.3.0) (2024-03-16) + +### Chore + + + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [firefox-12.3.0](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-12.3.0) (2024-03-16) + +### Chore + + + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [firefox-12.2.0](https://github.com/truecharts/charts/compare/firefox-12.1.2...firefox-12.2.0) (2024-03-16) + +### Chore + + + +- update container image common to v20.1.5[@dc867e0](https://github.com/dc867e0) by renovate ([#19210](https://github.com/truecharts/charts/issues/19210)) + + +## [firefox-12.1.2](https://github.com/truecharts/charts/compare/firefox-12.1.1...firefox-12.1.2) (2024-03-12) + +### Chore + + + +- update container image common to v20.0.9[@caa8bac](https://github.com/caa8bac) by renovate ([#19179](https://github.com/truecharts/charts/issues/19179)) + + +## [firefox-12.1.1](https://github.com/truecharts/charts/compare/firefox-12.1.0...firefox-12.1.1) (2024-03-12) + +### Chore + + + +- update container image common to v20.0.8[@021a874](https://github.com/021a874) by renovate ([#19175](https://github.com/truecharts/charts/issues/19175)) + diff --git a/stable/firefox/12.3.0/Chart.yaml b/stable/firefox/12.3.0/Chart.yaml new file mode 100644 index 0000000..d989d1e --- /dev/null +++ b/stable/firefox/12.3.0/Chart.yaml @@ -0,0 +1,37 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: browser + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.11" + truecharts.org/train: stable +apiVersion: v2 +appVersion: 123.0.1 +dependencies: + - name: common + version: 20.2.0 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation. +home: https://truecharts.org/charts/stable/firefox +icon: https://truecharts.org/img/hotlink-ok/chart-icons/firefox.png +keywords: + - firefox + - browser +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: firefox +sources: + - https://github.com/linuxserver/docker-firefox + - https://github.com/truecharts/charts/tree/master/charts/stable/firefox + - https://ghcr.io/linuxserver/firefox +type: application +version: 12.3.0 diff --git a/stable/firefox/12.3.0/README.md b/stable/firefox/12.3.0/README.md new file mode 100644 index 0000000..af8822b --- /dev/null +++ b/stable/firefox/12.3.0/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/firefox) + +**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/firefox/12.3.0/app-changelog.md b/stable/firefox/12.3.0/app-changelog.md new file mode 100644 index 0000000..45c42cd --- /dev/null +++ b/stable/firefox/12.3.0/app-changelog.md @@ -0,0 +1,9 @@ + + +## [firefox-12.3.0](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-12.3.0) (2024-03-16) + +### Chore + + + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) \ No newline at end of file diff --git a/stable/firefox/12.3.0/app-readme.md b/stable/firefox/12.3.0/app-readme.md new file mode 100644 index 0000000..06d4ce1 --- /dev/null +++ b/stable/firefox/12.3.0/app-readme.md @@ -0,0 +1,8 @@ +a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation. + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/firefox](https://truecharts.org/charts/stable/firefox) + +--- + +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/firefox/12.3.0/charts/common-20.2.0.tgz b/stable/firefox/12.3.0/charts/common-20.2.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..8bc207a92f0f2456ddda65216a8fafb7bb9d5b09 GIT binary patch literal 101653 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 z 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%0AZSzDiWTb()Y-C~3y!p)O`y!G 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 literal 0 HcmV?d00001 diff --git a/stable/firefox/12.3.0/ix_values.yaml b/stable/firefox/12.3.0/ix_values.yaml new file mode 100644 index 0000000..1b09ac7 --- /dev/null +++ b/stable/firefox/12.3.0/ix_values.yaml @@ -0,0 +1,41 @@ +image: + repository: ghcr.io/linuxserver/firefox + pullPolicy: IfNotPresent + tag: 123.0.1@sha256:b616ef4f65f3a3f461ee1b56b16090050de44b3b38015478d89a52dcbe87afb1 +securityContext: + container: + readOnlyRootFilesystem: false + runAsNonRoot: false + runAsUser: 0 + runAsGroup: 0 +service: + main: + ports: + main: + protocol: http + port: 10131 +workload: + main: + podSpec: + containers: + main: + probes: + liveness: + type: http + readiness: + type: http + startup: + type: http + env: + FM_HOME: "/config" + CUSTOM_PORT: "{{ .Values.service.main.ports.main.port }}" + TITLE: "TrueChartVNC Client" +persistence: + config: + enabled: true + mountPath: /config + varrun: + enabled: false +portal: + open: + enabled: true diff --git a/stable/firefox/12.3.0/questions.yaml b/stable/firefox/12.3.0/questions.yaml new file mode 100644 index 0000000..9e48fe5 --- /dev/null +++ b/stable/firefox/12.3.0/questions.yaml @@ -0,0 +1,2851 @@ +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 + label: Image Environment + schema: + additional_attrs: true + type: dict + attrs: + - variable: TITLE + label: Title + description: The page title displayed on the web browser + schema: + type: string + default: "TrueChartVNC Client" + - 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 Minecraft Server runs on + 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: 10131 + 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 Config. + 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: 0 + - variable: runAsGroup + label: runAsGroup + description: The groupID this App of the user running the application + schema: + type: int + default: 0 + # 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: 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/firefox/12.3.0/templates/NOTES.txt b/stable/firefox/12.3.0/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/firefox/12.3.0/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/firefox/12.3.0/templates/common.yaml b/stable/firefox/12.3.0/templates/common.yaml new file mode 100644 index 0000000..b51394e --- /dev/null +++ b/stable/firefox/12.3.0/templates/common.yaml @@ -0,0 +1 @@ +{{ include "tc.v1.common.loader.all" . }} diff --git a/stable/firefox/12.3.0/values.yaml b/stable/firefox/12.3.0/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/firefox/12.3.1/.helmignore b/stable/firefox/12.3.1/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/firefox/12.3.1/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/firefox/12.3.1/CHANGELOG.md b/stable/firefox/12.3.1/CHANGELOG.md new file mode 100644 index 0000000..6cea6c1 --- /dev/null +++ b/stable/firefox/12.3.1/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + +## [firefox-12.3.1](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-12.3.1) (2024-03-17) + +### Chore + + + +- update container image ghcr.io/linuxserver/firefox to 123.0.1[@55adf05](https://github.com/55adf05) by renovate ([#19382](https://github.com/truecharts/charts/issues/19382)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [firefox-12.3.1](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-12.3.1) (2024-03-17) + +### Chore + + + +- update container image ghcr.io/linuxserver/firefox to 123.0.1[@55adf05](https://github.com/55adf05) by renovate ([#19382](https://github.com/truecharts/charts/issues/19382)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [firefox-12.3.1](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-12.3.1) (2024-03-17) + +### Chore + + + +- update container image ghcr.io/linuxserver/firefox to 123.0.1[@55adf05](https://github.com/55adf05) by renovate ([#19382](https://github.com/truecharts/charts/issues/19382)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [firefox-12.3.1](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-12.3.1) (2024-03-17) + +### Chore + + + +- update container image ghcr.io/linuxserver/firefox to 123.0.1[@55adf05](https://github.com/55adf05) by renovate ([#19382](https://github.com/truecharts/charts/issues/19382)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [firefox-12.3.1](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-12.3.1) (2024-03-17) + +### Chore + + + +- update container image ghcr.io/linuxserver/firefox to 123.0.1[@55adf05](https://github.com/55adf05) by renovate ([#19382](https://github.com/truecharts/charts/issues/19382)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [firefox-12.3.1](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-12.3.1) (2024-03-17) + +### Chore + + + +- update container image ghcr.io/linuxserver/firefox to 123.0.1[@55adf05](https://github.com/55adf05) by renovate ([#19382](https://github.com/truecharts/charts/issues/19382)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [firefox-12.3.1](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-12.3.1) (2024-03-17) + +### Chore + + + +- update container image ghcr.io/linuxserver/firefox to 123.0.1[@55adf05](https://github.com/55adf05) by renovate ([#19382](https://github.com/truecharts/charts/issues/19382)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [firefox-12.3.1](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-12.3.1) (2024-03-17) + +### Chore + + + +- update container image ghcr.io/linuxserver/firefox to 123.0.1[@55adf05](https://github.com/55adf05) by renovate ([#19382](https://github.com/truecharts/charts/issues/19382)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [firefox-12.3.1](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-12.3.1) (2024-03-17) diff --git a/stable/firefox/12.3.1/Chart.yaml b/stable/firefox/12.3.1/Chart.yaml new file mode 100644 index 0000000..0371a82 --- /dev/null +++ b/stable/firefox/12.3.1/Chart.yaml @@ -0,0 +1,37 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: browser + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.11" + truecharts.org/train: stable +apiVersion: v2 +appVersion: 123.0.1 +dependencies: + - name: common + version: 20.2.0 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation. +home: https://truecharts.org/charts/stable/firefox +icon: https://truecharts.org/img/hotlink-ok/chart-icons/firefox.png +keywords: + - firefox + - browser +kubeVersion: '>=1.24.0-0' +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: firefox +sources: + - https://github.com/linuxserver/docker-firefox + - https://github.com/truecharts/charts/tree/master/charts/stable/firefox + - https://ghcr.io/linuxserver/firefox +type: application +version: 12.3.1 diff --git a/stable/firefox/12.3.1/README.md b/stable/firefox/12.3.1/README.md new file mode 100644 index 0000000..af8822b --- /dev/null +++ b/stable/firefox/12.3.1/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/firefox) + +**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/firefox/12.3.1/app-changelog.md b/stable/firefox/12.3.1/app-changelog.md new file mode 100644 index 0000000..f391a33 --- /dev/null +++ b/stable/firefox/12.3.1/app-changelog.md @@ -0,0 +1,11 @@ + + +## [firefox-12.3.1](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-12.3.1) (2024-03-17) + +### Chore + + + +- update container image ghcr.io/linuxserver/firefox to 123.0.1[@55adf05](https://github.com/55adf05) by renovate ([#19382](https://github.com/truecharts/charts/issues/19382)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) \ No newline at end of file diff --git a/stable/firefox/12.3.1/app-readme.md b/stable/firefox/12.3.1/app-readme.md new file mode 100644 index 0000000..06d4ce1 --- /dev/null +++ b/stable/firefox/12.3.1/app-readme.md @@ -0,0 +1,8 @@ +a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation. + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/firefox](https://truecharts.org/charts/stable/firefox) + +--- + +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/firefox/12.3.1/charts/common-20.2.0.tgz b/stable/firefox/12.3.1/charts/common-20.2.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..8bc207a92f0f2456ddda65216a8fafb7bb9d5b09 GIT binary patch literal 101653 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 z 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%0AZSzDiWTb()Y-C~3y!p)O`y!G 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 literal 0 HcmV?d00001 diff --git a/stable/firefox/12.3.1/ix_values.yaml b/stable/firefox/12.3.1/ix_values.yaml new file mode 100644 index 0000000..d6222d1 --- /dev/null +++ b/stable/firefox/12.3.1/ix_values.yaml @@ -0,0 +1,41 @@ +image: + repository: ghcr.io/linuxserver/firefox + pullPolicy: IfNotPresent + tag: 123.0.1@sha256:55adf05382872deee11865f2c7c6ae49f163c737f8fdb8c7c17d564d13c5449b +securityContext: + container: + readOnlyRootFilesystem: false + runAsNonRoot: false + runAsUser: 0 + runAsGroup: 0 +service: + main: + ports: + main: + protocol: http + port: 10131 +workload: + main: + podSpec: + containers: + main: + probes: + liveness: + type: http + readiness: + type: http + startup: + type: http + env: + FM_HOME: "/config" + CUSTOM_PORT: "{{ .Values.service.main.ports.main.port }}" + TITLE: "TrueChartVNC Client" +persistence: + config: + enabled: true + mountPath: /config + varrun: + enabled: false +portal: + open: + enabled: true diff --git a/stable/firefox/12.3.1/questions.yaml b/stable/firefox/12.3.1/questions.yaml new file mode 100644 index 0000000..9e48fe5 --- /dev/null +++ b/stable/firefox/12.3.1/questions.yaml @@ -0,0 +1,2851 @@ +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 + label: Image Environment + schema: + additional_attrs: true + type: dict + attrs: + - variable: TITLE + label: Title + description: The page title displayed on the web browser + schema: + type: string + default: "TrueChartVNC Client" + - 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 Minecraft Server runs on + 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: 10131 + 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 Config. + 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: 0 + - variable: runAsGroup + label: runAsGroup + description: The groupID this App of the user running the application + schema: + type: int + default: 0 + # 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: 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/firefox/12.3.1/templates/NOTES.txt b/stable/firefox/12.3.1/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/firefox/12.3.1/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/firefox/12.3.1/templates/common.yaml b/stable/firefox/12.3.1/templates/common.yaml new file mode 100644 index 0000000..b51394e --- /dev/null +++ b/stable/firefox/12.3.1/templates/common.yaml @@ -0,0 +1 @@ +{{ include "tc.v1.common.loader.all" . }} diff --git a/stable/firefox/12.3.1/values.yaml b/stable/firefox/12.3.1/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/firefox/12.3.2/.helmignore b/stable/firefox/12.3.2/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/firefox/12.3.2/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/firefox/12.3.2/CHANGELOG.md b/stable/firefox/12.3.2/CHANGELOG.md new file mode 100644 index 0000000..9dfca09 --- /dev/null +++ b/stable/firefox/12.3.2/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + +## [firefox-12.3.2](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-12.3.2) (2024-03-18) + +### Chore + + + +- 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/linuxserver/firefox to 123.0.1[@55adf05](https://github.com/55adf05) by renovate ([#19382](https://github.com/truecharts/charts/issues/19382)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [firefox-12.3.2](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-12.3.2) (2024-03-18) + +### Chore + + + +- 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/linuxserver/firefox to 123.0.1[@55adf05](https://github.com/55adf05) by renovate ([#19382](https://github.com/truecharts/charts/issues/19382)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [firefox-12.3.2](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-12.3.2) (2024-03-18) + +### Chore + + + +- 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/linuxserver/firefox to 123.0.1[@55adf05](https://github.com/55adf05) by renovate ([#19382](https://github.com/truecharts/charts/issues/19382)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [firefox-12.3.2](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-12.3.2) (2024-03-18) + +### Chore + + + +- 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/linuxserver/firefox to 123.0.1[@55adf05](https://github.com/55adf05) by renovate ([#19382](https://github.com/truecharts/charts/issues/19382)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [firefox-12.3.2](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-12.3.2) (2024-03-18) + +### Chore + + + +- 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/linuxserver/firefox to 123.0.1[@55adf05](https://github.com/55adf05) by renovate ([#19382](https://github.com/truecharts/charts/issues/19382)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [firefox-12.3.2](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-12.3.2) (2024-03-18) + +### Chore + + + +- 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/linuxserver/firefox to 123.0.1[@55adf05](https://github.com/55adf05) by renovate ([#19382](https://github.com/truecharts/charts/issues/19382)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [firefox-12.3.2](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-12.3.2) (2024-03-18) + +### Chore + + + +- 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/linuxserver/firefox to 123.0.1[@55adf05](https://github.com/55adf05) by renovate ([#19382](https://github.com/truecharts/charts/issues/19382)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) diff --git a/stable/firefox/12.3.2/Chart.yaml b/stable/firefox/12.3.2/Chart.yaml new file mode 100644 index 0000000..2d231d6 --- /dev/null +++ b/stable/firefox/12.3.2/Chart.yaml @@ -0,0 +1,37 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: browser + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.11" + truecharts.org/train: stable +apiVersion: v2 +appVersion: 123.0.1 +dependencies: + - name: common + version: 20.2.2 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation. +home: https://truecharts.org/charts/stable/firefox +icon: https://truecharts.org/img/hotlink-ok/chart-icons/firefox.png +keywords: + - firefox + - browser +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: firefox +sources: + - https://github.com/linuxserver/docker-firefox + - https://github.com/truecharts/charts/tree/master/charts/stable/firefox + - https://ghcr.io/linuxserver/firefox +type: application +version: 12.3.2 diff --git a/stable/firefox/12.3.2/README.md b/stable/firefox/12.3.2/README.md new file mode 100644 index 0000000..af8822b --- /dev/null +++ b/stable/firefox/12.3.2/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/firefox) + +**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/firefox/12.3.2/app-changelog.md b/stable/firefox/12.3.2/app-changelog.md new file mode 100644 index 0000000..c8948e4 --- /dev/null +++ b/stable/firefox/12.3.2/app-changelog.md @@ -0,0 +1,13 @@ + + +## [firefox-12.3.2](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-12.3.2) (2024-03-18) + +### Chore + + + +- 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/linuxserver/firefox to 123.0.1[@55adf05](https://github.com/55adf05) by renovate ([#19382](https://github.com/truecharts/charts/issues/19382)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) \ No newline at end of file diff --git a/stable/firefox/12.3.2/app-readme.md b/stable/firefox/12.3.2/app-readme.md new file mode 100644 index 0000000..06d4ce1 --- /dev/null +++ b/stable/firefox/12.3.2/app-readme.md @@ -0,0 +1,8 @@ +a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation. + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/firefox](https://truecharts.org/charts/stable/firefox) + +--- + +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/firefox/12.3.2/charts/common-20.2.2.tgz b/stable/firefox/12.3.2/charts/common-20.2.2.tgz new file mode 100644 index 0000000000000000000000000000000000000000..a03705c84630d53af93b6d6ffdf44b22f1a2597f GIT binary patch literal 101828 zcmV)HK)t^oiwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PMZ%avM3aFxbEO6bPy(#_AO*-X(F4Cq7wHck63e))8g*%+5EV z0jod~N5w*Q0i?|KIAUL8UvHme1BpwaZX_j9vfaZvXWC*FkVqteL}ns0;j!tIh5IKH z9Ee;bWP_TOf+-T1EA=^h-ky4{0j>$^s?)j4Q?hZ@g-OYWI* zf#dHQPi`yQxo_mbVaNm)l!d%sK?ui!j<6>tvtgaGeGdyVX7QqrXeh`yhJrPp1awZ~ zMZSDMJrZ)#M{nK_E^5tsv#3aT$NT8t6@(C~p%70=AMsffu~@)6gl2KjM-w3;-rwK% zDfd|H*F84fr{SCmvM)aHtDB#Hy%BK*NAv@UIb~rV&07^5MfPWa1>vIN6Yj+{67cTF zS?I~XP(X(k8D2lh|XSAfW)Lv;Bi!r_ng*b}M&eanE9(_bWA&G*+n@Ol$C> zQbW3#yV;P~uKxM2ubcH&r{1VF{#==28VXE95(6+Y#WaxPH)8)Q0bFPCxPmnG9Rg&C zpQ)gVYYfC9B7K8iWo~e3HR`Q;tMaAi_4Zls(fogogBjt^v;i#T|IJpb+3aTd|3Rm* z<^M17?4Vi={S>ev4v?Azl`;I1y8(P05P`7oQ^_}RfYetM;2{Ylzfgbl(WlSLD>xgC z+!UN`CtKCjklcnx*dy@u=H2PLK02AjF$qPmK%7kpV#EI-p5Vx5C}hHHBS=gr*W3*N z^ij21L1=`7V2HiDQ!>J{K){Bl8$Kl?8WMyN7c9nOauQ(9FY%NhF~I`e(;z@Yf@Ylf zuxH>PKvy45xQ1|oL;0D_NgU4t;-iSf@;iKXL8hCOSfD6oLxLnXg>Ufl26(IF!uj$8 z63?ke&{fO?^H`wTP%q89J`&!NsyC)FT}?H263pa&c79cWqvY;fkkE56Oz(;p8SMJom)X!V>ba=Mm1) zTjmorco<&5@4l8lYUr9^|JRrb@-FlWP?W9a0L?vd{0LZj`013enc&V8&~FSNDRPB` z+usP$kP3=}Qxf3CfOstQx$L_A9+8+bzvzo@&3@|IFC$EYSxjywG2s&y`0h78gYG%s zn)+Kzuus1>6T_Z5#wSU6aHI(v@8XT=H&9~CtbRb z3CZt<4K8CwxpL9iijU1+1)(Vsl07;M>e%oUOT)%}EoC?v!u{_YyhNZ4l~9tMOX79*c>^|zQ1G@>7gkEYc319FdJ zSt11L(NL0{lcl87g`fz57JiiQ-X`EuNE}B|KnZu6ll^*BYolyCmZ@k-e1d6M8)8m9 zJKJ{9yGZT4duX^ozGgEpc|^QGf;mO20b_Tws0viF+a(%eImK9LU)w6#Efsd=2}#jb z_BM)w1)?L_ZFYacV)=GF4hW)L)6iFAYQ8V&rSNJjBB94(UV|Qgp}xZ0eM>_+olQ~5 zd~zja4G@~-`k~>ae%D7wjYh-NP?HkowqOyOGA>ZWe2#GFBdHB4T@BID3uZnI$H)t# zG1T@M;UL(kZ$$F4(68Zug#=(!K)Q&IgTQR36=?Hk#_nW`dKI7vo=d=3>uxolL?rY{ z=q=1>)GIsaDyCB$(_o=kj9`d_d=?XQPms^TKPPx7Flagp1dRfbJ+E9$M3XShr`j~QKQ>w_ei_#;r2ljkG$TfJ@mV+VY7GG8g?4~L2uY<`=n9< zgioZN|4~Tnj<2rXUtj216fytg{PbG?;&adbs%R0|o5fTtkOolU`h^1!3Z9s$gG>pS zP2{7nn?o|YDy96!mZ_lRZ?y#DS$NFfa}xJaw|AJl`YC3!$azPw|1Jy`*NllDX+Zdb z3o>QO!*7Ot2{y)Wbor zuobZHqm!TC{d&2F24^?#&rjjspX9$kzWep^?0OHK9-rL4`*3!BeSUgo>$zy6cb6A` zN3hpf>PsqfggLr?_wL3Zu2%A(cY-6Hlbx^LpPv?w`dZ_T06;RL0Q3FZT9$!cF~5AmYMxdCJz~CEKxza>*@>uMoJ?>yCT7LI3+23gOZgNFZ=z<^EQ$g$ zC859p)Zli8@CElopnj|McuhE)#ZuH++2`04mG}j8N{#gHMYBHYG#ZU5{G5_0aH>O4 zQeyJkjPO*^W~N}b@s?I9wjs6YL50f?=cnh#wvC!8E}?D2dxiUrQGc5V@xPRz8B zd;Nd}#1l+&#=F^ !c*D2e_u{Y_XDxUhij-BW4?G`#>u_q<`F_Tk2lI#+OL ze-@DV5{RJoqnI+-UW~;ap9#u z{1sE-)?@x4BA%HS342R+hoo8c2w3^vDLqGb1P#B+7X&M=U|N=uh&7LnI<-a@5Q~XF!J;okw`RUFo{7nTa4>(GcS!QK zSc!*K&ZflttR^KQ%=tZweOpZ}Uw?jYnZLOi8jEt-3)AVqU;8Kfmk)oG;WV}S>t+&y1=2<2Kq=#GYRtgg(C zBR;TT24Xp#+5yl*PCimDXgI$5Z~~vq@0uq|uZ_5=25snp^qlq{+%W?%nm_M=Av6c# zTqY~v>H{Fn1s2q+g(Lpl7^s%)@J*R7wapPXFQl|VU7~YHvHvJ;>P)%DrV>YL9AF;s2}#*4mtsl=wxs%_dD3xScs&2ZOX{K9)0?(RugQwH8t0Hh$B8>D;et3SJgnb z#4SCHF{L_P7&M$cAzjP0BP7K=`L>E)8Cheu;>y;ENbZxgh+Y62$W!oMRmy!UDxZ|y zDeiNExS_$aPO6DwDdYB1Rpx0{k9JT*y*tE0JM4*%h0FJC3(?$z?Okds`lM(~1j2zJ zG4XdTlnj>212H!kN>Whj&w2Pi#1q6vqnJ(6;NR{fAa6R2@A) zXo@4KVSnWs-~d8v#)T;Gl%>tpq4ld=jd+MXC@25O!}D-Jauif>3qP5@UB0_H8`Q-| zQ3;t)rmG3TzT|8Fwr9aOyh95%gK?uF7dQxLI7Xj7p}KN12d}EnpV4sPIG)zQY^qj_ zGHVF-cRUTObwgWIObONAr%yFRN7j}>|E3fmSyHAWQsIDp=@Xp4vl;Sm zD0d)r&Ip)Dv{*z!S%HNFv61p1U_rp{S_=iLfIBgTX? z_jb@J^JZ|WBhgjIS^>eFAa6n>U!4gU%VgFe->rd|wsw?wKf||o5eXGlVe&A^qCmb? zr{6FsCM1aVP^8;tA*VixjdP-$LkR}U8r0G7J_0sJGxorucX{+G;kQU`w8_X zNU=Ha+5tb1Awgpjk{Ao(S5$G?W4XXGc9-Np6V9cmZ%=!zy-xq0FfQyj7VEzwkZ80| ziYv=7yEwIHjV)!}ADuVatePCg14F1vgsZy0dx--U_@HVFs5)w+q2V$0igWB=83!{W zX5o3E!-D6ZE;y#vzdG_lwA{6pU-_^@|4IwHQ;Y~s$y8x9YN z-x(5eh{>qa?GW7Tb`Cm+OY!uWuQjCAh|01xRoJ51skd5*Q;Od^Y#(-p!`7(N8+Ay> zYmA83_B*3yvo}2K93AAdodQ?WHpMqputha0NL?wkt4s|>0#Vx;9k2mYLns6?{!9Pj7Lq*co-&tx;n*^bdNigQY0mkI5Q~Tb6Pb zOv70(UaL16bvv*a{3FsCHSy6wv)yVokA}F_8Xa^GnvGt!>o*R)PNOmO$f()%y@p&& z4S)H%Ui@ZJTjH?gVm+mIWQ1cp*?Nka1G-5!`eNjqGsy3 zK4u9aJETLp!=q9A0C)X{cjzBA{DV%%C#|;MJnSAc4vrc}-O+H^?fR{wPKS6$P5-dn z>NH2aM*Cnn8=vBsVt@EhjCHkQgnO;S?&0vTc_i0t>!8{54?BmQ#^}&L8n(T|Ua#93 zH4nPI!(Ov{n8Fp0<1(BM9H({}#X?!m0*JGX<$J!hY`yPhD@-9CF zgI>M076#gjjf5YrE)h4{iRYSnDm&q7};UPX8`sAoh4#`0m zlWuF&Z6CE-!zLa|;l6orct}WhZ44xRQ3M2DP3>Q4On#c-*ncR!?`cfNvSK;K6WA+> zZK16J$0accEUiYX**I!;?Cy2g9v%)4I)1N1hJNEXFVG!XAWo+=z_C=uCFDO(F%AE0;M7Y;)9A`6Cmko8As=It zkCO3oZpv@*owl`s`9Qhnn40Jn=+!jTo^g8!tc-hz2(MnR@76V(bFj$85K018BQe1t zY8o(mXewLbin>?@4kVwU7LMD}Pu!qc6;-RPDpS0WV{M?Two-Ao<$&DqswL3!@wiSzt~0!F!lCF& zd1450iDSm;S~bAYFVtdD|)%G)Q)#1%J zWU*YX$^`7BqdGM6gy?==ibaU0rKsfKz{%)Cpo7EZy3iB5XJ$XSxfo<;Z5_Q~VuIA+ z5*XCw8d4Knj(((^?-5SV3^NygB7!5TM_a|I=s0oCX9P$+qJfF$GqDpI;hNKIW}4ST zz>|J?BoXQOU%zqEg3G%fciF zyC*}4cOgzC5icSJuKJE!Z>_NCig;6`17GDH#U=S2RxZbe6Jg6iAi~YXAdhX#B94Y~ zn%Ha&J_3^FVo=o_aAP=;8^@WY=1yr4t6`qYLRry6gFMmWLOplvnoS3{%4h1*-3F4S zv7at#&dK%Hg#QGbXU1gZw6}9suhV=iY>Fzm;!d6=TPT%#skm~;&^TtZ$bK8En670_ zQO{{ZSXv$LN=PckU&_Qv4wgI^5gZ3n&=y$v5XgO!U@?oyUit*uIPT1Fj6*@Rrhz>% z!$Gh>_bk2xMePldXi7rpuxK3a0~7He-cc$};HfYZ5VB3hgw2EmO+8{yqjjR387F8K z269#}*bLp{5N5hi`WY4|ru?q5gZ}Z4n2i4U&sR1hnj(1(N3_oAnAh(PAp*|IEqtFx z#M|G|1?!;-5~Sf+7yVOfG;iV{n&8%MsrCs(et_-?<(F!nMvZ}z;8d%>eZT?rO_U&# z1NqbS)ycIiwugScxw+DR-kjLKE(ZFq_owO|fKraSw#Kt6WgAl%(+kSPuR4^%LSSzK zNgcG3jAIgtYcg^|Dt8b>(HdVFJsE_BSI;u{(%Iqg{9kD3uK`h!{U-&`sSbi}S@ra` zmZ_!o+O?{x&9UM`_4tlqAtUL+jmEFplvo(7aF%prmX{ zop$XmCiF|0E@VA-NK;UU*t;X455iwe5QI`oZe(JY5udPG;LAzJNhp$z>5A@rQ4Qp` z`D8S;a+dm%9;uQ6Kq=M8Joki-CnCvKl+ma?7OGX`*fVSgY3Q-3+tYgDm1x&`5=ad7 zNT#cxMW-+_GKbX29bGti^uE4dsYJ{_r97SigL*SFqD?{MT!!OmpJHPYK^G=rTjFS^ zUL|Ukdi#r%IMkmXteBFquOya}DGiV3m79^FFPUS=L z$rOivC6%pC5hb0#ZnHFraEzx!Ku!QF1;#4g#1JHggmL;CXqw6y`s`zbLzTkHr80bb zLqjRny#<&3^XZiM6bn-XeBe#01MO0`gRU$pR+fB&y}Ma7Q2oDP%FF8&->p0R!zRH= zWJx9_Bt}H#n0Uo^4d)#efkQk1E-X=yB9M`_<|H67lhPG}wX9rWj%O zjFi0M@7X4CIdGljOwChYxm8-ss#;#G)~&WtFYdISPQ~8<54EKjj5LmMiV$WVlp$*> z)!l{Qlh}Y&3DtqiOPgQIHDt@Rx~J}_c0Yj(U$VE>6LGHCoy-k zB(dZk{0VZ2Ih65du^h}PHI`7Y=*0v`%MG{$(|!WYXzwxcNhl}|+<`s*b+FId&PU_s z8_fiwAtdmVsy=!pHxmqlPDjb&di@&Vd%n-xNpK3jcdQBsQMrlxWA2Z}6Zntw4U8fF zXzY(NpLSA9NTUFR7%p5AXZS!eja**fg1aLNr4Z``A>3^MrmgD!jJvB+;%P_Bu|OCy z)QZp6>%jlP!yOOVJYmq14fzDzStU|NuiG~PMQB7x;Hzy5JkYazNj2l_usd>-9XsLA zI|%Xik1Y0x6iNqT5s=iU_i^C-zMJx2$l~1ZyWo^kqjEAO?{6jqouAsFnGLN>VrVKS zDtyz^AFHUAJvniFI?@Ul1POtCM;$->fB(<_%TwU$=+*J>azkceu-J8QcgmzN*6o=f zn&d+?8wS)%_t@3!emc2I&LdTA!%Xe5P3e+$oCq9LGSJld_9$hX0bZ@M;vfpkPb?tB zhG5W?)u0<{%9%T&0ja-|=w@k>jvq=sD24;O&mE0i6Q0BK5Q|k-!jWtq4lD+DG`hJM ze1L64pF8NKAw{!2J#yfc!l_RT*X7DClOQk(@VJhCWU*n-y3z@oPT^33-Vwt{HI0>+ zJ0yFV_W>L8BoqPrzOs)6c#LW_gLqB$vnB#wQ(ItyNnzLem7OwK@k1)e?&-qfyb#{w zq{VcsXd*5ax8cZ(S@H1SE}vDkkpY_(5Y2mKRvUu(Qs6t16J&BiX}w-AL9H-4vs|nz zGe+I?o-fIi*O}EB2)xvSZm-Yo$UoL;>ZH zigJoYKPm2T!?Uq$Hvy!B!qt9bW~V-x$S@skeYewjx**}ak4DTGM^YE@l$J7W_ffTh z8t4c4eu<;ki^&aFy=f|1j+Ef9dxb|^7@Gpb zj_KbxM>&RIZtc1HP>6(n+ApQ1BO<46+HDAOoa3O6x{2wVdohm8tp%wst``}CGmOw+ zktPD05-}k&emzTa{T6yFjCIo1PbT7c2eK(li8@tqUdsQ%vX(4fuG!Q#b?A{eb);%Y zlIi#8R=J7#Td@Vsc`aZ~LOSRn=KE;|8j2Sl3Ko zYPuxn95w5?VX0G1IgJ!kM}5m;n5wa1>L}Pn)Twweq}H2j`8&UuD{eY$p7^b6mkYIp zPe?FToQ%7ACyO;t-y+;0ItzRgf)| zOlE)&ngu03x+kCt7*Qm_DVqyj%G1_CKqpxszBciwHo!NloMy-z6TQWE;D8X;Mr;lKr^m>YeGx7R~f*h#JVukVKilM z)1}siO=3}-DwoJo$W9r@7e|Vz`T_to9W^76^240OIFMspVSwNH0?Wo4FfjZmjZ<{Roor&{dgAE`9z;I>vG99E_v`w zOq4ds%;|(-!;)5Mj{!Ur6VQOIcfk%ima9Ng&%-g~_1CHsM2Cb#pX}?OxaaOi+%fjqi&m)nz^}~!Ota3hcQ1S^Ex72lk;LN-0-r5{%<~4BCTO5y5 zwXqcSZVSJ$nHb7Nd@IM}Hj3HD#ccpdq*4@-RCWB2M($KJlro*l`s7&%D}wV@%`Uwn zQbT=`Hkp)cAV6~*Q{`=D zbsc4*HHVeTna~*SqR`MUb0LCSOmHNYPCPTReN)k7&aDe0IyM*cscn4jxNsqxbNMUA z*DBD+1O@0zU)hw9aBkgC9A{ST%W6Bd(7Bq_Nut#`7Y-`|W4Fo=h8*jR8B1ks;HjCm z6zVKeRT7X0r976DU#|vSSsSj;?!!D}`F1(%wBw(4(4oH*AI2}W>=Y@iH8wG^DI*^Y zT-~A4k2D~eS-);WEReftrm58Il9MDmt8Ox*=H?3m-wfg-PCzIjI$PIHdQjx%=upxy z@S(Eh`h8on&L^3|@=Z+SkVuh9gV%(B?v#-tw24fO1yfG@geb2R&Yack=5wVn*m2 zo(`q%Xb=qUsqiMwE=N8p>yf?zgx{WD%{z957k%w1RW2{anR}S?f}E2RM+@Oq;$74Xz#+jbj1Zzs)N41*V-63Uj&8MKA zV<(Yjid#joY9vK{14ud6>pKqPv11gg)ui-ie}*h1$p(-`!1+?uX(9LPb1qw~x_t(o zfStMJoLZ(hLvgTcMmN!p)d(oy-eD_cE*r|{_FCv0z>x~FhM)vGC!spL#Zja{WURx$ zuOmFMnG$Ktg)=Xef%dH|rF<|IUZ)iD2%Fv64aZC`Kx_}k6V)Tj8R}VMp(Busg1c>D z%Da2Axr>#>0@R#%ik(2F)Ws8dc2V9oT5>x~<{Ap;0~lPJt#+%ah~vcK=ZF*9=%fcw z$JI-UVhq&!Oy6;2f=NB)7aERfXq=Wafd#2(O|?FBlr!^5y)0@|_dN+-PHJcE#|Fi< zLy*((b0Nq{)M^DGliF_CPGHJB%Qj$v=l6h}jXf19gTaB1=X&CBC3Z$JsTuK%#jeYo z@-1_&c0@ay#H!+j(fCoPB~nhC33a?IftV9dIWQ9{C$eJsQ|7BG=4B=ugLAN~PAEVk z!WlgoHb2>ld!cS-8IGWis*nEAxuFZ{QA2 zsl59`=j~i2@A;QwCbGH7bSblF*a%%Emk=wDqdl_;T7rfc;vu*JPL4M&cIY*N`C;Ve2Kz%;o+8vw$+r*Q4*zfjGxYgwv}PT-)BqmbN#IY08@ zrz@@lp>+r93DlTC=1vLH0KrJVwEcxM^ip8@VtN;*x|Bl#9YC->M+x?5I1~D06OI&8 zZD_xxJ=gn`$S%z(M$!0I&JtBb^+BiSx4;dBPxXv4?hWwTOtU_!;z%C?>D>GFcaa6e z0yDVg4LtfwvOlf2h}>mbwv!YtBH6^{Y&s;doIh~<5qkC{$^P!6R#INOqe+f|Sco_c z#{sE@at>+~xW1*C-NVKHTAREhk&qP(RC6Jr2CU#*!a%sYsy@Ru-hZ6_o`^5t_7cs# zKXa$>kC0zlyT{0BBLyfqcT67XtIQ4jug!(}&^zN`p6uQnF2b+2y1k!hbq%cUaj;>e z?r|_!7q41P<(W|YOVYj}w{@3uQ|?MoJ4$CUh}fGqRrHpzR$KVa&7Ah#TOuY(X;#U- zf#XHv82cm_CP!l9QH@c|R7P{fXjJ+PAHsU^NG=e$IcO%r(FD&48WIvFW2J6`AI$=} zp8^cu)nqwn+meT%SDMl7BFLp)ivsKs^h!^`T_e|NMBf7})vLY(Ch74{B=;;ZO$ zA5q(9eZ4O6(W_a=XOR^6rKDk5Jy2kZ!x;|HtE50;^F31nB^+d@apk(xj`)n+M*2?c zx{BVO4KbLU-Z%)HS)6|IJvT)4lQDFfcN@3PR=RiQo6%26EVYr6reR?w^CgY9ySQ|S zxH_~q)OGF$Pf=a(phdIG%%Fa%Ml!>0AnlB1z<)*o8>4{CNw8O(OJ7+I`iR6ai}y^H z^F4LaWGT0Yd@`Jk_mGH_Gns&mFC^r?TIeYZvNlS^;ZBbA0eJvp?YK54Ja0fq-yUP7 z4_38nZDJnT_hxZSLa~n{dTRsV_jgVlz$dxQGL;s=Wk+!PG+3?FDWY>z{$ASM0JLy* zYXLz6ISO(kSB6HlpluwB5%plJxBGkDHhP}&1GUjwkgKk!)zm%M#zl*Tq`tHp$x&z? zqRK2(*cDIRQ?jRAu?Sqo4TskSNceje13Ab-mKz2*yweG@^f8cGAt|y97uMoKfq<9q zFD~lI$molZ4R*)C%Z%@dDU=#%(~cIW2mgJ6YO*A8{7frGxsj4%@-Y_O4JB-dl zDo)=R?`N+F^`R+i^FsmcX-I`XG+{yB+=f1_lvU=^-bER;VoCJsp@NsGaMU!~e7a?h>8yPU?cq~2t>91 zCDCoQ_^M{2>uaJt47EN0zJE3*+9=Og%zvvsrHoK|Rcc4Z|DKVUlFXsCI{UGoQhsvw z@~3Eg>tSy~ZYNaS!X&DuI-O5{=*n^MUv*fo@ASGOi>hV*AcvbTzbQnjyQ#|Zt*kyc zyEr?!L3&o)8inW8u9R4P3~3Yg5T8w7O$d%|hru0}DDR?uDN^L#{$H7*F~R;Wz=A%a zAFtoNm0B6x5yoyMXSfw$#`#OS|Be%=yNA~dPT3C#G&3nSqw2-+o3o2*L4kC%w;P<~ zTkTK(k*!`+9az%rPsi_nI$PQ3i5zq^p#nLBzJso{0-U(tQGJXsVVo!njN~7QrfhO& zn%gXO!#fGzQeNE_vXXHVb<>&+3=B#03G*GA|A79bRA;G|Yd}&1ca?dghQm7@L-gwE z{N~!6P7!|>T{=gVIujSDMvlG7zO&BNbr%n%-QR+CzXmo#98YnWwh3ghO2JQA3YIl6 zrx;7|m|&gZ!ZI#voUWtyoQ!5cCKfF_H&mEuGUb3kCz5?%0{g!DX%CS(300riOh5=& zk{2{(MnQV?`pBhJqW4K&h*3-uAsI&z3GH#0+G$})0Lz5ztvd1*gaZ>c#$;bqMix6{ z;GOEIjj9nyVPRgH6q0U3G)(3m8{QGm8VI0_^)yL(am8pTV7AbyGjSC@Nt9rb*laJq zp(4J4@`=SMRp^^Yg*cKb*NHaI4fe55}(vH~VBQc0Ya9Dg+`uypm@GSg1| zyv%k|-ynnrK>6a;tLNfn+7)LflOxkcMOil^V*)e|>!~a^$+91`6LEsK>;I+VbN*V# zQ~Wy%@jb75Y-$~?G%S5-586Q&L@IP}2ehO>;(~3OAGB?)2csTAI@VIOdAq;A|6eNb z{jdKe3;#9Yc)!nLM^O5&bR_Fv>;I*X%p_U=TK8B?>i0DC**&j^MC|{UL-j1^pBNhl zq>skDta+bsL6uSF%Dr^SiHt+M4SrZKzj%8O;orenFb3deX|$7RtK+8JbU-?@f%{6| z@wA`3QSJc0q$(PcKP zqBCxNGz{3#exc!n#8mtkvnh=J@o6R`LXF#!4i*q}d`HfbgQ#pqNatcJ$0u*8aai+_ zyp33Au_%t}Ks#_5pK;>xQfa4Vk+F>gi#^1ded#*cI#ElG;`R+Pkw4Zp_aDp)ZR}Ow zSkU%#q_?(hr1X#6p5X2CeQz#y$ivsP$}QYN&AiE)7*StTO#@ z!g*pTe8k~f>WI}qabjN`qD}F~Tb04%Rx*k{sx}*qhHH}0Z1Ps(cWX}vO^NkRgw+{` z@nLauF362=76)7^ozV=UoArgHIvh6QA9LV}!&w1xqFsIE^V{Ae2KKC8Rg9?@r2@o9ZlFkZUPUO>IO37dhJ z$OF5b)O}LV6EH8`dCr3P;oX+C9@1f1{)EA;0Zsi=c@iGa#6+$|llY(-g7Gv*AX($3 zNpq17<5li$a8gX7fGv`2j4^?P;uR=(69uqcf46pkK-zFZ< zbrA&*Zllp?G~s$fTHWqJv-Mr0)odNKzC(>?>2c z>+a-DSC^F#Dgylaflwq268bJ0<@NOjVw>Op0Uc}8PR4&f6$)a4Is%4$j(~(3`J`C? zwH==2G_Bh@Ra8g+26O-4@icH~B1xG*R_}F#HVt9_H5wC<5X*kZ5;Rr)R@URPo+)3C zm_LY!m!QSdk#9LnT#6eyOfbJvwiXj1+<&btj7g;!JfXhlbMF!kgymlfds*6a#KfGW z@HPY2e~n%hlR2Qn`b^NkjBypc@~P+Q-N{pp851YsV-J`&bhQ`+oUvE)Q&V@ly1Q!#Yv%&_Eg?WvDuY!^oMgUO%#JZ)zT@tnxj(>RYoNMcy)-#3c$?f*CA;^+W#o~m8f_#MY zhIkep^Y;*4*f2j;vg73UB@3?^a}G~qeTRj7`y&kqUvNRD<~s@J{fZ-<=u8vK1wB(J zrPNB<%v7&KqH6mK>=Q^A&J_Cmxu1He%KjVuHe^EL&(Ds9@2mcYLX#f-%pYdU7p?C9-qEFzf8Tk zKK^ytW|_5X+d=w9_DY)`(pZ<9ItHmv=S#MNzsl*l9_yY*=2oaFj*4V{9}CtEko zaPmY8z>4+XZshd;W@D@WzszITzaHxi>Hcz^X^6|!|BR}w>wuzdb^Q{@F4=}L0$j~4y`Ssba#}^lN5Y3C*ckgfBynBCndOLXk z=JM=jpp83Os9AG`U0W_>GbMDh zb$t<*M)OXvOzbF>F3o=Jwo@qH=9+nJ5`!eK)`H+{=cSDrsrm7ZW*```FC`SdyR23+ zuE#$4xQD)1GLWRBZ3PDB`rZ4Rv)fOf;Cd8Q8a0z6xf0o{xW6mq?WN*&|23*s^U);_ zR4UdL=l@bD&d+;RpilL51xX)903dnq2{bQ|9=Edkv&!mg87h~`e=38((~SRX*#Fy& zjQrQ^9rU*6zc2Dw`On7*ZJ{#Vt@ZU1nqE*ui1jqdrmukl%8jQ`Rk{HC9! z>)+l7`!o%3#rp4b53>Fr&33E3UH>of*!6#tz590q8las&57Ggvwwm_0`{U_>X{W~- zkN4pwG;n{kq#80NiZsS0WJm~Z@2u9yCR%2*(a0*A?yI%W9(1%qntTuPgVYdK9d4wk z{%C!;0yBL;1p4Luo3q=&*~#_U4Wv$l%#0k8*QuLPVvjhtvYYHFaJQks4um}}z-KDP z-W?6c^~$dlLO|`+u<7sSTHrqmgoAs$;FY_O-J9&#IEqvp=?u~*!{uyh9s1yQRgpND z+jvcMx6Z2vf-v}I1q7=bZE!G)iC(Dsyyj+b>-1dbv%4AG4&I&oB7g7Cal9YT!lFCd z{W@pfoi2ZKd~dA23JMS%UIU@(%TXUxP#3qtE z@@)fWf4jLpzCFJF$q=ScaeWwpvKR8(#%_+!F9s*a7iXu>(XL!LcVv-Fbh+q$Is1DN z*|sY8`YN|^1Wy@J9^eXI-0s(>xh$3c)!n_%t^ar1y@Ra(U!%2+|9z3i%KvJt(JOP4 zj+9vB($d~?yBQ?_(NJAaW-b6+Un|hFN&|NMyN8&QD=a2Ua!2H#m^xKd2g`k0vrreF zT3^Hpb8exTN1;ZclE0!x$(}kgP^C?+HVzIBsue28G|@#?x-Qn#5ISTPZ~>Q})L z!y4X-8lZMrv>?rIhtuS*3I9|UtEu*sl>4}0aFW$2`Fb9OM$m>!zg5O-$@%QStzx(< z=9(I)%}+H2cf&Ic09iu7F6z=DGZXayvv`S(tI#6vCWVAig(OL@2Oao3t zxP4VV?eYz~YbPIETU@7XVYy0UW=$$u6x6h2OwBC~Br_PVo%2E1%b>f}WQ2ATQcf6$ zN)_`*S@#rXQbSDz4bP(x;)YFib-#F3maA6qOt32wPbs8aPG<<#>aRCp_o4lz?&MWI zeB;ES?~5$!gq|B&*J#87pTwJA-U{vuY$OkzDu9e%ee08innFGq4VigoU=noxI zTffL&s0ITXI;HW(iDBC=AW7chu}Z^OufNIcbKE=KX{`B7?ek|9y!J+FMDS7SK=0%# zOQ%sIzZG_V5fN0qr!g7NaO_vp2hg@b*&Y$ze!5^$%fFfuZu7vESKy%ijh12H7Ab1` zC+)K2ww%(R6L5d5pp6Ya%k@7wT2EB|R_lLK@5`S5wp-i$zc2EX#s5l%@(J7PDO^g< z1n4S?CMBzhIiOku;n9S3w1%f>errrzO>0MzE+lreI%K^-bzXzu5s6n4+(j-mkMkgk zDPDWIxty89<#g2rA4XU^*_LyL1oT5mo6P0{AnOo!m0q)qc1r4BO*&QXVU#oK-crIP zfFDXX1HJ&n3aah@fX>uCeEPmUt7N#hSx+$yQN(<8BQ71GSt!wQb4%nCU4ZYalkK9^ z3t&~Y`{EWJn(w~2^Le(EPNd;vns9on&sLV_y(Ygo8bjfUn2`dUp@8B*(j;eSj7^vB4&jz>yuv(NK{$Yb#=!o=n4zD{%j~Qeg z&+tsEq#&l}>m=jjSBYcucoq^`_V>un4C#2qOTV;=Ss^RXOG{Xp5NU5dVPL#w#1osaCYsVmk!RZj<1hz-d*=m^)J;5Lg!aE$8Rpq2DfjHPkuSOJnf@uI1&%YI)czI z=NA`)U(at&e(vkLI!fdHI@xq2f7whr67&qQgPrwa2Rmi4g9%w~&;E9D@&5Ge^z!WH z*LT;y3~tY_K6HwcfXqADG$0R(wRDbdzPVt_6$I;*Ivy93VntfnZT#fd5kL8@KRNl& z3oz#!OZ^DX3i+>f&}wAQ|GJIs`QM8?pk$rc3A?8y|h6S$IG zBQFc7zYB|{E|-^Oofm}_Aea?O%D)PWNSq)hB|%YzsN@QxSIQiQgIy(KmkZfBN;{hN z_nL~}r*8gsHr9lAP{R57`E#XKt5tABKS(uI3Xk(<<&K7aUr&*@II2vEzvUz;32VRPB(-{|UNjxU#m5aG9k$Cq> z9Cnx8V`nkPL2v=J9ZVCW!R~H0s$(6P>HwoaT)!xO87TtOr21o5?rAZd>R#(vU!Kym z&}YV-^Gj&u7JDSYjuQ|sN;RBn*ZGy9pUV!`A>!xHHo6^@&L}{yw20wS&If+y^fx7a zXuH>qv|7OFD?EY%ryvW`UMb&S$|0+w>j1%ASWRi7t2kUF@tELYd*;O5t ztCV?JE4*&{0}iMUoW~M!8S%2a_7DqivY+hTs`uZ-&aF`0?%Uga`$hL{9ucqq;AJ|9 zi1F40YI`SM9vtU0Q4*K6{uxhBkcUh&#UK`ehZu!1(&Qp9}I(xYhp95``(aIr38 zH;af=Q8i+I)x5e?*Hk-W$0sa?*SkflDm@imj4PSP#{C0 zrI)ak&o_Wq|Ad6fQd2m6n007&Nanic@3Cttt>U|Zj;4Zwo^ zCX4{d5NxdgTPwiVYz440b!!ILngOJlYLSXpcY&D@QTTspovRl=BtD3*8YCaosBJ?c>*!N??IayOHwmX}xw?W}YHXpHAJQNqG z^Cg6^Rr~)Spx#q&09vvCcN*$(n2QG9``fmnT8UWyP5oHkTJyG-Z?o8b%WKr*^tB`5d^5OnL#bg*(ZU%TS4(ZK~Qv-v|45^=lT4( zqGh%9q%;n)&;~`dmbz$2Lw^_=_SXhc*_!VDzs9AS~!lYtp(>cZ8w)nvy8GP%N+f2} z+G{84bFl=Q?!kqX>NEr+#iffKr)3dS)|EZd9mAoIUg_Q$+^Uj@@8%?qsV`+q1I2xv z);bJ{Upwg;YmlDNd|3j+kp{97d$|_tBukZ4t|zsm_WJp=7VLj6=8`2MzCpG?w6|Fc zll)+b5NAJ*12)7#NttT`nHB4o_UlTaJsJ3?3hU1&CBD2+otftw5vHG$KF=jS*Bl=x znAbPJeXq$#=MOG$F_iDs(tsP$)wESy`xhGe4l!SqEIq|*Jr;_XNo`bloYav$BTv>- z3cR}(oNWRsO=);dqJVmsr)oOyo$5_p34biEl)QH;wRI&TV(K~crK1d#$)0%Qb4U$SY#bw z3cK=_Oj*3xWN)Sb@i84*1D8+#NqJq@eahs28jhu&`~vyknvH{Y?)<;i+}i(NyBr>^-|IfD{kABAYhfMDa#smMWD6XP036p%^G6q;ef?qG`;GQ z6PH~16h67HuhAIy4O!S*3m>5n4l_DuWBa-Jy!BvRRYN6t1Ai# zNf8LHuy#?+Hy@Jw!Gk2gA@=S_=tIhIJ)d%+5k>P$%WaMXS7pZFioTEP=7*N_c3nX+ z)j+BjHJ~^QGUPV@K7!7=&M5m;C$o8m1hT9>h;;#EJzB0}GNK=sK+NQ}Y)iDVxv{^{^o4oXiWJi9l{snSpoGw?yY7B>SlV&daUK1 z*F?Z;fAR}_GG0m05CtimkQjiQj7V*LCR0FpbJHi5J(D=f{=0-%BsTYQ%oKsFTpSaZ z^ahyQ5eaq$HQbpyEI{2VX+Gd~7$OQ5U7O^rw`|KVvecTxjI8$HmKf`YmY58t<*9yw#LnR8ziJ z^Nt&BSzEI8>+I=;DV=r}E|<3Sq&8i%zb*WHZwo}Mf}#H=1g@{_DU<)S6V9;^*qcmA zC{E=TKp!Lit<3+`JIKcWwOYOH{m(D*fJk?#1{)=#jgsNsgaEi?Hho$7Z)wk$3xF%D zt|I}i1fq_iReklhsY;E-VLdr*=@2}Zm?i}>FQj!Z^hPPk?6Mr2Z$U6yI&5X)+SBE) zjEM5>N@E+6tX_m3FK{AZ7I|i#>-GL`#H~lb#zmYJ`~MXSsJD35{9ny>ubYkkIp{PG zw)_7}JP`l?CKcuH>`Q9+^;!E`5&L@HL{PE%ECKhasrkUr`&8Y{1mWjFCN}3sh2y74 zxK3bxs=^lv(a#S`K3G3rX8o}Jl-QskJR+1oMX7vHf3f6|N4r4w_%Z?fMN?%P%3ngC zZBTz&>WG*>a4s16ln(KBz9taBYg;hcL4c0i8Hgai?ZdELT<>Sh~wfSS5nhKk*-oOg+rfT{J27rm@@U&vtV__7>k z#`DFo&7fMXmLR9|GZsu~$p%d7H~X3VR#c*Dqky4o@`d-&KWuc@KQj}&1QuBW>dZh| z50pl$whW}fZVx5UmkAzuQYq*PxcWO|3oa;ELxN>J-s^&8(!mL4lv4!oPCVsynwAX3m&FG zc1&_`(zKM+Uyh9%fm6Vd?9R9x%D<7`+>%|a*;>aRY6*faEpk{oAJ;|Ih4%=2A2EMi zQDD89L0~>S*m0WM8@29261594Q;!jZ8x;- zhW2%AXxshl54@jk{Jbaol%4-XB<7S05{eHjm`$H_1cEIq-OH>Pt_ zRsEf<<#Ad;C?*2au#bM75HV4O)GLh(!XrUq@eN4On)2TlB>%T@23KTC;RiOsg*9Sz9s%^oo9?iXh z9G-{u8meT@8d5Q5$@feTK*=ymZi*^S`8ZA zB%P9rQT6{+CnT8G`DEYZ`K>7f_5Z0>QT2|Hs3^bRa+uM)p1$5EVZVNDxJa*Ymo6z;EV#;QrPysDkN_XGn((|w=mzpO9A+O1?NYuf6l&ET{ zTt}~y{4=uX9a%U&?eM;2LaMXK`V`-h^H98tFByxfPJ6o!oV41K(i?TAtz6@1Emf!J zSBAn|PH!*m`VVJURX!b73yRjK%+Hy_N@tUvr*%FZo(#@6b=6U-ugP&+H5~EHp&X9* zbD_LJRk2k6WBw`S@eF4Eo0&f*kG~3hh5py+9c1G_8{N(}|Idp&px#By_w8U0VX!x% z0_Nw?m(>Z2CiPM!v82K}T4PDo;*idg!mA=Vi>f_1fU|Ivo+}_g$$?26z*WBSZ^8fn ziuowP8)>R-!!-XW3eUHpDwsvWQzrvC!+wF(=FPZZ(+k&=7(HVynv#|avVP>d-CH55 z<_}kkeE<>8v6nwZCYFqC)4x-6EP7ivL9yFidH9JjXP^!+>a?H1}1K z@>j5dh-o-ZD_Ks_Y}ViPQNSPHhd7Hw>g6glQiWF|lC!SI(Th`UO z%fDO9>PuREj>Di*`9G#CreXnN;Pc-9-)=Xv`9BXj&29Yei#$sH*MkjXzY)pb1^9(! zeixM$(tft+T5^86(t09ynmijjPSJ(b>482p$hsh{eNd8uk~uF)xA3~W-s&?3?oEh4 z3yN<0xN>>WH=!12gw+z->H}MS;6?QTFbwCGg)&b&*ITL$N>+$sLZ(qh3P~TNqzhzj zX^`J8*gc8O#0RM>#Q+q@G*6JK3*lZ&qvSG2r%~sd+ukKZ?iaZBqxvi{(f>(Lsr)zh zUMl~4r_pWY^S^K7zhC4j^#3^tFr9A338*N4@{4)_ovd;LI$7Tj2#S_C*L*n1`O_dY z2XbB(qNctUhXWDAslZ@}9vD zDDmofx+{>CZikEoYxn>qU>@iO^bPy*z(W5fB?|~2L2oBCRNoh`DYd` zpFx+5SgwDiORXi1E5bjQ(*_`dXJW!)`g?Jv?N6T)=l2sujB6HTx5h54P`edEN+f%yrH2_!?ETb z_SctWB383slBI3C+_%g9g_k=E$Tbk0JL@+0w+xQ&UEG1!1D>W8JNrdy_u>6F-oGa}P? zZf2yvm(Gxa_VaV4pwLSAx!IEja>Zg{DVBkyGPA5b&a!lFwE5gK+$2Y;)J%}{&8k0R zEXX}xn4Hro2R9r<6WmG-Nl4taQT^%q>O`%8-Q2fib>zR@oRojM7?gc_e`;$b!#ct= zK(EX&UNV6&0zW~dxF;;ySAXKWRR`8?YTQ15P82<-y;6nE&e$Ri?2BaBcA5M(vv!6q z&zw=aNGsYDz1F{qcKu_z2*)H8*JMezLMHT54ydJSiiEzCX*f z;q5s~*G(|S2?SJJrZ93|s*H$ksedDTu}V6^sMw@a!m5|BT!*ikNibntKqnMj`!hAU zOA4zJI;Yt3Ihpy9vJ0kXr8=2_QZ+Qh-W>^jGl$*sb?4jC`D>@CChwBjs&~`!*=l)r zf%LF+?k!{bMUzMh0LxmGq6SC_D(72L@t)A}Bwe+M>gsJajOueLNy01gTj{o*56M%R z?vk0Hf2Pw)7EFzT__-pioFC4gUs^leKF|G>*?&0k;wPkhNIk3kf7_i-#{Sc5w72>H zUgQD&bpV6C2@e1@ZN97zfS$Tby#SIj>-YgArNtuBEy}<0-;2{bB;QwMbkHRqoW#M< zebb?23NG9{(SMDq?;`x$jHH^;H&r-i0YI6mM`A%o)WgPzlphH4B1))A_Yp@tJo=Vs*XV|8R2wX1d8-d*#qeimv03t5C0~X(g3h2k^s= zHNTY4gC_pg5qEp?`C=!ZX+M8Sx1TZ3FT+;>7v?tfqVJK(qGWG#bo#Fik&#Y8w5R^e zQbV2OWipIH$vO#Tm$ElEsO?Z?S5@VrmN!K#LB!VZqpmv%?#G^QX`vF1JRD#jjNALm*^mU5n z=lPX$47mRTGVc*sUH6mU=U2#Qgo7((Oo9bsAslW;%s0p2&RjD|N36JJCVvV&Hz-q| ztY0x7={YpSa!IpL>&p5HmsdK0J|1!sDqWh2UDI}MB7W(NV8-aJrS8nEHdwmj?GVCU zZ%Trj#UME+-7Q#|%e+V;=GUFFYxm8fx|_xI*9i$zh*A#WdwSd==I@~qi($h7=fd-= zJ;a$|<%x$dzb8SEp73%uxojkxBX22+D_Dv_ zZXj5Mj)OoCa1mn2#ms1ItDG_fi;jb!>hR~Z@ns3_1$uT8KI$$<0qOB9tQA%on3&&& zIYu*=uf!hX+})Ia)`9=Xw1-w^OQ$|`1MJ<*hg4idYf5}joc)8I6BXP$(Om8bo;!_v*P?mM`k|l7-)t6SL>jeJ^wlA zHhbIipO<)2=RbP1H+T+I9@+b%4q>UeyuvXoTXsDMv0Sa0U~lD*8+J$1DIDQSIrlWm zkX^{4Hhs)Pj;1V`pDP7S))b~2{Dv%IW^#Wuma(m+=|8|z>GS7`IEr|Z zcgZ2dH?f5$=x(>~?e_f@=HM+_v4h9w;!QiluDIXt3m6g0j!`p)BprL0Y#e~U!*3ib z-s-g+F@FFjCWUKy=|S`Q$IVYU&R)Nji23UdLgD<_G(OKiGjbdt8TuFFp7IG&3n$M2 z4p9a>*H6bz)-^e*nXyYa>ly?2pvk+E18=lJdn6SK5|6M)u9*L{L;8o#?)7nvGN>)v zo|2*d0-Kb4avK#|cdqJJX4^t5w+Fj*!D`;b`9Tk@f0C$k*UyvdC~k}@`t*avBB<-` z`~M*)9Oe3da%;>}4FD_j|8}pH&Hs1MJlNj<^dgVa@xhUJildEK{?*L+3a$@$+C)kK|X)3#FDqsX~}J(sjqG*mb&x_!jp@*hXRygI%V{P(-W0F11ReL z&LqHMkx&$bF4fEx?C^f|E$p8^SCo9I^V7d&e!=Cd*%EHI&!`y6|f5v1?xrmFe8_CV{6jS>a zPQo4Gm?!B6KSqVzN&PME;(rZRJ=;F3(_P2$f?`@&a`qoYP!B46D2ZHM$ z#1Wsc=k@<>cN#hWpKfn!|9g=K1Ufa?{Qqa~-@oF&HX&XCxhil7j8xDcZs)y4KL8kRqp-w<$0sYu1dEhS(TATw1E3;4;Oa35^$ z?6SWK(QPT&9;Wx<1AYcTg7Fv@7qHJkDQ;j(%Nmb5VO1A3@ zQg;+(*(nj}-cjGg`_mRjUFIVCQLPB`u^o8U#L`M2=a{KX*UYx10`P-Awer6h7@lhI`jjUUcW%&%Z?Pa^UQ1EeMM zpJWM1!Zi64R^{_dZeWq|Yn%HAAVB@TF>FbONti`E4Wym`WMzb6p5vbuh{F_R(5T5% zZN5cWLQp}~Hea^SIKi}(aIg5kV^}1-DW_yK#srPD5-cU9)86Gchs8S#3r{qQl_Wba z5Ec3SO%!m9;raU`U)8*TDGK8^$xRVfVQ?R&mz2^}92b+VDFf?WL|7FK3Z5NAUL>Qi zczBn`A%T~q2nifKu(29vm=fqN!7vUgtGtC|h+;mt_X&xH=+0WrDH^*`2B3`8rl- z0MWYWc)v+x%3aj-e^sx`uq?jmpwgzAyayHL;i}lm;mr9`b)kUD1eq^cszmNJ%wQ23 zxOrl%#AaG0EUW)@GP|uVtt=7zscKoFJ zq{mDe9aCx4N@!f|D=%k*CeBg-T!^vOsV(yQIiVL)4brD{X}%4UjKGX?C-6s-#pvF{ zeEc$4^7)8rPe;NF&xaCDvOx+@9j>4W=#B{9mOW%Bh8p$)`G$#CHf+u|3ni`Gq*Gfe z7dCvQbR3jrCYWL8TrUBoVp1{FFi$+^XK|)()3F(xrTX}%nNzGr#`0zWB*_TkC`@5| z6EtE#_vphsr;y#xK2YuPxMPv6@vJxqFg=Xwc26M@)-r9iYQ&WVT&jDz&N$s}T1urJ zxKg8?4z$EKbd)-eo;Wl1m91FHV{Jn#$tWB^d7SJO(yv`ac+Db)v8u13spgBBXuWGdWSps;fHJv7EJ5`ixwxZ-%P^-hYk* z9sgbdbA+k*^kBRu;Xoe&W3nEY@GIx{9G$oMdYI}cc9N4=Vb^T--FA*MpY&L^G{;t+ z%kmv#pXpcir>~}Z{nH-5`VS!sl%`_1i!h51(|j17jz?g}zUd|Ds%fu$lIZHJ<6T^L z((BRwf0Co#He(^rb`_Tqmmw9?VHLdE1utooll zUE8;nIRRIyT>GXn)_QH0LPP<1D3WQ?P{`?Etx^TDtvd#gVbOVo{4O#t4YaUROQ{_M zR2>L}ZehuZ?Eq*Jd0-0rN{nfeN~8*r-$gw3Gr7|%C`AQ&)f>Mi`gorvA zla7`;^CYA!v8&JKlJq@xLiV*ZL~_#FmP369vFifhHT3Z+ejA{v4p}xmDL?2hd7#&~ zVea8-pO|jwg`oyldMT`Y;x5Nsy8vWS$)%>*WU((xi(ym1?5A-!KUG&1ZVdwE3W>J5 z`Yn72^pi!?t{QYY`eZe9Q;iq_DaJ4`=%thN0IZgpQ{^0yX9tV z(vl$2EvZy4GA(=*eQu!;R6g}?p%DjxceMLS^mM9i>;@r%Nx^5FMjLig;&HNQTJO3i zPEP^v>42t6msIXPS|?HrO?(R&p*vVS%!q9XrYVJ~i`a}!s$6Aq;?G8|%{n`z&l#Na zz8Fl=7jgY!?)ZLLI&J>tpIZOV9HDe}_s_=oAL~1I{NLTZy`}%>LY^-z{6G0LSjhb^ z-js9y3wQYkE*aF_|B_SoA)n_3Fb%CI@diETBk-sfz<3}1l?7ENgJF2y7+)UIqlmXt z14eXZT4DtYoen3 zuIu#}vK&DH(2w(ngyeXCZ7rf)CF5L$FRd6w;}Og_#nv`@8#`+e$}$+yznO5HWP`Q; zze22QBs=ONk%Z1TEq5a-3UrOYilFh}06x5AY5Dm1xP5#8AIt*;R&KgOgr$=BQ$Mx( zAC87F9;Yz=Wu`zNP5R%q6aR62XJ>b*|1IKaqyMRC@I3?qVaWWo!+~7N@mK~1Sq29A zegcE6y#TN5X@|#{In-9fnD^YvV(XjFdQsWFmL*{x`0MrL_ZkEJqp8d#ZWZqC%GFP# z{+*68s=7^^5^fcB$`T7u=&haO@iqHPQ)2lMBEERId8M+yjQz5V{qpD$V#R!PCYi=z zMG+6rx^mNL=Ej{yq zMZ#B?bQEl@7&Blo?kz7TmK6=jr4NMQ)C0j8TkgDk;5x+i^zS_};ccfr(QvzKqE4SQ zO@{-LDw4OfE$NFYVMP$WKD&9O1Vw=<(^1dvU{NG7l@28o{k3%y&Kv?m*=G8+RiFmq zTxH2#c`78^$35K}4HXb!3egZD&kHnyWC+K&dzQl@q*K=~M^y3RG6?7qIalPgF7rl|JK~CUA=h8#0;Vv;uy?AyHVA^N?nIq6c=+Q9 zKy%C}&_*y^tyq?G2?YL_R9b+1_%C$B27Dicd2Z#~qEnLvxaarh_6;vx!8hbbU65xf zpa`NQamsZV#VouuKSiCFndU}L9ugJ1g)0K=Px@i~v0Bu5LZ*08f7OmkS^ zo`T7$%iU*!EI6GiRMZZsz0(|GMXgatqTw4Sa(;_xB?&H{y~IgqcoE3=I) zope<}HTPZu!IYo!kuHJ(Z*aEHXB7r2EMryD5c zz(C?j6a)iRX@H~(6Y02}a zpkoqys8}{X1wE<4ruRjVm)7yW7P=U-#>e87PNbiGM1D~1qe=e9u((SiIMW$Gll;HE zwc*JB8%zJMg**-NzZm{UJp(Y?m{9&VD}Q(LzlmNO`QNPZMDo99NL=~fQ)uC5111hn zA^w{fREhtW1{=5}@<;5p|9;{8*e zA&6yDb&jB6-guS(mnR5QJQec)9ZX??WCmCf9Ow;-*z%uL3uu!6_tvfaubZ1&n;T2{ ze-RIJ+ZNure3Vl$%HW931n$kvN*#r13dk_QfT%E9)iM%OANVxtdErmQ*qDGO3hsle zAq4af7IznZCIIyT8A8C7jb~-OQof>9n6W|>^`g`(B?DGL$U;q3^o^0#(*=d5%9?N| zapWRdZAGwpmUBZ!=NTKJXAO#6{YdEdA?A_UYwj6BO@vi}`cOud3K-K`rjq z9GW(Ja>sH1Fm{^7_@;|Llgsemi%0kb5`8P*@YQy=fTon^e=3jhyg+wJ?75a8KUncM z4M*$(Qs_x20;ZOKTi)9}-M}wHxApif)~j{4|DHBu2sW!3Ua8I2HBMnK$Jp{bIlc4C6nFgvi?gyn+$p^JW~~LgK(PO7?gm zo7UcrnicZ`_LI-*em?t4bk76KABDFPcoZJNf=B@TFP(NK(79E`&$jMx3Y)dvHbt-_pgus!WYG&<)*n@vfvY3q}Z$=yARkkz|4DN@pfE?SffK-SH35+`e zz+o1HF@_)^AjAw(38Ie*W1awlP>O@PO=zF_GOBcEmc&t8=;21;m&MZF3IHMEDRu^z^s4nV}(}@-{|BIF#OV3;- zibzRS43dbne4)}Fu%HNfiCCRLs)L5^Vl64oZY294&M@RzkA|P;bc84Sh^0iY9E0C@@ShewAJP&|2`_-<`( z*B&=A;}FuyOWgxO#gZxKWAmEwDV?IBo;{nFv)lw*M?05SS!41YbFpfB(O>YabNRSW zgZ<|YrQ;F2%)%TG5t;G;xas_NeRJJD|J~VM`hPCuVLCS-Wh_Sd5e|U;4Lq%F$d6OK zrKq}28@o|;?ItTyMa^k#N>#)0{T>7RF`k#b;k}p3{Rjua9CIL12XB^V!ArZxli5AE z1@}rAMN7s7Oy?0&eCCzzY8% zvQnXtZyy({~{j7 z+%F&*7a0a`&^^S2$*aF5gCYH$qk>=%Vw?;zzB&mrZakFSk*+%WGDq>W8-{)n3d3kz zB;?_UGxDB34=1)5J?j2&j^d`Bp?$~Zx=DbQTta4iofB=C42A(%2SJMN1F+7`BZd+q z;&I^e4x2hPG4EU3*M<3YEjyUKaOpYe16eJ>A~ks2>-EetGrFaSVk%i~SI>sdArXFH zh(V~X43=lV?FDnrp))tZKy^cdry#;ll|cOos=FEtn@&c009RepH8`D` zIvp}p_CLXD2fP^**`2&dMq%;b?Tx8w^Kx@SxI*Q$##z8Muh^TjkWS$;oQWbn=SVgt z6lz()H-SJI@U|dVh|9cmap?8<$kJu0UzpYk(4QR-sggdB$~|V|7zlM{u=B~_3 zbQ6X6;SMVxewu6}E;mIh%aiMy23sjQqp%-juMf`rmv8IMo~0pdEWn&#zAHj@-WM9q1CYbK?}K0QeR>N=`Pj$+R= zHNV%$IC5 zgUNwbcNQuOV!iEI#vlJ2QL_~AgpGZu^ zI`4WEQBk(gASvQ9gxO@4^?IwgEi@|YXq_>)W`VD`%|EIDSv^T~ihUn~q>1a#B}`V! zf1~ggo@C^#I7Mjc)c@>h^8eY~*mdGRY%cwO7V3C%5O3HL;tr460#o;&PBOyQ z*KaT#F(z>X0Zhn{ofngr^nbhC02QF0qLA!v_f$=>&X|t}9UQ{tm_K2Gj*L05D(@Gb^Pn}sdH`0%m{AVKT}V4+ zdC?8b`rwuXUqOoQVZkaGa-%F+9#A>wmRh-`_v!cbIQ&0NZq}|zbZrE=p2_{Ek^k@7 z`F}U|wlJQKD-UVZ|8>-bYqx@^~i?;dXf#+?lxVt7q{vSk}&d69O_^g2*?D12ek7vNY z)XeuE9dBvO_^>|-w(5m@akgy!5=I3iS29|ZW9C-3WP9>XH~-7Hrfl1T+pm%jm8h`J z55qeMLIP44Vgi_%zYjieOkV02qP0a;=>y&3vbJYatk?)^XjsMpsHDJZW$jK-HT9O( znZM5Cm;b34wRX);$Alq>BDHsHN@T_Oh;08 zrh@H}uKxa3e(cFYZrvl4G1s}^e{J>t(c2Cz8L)T6g!w}&)u9qzMoGp~PsZ@GuW&$$ zF=R6t_fRod8ztE_ZTb4n)XK{h&?Q1W#&C2;0gm#pfMx^w5OnOmm}vmr&DKg2n0#jR6F1ZRyR4Eg)RsyS zP!yp;0v8$jXq<7E+8%h94~j5`;HntI)5A+}d35;Z7@S=OZTeDiz-!)!nh$=gXp|;^ zAe8o6VfS zLKcXfO$8t=Cfb!@VntPBe5AovZRZ8%Ie|6qC%8HD01@YoEI`pXi@@%dh*fks?lYaP z8%RU1-|EY8l(~mz!L!U?tUKXl6XihG^B>IiVFto9ABNd@1dAl%Q#T4R)ZH^q2y;x4Hjlq`|JGyI!D;W9 zNszEm(BS!9Sqt|>KNQ+NlDSjih^2(!25QbQDZWxT2{Df^aPv@_v3V4`3Fi#^U9mj) z!q-@<_$?*$8K?YH?_|qonx|I&Lu3*1-^SkFh9m!NE%pC}JZ(4&od%|M-mt|EVaOs; z_9m$mjWI!^2`lvxA``cC9~N1X4X~=_@a_hR$o`d_pPitn#QbdC@IpqC>2=#@xJ_e{ zF13yELbEp}=~>$tFEo2&&GJDnzR@D>vM5$`CIs!B9OPBDEFbWT zZ1hKq)usXz-kgUR+b8LHi19rt%m~h7uKtuV?>;lVnyHTp1+uGM40(mdHz@?c^8gS8 zAdbSEUo%QF0*f4_+$Sa!x!hR(7kLiH-XrGQE}GVJ)?pG~jq+4SEJv6O3Wz_Y`)g~@ z@&Bg6`E$I#v%R&s#xQ0*aYBvjFXE7dHz76@zzkuWPS(~xF-}J)h6izi!-{UfiR^mx-M-avi^8q@r>5z>@Pyw#06}qYZ5aAD6qtlT z>9M%EWyMF+PQHz)jZg{;&nxE!nA3n2r^`hAfKCPqr(2?LcR(wHYJ7B7C`-U9wj2W# zU=jyPWmnT)wa>2_1ZD_1`rCqj}n0Ae7a@r-U32KzA@t0}}a?f@mzV$E` zuACzgA`DN6CiN(&Ulp!*zm-3Ha&#g2Kwb%q`mX?ZiA&5=N^ zxIj#qKuw;xc8)bXY3J5nfIpzRQ#%?Hx+gMU>xhiQ6s%J49eL-H#c#|I5h0fI2kQ!y zo*0b_4T1!fozn~1%dh}9~pu)mrs(KX5! zqNpbqZF5zl+OSm>zK}%~`iEr!o}SZH(omnu8XcP{X;jpy*@~VGQp#=i=C%&8Y`IMd3DSyZBEfAyeg7jaRwOPJ`|Urm&K zZUGaFD>m&hD{OzGBgcN|f~L@tm}=yXCwa)>J}`4P-h?=bx>Vp-!%d-<$&OeXoK}KG z^7pcdn(+vr!Tz(pxn&(#S+faRD zsmo-!eISrsa+0=B_4>aFquX)5c8&A!K7+*!44~=!e`D9V|GU1kjQ_BZr-dFO#-GoJ zIfghiPkcFe`;K<^Imkza839bhgQk@3{6 z|6&woXKctW2`b>)b@=DFm?8>z!}{Oa-P^PMe|Gnl`rksH7WSWXj0uzftod-n3`0FO zDdrydx-yMvEbGN~T2yt#r}br=@)F332TyK*m-?+19=a=!OJ$OB`kRrVD-UZGF86*Q z(N!w$?=Ie$#q|&Rh(k=0jBP#VA$Ra9>)0Q)dLrR%S=P#YD|aP72&)Y14najYfQM0p z#zr&r^CH)8R;W_5Z#sc{fpn`q0Q2H2vRlXv=f+!rpGzu~7 zh$OcvHE&G}5v>p2;L0;}poF&o>{ZUux#4d>e4HLQ6HH?!GBymmyv73X_3o1_M)xcf z-r94_oz;BP&mB)6jaFCr+nhFBrZf!Jf{t~kXDx678fjLxcNcHC5l&yE-@ZMw`o_!H z9sc(1S;-3aRZQ*DmdD1T^fqQDy$EF)WVcbd4-vNwW*P*=o&~XQ;ln;SIy*f*KDs(N zJH5WVx;Qy~&CZB*%C!V^d3APi`1<(z@aX95-RV^c=6CooA&B3P|D&va8R9E+3$qDf zTpnItU!DDad^%qVb|U#tY%G&XfDQ8B=I*9-{1o!qYsv~9nWu8o@Yb&rUKrvBHg-nH z6CX%NY6HL}d<8n5x)qzcw|W8Z5-nPczhO-fFWBy=eQgKT;~2;;&KqMY?VkqCYKBxA zBBmTsS-s7G8m9OvqDp{M3};Q%7NaR^&vh^>fqrQUrK2=P-BVpPVzkIVY6BP;1I|BN z0~9y|%ZuH@hky;3<4ex)`3eY9dejrzq$b<{5gMeE8-SYj|Gf?S{BLu8V`=|g$TNri zpG}IT0f^IK1`E*O79MAJ6?cSGG~646QmGO08VSlqFtb8)N@xeZqILIrmS(8$-3)az zj&9+s<|o0*IjqIoJqFz9p;I66AMyuAMX_&=^sUOfYV z7dw=2CWCT$d~|Vq#g0FgZa3fOQ!W3Ay=LuNIDkE#|M&Km9sg&2eR=<5G0!COUuh4Y zhpflp?d#zYdrJ5D0Tx1O zl^?zOE{AFD1^5+`Xb997CR*$9izd@>t}*4HmNSB-syCe8m)lFdd&PHkp3eh zBZ+KJe&rwd;Bz77DiKqlr(b}tKhS=R&8Z##C&mVF{F%Ta3)3U9zMJ-gCjP&-Zsq^j z+}Yk(=Kom8WAgugfkptD!;2TTEA*_E^<834X;vrWpWnVcvx%|)*JG$%!`@>uRIlEo zg{G`fM@p_~>Lbk>Ns~^ZW}~B&`~Yf+5|4DnWcN{bf=T%QB?+@QOi?zW3s3|9-`QSw z{C{@0m;8Sr&oulRt9dZ@U;rygmXP?y6K8cLN0^*s3Ay~g?C>Z}u=lgvtQv|PmWS~b zCF#mM8p7xnk4G%7nig62izig2%hf@^ds7{`vZhW$AWM%+kPEEGVfBozSjd>&JZKH3 z3bnNt;M`ARGt8&86LX(iDmmjQOd%zJfo8?H9e@aBQAjEatkPkXacYk)jt{Sn!SVmQ zIzGKTIXeX>zk<`VD{%b(PA;!5f!6xJ2epS?UgTN4=>$Ik;-ck$4<;*rO;CQZMJVnXV7kg`qx$s>lG>xFoud(|Gw-=24fXxzXq>W-Eb4En^b{W zgyJL{@EY)_ao*dt=2FHr+4?Lz~0 z4v1N?{L3BmR6H&8znKF7)$4y7yE~gs{I|WGW&WRqJni+rSpop96!6nHDPa6NeBfC_ z*ajWQZ88vv9P}Mq@B!(|XF%}ymf4md%h9XS%S?+e6zUO%p5u=|-QjAJ^;>E`zb9E7 zf@G8Z7HH8@-7Z8wPNB|io7$g{kqG^U*Lg*`&i!{kVG71L}$XK1cnivOF z%{0u_6ZnI|?<4K<4b&RH851x-gb_aAy*%qzbgo7QUt!Z!6x65M#!di&ja_4kNs?09 z{1#$=YZl15EVa%3MH$OLT_&T~y8JJcWFUA60;k2=A+9hExMm3u43isJWFdi;MZ%t1 zu0cW7oNPsXQ1!|Ir@&#DwHfiU)z%BJy7NhfNti{@P9&1_K}x`?-mWSNzJeqp9k4N3 zuT_27>jBG&!B$WP*7dH(%vZIh?K$*(gkpQd`3!rDVyLeX-LMxFkV&ehS=u*ie5;2Y z4rz_Fm^R{s#ULaFGtJTwZQ2;kftJit@1y0_LvGMgW*-YQ!;op;Qr3+2WMx{C*4~t4 zrC_EZt7y~4Xbxl*LWWC$r16r?S>XRDe|~{q>Zj*8!^o zs_G5SH29kRSGqAxDtkD)75wYipgZ`e?&8Vs!**a=rvRg$+BTpn><#FK=ML1oQ zdr_6HEkOv4yLL5HF&^n`X}RzO`QZ8{#87#Bw-vQ)*Pu$?Q!yEQo&I0}og2Hc;5J57 zZ0ot|W!p_ot6sJ|;Y`rrS(9SADQ>6OE!~7#`$M&{zc>(Po+uKKYcQ!-on1^OlhSR1 zskTZKCUos!!4&rC{JL_9b?BiCIt*frODH!HfuCFr99Fm$DsD3-i`8vFDcScV{*g(i(% zf4UBOG{UKMsUOy#p!)ouXWLsq{^{HuDP007>D1OV|IrdZ&v6fKUD=L1c zb56AK{>gngylXGOd+zZ8!8tFcJ0sM`sp4>b>FO%(!*mQ6iX(Ph${Zms{*bNn!k`%o zEr*?)6jSD~(|p;q;ZeH5)!D1Feef%r+%~tw@_|U0X6z>b8jYW#?WM{U{Tm z21aNyI)3`_W_0UwVt08KQty43jviPPZGgh^&Pua7IDZ8*qJI87Jy-nOHrY@Rn>eeySA63e$ewyXKN6-JbvA1o< z|5)GIUB>@j$kQzUc{t;wGM?W zJfxJcrm=6UhHG$aL*7YtsT%$-Znxv9^M1;wf&XuAZ`=8w);IT-{C^=&3;r+WflBxn z6_5mKqOGvN$Bg;&Uo6@wv(oLeE7Q+pAUr2C8^7tsYW3`FZ+bA=z`WLDC1%s1SSj+F zVf=plAD;S@K{wY`8QDA#WRkZ^FkkHC=o1Y>#b#^|g?psC$`0^-#OfH|?BVcivW@3a z{tTCA7j_A|Ey+4LMPi0`=_0_a#40pMf|(XT5ct4=ee|V#wt^H_OgPU$t%q8_!-tOV zy&Q1wt}z*@euob}GFc7Hg-X?O3OlEE7DdG*pPEKz>H5$m|W=Ye*%3 z5ia=GeOmGVDf9lxr;-1!JNn=D`reZNFXEYi|BG2Ly#iQ~!%A15{5i7bu0@HiOr=I? zvVR4(ldDPsA3wY)#a#~5s}LqOX?xe*w<~ zOp`Ny=?^ry^xxnuRGIHx@?0$$oWonsB?IJB6o@$ry5JPaP<|x>afK=LuR`e#)?eOu_5WWaf>U61p=AWko~J;#4eYv zPJxJ&9$h4?wo2cRO7}m(M5G4@2kkn5=!qJiW0k1U=Mo~OrG{MZCl{Yu?f>pNn@AUI z)c~PxJbh!*0z7Jih|~GvGICry&-Ig-Y|~L1~%iSI_h| z*j=;s0N#W*FvS*#l)Y>Z$^_=@2%~n{I`&&1^=&EjFVmj^h6N! z1P-+H&P&CPTn$tU9hkA`If>>1X>SuB0nA8w)>xwv>t{ofpDA!N;wiz*0axE;LWQr~ zY|iNJeF6KhfLY{^T`r60B6P;1z+;&9gPQoic;=Xb`oJcm5sZ^*@;H=8Dj2hpUIChf-V>#P@F6`{dg3w8VHVFoO#xw6S_&`= zprk~2-uFqD&yV%^dKAtg^l4Ay`Omf!|7&w^dH%nUM+7+);|@$dLLX3q4+IT-?D{g0BA}xFRN?Oz6$J6ij`!V zty_fkz2T_H+s8Qw#IdQDD-n~m_cp8&D`~YBhdpXH8-;n`v|Hl)SPbw?hyN}3|JM4Reg40(vAg8|i+C7=zkp<1 zWEjxF=BblsWBz>d^e8xwL9J#B`1b9YD970|{e$vl0zVVQriWocdiqYmii%ikjC*o+ z#IhI?1PYkNES3#p@dCGJqKEYy-snhsSN2w{-^_0*53X2C0sKsg@R0sCIWl*t3RK1+10vgY-V48H35?q{<# ztlS4g=emNiH=t6zk1RR&5AZbcf0*6PD*iX||J}VE%l~6zcW-wo|1ab*`2TTsHy^eS zv%8;y<+FY~lHC6itlZfSE-<@maS?I|)12)`8k(=hIXoJ|=yr;@(ICKRT+l5cU>y!b z-un(`^jSE9+~NAx$Kw5lr8{53&@nWw)mA}BGGS(ZMq9j7#UF_1>EYNM?K zN?}`F@$I%|DGLVMZ|_Pf+5r9P3wyypFw)fyqT=41(1ZW?*&Y4txc-@Bw#t z(o8d1sQL=Nf__q9(&4Ch@>e=mMn0(xDoRJPgZpEFWMwe*2YV@Q(7}N zn_h1d4u@uSrsBbK%%FV?9799}8GZP;7|(#tEqrLeM!md+51hA2B(!B`6PeNMKndWS zhAWmQqfrBX&ciG|6*FeFdg~mMB<+=@?fZ-F(}um*RnNF1`((tV=S zsTfrF$>@1NiZKklqq~w2IAWw(;j|}3GP)f1`^jez$o29Sr08C|Txo%b#dgchV&eMLTk`8pktckrs0`$pkZ_LP;T=Lt^k8Gqz=3oe98d6pmmTg&4}7 zXeipvdsdm~X&;TV*v@xjmT{z#*g1>xj`MBx^0k^jU>CwFpxMc|8v7)NgTtQtc+mc^ z0ZFo|u~Ge=(;x}%qNl}pj)OX;!3APk5BK`xG!<)FEP)C%91d8DcNx!lIH8f&lo86E zs}v<9Ecs&J-tO2)-u2{n{^L9(Ll5riG_-LeaKU|a^G_P2Pz5ySuTx|GSXK(f{da&&>!xf&DCo z0N$558v`o!GhI{A)dX#?7C3oq2<)}x%2>uTmrGg!?^qvnBpN&#tF$!=NApv(l{Jrg z=66JNLXtbk`_Y~!)>^=FL(jZHWH@<8#NbgamJS>ne-l~lkXMc+E#_4e>A3lHxv5kq zMnz4V^ET?u%`4`gRCL(6K#g|vsJc;;X4I>$DFrClpG++(l_JI@Y{h5-wMZkT6>82X z!R>X9G0kd>_ru^QUPVZ>=U1UhM>lz?OozUXOmAr=_06!;~1Pa;4Ub(7Mjg{H2(LIH!*}O*0^M-qRT-u^r zo0W8CG+%wHYA7^Cf}M-9NiD5(rGBO1<#)Mx0=JhI^8cFzlSlRc*xOonMpQmJ!K@F3zFmPibUyeg2U0afou`IyknaZHjlArAov z21S?;lL!YOxJzP)e8$5l%6aU=)qmQ;pd#Sa ze`--K?Ui};pE{IxZx1hjuLQ)uR>N}otti54Y7L#gJ9$;v4*NJwGpu4)XM@Uu?Qs;V zYP!<_tMC&YYEn}OtXm9}HD1>vcd`j)uI5Ml>*ebLjdLnH=OL#15S@8!3(8Tfv-p+s z*DeKJKrN)XqV$5$>GbE~mk z6G|Iqt2J6ct|8#wFvPFV-%X`t4D#{SLrxhf$B8zzHps_8r(>IHb<7Q~2LEov=B+*P z70#WSZ@n}bCBzCs=vej|YP)`X3?c5k;dB*eR00*1FO&#LQ5 zW&};w$mM(Aj#M=@e?&6LCX9*MYH5m%_|?V9`{N6`A0Pg5^5*2~N-FL z7!)uhu;{#G?+VBmDS+9XEnBleMuoOZl+r@47-xt09fk!P;OZibKhrXFUO-XEzq7O= z60ItDCWkUPharW-~dUh~g2%asRPBMhZua|U66)=pM z=lR(Mh!Mn0EEaR`B}gFwc(+t3F%@TTGjtEgFeIRlB?zVvm@^L*=0p+=UC^eJ6ygU= z;K-e8rzoRErXaxO?)Am-;j8Pj(>MQdeQ|asw&h@>ddWEkN)EL9lt#c(jn%Ax?p+1; zw#w>OAy!nF-I&#{Ghe&g_wqE^|B_KSfR`|Z5kXUg{$)?Y`OoIw=C&RGXK!bD|92se zVgIAL2^(-Nkjs2bfyOlYDeQq(kLK+c#=xKPTOG<=R~j^Uv&;d6mDCYn{zJN`YoKaw z917BbeVMmT?v%Dj+u0s_+fZE*_fr~bd4m+J9P)9Ro})C09;(dEYN&&b!`FH< z@6CRQ(5=q&@&aBGs(J)D!sL>K1uH$(uD7HOUzcgSFIw-Mf}K_ zLuhG5(B^UJ)m^UUj<|LTzJe^tVwe%IX?IijD_4$`Sccy9H(d`YjMvcTJojjwv~Ma@ zSf77rbI0I?_6vChA$(#j0 znehr1cS!_K!x4O`{wgIe*JpwiFm>=8#oWRJJs17uv4*UfU?8%z_If?br?+om&=Vz1 z>4n21Ls&3qAy7)L7L3OakA%el62ly&?UHLRz+o0M4+(alC%WW>_z|*2EofcfrSwr* z{=3dq5`%sfC$=6D4%*=qBxN#GQY69Zt`8NsMAz~n87cFs)iVq6b5V4DXjfkyFLBU8 zo05WdH&Ss|E$+$7=V&L5gm|wAT;Q^d^jMU-4pU3zevK{L$SM zMfEhXyh*cTUXrS^2co}zs#(X@lBx1jW@7+E(sN@>SSi_(fKZZUoae9rPP5z^q)~E+ zFe$;wzZkflTb(fmt7JA#)5+J`1U^sZdHdQ6a5XNN9}vai6q0*X+ya!n1PK8VbN;~! zJrIrw8igdGitz(;`5~fqLRgMVfcpK?y`z95bO-7BAN9Z`Bt*8ufWgmsnnVdnneQ^~ zIJi&J)TqUJbHz57uz&y)S|AEB#N07N0Za52CAgTWA0HNf~%u* zhWfi#=bZDfVPyF_>3qq?qZ?TCM3}@Oq~$ddFcfc~Y>8udm|{fRha4+xcUAT;WT!5S zwhYec*%b);eJX8hA5Rjm4=hza#s%GB zP`@uE_ovpJevYS6|L2?X`&rUJHTi#RZSC6mpLchc`JWc@$ox;zf9;nLC(-=UKuPu4 zo<-B#o?yIxBBkAJwY7%cpyexH!7L$3m?nQhD;O<5*9o!I-8>%d^z*S$Pi)nP0e_7E zx-;w+Ff%WQ2~8~HT39KpTE5OymCIq&)BF^>Msn$szA5QSt;sPB=nj3hVrBP96VG+K zfuk6CbOhZwS2~-NbplZ%=z!G~XSkifTg~d7BGw-K&Vr-ebPL%ng?L`gO(dpFUoQc`?s?)v>d&HF#PfioTe zG~NH++;Z&y+e`n?#XN@n|C|l>ytaG_>*p~3i>}Pu?SsLk%D!$INs~L6L5u?s&@Czv zzv(O`JiJUz2 z_R2pR;uo$Yy3lGEU@iNj$d}CkSBZ;>CM{N!tURD7>snG!xh{OiXH_=AvXTW(n9CS) zUKb&)y$Uz#8vB=jLNH+3`ku-ONK6R|YVvs@nl1mR@%<_1@V9Sl53#&}e4X>U%q-St zhSR5Xml1q^0*4@WWTU#|nt3Pf0g3WU6x}{$ANWo&OD8ylr^0{1&Sf*;@8Jb)<*KV> z1ku>*TTzRqTBw1+@GEd_*bObM%a$X7L~@SuWKF++P_eS?(Y&NfTexIp%D;30l*kd< z=T}ExL6{$*{J|e)wSME2plm_H9}NiSFal+2r#o2O7YTuUua&3C#F#*8w^gq>(r;lg zfF*?Tv#-61I~6PwP$@zu+^Y8qrs2aSj8GO+Nt*7s;{sj{3y6m(jj2>Vjv|P${z^1o zR?A_LpjiIx3B@C&VTOd^)WgqoRAQg9XL`B~pAez4t#b$+*|C0#LbAIZ&@K}G|K07t zNqf{@n*OM##t6kBl%4yXp{r17EoNH>uVVhXYLcxQl_Zf@@g?DU_IP!`#w=a8!AU}F z0F-gUu%bbubZtmfp4rDwc2ze#C1^!^f?Bog&$No&1FMStnN~3;xK+XYNQ)cO-zsf< z13&mp>L2rIvj3G~QXcF6*T&}F-nxDNYjb^>|6?JKA-7$~!Jd!ErsmF1A+Bk?nYSTO zfp!G3%HU2lvXxmz2@~aOzuZ)QuLI^gM*4%1nbB73V3J`1!wLCeiH>jWOhJWcd-w1}MIf z#R?cFSpG2zizJlao&jJ=`V&QLyYsjNl%uku#r>je0e%`oOz{3Q0HS=nFJkRWSn_i( z%E#P6Z3IWCc&IGLKLdT7SDd(D-@ZNLzxJP*7D2nDXqK;u^AO`C8-Vqf+#ia2c`+W8 zke6TtL*{=r&RE^@P*rxT=g*>E+rH|~Y$#|%tHr`dD&&o^^xg|7<4pkxjNfl)}JAqYVp5(0}kIps{d2wU#Ws+K6J`ojl)y1myxRo{kn zzUSGrD5cKd?E_|K-d|fQ-~fK!SZB?x6>G1ye?#MwwT*IY*It0P$8ReuoSvS)-+ZN4 zU`PxglLY(;ip2E$@74AH`mf%HjqX1_er5mvu-^U0#}}Pd`j-CuI{Ig4#Z5LO=Pd~S zTdTJE;rRUO_1oV+Cja~j*{lE2`R9sxObCkt6>ssN8Z`~Q)$=q=GH{X+IAD4&9Q43O z=OtMEHANv2FV=fI^wrxWP3XemFL&10M;(8bq!Rg6p57J4oQoZ=ov&T3y!LRqRjf{HZ64gIY$}HWDhpBw&8Ba zJPcLS$UalG7>9cn7=;85P@(62mb*-#J%}`cy2s4>Q6g zR_>g`JYsD}tnz$R6Wb&bQ?`N9 zcE{?G+rR`4={^&lJ@RUNJAP68NS`$}9h@_1T{=-UtrLW{qhKNOUS`ZNu{f$El#9`O znLI~MTrw-t^$!&f-c$Z7OVY^KSfp>qn?O-%KWD)NHspiao)U=X@|B z0xh!=^0#p)Vewuo^eza(QLOzn$j7}TBQRy}l7DRM*ioTY^j6f==gr7gWSP3aOM`su z@zZ_85YPNl81XaE0RgMtV;V>7T_GJ6rr2cxv{#QAqS$pq_I1@8qPfCt*vwvlWAPb zGshk`mS|nv@sjm;7HQQ$&pcAn{@Y~#w-Yo>a|+O4|KHo)w&TBTY;SBY?f;8-4Euj6 z8C{BD2QqQWTr3XOWcn$N1)M(3^>DzvVx$s?1l$)R0Ep*cGRzR)QMwyCW?Im4ZYrya zXf6xC!?5s|q+e7q7IfcVj^|5Z24i1Pb+?i~_WHMP&)D(Ad6C>DDICCK9EB+}J~<$& z3bG?``8sy0m7myYJd7eV%FhebPg3SYNd*z7l39%Vr0N1M4~$YY0nLurLfT^E)P`;B?_dC}@5`^~PVHmW`#BDJ>FQO%Fm zp2|M6vPiqH0SP*e5Y96ANCI$W%C`7PCt@3M!75{TmqgI@DPFll>6rUhu1>bg@``WK zI3v9T%NQ|gIayTk(aFKpNBEj-8a~ST?R%n=%CL9R2O$tIS#lE|n1Ka{7{M?T5iZO_ z{9%Yen1K-EWRSraaFY6Lfc7G32x{ej)5b8t3AXXSe%4y*p&)t+a22Jj0wiM8eDB)6&kR9 zRCO`VNHT)rW=vpc*}=OkLK%lzo3^Aub64$7p24JD*V|tb6=*bIT%TcPLR*Drnzt}g zc&7YRB$5EFS;CxF*^F11ehg-s+qxxT>Y1$rnP6TMILglqeO9O?%1bY(j;yOf^HjvJ zHNzL6f?P08+R{$R^Ygh9tcaA!V6`?>n*HopYm!B^Q3&=@bPrZjd7sF5-{BrcmWEUc z)%RgWm=oVklEon8vHSk#0jtHFfKHFEu75c>eRX|#eDVI|=-Arx!#F+?$=d7eVRf=* zpf_>y{^&T6VD0Tdwq~Z16fXlC)2c~cv&EWII|$=g;ZiN?Gmvi)CPt=Bs%94Btjxxl zU~mJYaEu{UMybw85Qv88K4Snlx4waWR6v056A}%RY(UF|86rbifH8&z4^Q|863hn2 z3>`_;u%qA3{x}6unA4J`UwV_EYo4@LY}1tn#RP{pDZJc0nlcN29e*&PPqMwYLbu%c z+x4y~2E_zxqHepWL3om7!DfV=@TI=W+FObTqO#zrdyGa&t-PH__AN|3P3eO0sDqzw)Ok{_DoZj(z`gXJZ-v zZ6S}D|F<0M`5YZ;0Dp?ZLZd(PJ|5JmUus<=h;cZ8=OGyeAPCAAGP$aGAHgxj>ri!` z#0vH_=(dbdZtXe<6Q5Nx+Ev5uWj0wRlGR(y`Rn}yKWwL{nJxC$B!vM8eib1~uFxAa zz-QTUQJ}(i>}N&Zs>~5PiAbPxOrx)p8d%B}kbl`K-@Z?r}|03#DPUwRF0ARzLF|-6Ko2-|2v_-R<1?(rEL9iD1Fsiq; zRiLCHLiq}d*~b;a5cE-T9~LpdX^4m5!&)P%D|ty#dj~v48C3y)LzrA4rJ)5N_$7&x z0giR&n*4a)#G(f0mJ`EvCz0T!1Iu*%l(mgB zCm3dK@09b1)3DnCE32NWlBv{sYCc*e%7w>@$u_J~^0gWDg&SWShQi8-KkTG>e$HzF zaweJ9gYs=X=r2_{Ql=1ljr~(U(6=^47J1fs=PzDLn?3h!YazNp5U+Etl^G;GS)BAO z%?cCN;5kmEG;yPjp$DW>o$ zO9h4(SDkO^OvqTxG!IiL-FRA%9H|Pv7oy~Kevpb2mN1!jW+PaS>{Lk;jrF;xm%)3; zxX9dVH6oj@mQMLFO?f_F5e5x|Fik;@V!Wm~n9#|^tJ`%|rqEG%3ju~1hAeX@Rhm4> zu{~7(dR@<$T%xParSP>E;1UuLjWIzZz*Y>(m=8-1i&26x^W68OInPu}TbX#HCiO=My(au|GBa z7c2gHmA|KtWm{DJ3U1+p_N8W1N9li^IOsq0OM=R6Wux25#S~(Qm}klUvlCY^pn`Xo?TIYWG&mu1;$kq)DE& z7l7S9;~JL`{+VYfze;uk8CRp5JIl14!zk$|QC+ssl|CfV5XP4k6Wr>67iaHP%!w?m zY-V^d@g~~$<6MDq#UOyMpq~_&c&xR)cxL5J;lBl_K35>udW&kamn40V5G*!w+vMGH z&-PBU3e4<1j1HG1D(4-PHHQtUa&^R*r0Mm!w{p^%No*@A=P~i}aDS|*?(CkBzm=={ zrMMByNU5JEnyQ)_T*H^Z)TJ~E37BC9IFn*(xB-#9@d5KhPFx4K!g9^#@6C-bM)VkQmrOH zfjpsI;Xl4xX8^N@^YR9e$NjADtbq90t%+qY-56pPBwtCmr6+RPGBX_^pIZtA-2C9|L8nU?<#ihO?je`m|#|C>wyuZ27Y z|EGicDEz-Jujx;;3Fx^~AAb|5+6CAJ(;2q_3WM{1+NTEouN&c6<4zpkf>=A3eNAb_ zL7Kne`IPzZ6_`zP7}R41QU5t#25KzlW>EkKqD$&i)_)(l$VXb8D;gh&kkXuC$Y z=E_vAyWN%OR^;~g8_ImHbh+U?*K%0IV6=0bn_{@!3u8{I1TiWN{r~punVA0jRiK9m z6Yifxf3cm~0%=3^?dgCWY>RiLe-%SggstTWe+A<_=MjUe5F#Z14Tdo+u)wQ);Y51P zxR1Pw#ALZzDHl$e2*o{xXPib^5B)~@ff6uo6Ztrd`<-dhI=KXIus7oWj^fI8< z&7aE>K%%)xfsbVfP_$oK16n>_{vX4fE{7~iAYQvJGX$Sx|Kd&|lU)RE;Q!mZySDzn zxxKsO{|k9Uc(p5?vx5Q5V8L<=gjD#AnJ+2E_o(1L2{6Os0%DL5Al$Vu2%`dF48}Q2 zU%Lk5gh#zo+_-_6>T|AFPPv}E#j51bqz~jxRIQllxM;ii--Sg&znhNz%&$ax<7-~? zCD^EdF%CfQ0;Vv;uxH<3h;Q-&-X&^Y>hY~G+j1#toF|9xX~D^S4o@>HYK%2KUye{Jpg-CAC5 zr*@@rk$UUwKfn9m&+nLTu4jdnKi^?k@Czk^$Ym?F^{5PR6B;qOSN;{>L^?9`@BL`V z`@p?~^&Uw2i;JxojiB<{LqKnpu7sBWBM{~}24j{9onQ3HU$P{;;?9XNe@j1RUq>iN z5ael?u*(W!G=%o-zwgihh6lBs6;%1=Tux#Jla0+R=uy(MYZ-C~W(6kuJ2OBwxmWr0 zpO$K9l&6qov0*D>N-%W7QV?t+8!&|8R6x3=GVf8wPr>RD8jWB^cpB(D4IkJ(i&99% z>1R;c_-E3yW#N?Pzii z%1^&31D!Esr4+3dNV0)=PX~d$8y6{mMd``ju;t8NG5XZHHoKor`EU;!yNbS!^ALUX!3Ufc-pEFai(_gsY5 zVNRNjo!^{dRcBoCSw5I)#;p7ZQ>OiD&+@^1CQUm<)GM-f9p#*7ZRUx*o+YDj0Oj4q zeZVRmr3uW)3H|cSiat-3cP$O}&hFpk3z6_zys5}+&Ds|gRMu_rvO1YHw;ceWXR4O( z+@#bpEw!2M>KOob@@GBivYtK}fG#+E^X3`M?&yn)<5wq_*T0=zUh&Ud4gMWIT)@7p zP-XAnU%3y=-@bflP`VlMg}(jm+uua(TllbF+CmgU=ZBYIJ0KEDI(AkZ9y&jK<`QZcTW*}HGsS<#XAHl!<8>Im%2uJMb&B^uQyQ|+0oWlS9 zOwfy#eRJ~u_<&K0zoyeD1;Gk^FG|KpkfDG$M;V3(E2|o>q0P1KVO8Vdf2v#JD0XR4S!TH(g>i~QNU%z@j zzBxO5b#nR|Tu>xIf&t~g$}%02kaD{u10y&>#X|r-{yY7Wsg@b##A+5(kd0p1jP-#x zbiuyHFn&pS9Bq#>(vo3@S^>8DYcWTg+pD(0NBCHWKGkpgqNW0_If>VnL@}+ zhJ93kjdi-Pv=#us^gGyC7ccsWoDmss`uObEskpULR43!tqS}&UGmc$AjK)R83m5Ry z7-AwSM)`OjY^;yiAAADugPrxa$uj`bWRw`?w%6CKl7D}l$o=5$;l;_}t6vtfBZ%Q` z-V-EJ7iVWz3)>oMv6H5T0wGfF5s$tdFm5gI7(L)mX&8@^40OlL534&2R=(&1_$>h4 zTzhBG?_0n)t75kQ_HXk5iAhMt_}>N07zviLIWI;cttJyP5?*b|NEXOQ&Q4#SEsBxw z;cdZ41X8aKuMU4Xygc3q!Iv+NflvIaj?BM(TY#jeFYVvX-X0&U@wnhj&SRD1n_e-_ zjyNK#|HTes|10PO;47cscnG>(=H|chMW_BZ(CsqWZ*y;bV^8}isXz;S8YhrE+OoAh zF50i$`vF`o*o7?Eqcx;%k3c6i( z8KK)9W6te7wEq_Dn;$eGUw+^U!T#U>@%ODY+VM5{fz6+9!5Y&gm^-A#K4mX2QCfg{ zGlh?Vnk-ajqUAWcef>UB?kCfUQ|u&SGKQWbOa=v9n!gvp+9%W&G+p6~bLW*Ek?kM& zj?C1tQ0Fr_;v7x6acfD8v1lof0u$V)cDRdEbl5YcIebVM4&g zAK>Wp{IwMcS7OCF$>o`-Nb>R~+qg)zD96unx474u>wtiAxd8Myvx{#6z&y~IY8Rj^ z00C?D;t%G2u3}l~7?$zG85TK0DJ+aXyoZ)r$If{bJMQY_o#V|-*++pzbyp3n&#JKQ zn_Z8Xo9)G!dz?9a_s}feJM(m}#L7vsQhzFGtfyBfgDe2NKtsP&U&W%TRghgOxEBL@ zY|qkOV{z+{{V*<kgkcZv>`_69vNe9)stABnc z*4gg;nWrt^`K3P-*>2k#f1tdM{^MK>lqX%)cl7LTwE$)un?3S9!})Z;h1aGJ?Qbp) zTiskV&e7|yEpBbC?*bUjMG{i{)urq zLNPpu6HFP&Bje<~4T(RcJgmI$Qsjid-#%Ra-#1PR?96o@(COz_zqs&uwP{V5gp#W{gkrz`7%)F;KHz&uakiD!Kx4t(sWj9_b!p zNXR-+pJ~Aa*hYR;Fbh-btB*?n#DPrbcJT&1Sl~4`Jy?gQ=s2|=?1eU? z9&Ey#P7n6Lm`V@!z?o7Hu7EV99&AFJD(H~~gU@aOp}qR+03j(BKVG_}RGs$c3p_QO?x$bEUXbS3LQRWrPM8v) zx!&=vv;Qm6^D8B4I8F%&)`Ra*e>1PKx6o5qq>VUXPM{T?SCYEH>RANzvTFC+H%W#E zGzO%2pp%jfI|xCRq`dERD&Hq*D!*XxAxqMaR?gxQ>;VV@59-YtR=e1+T3m^G{fY$u z@P&o7bRY)M)_}DBxXO;2c^XhE5y&~KA;BQ}!D)!q>n?m;=cT!5&_v&-)mjWlQw4r? zAxsnV)rB&hZsCVBoo3efb3P2Si{|DAz8Jw=+rWPUv3y}q3;7?Tw3tQwZ_NL=ySr}7|6A*OOZk5h&-W<* z^GkL$;=d;Z-)z#qc9*VF_@`y&C;scuCO!Jmu(cpA`bfv1iNVDcHl?sL63|M!3V-Jj*5Az{O~NR2ZM_mXN!ANM@Nx>VaNtg{O9 zlGRIKoKCu=u8?jeL+X&G64f05(@5$D5JBq6WosSEcPS1V%Sa^Ml%v%o_|9EyWz?Eo zYBjc<#R#n>Cx0rL)hqwOEY4Aqk+thEjtht}#508dZ_NL=y|d@U|6ku)%72S^7!x@b z;|;n%4frg%ALab%DQKRQk1~m0Rpv*|<>ry;QI!1u*!%b9wsB-}82R36k zZ25ZD_2%8j<0P{_J4sw|cBamg^)CgJkcBlxG6W^ZJIQx{3RmLBn?xz`j94`ji^QeT z02<5BUBx&=6$u;5 z2CjYjNweo|C-tHi6gCZ<9e9_-4}c!@F#;Et024rF89mrg1j1RKqojzLHz!*wF}^Vs zsAlrX%JJx<5J@^A_{f30ehzMC1-MNMmYp)-gLpTtg56F~$$snroT$UR+IhAB+H@jh4S2DM#RpVj~XzA;dvVM%;8!)@OYs5r zLK>FqNHGMpr+?k4UZg-Yhd?obh0Iz;*kLdGru0<|if1#K<+T4a8MfjBYDchul*c0Y zYNs?mhh&Uwux-j>l=}#3$`1yvY*@-v?zHNHmD!ReTv0Bhm1tD~OSO=xSDvJ#&;WBK z+*;^0G1q9Qg`}$kfipN=rf*t*fi8!|L$=hIRU>tsZ_xreV;M~tXGscJ;LzYHr4m4K z23~-9gG(&A5^S;B(gacFoGvkE!Tl@62?(BpK=tc|s(#hc?Y5ofZdHzii_3G3CM2GL z^K$RgSwSJ#PEZAIY^=7QR((qSP+hZOe01Qs2KN(`7-$uV0Y36#4NDV!ZWxR$J$To0 z1tv{qaFO+0g$&=I?EyPO*4f6oIkw;ysiGZrS0G~;vFOzNpmf>hj-%EZy9PM%&3HBA z?FH`^7U&*6EDxG!s5@AHX6E`4JYN2vrR}(!#WA-+-~Gg+>+>_ecmMDGqeI94`(Xcg z!~d`2;e0(Kuv3`z#P(b3XIL(uCZ?aO2LnrsvVaQk31Bh;ucGS!ZP?lf0d?bPEdn$s z4oko1TTF`l;Yyh3pV`UC*meXzVA#KL+ zgE@Ul0-?*&j!23L0V~ zUIT4vPC>AxemvKUsF|Tf)DNQwM?U?||1v%@+@FGATeW|xni+r_NYL?NnF&jBCEuQW z6Wd?xtoNvx<$M!axP=7#50O;Szg542B4uS(ZL{C!)9(CVM*G)n|8acm#Q!|pod4^2 z)^h$Yq4awKKn!nCO!!I8|E@gC0f0%87F^L#r3YxY zKv1I!2@@8ui!sO)W`WaxodT#95Z=8~G}4uT(*))Zy6$IQp=@M5*Bq?kTJ(+|t3u;d zas}GqAE<*$o+<;MqGS6Od2mlVu#;@`;PzD$;SVGEl)iyRuE(!Dhen6)@k4z$157Aa@*R6X_Qzj?vCC=1YV z{vYq{JO1Ctha3CN;IErZV+1k}JAk*c#w%q{1L*9X zlGN4hMT@;xC!VC)Cb|{QJVs+>-5RxE2fD(}KQ`?`MJCsv7YKVG%kK5YT`oua#N6O& zQB`j8%I)1usux43!l6U0TOpE(_b9q5`JJUyFy58#Y*la9Myy6A7TYD%8mS(S?$)Bh zrE@1613XGRO}2;;j~fVS9Fk3en=N${-fvUyvBh`YNK=@oNL85sB5 z0-m4*ZBPrtMwtJzKlSqea`(RSsh9spN23E*|G)A7U(X{H#QZSn>GoI1{hnLj@@(yN z1KigB3jo_)M2?KVZ+C&~0l#OJMO%G9i~Cs11*5BQSM3Bch1oJbAeHK9QPA;LtKtin?#sP9P3-OS7!vZ< zx#q)R;a>(F#$QEj6RCM zIL*0}TLNP+BgilK)!BR4ep$q4V&VdAIbo4bVMbinHr7V1aft_Sykl)m(RN!=F5X?U zMajh8!Y+m+8Ye?7(P?M&vC2&zEL$>5D_f?b!>SdzJ%QvhM`Qd&MGX&l3*Ao&4Me## zDeF}5OZAVUd3Q6Lz4>;q2T-zNNXZhQDlgOEv`-L4v*6=t7r=DLm}}`|n89K~DjZ40 zSBI#!g_zZDzuVmI>dwoIZ8SLm6TmI{^20;MZ&&zIv570w{|!|^`>ZOP5SvFU>ujLP z({YROg_okD?p-N?3SLn*A^^d~G>g#`CEWb*DnlV28y-p+-gFzMYw=#y%s~D0dTzgRJL#N%Ki%_|X7?^wuX_SeQ zB>H7A@Ti8n&jp(Yoicey66>ym%2~fHxEKRifEYniu({?I{Wt-Z*^m}@WjGw#_X#4> z#?Y?hK^=2Bthgp3T_8{G^|NK{Ofej%aFc5--Z$BGFeSU3Vh?B_KKiw|i( zxFY694{72xs(7}-X4P5?1FGlNM@V7uY4t}4=hghEQB0bjjMgI!B}M+goL_y|tEPV@ zw^l{!TC-{`5$%I^38t-TfwyPeRseS!7OoEPdN!^HfZH>4EpH9CLX;QpGVaSzo`u}e zkK3CDv%!m%iw)0%?fhGy$xBLJMQg!nsLgc!{8#7T^$yz zv?p4Y?B)ftJrUW3)LYg?_lwlq0&J@`n7(KLMqMcrGq2J3Awix9D(W~R4HpCBg8-+R zX#HMg+W*8*$X<%uv3?b^;?C_?O~JXvI`5zz^|Z00CmGW-v9aKEy5k(98GK}?FL-7l zU57e>~lf%Ov8<5{? zEkN{xsYLP%mh;JBAJ39V@2bLHTgF(KK*AhNWsN|T4+da+%UU%yY1n-RUeg_lWokNR z;+7*AJ!tj~vSr79n#z6Jl4|Do-pSoAn+#z>x4Q(nlD9L-nbxNdh20oHW`_BBhI3>x z?bhg@bA&(GGjFH>%BkJv9FGFj7oDcW%bDJ>>_Fm(l57u>Dk<6bzS-J5ZJyfuUz`-^ zR)pQz{X|c@H!y*>sG}u#lmFNLft~+#|9Ec`|934$P!5N0 zvhv+~%W^!21=_ho4?DRiwv(kX4k;sY7T?1M68IQbhx9MHkTle`UQzum8Foar$8e>x z02%?zD*ARCUnn+zZHry6&^o}{J_3I|gx*`X4fnAAr^ER_Nv9}-x2UrzScCo7=){Tt zu|GQ6#Q#{!)0u3`RnY(8FI%o9MuV7AZV%-SXH&)9!Iyxy-e~SseY(r z8@kt6l{W7lN1B>L$&XcnwHg%f0t8Y?F(}W6o0J*Q5-^Id#go=gl3EMO^%sjPtPnM+dXI2hA*{3 zJEj>?nwageH7zsi}dUw z9|LXMbRX1veF1WGi@v-^SqwvT7RMm?=Rbe@ufQx7SoZLR1lV3m?1P2?y%D1Yk?G!P zfW9{hPI5FhOR_h<>#HsGMO*q~nSb9k?9n_Uom!XTI-A!QmI^f$jO!m>$8WIXxi06u z@f&krI)@SurGJFH7 z$l*~_&$_eyUAkE`)^k&1aB@NF9apBPfGp%5^Igech!#jxKsymPW%Ek5Tv##t7g9 zY-cE+!UQG7pxnJCJ5VzbSsGQCXP2;Pky>c)Z0XaEpOQfXIP#h>0K-NZEH^Lby(y0TU zW7prJUfIdqdf#@)YNb^Sot+(bG9K?-PjTe#ITsa8@1$jocc^#vpu}K@?ACXM10LR? z2O!2QI_quRwO4n&>Oj5nP-hircft8dYr^N%LUJ>(VR!p4FGPC3t?k09iKkzU+O$=D zPr(iwFUH(E^cDLwd^ca6Z z(Hk5^F}jC2_o;A9KDStWvGX)1jV1YrUei`>TRt^xg?Dc;p!U@H^SO0+mN ztQK`}8ynLK*EH$HRb$)US~Y_4?lbUChOHHN+ve~MoG~-DE>1%jJ9dFvZ4u=|ePdle z+(L;g!Dh8}82JkuQseH!+OYPNH11!!g0s@BbGoRh(6G%JyXR50q=6CoIF*! z&8&4@X$%`h{=m~;bAJkjj`F>B;lj<(@6ioG;VgHI%cm7Iq{P@+#3O?_;QJPZF<0)0 zEsRVJWQ1uF!oqx8-GqO7C9pGsa$_5LTrNbqN46%4Fj?Rfn2bb7;*dCTpquOI0h5zVrgS%wggfxX^o z({)9?MfV)#c>ECNQJs39eGW84D{_rf_JI&)eiM8!PONgN$7y;u%Nh^O4CbWy6sAk4 zYU$A9Ac-FU@31tShB;Cx)V*u74$y7UT2PL9cRqq~Hi4r61Z8O+Q`NrX;Ku1C98@ME z&q0oMAR+jcr`4Im9MkPvVMgu&%zZUvExXD?x9*EJwY_@5-DlvE&Jx4$4vN4mt3#*| zAGz%4!r_3bZn3B44V1qmyO;76=O4^EyU)Nm%TER%AX9cP#n%=)Y?z}tJL3!OZOxvxT8N1sT)y1pUB#STa1**s&K#_tmP9lJPpfNp#(Z2)TIGrUP zHr~Q6chh$lfL9UBqUrIatp@8=3sdCr{_U^zhfE0pcibv{nE_6~bQTvli&2R(G6b)_ z&?5&I@dF^tDgOa{RNt?I5>Q)x?41_}f0ivz?fhpIi=|mr{lr2Zn_eFR*}7qA-tKW6 z0~nJOM3`hTeBhaMDQGO&gw@zsh4eT}V%iPvmpB{y@fo~`q> z+=2>CU2@a~rZ%@So_b4O$aq@p5WB$xPRC2CCh4~c6Vqy?&w`lHTI`OAsh5a#!bGjQ zq6r;#<(_b2H`^UC4q)FiDc+yx@!tPQ8FTj&jN`MCP%jt+xWWH(?`UM_f8RUV4#XTc7u}(5{zN>0Xg3TR+&a&)R{ z+&q|_$;f`Z(t=3Md1L-zbfUI$x`$wsoML591N}!|cv$I+q(J!?hG-FPuz~&`?(f<0 zKMsx$Ht|2!@`!+Auf#k9HPH=BVU|W$847zj6`VzOnMMYy<;fmF`=5v`Ml7LG`E$U? zkhs&uJga48(g-cn1TD*dNzEiqZp*teQ7cQMF2`2m*!ni3!?cr&BtlX2VFcT5Ckl7L4q;tfT zEnZ5S8=q(3wgN}>WW;Z3)-LBMtSt}HOah4}JPm?jeopJq?(Kq*X=-LDa zXUBKfufSzn(Y=KK85J6~Zyo^2Vq6rGrr_7I`ZoTuBeH{khQb7|0#9jT71Xz*<}GRjIyuJd2Wls6>|6G0eGCGVjEdx-{?{o~EHc zkU@dm<>s!oilEG%J;UeVUStd|$N8M%mn%IOP0$bWR32g=gmKIlqjqFl;RJQ$ef#$0 z?!O5;=Mp>&lW@#LAXMC^`5j^WzIJVAR;<36`QH4`pZ#gz{~f*8B6^@E{qMn{9sg%^ zcyO}e|JU(2`QMe*a!E8gu)7{TseX;sEDPi)iBRrk`JthGHO=a^Z-dR%P=}}0{$ElB z+_?YuNA~^C!NDf}*IJ&c{U39caObVB>u7t~^|90fnj4yAe`|T#?QPADTT?~xphryn6@T`v%rcGNeSus`)7d9Aa=suMuC1-r3lF?C z^d&C0v=!cNdT(FT#`M^>G!kMic2rb;k8aVIH?RmNAo#x@;m*JJcK&j`y}k2S`S;FW z2hZf+gTHQ>*8JNsqW>kv%j1JVT^QP@1nhuv{&YKGW^p$JZ)Qa1e4%jCAuyc41Tc@3 zWHv=P4tW^75E8D>W#R6I;DTTKO9RvY-1*NT(}u_x_OJlcloa6jpsYoPfm+h8vqFVY zmVce$FYH3@T6L58Y z_RA|kQgDwL8ps{axPKkQ@ys=Rme%8K1~UwCgYmC3wexF$q%uTir2UA$>|6t$kBwWQ zv-{7OCmaAD@)>%2cEv|hH!V#Dz@~Py71kNf|3Oerq%}H4&Ws=q&5laDT8@#AgX_8` zkSW}7a!UYCguaE($j|?{Ftx7Dh!cB)`Ea&GUpgxYj+jQ61ALZcq~p@wGO5jm!TQ5K z4g6nb+*Yl~{_nuH|JmO=Io{v!f9rT!*#Gr;)tgzjpIxnh?D{+GsyB{>9Zn9D=!|j) zZ)a0*q+7vkD473g-v6t&|2sHw?f*_joBh9zr{4ar=dHh}?Vnb)h49$TNk@jP)-$fk zu+*{;Q#NT{!qQ(bMu^?#mbnWkKr-0|CjbH-Mun|P%$qK%TZD9b4-ErRaVO-Ts!;=Cj`Vye8Z-E(Y7B zICVPFNWQ=eJy67-+DHA)l$OwccTjo~gpyxWKb9R7`+8<}WSjVL-Jt=WVY#H@7Y{8h ziVVVXX9p|RHCO7OxYI$EbGLN|zI|gf*NsN3m~qo`M;otcxubp9x~sIixZ~TzXBnu!6 zSLMCOeVX6JDePqCZ;!33m?~2}4Yi+6A!Tf={giZB9!OgKEwk9~ziY{7gfE(2T%1Er zEhSd<F$N% zx6krdX3!G%lw9pp7C3zZgiw0QNVt%0q$?M*qMyQS_yp*ttGukv8}sz9qM=( zG|~TKPyYYW!G`{?<1y@i>6A|^rhJ(Lfim88ZF}{2l?e?>?_N%{D}8&1`uV{bf9~GP z$h>ArRiuFH`dHn|G#a+x{hJ5X_g$6h%?#11e8Cc2U>M_nqcYuVz>T;9kY?qnUS9fG zLGvvGuq=(m=ef!f$|Bv@Z_WjTC$>H9H{;%UP=>NH#@@0v=T04)HvTGygn~dWr zyhZPB{>7+xo=*RVqzTxrQK6`f$ZB4x{GOfj6dO$HR)O*zN z3aQF^WqHh&hA^vI0a=V$nQ)`CkpBXEi`OMvz6|`_;Wh?Q&A=IKdxP4{zZV zJ=cD7HLdLrA(fnAxl9b@sFs1bhB;wr7-hm`J`O9*7k?VZW+LwV0HfRWTnX7sZVT46`(PySP4!$=ZnjoVvZv*ofNXj9vY73&Su z*|MEWjSl8JV5nt6c;VI0mVMUP%z z{hX(>%zr=P6tmaV!aCrFjqTxX_gWYzZ}{2nPc{D+E$r`YKMnlf(czx$|9NzDw7LIT z%VXUCynK5Fgqjm35#X^&mt_f~iU{71feVb16}X&c9K)wCKyV(mRThmR5>rrhA^1dyfYOQj1e)-W{FQK zO58+yT1@7$7twL0Y3A-T@EcuF0zMHrzeoWc63Ys7haL#?70J=(8O~)oEkigGwK*P4 z@k#pEp$84cOq4?_l}6ot#tWz@Q|Cr!s>oHN{PH-{t`*CTB1SXRP@>)mY^dK7QKE4^ic>4_ zy{A0~m$wCv<2D?CgZ3B%(==yZ`U&`WaIGU!>+IS#s}&vjP{>|rbx)nx`{IUmNBT_; z4X2V;6XL;*!ebp`ju%7Bv4I%bQ)jHmit9p&TxzU>_)*z6?OhpkFc`SXz=1>SXgH@_ zL-~pQJoOC1;|^;Nr}ZY>$cp7tE&p-WLfA9@f|I+2#lc4ZpW|a&|9^D2iT|^f$B_Tr zDPLCjb6b40vY>A$eT#;k30S+Sw+q9-r|vg^thMy^lwXg1_kts7)l!Y{P*M2DJaMY& zKNYLaVhjmdRu9-f|M&Nf51jZv8~VSV$DsdIhy`NKm!tKYqCsVB3D`q2$;1z&PvG$XO>{4z&W*)EE=FqBI4$1?N9gApZ^z^=RMp3Hpzbn zCr7sb*TLTA{%T{pL-}jj>8eYFpCpxy|9|=ya_$CW=;13oT z*&5-ju2UnC=_NKNneo)qe{uJ>TKR8uc;MuJIv8!}|5_fG{>$6t9?pR3tK-LW4yZA# z;w%uC@asPd#Hc)UmV(rH9>_Ja9z9+wfa~iu91gUNKj-04Pya73UVbnBf203f%j44j z%ZrzN(EiJdmyeq6Gx%3Q^C^D63(dd0cG zu_v6jaO9PZ)}<6SI^J;MKgd%}|5fa~D-`CaSY7=8eNX)Vy`xS1kF`7o{lB174(OZ% zKIz~WOp0X>18X5Y+B3l!N8d*Sp5B(tdo#NUW2l6O?GWWzxDJcIwqP|+j%*gkGMCJ@ z73QHXx>#+zi2(=84U-|kl(9by&X_wj7BIg>1rKa`7RM}w59N`qU-8}Rd1kAT`9`C8|9Zc^>zupUXJ7?$u0eK(= zng;B&@y4pspMbX0zAPzV9Jeh#%WiWRAzs{wD#lWV>%Q_5W&uvwlWN4QKSlX1ip=r* z1YrwHE`4qj*v#q7;}Z0!Vwst{w>F@eiNFp)%{)%`HtZ~lRfXq0gR#smprvEd%;IVN zYdeOTFQl02SY}ORku!YYG(G|aO20i+3_dmV(3Aa z2v_b@*nI{*2(AGjwmAskg?U+i?nVI3QNn1CpgS!f6*1B&z;l!!Qu>%Fs?4s|oF!k^ zR*qnV`)Z7`mBlQpZR%0P`_q9GGFFia&!w@xz;2*O8_d?L4H)GgEe?l;ZL!YudIG2o zueKg1gi<23y4K?iw!Vea?=WRH+6!{Q85^S+n-!@Xs$z?rur{lUtGMKN|H0X}1;=YL ze?QiE+mAvpw}X}!C_N2fDUcZ({yhQy@%12o)~8zklcbT#HMQFN|C57}egA(r+T8!I zC*4x(?Z4-qYsbp-mzm(BxIE9@bFejM zN~LlLUPZ&!+?M1;gTMa{w(h{UZ_2TMYu+(%8;6gF2w32lt)~BU-c0dhHSxbjhe!KP z{*U9s&Hevc9)td0rV)^H4#cD{dki#Z@>@hZyw7ogi~=<$(AI4> zYq%MpOGTx;8%`kk`SKr&XKI!GMre*h#B?&+J)T6qKIE(lqTkm zJ#pRFOOz8#3Y3IMyV>D!L8mZd0eZO^Ou&}fOPmKFh|>Gy9_G>65JTT^%6Oq7$OQ$ZiaMfM6RrKm3KJM&R z`%*M>%I<;p2Hqh+W;p^$%7SQtpqSv~mIN%kIb#|sV&~Hh)o>In89;wv?bF{aC(@P> z_&u=}?_GqjY1z9!63{}ui{R)I1~nO5rVnWSI{Cefsn*?kphH?T!Bd>;`q^$t)@_bS zUC?w_%ZeM|0Wi-5icK5NA&len{xZjN9HU$Gii9xcS>oNInJg7~K87%ZH#o)xMq~)1 zNbTZn#_2lca|EMzN&N6WO^eq!MqJZAs4PB9&dA#|p~VMf+i?N5D+<%a0KNj86az3C z)E4FUUuD^yzTCM4-KCtQl{C(};L=#qfXuQiMpKj&Fy>rf0Jg(4387JN=#~?V+uTmCZYVgY z%Lih~d>`HF%mifu=Ln=p`~YSN{yalG>?NtQMQI0<593*y7w;J{ZAt4UD5kuCL+Nf& zaVgtcTzmq`RvDHT)!-f`1z|b?oJ0V!#Pi_)_X3Re_76cgVc=7-cb1gY?Gr8ZiQVa2 zE~K2Lm9P%u^d4--h>p3i-Vaz0`jqZI10N=^0OWy$1v7i6>xkk!&FP%pPf#K={%F~L z%DZ*B`p}yAkm~DrV~4Tf&~2sP!t1Mw7cia3f&>*qoXro1IQvwA`v3%N`39Qb!aT6? zJm_}MtxFs@VNP!5CK&V6fa{UBi}Z@+E%Fx$0?(eU(a(sAwK|!92%`_WD3#%dRKXd{ zsV|+pZE8 z|HPC7Hs`%Wf^b&RqrCw1jHGXSkWe;l2Z!k28pIimDP@2XB%Uj9-uqpn-!GRtB?d14i6aRTFk3s+6^C_1(z?UTb#sYe@WZxP^-y~m4 z1}??gMyen248tVoLhy}on3PqeO72eSb#E1=S;S-I+S7*a_Xn9@UGNso*=4$>Hh2wj zJj+*-oY@$SM;p*ferAu)?Msx!=>wH)1KqR{1Xl$t(0CSeL&qIkcezbhzC?}c*BgVP z@cBk|#>Ge8*)!hn-dT{v=#jpV*;#En5V6T;JYybeM5IK25ADW&d+{%H5?AD zi@OOVe@CvBDi^6ifWMs6m1UXxN?7PDbzAvE62f?)yG&b|yOrD5a3yNC^7dC>s+xUl zcHa$haI4=F;zKgW5r*rr#Rb7_HsfCT0q>V~vU{7&f`P?Qq0b65$GBtn8JHABMoxEk zZ*ei1-LO_@sRWYUDUPBT-NPL1-o)w6?%vHf+&dZ_ABP9yzZ~6+;LTwO58+>qM~BCM z8I4DW2YUz6%|6;Cd8k#6jK8yZc8e3TdpEm5d4dW=KE*hhec7EAI3~mF;Xi&E9h-zS`Ee)TGUVi%BAF)D3NqxMe?{YN>o_YA{ymK4hz0!{M& z!RXMI|Bntg`v0{&CjIAA4#b@Ia|$@i=fD}d#wtNruugyRF~hj^ppe6p-{@pR+qiRp|;v= zbdeMD`a%Q0q70wh7XU`l$b7f6s^HW$gIO>}b%z$)A*ch2^a?**=<2@KLB$Z;*gM}A zW^C)0EJ{S0>rugcTBkZxbH=4KgHsd`hl|;HOyuK0cjagL{;hrK+MV>R{Df z_Xs3z_`Kzx8vbtrb99-fA>ukdlEH8>7O+YFKR&SIe~k7IPB#4CIv$h%qf-vVoC7uK zOS6E!mGpSIK>uiZX9RuStUqzA7YxfK&kt&CQdxhM4!VZL6Z$PRqPFeT9bT2?zsFft zP5%p&PjSK=e}B$lh%Ql%SxBffiMr*4ZKVH4R{p>J{gcCu{r6fPgZ_UgryQ_32Yk|j znDu23g4!kZXb*&jQT2T=+?IW;UT0i8Hj`%RaCM9$*iCV~5}00n$zT!z%Q?spmYLUQ zU^F_Y>yCx<(_ghvV(Z1%awOEy|1?H96w6?#4B!p)|7dT|x&J%Z-_ZZHJSP1wr+jHr zUpDo43A;XqzR9@OxSQ#31%zDd&eZg3A6k;_5}quLs)6y5?j@m6N^XBcB^~D$XqIV9 zn$bEb50p-+^Y&1^`U-@)oq6z=p<@jw@6dx*m;P#1jk~v&75VR0Rnd4%mvmWIyl7Rq zNMm^_(uG*!Og}4K^ypUQufAYXkN^ZMu8AE(-nN)m*eu(!Bj;3^itDG1tlZ6dUh7i* z-F!K~OyF5~UUNro&_j3VK}I2Bb2spgD)1&X(#Ca%9&I%OJzon^40D{XL zjZv<>a#kse(IR%vwz*`*TiKs~W*gQkuiG*5gX~cL)pDsa=-p@~A3_v}6Yn^)G~*VX4ciM=iZ8dLGwyKnRN545e zTlr*|=C`{!4DW&`0L1VH#nPaKhpS?-(te@uMf@r;w#xlGMFotQp@wLOS8n#C5k50a zNg!U;fPRop+^oV#4NDA%|2w?(X6akV>SpZTT@k=I{r?Vsi z2$Ba%iKp-mfhi^hyhCINeo60HNFq~>GX!5jk^V27#^5VR#3=V3WA6PQ;i=~T=4m{e zqGfge|ED?s&;G&DiKYKPK0My&|JU*u{NJy9%9myK#L9WJtet|tXGYF6(EfuaGfB)0 zCSpmgGHHnpo+k;q1AI+VVZ9|It9ateT~4Z!*Z|GcSZG5j`@;|t7ZR;~fi!lvAl zAH=q37asY-iW$y|G(-6m6QZ%-z%pdEvgMWbxq(@qxamRcG0+N^Wd)B(cS8-2wSEHz z%pztYmRh55*NmQ^;yDN>D7>R!3OuSltIWWw<}l5D=rR<#PQsfOmh)DKVx3@Up^D9R zR4g7!5nMI3)J)a@;(7&GSalVi6{&bw2K)A1wV3%@!+-xY+t&YQaqP~#H0oc<{=ZdD z9}8;Qf7P<%&L~cbA5r-wCpdKP3!+n*rCnYc($|!Vno~mGmY0tHpc%t4jN=;^-n|sD zN%Z5ZOy_PckT#sekj=#V-`@GouuhR2^uxwjbY_zUleRc6^ny`pp zHnJ*s-8^|MUHN|R6syTSL;DhI{oC?ZYME3nFpq#u*W5Tyr~eD5@mZcT%{H)%Y9^4p|LvWf_SH~MOqmvfk7mba zG^t=X1;Kj+qu+8|pm&KkMWpDaf-}F#5xlG5dn-2r<#I){Ua0Jg7(D{24S;2=^|722 zCKgeFjEY9aD6e@grWuhgt{+tg*MYN*wQQ%=cSVgCPXn-hTY&9ty=IQG7>AIQtoUf) z%~EI4IT%I5dzdH8g1vFwv9(8wYk8J_JA423;_c5|fYa&3y z)Ebgc7**eVqNwE4Cy-p`XpFyrU^gfvonv&IZQF%ov$1X4R@2yQ)Yx`1L1Wvtoit7w z+qR9yo^PJ_TWi+*o%u0ypVxKny^pS>H6Og)%N!{OO;c zJ?(u#E=wA-suC9?g9_Q99?bOLK|K}U8ZHUc9Hv{PtLszobfbkk_ChqSey8V+Pp1w< zCtV_+OnRT~{q)bJ81*e&>I8$TbBb*Blp;G%%h#IkC|29ZNYuB4G~@B1P6V4^V-hIK5sP&U5D;{} z>m{%kYu9~pj0kvPkG1nm=NO6?07f`C_zL9x=}i`-1#UOKVyIO*}t zeiA4&@?5Dovo5GNC4lUU2tb0IN_B0%4k<%vAEdp`*Xxb8wBGC9O`;5DL+^Y%wLPx& z*9oo#Z=sE^m-D-U8HX?b7~mULgBFnM15lr-o5!*|9*d+wbdI;6ks1_^l-n+S1-4>CD-*1e)ARWv9r6?`%43R;cpt-ApD>2 z2(D4iAWO=K`VKDX&>dmRo*d(-jmS5zAli zTWZ_VgS>u`;FACz8?p$t=R~ycPX?mwU{TJ*Ccmv}VTRC0gvYlPk$rGg6rPLZUErT;LyK7ffjbw`i#^X|ZC>^P=TNFVvc382#&!JI@ydo6kUJ$|eHR8zF)RStj0Q=db%m`kxPI#I5_c zag^MU9?URsxSnVbW3w0+L+;zoH@h6o(^!2bRDmE#rlOUh$um#66>ilIA{lC2hz?yW zSqcFvO9mIgUio{7VZ^Df?EsF^%#6C7Q8%pzU{We4^n0}b1}kYy}hW^&8*Ew&U*`1@%M_~WBW zAFfj$tuHvz`*IsCM9|9Sj~`gRxh2pLF&_Q%9k(v39Q+*$S7JjP1_J@XB5MpH}l5viWuco#^+G4Z>8;P^QnM1St0>Mt9(Lc@3yM8BE%mx zY!^>L_<8gK;m!m$tU?C=PEmoJ697<^^(#PnMDe3H=@X=}oU{mremp-tYV^+MiIfii zO8Q)-)ns`!i#pffC{a@wF4j3n*Em(>kcrc+lAhwPRBl2!U*JBtHHy#ojlBzT9IfJh z*w$T3kB+FZnB*j)xS5<-jUYRX9{CYBZvIwB-c~&d^l@$U;B@}zMdg0${ZG=-Qro(r zQ^t8eX~=df0af;M`p=E~zd*gls!j!3 zi3k^&IOMF`!+dntNHlviWIlkhMicyo;8DSESc9~90SO0s%AHpWl>SD#wsW`(b{4c2 z(-o6Wh7@4g@fxobr@GMBY{rnh!|kIYg;+UhY{-(YHJyQ5`SsXc_cLWzZ);bUc-~pn zC|kn?NPWw``BGK_t(Y!Of&T%3z zo7WzxZjU)|^(Y z=fF^HI897CI1|@Jw<^AP&X^$F$SE{F3HI04lW9S>>FYC23GeQ!WwkU0boOK5=ceg}UoaSVnKK4{Lo-dC zrknh8P-&3J9QET^S5$34UN0(5W?K8yJY%`*Y2ZX-!Lo!muN1=Vl<^!IvfNa81b1l8 zhZ9AVlnB#cLMzxg5Z*toL5nKx5HFWd6o_*G8;*izBkRygHDUz(L3#77}cfTM;>(x1CJ}jN^j=y0NSKSF?O~ zO*_%U6XRQtYgu0~=Z#;HQS79SlcvSg<*HejaV91j4K0uOgj)_>5f+!8y9MH8CI#&h zl2nhjCuU=yFl@fTs$I&2l7GXp6uT>NR=>_(teoT z*wj+P;}Q5UwvDBZ21-;&*wYVp%6vV905Sc%f_3mCO$=|9B4W)76@{s4DEytPKUM=p zGI0C89k^iBx%Wc}>4vjImD5@bBQ+}<7H}-@L$#)o3L?c52|1$Qd4v(mmzD;>wH}UT z&jv;H9U|~D1*o!2)(2CS`syp<7?;;IZ4~)m$|~&sayi@oJbfA?zhAKO5ryts_@9Vi zl9#5{i@8QVdhmk@m3t=cwz(dd9>&lL6u>3odjf z{>a=Kp;pkv3-8=oJ&}BBk15zFJsHUj`CUH=vj^s?6~>@ynpZe`Gj{|{4?Xk{4WAsM zrMEP#OuHY4>>{yAp6pZ2icftei^F=YEaS_iW&q&;NPI;?B=8Rq_XOf!5P^2bb*rEm z2c@3LDcGu(-}z*x($vczvH=mvjq*Z$62)_ZXn4n!NoIAs0BFV8zVlFcBo|#h^jZVG zv>_ZA16OiRLXz^-rqUj+sFxcb3z*?C%yWt3h3`26v( z=VB5AW>a|}6E1s`xDZQ%bUq>R?g7Uigr)|mmnH4>h14S7usOg1RIKByVG=h}j-_~4(t|U03Li9n3ID!g0X78VIW2kR81z>_JPutqW+xMk`a@Nb&kGGqL9EFy z5Qoi=q}KfX($lQ0N>e)A6h6D~#2uQtn9pNH8eXE6x_+&`<|}ulOWwS_GWsi&wm`fD zqd}4nA)};;P|5gueM;{8dv}4Nbuss&^)ntQ%#1sN9RlsDq@tsF)O+8^lN))xTMfYi zcH}YL7!7gYoARf=z?Z5^>FO>WY*Z@&y24eQ&4V&v*tt-+6Eq)M3EI`*;+R+(N*!yYbNg;C>jym{cTGyg+bhl&J{l_q% zk-jm?u>(~xaBT}?3RQMflOr;53~oJgyGO<~-SS1#-(A9jacFYo7Vyd_JrN4(P6UN+ zJ&lF{ghV$a_J^R=GYs%KciIzxM4~53AUrcXa*q66M}{f9oESz7d^Ko#$(?FS*(ek+ zy`W>>$>9!GVtcS2W50i)MwRljP-#heLimKXSEp1&v$v2X@M+5;e~?}j?$wvcDF;{- zxS1r#>h)SFr@L6of!~(ZW-OiJ2XQ(?QQr5WH`{RDh#I=}-U!d~RG4%JfC+dM_Y+M4 z3eO^8G_An@46*+?D&s1E7#!P0(@M>M_8^34&oatPfj!;i2lY^UQ&vjx7a-3n{=uKxi8ypjJ^#)vE|3J!a(fx+7N{x!P8hsbl|_8z zU2fa~$E3du7Y5Emwm8znbynk$SvPFNfiG3&y!As*3WyBrl`xq78-6g%+R}e;fdqkk zs0GCh*LsYG$RtTKzIG5}3{EjdzE9iX^#k#V22Q|!e;aSbS{!o+Ht;)daVwV+`&8r~ zyBCNPSPKv04=3ou`LfN8@Y)^Ui~d zA5O7G4`BJ{3(M+h2MfvuM*-xg_X1WTe0IYuPI9dt!_1cNB(YHii1 zZ+s&+!9x8Vc(vRy8}l#MsxoajL>As@jc%ctpu`~Y<^xrm=b6a!(D@aVWj^rT=Uwq5 z?O<;1Kijb}qT$=;v-qo2SNIbO$<~K}R%urm^|V7)}IqaFUS`tJip2&(4t6R2%6b!_#jo(+s9z4Q-K`Q4uOpd+g%a1Vie z0{r*2U2p~D;}>27VQ@SLUuUok1tu{#zm90~6`q~Dz-&BukEX0^xMkSyc|*m!zfzx~ z)cy#&hDNd&1&CA}u^qFHB&)&l;TI87k$Ee|p^e5^T5^2L(XDZ>mgZW2Q^k)IfAh4Y z`)o6o;0@%9{LQf1= zAY+OY zM)XjGH5mvhJh&Poa|vN57|RZIV1=KmHSbyaS{j zgAy=&f~z78k3gTIftU}_et}zFgKNYuAvMt5Zb`F1elWD6x70He|G8`160kps>kUNpf&74p{;WYBvil<@K z)WraM&H)&ssTd1fYvy$%aqK4~u@(xLeE&9BLz^J*8$)W$oxwdOc zuVR(f)KvfAq;z4kyP7fltN+xzPk}I>GSpP>|txP^gefby4yDfbows|2U3*)hA^VpF$U8R)Bi34yJ)FRFmC zu^hcU)~I-oQ*GKS|N05KBH?F1=8U@mb#_Qrh4e$SylKTbT>=Qm)+<*2+=^DsRg+j$!fA!p~;9 zzfzSIPcuKtst-dC=SQYK?IBZn>jp}w^T8YB(ejb~+$v=BmY)f4K|c!hrK!D?E76`# z$V$`xX}VVFwxD4D^8$SrUH$=jqGbTTzrwX?F(l3{feWTfY=PYl2K%8I6hWLw@p6_2BpBTsB&ynr1Tq5A> z?yY0dfBMTB;J2#O%7_YX>RS)jMqoO1W);?4 zX6-u(otv#sXZ`Re!1M&j%gev|A7|v(6~NB>Js(WhB`yXAH~-le=P(|e=&E+#f0T)X z-cp<>cuAfddkYxKq6|r8xe6>Afb;>95arnJ_tqR$tO84`wBnNcEMFStp={6?j?q6{ z3NIu%zRsKfCaJK5`0+Fbx*ij}xK)(EXO2cJGIti-#P$oMhp6Ep1n9e+fWBatkSs&% zw~#nJU%j`pA3&!kd_|{C$-9`cz^@w;qN}x!o$Wnp;Jq$!)Yrt>Rq)|ND=|R|%bo$( z293|1Svk?bnHiA|i(Dc^s0Y7BuSsmb)`MH0>S>J1mov<-SLyPNajnNOJ1%8O!>zF% zzWLY(19x4BeX198lI;1kd@a09PoxM*iHGt{`@1ft3HMf7`l{60R#yl)^*($xMx~M5 zISnShNs5fL-fU%1XyO{1L8lF~3j1K_=!4Y=NC^AX;iQRwGt@MWJz}-OHLQD!cVCYq zkAPwHMdnM`nG0OIq#icC<7V0h@o=)GRAS*OW-$Jv%@KkERv=r`vp4a@M_uN&fxR@t zy1(s**dy;77F3(0Of%%oRmC;3TT*F*7rRCvUwyH7O%hHGemR@L5@=t6c{}szS^|VZ z4_Y|16&!|VUXKU_xju|;R!f0lVPRP>bv9m%Z-AjPoYB{-;A=g(aSEKv|8|2%90U=4T7J7;l~ z6pHO)tH3c}RY*}%Z#|&QX`ML}z6SDXm2j9}a$*7u3s@D%^8{FkAy=IAICnW7G)YQU zT3^oodDU{>JL&GnZfqO4(dnkrUM-iL()S=8>JpC7F~(L{hGRTB?EaxBKVHZdXd5Sf zf-!p6eE$Ry<$QeXub{Q)@^rZ(mMO=$7zfb(Hz5TG!B)sLV>Wo0f%8W>Y7zQRGbJt< zaG++h(4DcqZD47M+559_1GiG1lHS)1h*G6;Z0IWUPzEI7dj+CC#Xj-;=kbXGsxfB< zD0;GN8ixKIv4J<2*h%|sC}?`xJouDEuakxT%2lP=6GT3;plUq*l7XL=-V^QT*$er3 z{j{&DCXd>$6~9X)y2Zw+`uLQEp?1Oz?c9GH}#Kg;erGcf{W%De_G0*DRD>Z%OzhW`F~oG>q(_L#$2 zk*u36#K6C=l%XYDw~sDytz7XcY%AYPqTgE*!sI^LR6W@&;y>;wGkqT*ZV-7``1i4r zr1RkZl}8wzeGdSsx_T48a)932J^nMmRk)XDxEX*8*e89ETeC=@Q+8;*=$jlKiOS}i z)rq~G71Jbp8}UZ=$mdv2tXDvfc5bglzF5mEKkbRT-DC;8d7exw-zFRd zP)pq&Uv9yjh|H^beC350^UFn+EQoTh19DcMfJMP`!$2D*5VbW5-cZ3*e$JCbCCVoA zO*nx;;g29&^ikTlW2!P{IiihKOivnEnr`pb{_{Bc>)#jM`zE7XIf6km5Z#{7ao~NN znOKQe9{vttz$EphGG>s$={XE3?llbXaRNvAsi^GcF_MA=4GT6pdCa5l{W z9mu*tf=_A~diI3j%o(#q67s4oi_5mfy<<63HVGNLEjQ{$Jr2sDU;A5xxL~~q1L@ad zPFYLt)q~(0%>wx5KM=jSQtbzjR0!fRjY~zc*h_q(b)z)FE$jX@nPcx@axmtW%qPz1 zK`$2Zff-(<53tbmi7ZbHan?%sBD4=r-1T!NU4BohbZf5S8cN3I6UN+3JlkpU`^iJJxNmh?mhe^+U3SQXEqSl zM@I4Mxv1!WDpr}n=JAEmXlg$w&R#9?74CjwPHD}7-7n}IU9W)z!OK9+E*_}Zx=E|$ z{%;w6kw_{_Q9^BwT%HL&)6ex#eDyT$$rLb7O7?7Z9ez6{I+n=* z_9HgUMk$ihkkBm8u~EF52|VAnP$)pdH-Tg^E&cZy;Ss7`T1DlocY$;zjF{};!dXH} z&FZ(FR-0Cs9xO%!96*hh45H*yXY5b?CvY1jxlE4-EX*??nwS|6;SR}5#R)Kxjjy*u zJMz^A1L$Y^3W$zX;{GDJ@Jf$7xw>F*^ml7mq>3}bdX4;d>T8`Wl>Ek+f9VAwntZ@F z?nUKp8Tt3)6NG-%wbls&B9peo8yV8D%Is5oCPgkc3roTIkg?ac>?a=0`mkfb!!L(f zX80vSVDl2*)s-YGmNCoJi-HB|1c}U`rT0-r&bhF?{p79&j;chHiV3hzxc_HAB0p{; zV@7?+>TQUuK2hcQm;5oJ_U%O!ef81LxO_>ZzJ0!fpCOWPXA;2*mCj=7z{2Fw98V?^ zzNTWtc&_rZJ+96BO{tW}CLaibCWw>(3I2;Q_yd8*Wj&`NhHP;;UuwTyOM%X(0L!=D z&Qi#Lj8Ou=n`_~m8{r(pz0%k3xav5Z(*fXN6tWbq8hv`MA%6+6ZsyV@62FJZh`e-x zjpYYuZuxbc;1c(wjdhxMZaQK0)I1Be1SjV0J;q}~J}Nmt=T zVm(fIzbY#@!HyAkWY3rl+k=TS#2uXqELN-tP0F7gpne7ikh zAYmE+6Ic<4=~=2^RaH|fYZbrC!)d7<5UXLh_1TH7UhwmRar3VXSFFvisq!i>!=MEG z>V`2L+j;{DXm$Kf&F7P!;2OFP?%%uQ`nJJvJ(yi?$BLC|jF>=567c=*C$^flrYP)dT~bTky{OHJ-KAXldT6!Ikq zVLje402$^QnIhb1GI6~_x(tEmKs7-=7zk(K^j;6ny>hpE_-_rg(kN<}Ca>w7W7b+S+Yh$+D zo!*YA+VM$NY->)mmeaA>t#)YgvUvu3NW%K7@05gvulF>9(d{2z*8TB(@mEn);jK4m zKw<;r5<2Lzoa)@wRo@zST$7pa6~p95`{HCDb3AY;+M<3@o6wdLHJdV%~|d z&}hKn3<`0v%o>qUvvSlh_bO;&ihiN%>P-ADBAb$4x)s5 z9J*r)s#)mz{0x{Fo3{_DY!?)E{1AD1Lg4|aA*d_Bf@~vI){07!yqRj-IbPo1*L9k6 z7L|?bm7iesSO9#a{f+t*jPKB=LU~?#LlWl7gSNylr0HQ&U=Z%Vy9blWsejR^F#8+*a4*CE~$mwqjwL6(cEjln-jTJJ)zXyGHf4P3e`k) z8z|;5{MJMl1qxTkykB!-Z!#^c^N_N~*J)IK!@F1()8=f`Mu+_;R+M7uV0BvyE#=W_ ztS;i~9a8?wCfALM()%M_A0X(Rg39!jC=tiSaI#+s@EAp)vUPcO zw&Q2P9>$$Vw&YvkdrHok7O0zvvLs9U(co6;Bzfn&{_PUodW*Rgf+2Lv3@dWmrth-# z+f~iXm0_K7^k4F+8vU(kV$HPLspX%t2hr4&KZNHwriMakEIgp$dI2&xXRRMQeEklF zhBb#@&%3*pGd;kqTY!x>t`Ci;@M14ndED#!HMiIT$f172j)1v$v`P?vr?oR=>pFCf zh1WGuWdj{pF^bX^=EH#X0+rZSS9kjDj;O)e>nfnl3Vf7tVm|wu=9Fz^j4Ij5KQ{6! z!6O$*9o|U);1ewW?mwbx$C@?P@3G5z>YnX#x}9HyOe31PI7%nP_WjmXQ~e{Nzr+M) zaRK1{wL4#tC|fwQ1F-lEllestb-NzwBpy{BN;rjVOn&&goRa>Tz0N984QvsgjNB2r6bNZzMG?FSCP3b%&M~ka5>k zo!V5@rb1!h^JpyPuco|N%2vS`d(*fb*64m*2n2R|-!E9d^d5kcc^vB-8!y1>BevJx zZRCES{>RQY^8*0k*UkBqlEz1#z5&AtP*nL%6n1>;MZhuSDE$2d!7a2th~ki8#RX8= z=N&=8Ej`!=N#cc-##X(DL}XOizF?pKFkSfdh<;bzgZ1#!OC41-E>6a-?>sL|#%=chM;gsMOU z7FFL#h$AzS>Y|O`-JLK0HtM?~I}DSUxsRwCNn@hQ=F)}d%i_-tw- zJGL6@pV4e~;=A~;nK926DORl;pFjF7qXZIp@_2-k^t{e*rMt?epO0O5;((xmdBg`4 zOFgZHvn>fKSK;S8|d-|B59R5av;8O2<4%S~k&j6Qo0Sekez%huI zG<|MRs)AEf0}vG=2{%tn@X~hNV$jmgJlEb@U8?tzH2ap6DQM6HF~VLDo{n?0uO%EK z{Ei@LXjU6*Rs;_25sbX}YEskQx6()CJzElw1`WAFmT^QcmNyXyD98{inzH_njeEXm^F%7KrLD`KlPk_tG*@%Su~^Zk7N?ackDc56Vova1Mefos6j ze0VP=$5F?h#(tftOYPiRb`PCIm;AQgajdt_L+-3ov@J)3?B}M6mc4gC5@3=*r+?>shyu| z=hf_F0f1dBC~%;jEemuE2PXrxco=%Fmn!}r$VV#S^3YvqTxL#Hitf-YS~(%oh!8CQ zij0xb<2_a@EaT&vu*}!+GXL0Nkky^=zB%_r=XgaEd=hzbnXo;Q)|t8(#d=$ZG>~=P zZ2tP?Ld~w|^p!pCGoxtek5OVV^x=wzv*TOmW3=)G8>^A?aHXG(kkM0;DXpNLoBkPM zlB&jo1;{ZKBZg^K*Qf%~7u{@wNXC?AUjzy#K`Ro5Q|oprd2+|DY73fXSPJ ze4AyX?o)(QF_`Lt8Ej)_z#`&rvvxJ=fh|#!^$)l)rQz0~F~|U?KxhBQHH z3E4ENN=l~kWEw6jRq5aO)*?0J8W1Np>UNcVhNX$QEAQh$>VodrcwVG zV?$UAOnzAHre*%TP6hdG=x9q|D1uKK|3(XwQ($0D_!eK}$@TW(Pc^Y3G;&V+dq`bV ztzJs=G6}&Ud#O3MdkekQ3RZ74hOG%U>nQe2)X)~%YGK`?(6oWkNL9`Y|G4-=xnJrq z!!@jOE%1Y>oDd>OPuFlOszlPveCT&YaZ@syF9rqHjeLxbUiQ=euZuW}5+7|7Lp01RBit>H=&03UkL?8$fv*_N7}lmwTy3rVDSke(sIX;hFqHrj}_v|!m*nQ7f$PdY0JHJ zj6|cNm!Y=gd@&|IF3N{1%K)wPYrk-YLe&I*4quav>-2g#lzz^u?bqptrNV`5Voj2% zOU%8DPv$Ft9=s+QxFbSL#PTB_83^lj`=hQ)CymSJJ~KHl*F0ty2~9g zJ;B~x^M5|doOew%gEf#UDJAnNtTo3&vg zPF(&T)HbnIk_phx1#JS}pNc<9oI{Xm^vRid7K^XX+4kL_?N{yVvn(iZmm#)7R z$xThd_>VqlPg3X$HMA#bFEa7&#@uQQRnLj|H(TK45wks(KdpsulUNBCLynhPmHp3x;6HC{CA!I zcS|9pfDkTa>cM{{;JVEwmoD4aJ5Mm{E6R=t(P9d5OWx0x-D$ps>Mc$!{{eeYe^it<|)=KJ6 za_HeM@Hx@;Tm)kfD%gcPMs%lvRfaf?3Ojw<>8Eo)h9gaCgv{qCbgOehARvM5i)HKZ z(p$;i(oVkf%rD599TdaA#>D0|6`LH&=WQ$K&?=R`3Iov>vZc^T&ysDLMPu!aiT4h% zH&$Be@)@6;TM&je;5uR?B-}h7!A7fJX`5zJKwY2Z-~H+EA{7kg%^Ju@`JT zf{gU#iGLiDRGWUZV}b{1cOTM=e93Lw~hSe9tsUxP?ULP#T=!K&DVG? zn~n_6rW|<}uQ;Myu@&X>v!AAsGKosPV#Swxq?ePv--NrF5Rs({+2V7==2QCfXa4w- zZ}cwtn|+eN@G5#0@3@hUo|{DnS1qB?L@56&m0^=EpXXm;=_YVwJByje*#YM#)=@UE}dD`rG)YRii-gW|- zlvC%4fD&#P;iXJI5bH7x|Ju6-)0;hk^yOaZ6_wyZ)#rAE1pnEA3YCk;5oK77y5~DC zxTJ=Q4+PfvOy7*axnVCSPoM>a%*wBYY(0LbIIkS5M4G9tuR#O8*9GV8QvR!5f#&4cr%DbIC%IkZbCD*2>sEq`7TZz7 zed9(UNeFB!SX>1h)nxWq>5W5e8Ucj_ghigOdQV_Co&f}O)1P&dF_n3qAC}x5JyLd7 z;H^9gJ5IdqrL@7ASfLuo>F7=f_cr=Xd&Th50Z<;6NEQ%mPMe8deIi5pb=Wt{Z>FKN zLu}{4`&sX%!(UWt+?G<`-_w6$j2q9-v^cE@&29>}i>LxB9GSVVH$VF#G{211`?Lxh{;!=N(+dka(!m~d!UKtx7DdLkcg0j7#& z_tL)-{G&UwD9$u$;}9Q69qLvub3~!8Pv2i_EST@@4KwUs4@;&5*+(n!0_rmE*xECn z8a=O!*_X`}We5K{l2rc67C&r%rQc7U`OBwoCVvhT-S_wJ8abYRWTRL53-j^014eJe zyWajCEk$`C?7zVzJV(A%w7g8RrkyD_BPmA6fn zNglgecMkTVm}_oKFC?7_hEixc&Rf_k&08w$+LRw9VG%y<_*?%JJgPN|hHJ&CXUGc4 z6v9FgEY}o1Gd~$JLOq%{GICUXPot~xE@$6W68)FYJi6Fj@}}LA4{QZ$`iFaoE*|V} z81lMz);fwRKeSC&**Bu1YdL3(5k2vlj!@#iQ^p8XN^y~G)!r<}j@?H%-pUyC$0TGs zR&za*lE^2%Nnhrsw zjdvxP&>EA;JNaALA(+}0_LLv0E1`EM8klfmV!9JTerOdD*-GWZn?V@S9Hs zlMo%aLt$;z$7RePY)<*MJ3aSveyMTa2Q$F-aoLQ4Z z8tw5u{T5$^32>fDFF8CZk7Wbtf4ptiHL9Gf!SF^WLzY$yWtfSPfj_Ys%vC7Fk4ePd z$jPAe13pwlSXT6J|75heA_a zDe7yYVGP0wKa@sg-Ztpi`9TtYy5ZmAE!M6=&U?{ImSyBHr8< z9B*#lA1k2i-|xSWDW2ss;sXNkpGAU0^u#L+5C;xM5DRc~{+0}wx)Iss>|Xek*x^+d zv$D=^BaWT7bWO=D7v0|*>=|(G|3VDw*=@Q<2UCfg$?sB4^_qlS4Kc1%d=vKLTFRw) zZu;kJ5A3dEneq(DWyhl*D$2EX`z(o zKa@KbHu8#Dc~&pmX!TBU{LAT-d484lz)X3m&;4%iX!roCA5)$qq82yo*Jh)agw=ws zg_xh0 z_vRvp=?mNK&6?_tA3t*Q-<^Yy=!LDi!D2*r?mLq2A^sHn{?1(TGjw0RWNXEhMr4`Xy%f=@^PI9dk0xh3~Dkx3Tn2l0GnsJ z&7xZd8osX0)l%T+E_vEQK9{IVt~*oevR6-nCJ;cV2n9fbReX<0aGg2~*#o%Tc&U>* zT_nDEQ*ea`;72tk@aEL?{mX-*1p0HPt)FHH!nwMe zfltCD7)g}dTW=7a_NN3d-pAj?wO|$YG~INeIy)U|P}QM5A{Y?9srUx^13`E%Uwwj}Q5kFV zZ)l57=$@h{)l7K-klOc#VRHEl=;P?=>At%FTxe=y`rMJUDg~MlgfltH8SI98oPe_` zL|ERyRyP|^_RpCW_kb6k@t1+@Lm;&xTdSPw6bx0^^`;Y zT=6LB)g{KZ83O`5J-ts)fFgoB!@%wDbVCp=g%$*`YjToaD;A{Rw<)bfAfuWQwI{tM z7%M}odAtQ{LM+rA;RU@dF71D3YQ-udKH7Nm_oVB?unmr6+y=TmP14<*Q-N=?MsBkHCc`V(ggT1O*5?!j<(F7@jI zw7&yGDz$fLAr$3w;tk-ciR%N`pKQzC<)CFc?e*GjW<|7Y29l6?f!HMfUdK|u910ib z01`aN{cJP69SuSA7k{vyA#>mun2BdKgtQU284=1;*IGj|c95uU?}j@G_1TxKf0bLt z$hI5vj-9s{h~4Mz!p0^!$7AFeX$-XH9ex<>b*y+^R2o996ZBOUAZ=k2i^Mt=9=Hka zQYNselh7W|AJ%TGi(1RHWTDZY4`33$ZMdQu)n*46Be4Fm=M>ZwoTFuj3QQL){}msO z%w*V&C|DhOH$Nm@iW1WGbIqzdNblXZIryOgH_J{8NE5C`Sd;LTNA&XAiyGVZ1e{9d zzU$ovBRcC@<0k8HAl3B_c*RtPHo$4IaRWy@k42uQ1_AV2`2){32Az-teg@hb{knF$ zL?&H9mdB72qD?YzKo*>@`t|LPGvHqlrQ7EUpBDw)cv}#uuSup+uA*oD->6eT1KUiq z-_Dq*;|3r7oDEe)VO(#~``Sw1lHV4(5K$N&>13YSCQO8MtOD0Zs?b{UfhJ@tRv_=H zApiO>z`M9mkRJ2rQh$mQKLlh>s**61`LdiEo^Kvo(qDy0>jA4u6K5ls;!(U{@}KcT zdPrD_#82#we7JjfKLWi@%5f+2nZhbOmsYodw16X85JTUsbm!RE5WK;&uoYoQg1CQV zh2J^Mw@jmZoNQ-l>72m(lhQTAmiKw!X97fG!fyANcQfkT+OJCDX?(vf?~ztt!V+j; znQ6!AR4={4+m4D32pBH3eg{-Y=6=iD1S4t@X|eh%=rxY+><6Zf3cfT`sbBR*2R05- zuKN<1CthB&ZjoPo##}DCa#459{hh0^E;w7(zw4be_~S|Zbb$f%+e2?!@c_Cw8ngoK zZUEe>^ant88Jdgg#F~r7Fi^a%lKiXs`w6>*mv4*QuX&Ao_Is5o-?JYK3oTv9_3mzR z&(G=jX}yAZ$@5D=Us>_bh#Udb?>qf-8A?DUrT;z4HHm;iJB(x~Mn?2LdbvNyNS_6` zY^Z>QO8w}O<~=VC{#G^MnE4M&GjZG<42#g&;K}@T9baR5OWVMY)0*Ks98qZVyeTYY z;o{{q(IHB81IUy-8{G!=iHQrvS7=!HplAV(+Pl=v*CYchrwgamu~uJ`l2D);=U?_8 zf@5eQ*|Sp60n}fB%Xa_?Q8tPFCuqK8@_B;-l_IOvNT@Ebv8qCPfyydQ4U3_=z-cox`2QR`57iU8reWa{fVdMRYS1kA28}O z6*s^0gK>X&oh7_X?-G4m#6hlIO&MM|K%n%Yb2MQhuRCsHm%v1oVAB%IGo=SL8j4bD z;wBHk9EycR&5i09`&e&gk51@iD<;(VYe(wEI?K8=;VKc!@7A12m1<(!q$)!lwCnI< zqV|;}!zH$-PkeBYTB!>p4x_bu!6cW7n6e$x-{y|v-s77a@W+e3bLqzwKIXEA^(z(!&T7BWw%*;iC4oVEJQF1SR^M z4ao|y;plDgL=gpufk8=$6XRK_G>3YahE~fzc~P7(lg?}sLC_O|M-C}osk!wW_C0Bs zki04pUsWwR;2l zKc9SYic#n+yHhjmTWs7(tp{I(*+heT=9WMy4>@ViJJ#5UoWJQ5{!8c+|D$i#G4nf4 zDIEKtXwVIGj2e3Rb9djDLQ;SXUBPK3c$NPJ5>%-ILx+~jSIXd>jbs`!_?j!wWw#gP zG8PdA{Vi>aIr9K5$mHkJ0nwJ#;tnb&p<3n=8hFJp$2*$KI249G%OXE}d|@(aiJBHSE~?q5_6Qq<>A`%%gakF;+k{hlhc`^a5Lr19hde3|t^qI1HgNO6lf14ycjXpHFaR)6RZ z&c21Hp4PD?ugw#x=o<__-*Z`E^xH5{`&pG_e6iSkT1|rHva`NF(8a%_1eirjbSYvj z;#p`k3Z^a_nCFk&Lvfdjv${-D%511s{4gL;QLs^y$#jZ?UZ@7VShSe*} zV{g;^CV4^PwLgf-C*GL3gj-l=8Ao6|_W-7yuC0YbD}@DOuq%|kPUFDvhagUeH9R08 z;oCTx91rL8he#UEHyj=6-FA`3sOef0ohvZ5a(PHS?@x zU&d68m8|1JqGpYRiB|Yp+WY#F6M+<5rw%DX92pbtB#lrq=`=22YeJC|!Z1(Lk8#2A z*xRKnbdU2`T-sl&EG;G>LNsm!iV8_Qwth0Suq+rw4Qv_I4dZc7ZCPy&f>ElsnoK+Y z2N*%;zLmKF(CbB|&;A=DX&?bk*{qZ=quFx?w6*NOO=d3RtjesigsL3oFbdl%i=!)Q z2(Uj&Uzgl&>6$I`1l9@#AO9LFsm!ZwVUSkZ;dX}8B$1Z4+*G(@wtN}yIx}3peR4oj zpf_8@AM+wNmJW&N%(XhD>COqxK>yQLt!>-CA6(wrik{CxKGh9Ln0U=ZM?DKefp)+uc@?Zq4y^PXd% zA3?g?RbGS1w`t&pOb{RAbOaty%E1FA>1fb?1=QfpF!M`0n8siN>3z{9WML_yAV7gk z!y(R8ZZBz6&UP#((wfVyetwqv)|#6T(Zxxt15w<7>3_8jD()!`Ie}oID;GWsxm@`F(AX9?9uhMHtof9Fa+kI=< zD%?q~W#t{IAo$8`pae6&CyjV8^WB$f0S(&!W+*|FJpJ_!M)%X~h7$@$=oN{i-~9XB zgTAdru;Kpa`0&WL{~e#7Z~ebFQsm)!FV`D<6IyOithW`_;Zm?+`E6JBq0;65Yk1c$ATwVVnmr#UF~M6@NeL0id;eLt(Nj(^wW?<8QFYKhYjY}8XCcTanc)~whng#QVzsV7FD%Gc)>1$$CBp#vr9M@r z-+x3=j8cwavNQ$-sD*JDl-|59hlqr?I5tIsqm>|YkLC@yIC&wW2r>4Wc$t8AY4n1AP~XFrwWu8~KZ@{%LSuc8wiq9k-j)c5pY1?h#)tLKmQJO)^k{C9p{y8k^r*v5a{NNFS9m~Aj%avwBGGi`+#T`8kzh!q6= zPut!u*dFs-3Z>e9j{uue1aiR#7g^xkwCARRmrN@E?kR+(iyxRVHxyN6(6fjl$VF{6 zAJP!<{^pfui;}TBWI}N@sQ!#4eU}L-=q^{zyLuj|T8VQNldzD`4g2tc`Dhf91$^*g zmZ|Bly|eIl34CDrPSMi5gwn6+bXVWi{RAh;u78=3n|tk+jb#Q*O?KJ@e)H_RT^c&)Rzy>#HGnF!s|}BA{UIDFULf z)Fi|u9eVwpEuktpPhEPR`LJ)h1gaZYJ!pH9<%O5s)MTYACwH@JIVtig($3lS)fJoB zi3yp;eLXJI`L6BmQM@uK&x)Rx;8BPY$VwZ(IiQA_OCJa8Hr-Na^%MB~&5Kkn#Ss^J zUDaciux{LSq1;W-2wesB(9>eokrf|2{eJ-+vw+Z{xpi zrr7qs8@=4CHTjuM^k`N-gTMlYy&&%Ex8>y+m(_QFslsZz0nlJV2qwXvGW7N#Mf4pS zB8t)ov8z-W4I0v6-w~3ytf3l|YY}Q5+t1aYj6q1{d`2*B!=tz63SDaH|BNKl3A#yP z#>Rv%d;!!z|BsGOeENTKbiAei8!0yZe;-`#)p7&1rI_yH(QkkXpW5R?VjLyN&Y z>cx**P+(ScT{k~vE5<_ID>w^vzQRfH0Iu>DtSct#y9QerleOG~Esjm)Mc9_Vw=8x1 zzfhB({t6!!PXN`x{}0X&PD}5{jg(IIf7`}rd!ic?{h+X06#>Tn@$YCZe^nRE zIPPmRMFBxOXWpx*uDV4?)le>tvXh<`Vy+phl1zW=iKT?D_Grg4JQsWpE+ zGsn83a^B@1;2%@MQTfbQbT_4msyn4gMJJ-l!thOWAX!8I@k|O6Lbs~u(S%i3k1HH9 zrrOCT0xcS==WsrR-}8t{!G;;+V^dZ9`&odbI@1t-TTs^np*-(_P#)@GYt&sssi*&R znxG{T|LW32|BrnC|HHHMZT{cQlvea#ZUfhrDZVIbF8|d`>SaAoZWG^>&L@FraSdkJ zmh(z2237@-Yk(m!uYxA&KVgQyqhy*@_o9AYrVsUIsd^~I@5}T;bzrKBPV%1@>Z44- zB~TWTEUzp7=*$(iwEOW(J^i08=lG#ZJ^epCI}YUkJwM*k|4o!u^uOXltCe?ea}YoO zzJSlOz@0^I*!xi-<%Um~XXqDzQ}DAv`Ky`q3lOmH5Rhg**EfNU3FY=<;lO3ajzs0z zb0t&zDDDI<@x%}Ia~d;q>8KC-lPOpK+;#N>_ce`zEdlMWY8tBF%c$rPfoXAG(P(Vs ze{1F|u$USV)^Q}J*%}trcUxfzmXEFjNOzt8TCAmuir5t`r(fXrb{NL1W_X(M>#Dxb zdvH0-vKfQ}=~tS^E-wa`T&>c8^r_MiO;{dz8XaVJJjxOtSG^gs{ZK35_@nPI0nQK` zW}~oq%Ej$AxYFjAPYC)FTsfS?%BMn}fxOQSGZ7X?Ls{ya6%UxB+KQ}yE2CB!PY<9~IL_%5rXqGswwke_g7-g#sozE)S!5KmQy>#ax zbd(z$W|<2SE`seiOm3a2Tc14DnrkvyfRmWE>)4_d1jk1{z%)Cczdkvj-2g0GQg{4| z#*c-5VWsMhecpD1$nQv_m#yqwst~$;(9Z)c#(mKLx)epPWJdExtY8~ici^jR+*j{Ra;+MjI0)vhH0Ae_#$cW!X?TFj6( zg8c$yM}aw#Z|r|AcO?_iY5ik0vYa<&%RbkB#NK|bYgo0DW!1n=euHL`n_LawAQYpx z{XTXeF0zkRpIa!R>I$&rbTFKTHS||Jq$-Q?(nrP)JjNQ;tT6 zu0kpG2G(w_o+KPR!6~nvpTo6I!AM3cpei%^!2;9JVh`7he$+Jj z@PWzref!*J6{Y_EKVPMF=Kni7IXU$2|BueM`TsUj+T8y;m;TnpqWQgr_t(DX+#0^U z%fZxX@v@ThsnS`r>~2)8g~}?{hlPO#1b2u*>DE8PBPJV)uqz25c?F$$}qi##;=%Wrs?zaYX+{&$S z`GUlWF#jj?J|QrE`fEf<`Wv~s$xyVm_dmx+ho$$wN89-Cn<+Z-8cF{~?tob4Wnz4o zeKWAOP3xd+eu$5@K|S11ASUvW7y1dOa*$w1=mhdTzz_ms&NKGx=~I*r9`HTRP>kV# z(9u)z*Hck_&;z2=Xi6zcqq*VQ7fC`M_Q1D<-r;x;5DMO*EP)XkfEVhmugsb!s|~cU zg5tlCJN7+hoY46zJi%OHm`*2mh>9VpT40D%%*H4NzmYo$h9VAe>ViHLVA)hY4<1gF zCeTIAcHoaCcn&GY>F5Q5ae`Bn3juF4m0J_U`WG>~Op6UeLi3h#m3||4LSe-m2tJKi zz9zAhE@T6k&H+V`5f6_PCj%{o{F9`5P0e3AACq0*B&NIl&mI8(r`~`v`$$jk>N;UJ zxOw+iZ%sdV+pkC%=r+*^(=5_2L}pEx#kLh*#Lk3+53&$-R3kM0G6Ss z5T#lW_+^OuA3%#3{l9@Xs*EI zgUi2*R#S!)7%2;?WPd^m%1F$VVw<7|KvKj8UBnS@CRZ(xm;v|_iTQ4^(sv|Da5_>k zk|jqC&$P#^LX~{Rr{Z?sm{}G=-(0^aEKszCq5SGTgtLdK8+M)AzgZHJ6tM^m1x5AR z^e6Dc4=J2MoWQ$8z;D;)W=cn>zq_mLf%fmu-0PjrD3}M9?&tDS*gytuWl(wZ(hV&& zN(&+Rp&1ofts054t>_E1)~voX@qd&hWIjRZG6Fyo|35$V?LUVHN89*M8!3wa=c~Lz z0l?Wg8Ig!I1Lsl#{`hcRToUbSPLG`8DHwX|4zLlG6SB^pMxFJSKEKp~N z?^PiO;7~c2BH5|#i|ql-MN^dE5f)rYyW>tdnLv&sD0X3tMBniM{5TdHL4&|z|BG#} zf8LXc)5Q3qd6Xb9nnDUwjt~P+&|owWeZmC)6H&Gc9&nO~j>aS4!4kDO}@%{Y`Nw3lveL(Tw!4oY5?uyOyck{WEYOt=$Op9ihKoP&>ribfA%T~q}NFmt+H-Lj}Ck%PCHXzi22AU&ta|<_BPy_`&L;R%RkFd9p;(#M zWExu0_L{_<*rgmmdoEbbN&oz_rvtEDL=l;$@*RvMYt_>z4qUm>LdujNtU~${KyDn6 zx8xqBEfA?|z9>p`nhJsXGJ%Y>oDaXrqFq~TsYY55J>m%*q3daq+;mGU>$&uoMU0q);+7TN= zimoXUTKXF&P8iE< zcGy_j=7&l89fc9PMii6Sgb`SD{IyV*Ke(JECeGIK`#&kimai8l7>cHn5-H*OS*z9b z8ZCjgkDJ(QKQKhwFvGm=a_k7Z0d+GH%j+$nZ9tqN%CyJ1{;Q2ow7@QJag)J^6fHxO zTRoGj7zR!;zjTJ;erY=#r`3jr)aLZ)e7nn@91X^7|I(THlB`V)_8-O}N5g5dlm~dz z`@e&elKeCr6dN=Gnd63A6a zyS)sk@o_lR@2}ZsEQ6F|nUv(Sb{Z>&S)}08UmB3f>utU2x22-g%YQ}UpF9-A`|c^B zn*9F{PyP3Q$7e@d|G$kCC;mgRwyTT+@!rZFrDec12zDhj-+c^3R?;7jAF4%9KOZ%2*fu;GG#bMdw>z}fPkju%5zdWTncT5sFU91;eXfjyp<$A;?kb~ z=kJg^O8`y$|Gf zie0vq0ous`;ThWs0o$^w(w_e>X8Zq_7X1I{_`u`;N9V`e_dgpc`TPGBGybjJzs0NE zmD>EBA$taY=eLrzztpnMUhh;ksW8neRr|?m18*xE?`_DwFrb0%fue(QMl%;gbNWB@ zkJ5mOp_FdweUrYuXNtf38>#uzV7~7z;qfm_J$*z~*iN?2Wdy z0kpCKR885|2(T?HDDC;b`PkhE(8T{wj!u03e{i_H|KCWF?EOc*wBQ@aaI|U>AftE! z>D*?8JCdMuiOErhVLL!wrI=$Gt;~2fSzb*$W5}*mdqKbb%sS%dm-4B7?EY+ke@6hB zAqosKHf##h5du3YoS;3hlh+VTUFXEfzggTtU_30~VWy*v<)91hl+S>v;VFDFb-m5Z z3!8D@VIF4yzfp+%W@~Bz;G>3QGp6GEOn?gF);1 zFw2s8-r!3;tZOLM=U>eDYA8U%`9C{2^W%S?9UO1-zi*_-^Z$y#ScoeLU@F)HYkB0= zsdOdr-%!LsG-aGjWK!lKP7vDzkZDjcz^Rtf2Xi<{njau&qz32%r|>pQ`cBA(1E>F& zDVtI&>@dg>)d|8Gu)=&mA)-lKJrSh-ZLokVAhN-4LV(_J`hE@X5s=+05m59Y#1|p$ z{B-g96+n~{%9^{=vtwRt^o=s%$yqYOp-M6S8fH(}Zu_Z>WGiWgs-8>TgNa`iC6KXB zy*Mpf^rXV$b?SoY0DXCVAKNc%MTpU6ei#*<%kYpggW(tbo0D*i!O~g->D-b?6+T-g%+d*c*Y5ZBNeT( zTNkQf+rx7GzT1Llvo`CkV&mMTFk@rV?I`N7I=X4+zPeAC+hN;z!|8~kjy>r%Euen~ zIeLI|aB+PF-jONqc3h}v(Waa43B~^u+$@p7doQM(um~oIb{p3?gDpDKF-7I`$ayFD zsok;-t0D0V%;;2R82@G(k2-RLK>HTGKA^iXA@|+rjcU{8oKiADe2k_HyhfbjsM``v zRGStZT_Vc&U&9oR^dESLBO%jwlMIT6&3!(-K^$a+ihY=i6nnYt6aUAx{EbPo&c*fh z5AR-eSxnKk#lYXA1W^LsJLKdQiKL;pJvEU~Jff0lDDAQM21fVO>_*Y@MUl9ZKr}<> zj>C<9G~BgY^Vm4p(^l#J980DCk5kN7WB_c?|Bug3ef|IR>~yRDZ=^WaXRx?Gvt4Z3 z83U9_uhF0vjZt(zh+qcqaDq8j;*O(6BRVoYYitDj;L1;TLQ?%(Y?52G)u&5F$ERO| zYe*Ra31(dN0<%mIIZgr>iM19=3Brf2tr53$iY^7tOrvfbnQ%HJbfS}OF;E1KYHyK{ z03#Ed)$Lx0g(H+A3c1Xx#f236j|60pu?Iq9CNKIBird&gaseUDMtv0pH`otFF=mT( z5hF4AD2*^;0|{rKY&3+{^*DhP!}x9meQHSUdL`+Itfp55sa3C0f}{H}nKHD3jtgL| z`er1dE9g~#sp{_?8ezr}1#dIaC!t+>$kffzH1M&HMDmZi#5V811Tvn*|cS&BFt6T&-BooU#0;!L|* zxS&9ptRYqPtMZJ;ZV zSb!=c>u?i23_1RO1d~L_;{D4v*WdNS4ersr5BhQz z^;?a?d-zg@>;Mo%B%8ZV!`|DX$&~RI2xXU|;!Zv@UhOw}RgCNIS8QKY-T#X9tz}cl zyO`V{mHb=&^m4M|d+W8AopkhIu~ZF*z^ebWL|U z^64)P_-bf5%48JHFqty@9%+bpG}g)Cy?IdSViH2`ry1za4#inA2=>9w;2la3WN475 z?koJ#zheHr4vlcvcW+k+LlEQP5K)x!e5LdgXqd)envE!ok>%3AmwyZSe9Nf&DYBP! zAoR$=%q)gIl^W7(_#2@m7xAZGgWI<+-aZ2`;!~MzeXKT=G5qEDs@wn!$hj|Jg^K49 zj-Pme;d2+qNTK8%OmHwm3M}G5iAzDVh8PCy9R|i=pQ%FGoInTrEuf zhynH7aDq4#68bH9fg|4T;ckGasasL@)Z9$Q`a|HQg*+0WOd$GF)XP4hzlPq&xXd!p zW77=Cbu;pe>Aq8L<4SDmCZZEs%mcI{{FGmv^aNJ}mwrtlB36%PM#&7vxuc#zy9<_} z&*vHHn+;HUtP~{)A|&1PZhcXZ;o?29`LXk;*v?lT&Oq$b_Vr6Tw&q%IEw4nIei2 zb46$``p(m@!M9Sh)7NK`(P_6_Pxg-Qu0@4s&q3eK02L4bjcaa`^fzT()HH}mLGi%6 zp_BK}_XuTjOPG7OIKP7fkdkRyel<#{I#sU1v73)*-=!5-!~D%0p+MKsxTvL32VqYf ztYV8YZ@qy1bhO-+?(7F9WPN$Stbq^;j7B2HtcNNTmlQn|)k-J1SR*&&k*;rPLKLR) zMUsu-o9P6c9aSAi3sdRaW*`~N@()9dlCnTpA(WaO<4j9{n!or)9Jd&y9K(d^6R`&# zaFPI+FruFoOeY z!?xlz6dxbSf^7QlWJb!uWLo3xL$8-lJ8 z9TGYLg+{4F7T{7K2F7qE_Sgh|P`3C4r6WET+wJJ|xPz2qQGTYr_*;Q3;16@qIGPSk_9^8oK<#6t88jo_4=qtj)aYj{!CvusuN41FnL~ zX@%Y!Xd0srd*Z)lNY8KyDFrW{}na0=Y? zp+h`scZV*k_I=?n?_@WKaxV56nFoK^7h=!MH~r}e+jYlPC5g1y8eN47-)|$tbv09S zE;|QHx>NMJ^U@|xs-N;+a1NvK1f~3iIJVdse;3~R`LWVZvefc_8Es{GAHW9we{fp% z|2se2#{b?(X~TeZ(4B(48E(YU#AZOIDsXQj#7GTc;8FWNCpZDCqOnpe*pqS zzhr0r^UvP?{=VIx39_slsQS8Zr)$xj`n=;jbhcq943!%_QLX*}ocshQ$!<;iG!&3bJ!}GJP|L;bM5E6Qh|F1C`)H?w;1;lqE zj2O!C^lR{)c}yq-m$>MS0my=Hxm=U&IDmH17xb7eM{{N=q2oYp0qULoWac=hcjz7K1qInM$G`fue@ zDtNiHCYPq@r=3+w34^L>@Xl|0<@ZUIYWnXzxzrZBi#-<=ykavEG=>EO`$*WkAGk247};i zu+?SQ$8z;$PTZ$;@8xrckMH)YyyMFbetNI9AEq*(scx5Xt<)KVq*&ShaYL*C$5x^! z;F}g@*ac3?G`(dX+HW;TdYdi~Wh0P@KEuv|pYBDXi8K4T-6Gb=f9j3<3Z4Kr$baXD zXD7b>@AP~t|81n`_+N6VS9a-_hfD1y?U`1qm-6ff5%Mi5Ns~D^%#)L#4>AB)s{k$L zTvVnt3d@yxifxHfe_D?uStCQLe*O9ta-&`pzqXbW^{)Z>Fn{}z3yCtbQhygbF&GSt zy{A3{p4pw2eb`Lh&tK)4bagiaa4R;edZ>;Wh!Ml1RC&@r5PGjxUOpZ$KupWN?Z{ z-a+fw+ou|*9E~Up=adgTS+(oSz}+VLcbiJVXRSfxt+a4Hd9LR-wX*|MF_Y&cS*Gah^~TK`hV!^wi(5I@_jzc{;lx) z&_7$gA2uN0|HF?p4?Mk1$~X>4$I)X~1$k29M6((s@y@f=?vz4NIa0DakaanWCywtkOY8 zkd+KGVJX?ezsMT&Zkm*3@7f8=n^Kv}rG&U|(%N$DFSk_lf9>#pEpvA*B?UD3e;yzC z{Qvy??0C!nH&IIdpU$$c#s}2P0#_{zI2GFo1TMOkSm6HP3kUAzt`HHNN|vBd2Hn+N z)E#J@<7fbf)-I$W{MRKPIDPeleRpv%^|s8`)pT8@n*IlJDK5wbn*BcyegFT%gRTGn zMv5d^8HwY3sqf@cugn)9n3A)TUqBGT`aMCj_|E1h0W2J%v@sXZEWYdF_<2oYP#_NU z{M9*shUR;P4xpjU*6Bt(i|;qFef$5((boTSBSjHZ zmBD*;BA-g!-BHR@jV$ZH+ccR2I!zSwVy z&BZRe`h*O{HS*sqT21=zru^S0hv&ZhcY1!XjsLlkqA2bA%hefwXHi#KPqe5O%n)Um zag@5juIQXJQYUnQs`tZ;Lyn`sCzYjDzFDdGtsi5ih^POq zvJOc#JC|BYa$y%g*#yFSjN75J8A+xS)RdmznIA6`tutOWx$|wZzBqgH`WtY0bJgY5 zroCs_A5%Q51XZ3fH)F4S z_FBqeX?3mY)jzH-7gv4Bm%dHQ1m2;<-=XTGwKoMGyKTV1G$mYd4G*UE%OZfC8_X#~ zv^-?Jhs}>pF4A%}^J8=G;n&o1DQ&nhnLwPD>X!CYvBWybu4>o^gJ3`Y%Vf~%Jy*L3 zZUrjgN72@kvnpDV4p|eec=PSeGPEKcvd5tn>5#38R)jz;Fxe{Ybdc1v8&l{U6u&Pq z!T@0PQ*fyM)g36s3b=mnZg!@D#V#?0#R|Tc z({_`>jExBoTpMe>cSaIX$q#=r^P1P}6<6a^4Vi8j+Ciqv3e8XdS{A*u<>1?ClBnGP z40=HP9qP%T5s1GcZP31)W;(Bs+8V9I?%+H5Y^=sq>t=wZ1s&ed#4RWYn21lfP}61j8K zWue0B(20yS6EYXQW|~&QFGP4NNpV=AQjhX6ix>{P#UBFVMXnMR2XM;AH;4&tT=DA* z%px*FbRMEmtyKPxS?OOw?O#HFT2y;lsqVBU&B?^LzMtM9nj(&b{P|Swr~PPLl|E9Sho5s_gku0YN+3>efpgxyUeg8-A;EFB)oBY3y5B>YUvxCE} z|JO!}ivRS@#pSBJzQnfacmb%Itlq~T*(U z$#%|8@|-=ckJHrT}=l?i4D!u2TpdPalPd*fDm{=Dkkc;AJi4(1!E= z$y!3YhEn>NrNFlG-!f*vCi(CD%)kFVJUrRvf89t45YH%20=0S}a1n!G5W=R#!IF6} za6CQ=xv;ab(33n`7!3nMU!Rz`fC(`G;IkJP8!U=VOSTmqo$c~z%a4_|vyVcE^tbFH zvgF5L+FYAJxl!9CVwm$zEKz&ELz1xxbNC_R$2SBGU6u}``2Hp!HfY(i}WO;Hym;_oF+G@BW_GLWQ)YoYKhzn zh$bZMj9M(4trM}ok-Kgv{U#c$37Jbu(#{A)l%&fdwbjhFT=e&Dq_tM+2nYG?K=TOsG`^)pMttW~%K@XzlOru{ru&++5m%&53#5Ln2m zpt866cnc*&>m7Rl#=lKjI82_G7rGi=D}~o;zKnGW-h?CsW|4mKe;|P#GE}i_r$Q7qp;d?i@~mbslEHQrH30cO zAQWKEP%_*DQf9>|h#*5UK(Dlz4=I^|2h7JfHH}MqCqoo+LKWeN(Fd?&4tV}kU$rf1 zLbGJ~V+QU}1gA{!LBfi}$B-g0WmA~UrRtEkk}8CJkf>%lO0Y~eGKMppj%;SCG$gC( z1DPfH>-+mEiTssNaTvVIzwjw}B*n2n zaRJrQ57N@=;x9b>^#z4m?CP(Wm(R~Nt@G-&U%BnQ-=`&oR_=k%=i)C+4L&usb+ys7 zI$r&?B&gfFza{VfW((c@g;(bzyZoyX!nQi)r&CJ$-%K*Sr@!J9FO~GcDh>MI;Xx_? z*Xh~$R{z^bQSsjp9qG5lK&?M8iQLux(7$OZhFJ>X?HGZ+rVf4cdfDbP3BIF{&KK1o z6*>d48wDY0Rur8Eg*u3b#rqyLB>Tb3j{2r52-f8&4z&%%#8k9xiTr;uMTgG69IvJnV#K1emEC^JESp zn1V6PGL!;1K|2lJ;?pac_Eu=Ti$2uJ2MV2tFdJs|C) z@BmY;Vr_5=BW{5pX)@mfcT=9bO<-QEdOntC{k_~Kbj864aRxF-#Y#a2qg1ljh})4nf}idd^J=5y+LLQ;2oJEJ;MWgT|)fyqi3j9^gqFjGxPe(dlm2s zvrei(qx^sF=l?i9I^5>}*hpz2ZIv6qp>U^}? zflySm*;A_uZpC{wHFRsOwmQORT^i_rjAl4OT?xKdn&|)WQOW=N@N7%}H&UADf3X3& z6MWUSn&ua<9Xp1;X|!AGXj$r0@czx=2&!HOe&F=AZkCWC$}r<7jT)SF>l!Xi{w-jJ z=sW9WuZRp`=Jw?Z;xA-Npq3K6O_MqJSwZ^+$fXks;T_7O8R8Tai?8&F5#iwHuh=jB zz{Jsby)U3Q3iY~fXBuzguzuREdh1Bjb))5JxdN2a zaA*3rw0m31rGfriTH@k7pxORY%Kv?Idbp+knkhF z3F-D-*+;qCFV;L%Udc8#qW-l7NgIgd%H;+kHkOypRpudi=iJ{~fYwu*=s%$g8hxzN zK>v@9jy?JR@cjJXcuW5`Q5xyL-T;+^-~8M9na!et)DMckEEciDC)tf%%?k+Pv~lRB z(^8^Wg;>MW9fqi&y{bQxwJPA%Z&tpa&r09LcsC#vJkHemcT4(LaNxhy z(R<9Fv>GmK4WpmW6{pjxnB_rkY{?rrIA73kC&3mqg5Z2HgZU?+<}p~Qt}9Li`wKPi zxMjBteDkG&|C>M&OUVF@_CKHhA03F>5Q(|;ukuJ!)s=;YM5{~a8kZ~ebEQX1)h zu>o39eYWQCo=|uk*R0A9Bf2V%_zis~KO_gr+ea55(_$-!RQ{25F7OVqN04UX{H=|*cc@V7$xLR1#iOXXb(`7K#pe! zWRQ=o?=X#fe*q~PDI)VkMaV_5qR9Wp?m)d8C#h^HPy!jEAi*gb^ad|(e!by@qTXM? zr3%CN{_+OIn6lnrg!xnXzY6`{;O?LFsr+B_VLW;&{>S{uX6e%ckP3tXhB!g2_w|51 zWWBEkcksUV^?*;rzX`>o-q-(c?=Rpzq?k+@xO(xD^#&OwzoCft1~^9Wsj5!NZ@s~c zMI=T~KLyID&;P5d%a?C%UaqH)`tyHyczSf?o&Uqrv+etjjg)Vu45x@Oa6_h4dgwm1 z?XN1z8pU^0PAJphPz-(~^!`}|xc;S%EBif4CP04dUBodK1Oz7F2Zq3R6sG(c_=!wq zpf{6CFEQXB2)ze51sNsrG!hN>0AwH`=_q)c3dFCN1Iz?*K@m^pfXS)RX#}8+pbilp zSAZhJA&xLi07V&Lm=ikR0}r9BP9OceN@JfIn(d$OrR zyHq4nG(#y@Q84cin7|kTID(nGT2I z(U^lL(JnYTI6MchA;s{;H{g=cj8HY{7k7K$B1ynIQI&yrh#@*d@u2tL|MkBr=IFow z>wk+0fPhmNqY0$&o4F>{aMA6+Gj0EXtU{0oTRn*jQ zBIjvO(MUmVRic9!Ns5YRs3#6I6LM;dnPNytN~enQrX=0>j+%~S?kxL2kiwiPO6o0} z!xV%#)Se0(x+g^13Fh)ZCwL-=TF>om(CfV%4pAhJiy-e~1guk<@82PrQa%PSP4Ns- z25FuuX^1J~Ae-JLI7;Tdd>?{*yqXq3z%mpGP67mooI?0JTqOO_lmL68E*HyddUZ+7ULJ#9w~}zoF%e1vg(C{HaZg2L6`*hmxtPJL zq3DiQuAUv#c#=}Zk13{#EcK!(6@)vPi$0ND6&b%4v54Zk@`>G(gPcs|^wVf8 zC>ZPs5gSn{2WWayWDz!VwI`Dm!Ql`mSkeNNaxBQYTyHq#V?yyiQQV`5p(H_6{g8J@ z(U3x%D!@}_7@oUjdp$uHB9aMqp{GUYHdt&`c>ttbfnv9vT8QERNsh>Rp?Tetd6U^x zN025iJyY7FIo>eK5{y`nA+eGiC3DFJ5RAt4+tF+b>r}||H-mKEYX^cN$zEc?Ma>cn zdcB{_bVej)8IGo8%96Q}BAmg9qbd8zCs0rUGk<~v1t(|#)Yb$PMM%tL88@8TFnc*n znGQ*dpatijt23w0k(il?q>B77Y4RHqK_&D)?b&lb7whAm63FG+ij9)as}B!O12TmH zE!iQQaw24aNN~hnelk^eHW6^!8ZkhhJ2@VhBtQycJ-wnVOpgVRut4PpTv81=Hh!1cSg@2_6Gd;#9R>0P`LQqIK{+o-NtDAvt^7bA0{^h%u-~0q#T-{v0 zy106M11?^@0zY27dw22X_Uh#gxOnpdT)utt;_CM5?VFpu-pl{Ee)sa`2E2U-u3lfi zx_bFy4_v*ueD%YNt2f_)CqG`@e*gA|Tkz`Y_0{c#XtQfWd;4wg^~-mc-(S4Bz4+$p z)z$4!d*Iuv+cyH@w{PEp3vhk$?)K{PhgTQx!1WLBuHW9g+yigkzS+Ne^X3gn_3DNc-hn9mkWlAcnTD2i}~kw(6(k8>hJ_nXsX z5#eXO-r)e;5-pj`#oU!e1NrH@>sR2tCh|vv1IZ`TIY=N!)KGt^n~5KC&a1K-Fu53z zV<8sF1qne5z0VjUs|lWxGRpWPVARM9UF{Dq~?K zyb!_ynuGHII1*|;sfC2FV|V@)z(1P6V^NiN$-8UDP3jh<%3FYD(a9=(Q{3n2eoj3}ar`?!j4d5s7r2)z6t&1wm_N;#rK z7@=q2@A$+1&O4>tsFpI9?caO7e**%V;_mzZ2LA5WlICm${@-Ml9a&EjZS)~RC}!a7 uSSEpk5tquR6!ZC*l7~Fq$|pwowq;wkWm~@N^8W__0RR6|RyF+qm<#|Q_{*sP literal 0 HcmV?d00001 diff --git a/stable/firefox/12.3.2/ix_values.yaml b/stable/firefox/12.3.2/ix_values.yaml new file mode 100644 index 0000000..d6222d1 --- /dev/null +++ b/stable/firefox/12.3.2/ix_values.yaml @@ -0,0 +1,41 @@ +image: + repository: ghcr.io/linuxserver/firefox + pullPolicy: IfNotPresent + tag: 123.0.1@sha256:55adf05382872deee11865f2c7c6ae49f163c737f8fdb8c7c17d564d13c5449b +securityContext: + container: + readOnlyRootFilesystem: false + runAsNonRoot: false + runAsUser: 0 + runAsGroup: 0 +service: + main: + ports: + main: + protocol: http + port: 10131 +workload: + main: + podSpec: + containers: + main: + probes: + liveness: + type: http + readiness: + type: http + startup: + type: http + env: + FM_HOME: "/config" + CUSTOM_PORT: "{{ .Values.service.main.ports.main.port }}" + TITLE: "TrueChartVNC Client" +persistence: + config: + enabled: true + mountPath: /config + varrun: + enabled: false +portal: + open: + enabled: true diff --git a/stable/firefox/12.3.2/questions.yaml b/stable/firefox/12.3.2/questions.yaml new file mode 100644 index 0000000..9e48fe5 --- /dev/null +++ b/stable/firefox/12.3.2/questions.yaml @@ -0,0 +1,2851 @@ +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 + label: Image Environment + schema: + additional_attrs: true + type: dict + attrs: + - variable: TITLE + label: Title + description: The page title displayed on the web browser + schema: + type: string + default: "TrueChartVNC Client" + - 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 Minecraft Server runs on + 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: 10131 + 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 Config. + 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: 0 + - variable: runAsGroup + label: runAsGroup + description: The groupID this App of the user running the application + schema: + type: int + default: 0 + # 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: 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/firefox/12.3.2/templates/NOTES.txt b/stable/firefox/12.3.2/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/firefox/12.3.2/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/firefox/12.3.2/templates/common.yaml b/stable/firefox/12.3.2/templates/common.yaml new file mode 100644 index 0000000..b51394e --- /dev/null +++ b/stable/firefox/12.3.2/templates/common.yaml @@ -0,0 +1 @@ +{{ include "tc.v1.common.loader.all" . }} diff --git a/stable/firefox/12.3.2/values.yaml b/stable/firefox/12.3.2/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/firefox/13.0.0/.helmignore b/stable/firefox/13.0.0/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/firefox/13.0.0/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/firefox/13.0.0/CHANGELOG.md b/stable/firefox/13.0.0/CHANGELOG.md new file mode 100644 index 0000000..4c8959f --- /dev/null +++ b/stable/firefox/13.0.0/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + +## [firefox-13.0.0](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-13.0.0) (2024-03-24) + +### Chore + + + +- update container image ghcr.io/linuxserver/firefox to v124.0.1[@46761f7](https://github.com/46761f7) by renovate ([#19676](https://github.com/truecharts/charts/issues/19676)) + +- 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/linuxserver/firefox to 123.0.1[@55adf05](https://github.com/55adf05) by renovate ([#19382](https://github.com/truecharts/charts/issues/19382)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [firefox-13.0.0](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-13.0.0) (2024-03-24) + +### Chore + + + +- update container image ghcr.io/linuxserver/firefox to v124.0.1[@46761f7](https://github.com/46761f7) by renovate ([#19676](https://github.com/truecharts/charts/issues/19676)) + +- 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/linuxserver/firefox to 123.0.1[@55adf05](https://github.com/55adf05) by renovate ([#19382](https://github.com/truecharts/charts/issues/19382)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [firefox-13.0.0](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-13.0.0) (2024-03-23) + +### Chore + + + +- update container image ghcr.io/linuxserver/firefox to v124.0.1[@46761f7](https://github.com/46761f7) by renovate ([#19676](https://github.com/truecharts/charts/issues/19676)) + +- 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/linuxserver/firefox to 123.0.1[@55adf05](https://github.com/55adf05) by renovate ([#19382](https://github.com/truecharts/charts/issues/19382)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [firefox-13.0.0](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-13.0.0) (2024-03-23) + +### Chore + + + +- update container image ghcr.io/linuxserver/firefox to v124.0.1[@46761f7](https://github.com/46761f7) by renovate ([#19676](https://github.com/truecharts/charts/issues/19676)) + +- 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/linuxserver/firefox to 123.0.1[@55adf05](https://github.com/55adf05) by renovate ([#19382](https://github.com/truecharts/charts/issues/19382)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [firefox-13.0.0](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-13.0.0) (2024-03-23) + +### Chore + + + +- update container image ghcr.io/linuxserver/firefox to v124.0.1[@46761f7](https://github.com/46761f7) by renovate ([#19676](https://github.com/truecharts/charts/issues/19676)) + +- 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/linuxserver/firefox to 123.0.1[@55adf05](https://github.com/55adf05) by renovate ([#19382](https://github.com/truecharts/charts/issues/19382)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [firefox-13.0.0](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-13.0.0) (2024-03-23) + +### Chore + diff --git a/stable/firefox/13.0.0/Chart.yaml b/stable/firefox/13.0.0/Chart.yaml new file mode 100644 index 0000000..fa06ade --- /dev/null +++ b/stable/firefox/13.0.0/Chart.yaml @@ -0,0 +1,37 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: browser + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.11" + truecharts.org/train: stable +apiVersion: v2 +appVersion: 124.0.1 +dependencies: + - name: common + version: 20.2.3 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation. +home: https://truecharts.org/charts/stable/firefox +icon: https://truecharts.org/img/hotlink-ok/chart-icons/firefox.png +keywords: + - firefox + - browser +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: firefox +sources: + - https://github.com/linuxserver/docker-firefox + - https://github.com/truecharts/charts/tree/master/charts/stable/firefox + - https://ghcr.io/linuxserver/firefox +type: application +version: 13.0.0 diff --git a/stable/firefox/13.0.0/README.md b/stable/firefox/13.0.0/README.md new file mode 100644 index 0000000..af8822b --- /dev/null +++ b/stable/firefox/13.0.0/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/firefox) + +**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/firefox/13.0.0/app-changelog.md b/stable/firefox/13.0.0/app-changelog.md new file mode 100644 index 0000000..08c4854 --- /dev/null +++ b/stable/firefox/13.0.0/app-changelog.md @@ -0,0 +1,17 @@ + + +## [firefox-13.0.0](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-13.0.0) (2024-03-24) + +### Chore + + + +- update container image ghcr.io/linuxserver/firefox to v124.0.1[@46761f7](https://github.com/46761f7) by renovate ([#19676](https://github.com/truecharts/charts/issues/19676)) + +- 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/linuxserver/firefox to 123.0.1[@55adf05](https://github.com/55adf05) by renovate ([#19382](https://github.com/truecharts/charts/issues/19382)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) \ No newline at end of file diff --git a/stable/firefox/13.0.0/app-readme.md b/stable/firefox/13.0.0/app-readme.md new file mode 100644 index 0000000..06d4ce1 --- /dev/null +++ b/stable/firefox/13.0.0/app-readme.md @@ -0,0 +1,8 @@ +a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation. + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/firefox](https://truecharts.org/charts/stable/firefox) + +--- + +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/firefox/13.0.0/charts/common-20.2.3.tgz b/stable/firefox/13.0.0/charts/common-20.2.3.tgz new file mode 100644 index 0000000000000000000000000000000000000000..701ca7141bec7a024c6a235eece1372f39cd79bb GIT binary patch literal 101772 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 pQu&l(J|9!^kf&Su#3jL{{R30|No + 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: 0 + - variable: runAsGroup + label: runAsGroup + description: The groupID this App of the user running the application + schema: + type: int + default: 0 + # 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: 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/firefox/13.0.0/templates/NOTES.txt b/stable/firefox/13.0.0/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/firefox/13.0.0/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/firefox/13.0.0/templates/common.yaml b/stable/firefox/13.0.0/templates/common.yaml new file mode 100644 index 0000000..b51394e --- /dev/null +++ b/stable/firefox/13.0.0/templates/common.yaml @@ -0,0 +1 @@ +{{ include "tc.v1.common.loader.all" . }} diff --git a/stable/firefox/13.0.0/values.yaml b/stable/firefox/13.0.0/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/firefox/13.0.1/.helmignore b/stable/firefox/13.0.1/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/firefox/13.0.1/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/firefox/13.0.1/CHANGELOG.md b/stable/firefox/13.0.1/CHANGELOG.md new file mode 100644 index 0000000..3ff7dc7 --- /dev/null +++ b/stable/firefox/13.0.1/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + +## [firefox-13.0.1](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-13.0.1) (2024-03-25) + +### Chore + + + +- update container image ghcr.io/linuxserver/firefox to 124.0.1[@e906a0e](https://github.com/e906a0e) by renovate ([#19703](https://github.com/truecharts/charts/issues/19703)) + +- update container image ghcr.io/linuxserver/firefox to v124.0.1[@46761f7](https://github.com/46761f7) by renovate ([#19676](https://github.com/truecharts/charts/issues/19676)) + +- 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/linuxserver/firefox to 123.0.1[@55adf05](https://github.com/55adf05) by renovate ([#19382](https://github.com/truecharts/charts/issues/19382)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [firefox-13.0.1](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-13.0.1) (2024-03-25) + +### Chore + + + +- update container image ghcr.io/linuxserver/firefox to 124.0.1[@e906a0e](https://github.com/e906a0e) by renovate ([#19703](https://github.com/truecharts/charts/issues/19703)) + +- update container image ghcr.io/linuxserver/firefox to v124.0.1[@46761f7](https://github.com/46761f7) by renovate ([#19676](https://github.com/truecharts/charts/issues/19676)) + +- 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/linuxserver/firefox to 123.0.1[@55adf05](https://github.com/55adf05) by renovate ([#19382](https://github.com/truecharts/charts/issues/19382)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [firefox-13.0.1](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-13.0.1) (2024-03-25) + +### Chore + + + +- update container image ghcr.io/linuxserver/firefox to 124.0.1[@e906a0e](https://github.com/e906a0e) by renovate ([#19703](https://github.com/truecharts/charts/issues/19703)) + +- update container image ghcr.io/linuxserver/firefox to v124.0.1[@46761f7](https://github.com/46761f7) by renovate ([#19676](https://github.com/truecharts/charts/issues/19676)) + +- 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/linuxserver/firefox to 123.0.1[@55adf05](https://github.com/55adf05) by renovate ([#19382](https://github.com/truecharts/charts/issues/19382)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [firefox-13.0.1](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-13.0.1) (2024-03-24) + +### Chore + + + +- update container image ghcr.io/linuxserver/firefox to 124.0.1[@e906a0e](https://github.com/e906a0e) by renovate ([#19703](https://github.com/truecharts/charts/issues/19703)) + +- update container image ghcr.io/linuxserver/firefox to v124.0.1[@46761f7](https://github.com/46761f7) by renovate ([#19676](https://github.com/truecharts/charts/issues/19676)) + +- 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/linuxserver/firefox to 123.0.1[@55adf05](https://github.com/55adf05) by renovate ([#19382](https://github.com/truecharts/charts/issues/19382)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [firefox-13.0.1](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-13.0.1) (2024-03-24) + +### Chore + + + +- update container image ghcr.io/linuxserver/firefox to 124.0.1[@e906a0e](https://github.com/e906a0e) by renovate ([#19703](https://github.com/truecharts/charts/issues/19703)) + +- update container image ghcr.io/linuxserver/firefox to v124.0.1[@46761f7](https://github.com/46761f7) by renovate ([#19676](https://github.com/truecharts/charts/issues/19676)) + +- 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)) diff --git a/stable/firefox/13.0.1/Chart.yaml b/stable/firefox/13.0.1/Chart.yaml new file mode 100644 index 0000000..550c8f7 --- /dev/null +++ b/stable/firefox/13.0.1/Chart.yaml @@ -0,0 +1,37 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: browser + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.11" + truecharts.org/train: stable +apiVersion: v2 +appVersion: 124.0.1 +dependencies: + - name: common + version: 20.2.3 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation. +home: https://truecharts.org/charts/stable/firefox +icon: https://truecharts.org/img/hotlink-ok/chart-icons/firefox.png +keywords: + - firefox + - browser +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: firefox +sources: + - https://github.com/linuxserver/docker-firefox + - https://github.com/truecharts/charts/tree/master/charts/stable/firefox + - https://ghcr.io/linuxserver/firefox +type: application +version: 13.0.1 diff --git a/stable/firefox/13.0.1/README.md b/stable/firefox/13.0.1/README.md new file mode 100644 index 0000000..af8822b --- /dev/null +++ b/stable/firefox/13.0.1/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/firefox) + +**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/firefox/13.0.1/app-changelog.md b/stable/firefox/13.0.1/app-changelog.md new file mode 100644 index 0000000..a0e13c8 --- /dev/null +++ b/stable/firefox/13.0.1/app-changelog.md @@ -0,0 +1,19 @@ + + +## [firefox-13.0.1](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-13.0.1) (2024-03-25) + +### Chore + + + +- update container image ghcr.io/linuxserver/firefox to 124.0.1[@e906a0e](https://github.com/e906a0e) by renovate ([#19703](https://github.com/truecharts/charts/issues/19703)) + +- update container image ghcr.io/linuxserver/firefox to v124.0.1[@46761f7](https://github.com/46761f7) by renovate ([#19676](https://github.com/truecharts/charts/issues/19676)) + +- 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/linuxserver/firefox to 123.0.1[@55adf05](https://github.com/55adf05) by renovate ([#19382](https://github.com/truecharts/charts/issues/19382)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) \ No newline at end of file diff --git a/stable/firefox/13.0.1/app-readme.md b/stable/firefox/13.0.1/app-readme.md new file mode 100644 index 0000000..06d4ce1 --- /dev/null +++ b/stable/firefox/13.0.1/app-readme.md @@ -0,0 +1,8 @@ +a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation. + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/firefox](https://truecharts.org/charts/stable/firefox) + +--- + +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/firefox/13.0.1/charts/common-20.2.3.tgz b/stable/firefox/13.0.1/charts/common-20.2.3.tgz new file mode 100644 index 0000000000000000000000000000000000000000..701ca7141bec7a024c6a235eece1372f39cd79bb GIT binary patch literal 101772 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 pQu&l(J|9!^kf&Su#3jL{{R30|No + 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: 0 + - variable: runAsGroup + label: runAsGroup + description: The groupID this App of the user running the application + schema: + type: int + default: 0 + # 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: 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/firefox/13.0.1/templates/NOTES.txt b/stable/firefox/13.0.1/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/firefox/13.0.1/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/firefox/13.0.1/templates/common.yaml b/stable/firefox/13.0.1/templates/common.yaml new file mode 100644 index 0000000..b51394e --- /dev/null +++ b/stable/firefox/13.0.1/templates/common.yaml @@ -0,0 +1 @@ +{{ include "tc.v1.common.loader.all" . }} diff --git a/stable/firefox/13.0.1/values.yaml b/stable/firefox/13.0.1/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/firefox/13.0.2/.helmignore b/stable/firefox/13.0.2/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/firefox/13.0.2/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/firefox/13.0.2/CHANGELOG.md b/stable/firefox/13.0.2/CHANGELOG.md new file mode 100644 index 0000000..5f685db --- /dev/null +++ b/stable/firefox/13.0.2/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + +## [firefox-13.0.2](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-13.0.2) (2024-03-25) + +### Chore + + + +- 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/linuxserver/firefox to 124.0.1[@e906a0e](https://github.com/e906a0e) by renovate ([#19703](https://github.com/truecharts/charts/issues/19703)) + +- update container image ghcr.io/linuxserver/firefox to v124.0.1[@46761f7](https://github.com/46761f7) by renovate ([#19676](https://github.com/truecharts/charts/issues/19676)) + +- 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/linuxserver/firefox to 123.0.1[@55adf05](https://github.com/55adf05) by renovate ([#19382](https://github.com/truecharts/charts/issues/19382)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [firefox-13.0.2](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-13.0.2) (2024-03-25) + +### Chore + + + +- 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/linuxserver/firefox to 124.0.1[@e906a0e](https://github.com/e906a0e) by renovate ([#19703](https://github.com/truecharts/charts/issues/19703)) + +- update container image ghcr.io/linuxserver/firefox to v124.0.1[@46761f7](https://github.com/46761f7) by renovate ([#19676](https://github.com/truecharts/charts/issues/19676)) + +- 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/linuxserver/firefox to 123.0.1[@55adf05](https://github.com/55adf05) by renovate ([#19382](https://github.com/truecharts/charts/issues/19382)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [firefox-13.0.1](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-13.0.1) (2024-03-25) + +### Chore + + + +- update container image ghcr.io/linuxserver/firefox to 124.0.1[@e906a0e](https://github.com/e906a0e) by renovate ([#19703](https://github.com/truecharts/charts/issues/19703)) + +- update container image ghcr.io/linuxserver/firefox to v124.0.1[@46761f7](https://github.com/46761f7) by renovate ([#19676](https://github.com/truecharts/charts/issues/19676)) + +- 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/linuxserver/firefox to 123.0.1[@55adf05](https://github.com/55adf05) by renovate ([#19382](https://github.com/truecharts/charts/issues/19382)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [firefox-13.0.1](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-13.0.1) (2024-03-25) + +### Chore + + + +- update container image ghcr.io/linuxserver/firefox to 124.0.1[@e906a0e](https://github.com/e906a0e) by renovate ([#19703](https://github.com/truecharts/charts/issues/19703)) + +- update container image ghcr.io/linuxserver/firefox to v124.0.1[@46761f7](https://github.com/46761f7) by renovate ([#19676](https://github.com/truecharts/charts/issues/19676)) + +- 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/linuxserver/firefox to 123.0.1[@55adf05](https://github.com/55adf05) by renovate ([#19382](https://github.com/truecharts/charts/issues/19382)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [firefox-13.0.1](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-13.0.1) (2024-03-25) + +### Chore + + + +- update container image ghcr.io/linuxserver/firefox to 124.0.1[@e906a0e](https://github.com/e906a0e) by renovate ([#19703](https://github.com/truecharts/charts/issues/19703)) + +- update container image ghcr.io/linuxserver/firefox to v124.0.1[@46761f7](https://github.com/46761f7) by renovate ([#19676](https://github.com/truecharts/charts/issues/19676)) diff --git a/stable/firefox/13.0.2/Chart.yaml b/stable/firefox/13.0.2/Chart.yaml new file mode 100644 index 0000000..d274ddb --- /dev/null +++ b/stable/firefox/13.0.2/Chart.yaml @@ -0,0 +1,37 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: browser + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.11" + truecharts.org/train: stable +apiVersion: v2 +appVersion: 124.0.1 +dependencies: + - name: common + version: 20.2.4 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation. +home: https://truecharts.org/charts/stable/firefox +icon: https://truecharts.org/img/hotlink-ok/chart-icons/firefox.png +keywords: + - firefox + - browser +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: firefox +sources: + - https://github.com/linuxserver/docker-firefox + - https://github.com/truecharts/charts/tree/master/charts/stable/firefox + - https://ghcr.io/linuxserver/firefox +type: application +version: 13.0.2 diff --git a/stable/firefox/13.0.2/README.md b/stable/firefox/13.0.2/README.md new file mode 100644 index 0000000..af8822b --- /dev/null +++ b/stable/firefox/13.0.2/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/firefox) + +**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/firefox/13.0.2/app-changelog.md b/stable/firefox/13.0.2/app-changelog.md new file mode 100644 index 0000000..f0141ba --- /dev/null +++ b/stable/firefox/13.0.2/app-changelog.md @@ -0,0 +1,21 @@ + + +## [firefox-13.0.2](https://github.com/truecharts/charts/compare/firefox-12.2.0...firefox-13.0.2) (2024-03-25) + +### Chore + + + +- 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/linuxserver/firefox to 124.0.1[@e906a0e](https://github.com/e906a0e) by renovate ([#19703](https://github.com/truecharts/charts/issues/19703)) + +- update container image ghcr.io/linuxserver/firefox to v124.0.1[@46761f7](https://github.com/46761f7) by renovate ([#19676](https://github.com/truecharts/charts/issues/19676)) + +- 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/linuxserver/firefox to 123.0.1[@55adf05](https://github.com/55adf05) by renovate ([#19382](https://github.com/truecharts/charts/issues/19382)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) \ No newline at end of file diff --git a/stable/firefox/13.0.2/app-readme.md b/stable/firefox/13.0.2/app-readme.md new file mode 100644 index 0000000..06d4ce1 --- /dev/null +++ b/stable/firefox/13.0.2/app-readme.md @@ -0,0 +1,8 @@ +a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation. + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/firefox](https://truecharts.org/charts/stable/firefox) + +--- + +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/firefox/13.0.2/charts/common-20.2.4.tgz b/stable/firefox/13.0.2/charts/common-20.2.4.tgz new file mode 100644 index 0000000000000000000000000000000000000000..e02a4ec419295564ee54731f20fe2563fa9e2f00 GIT binary patch literal 101809 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 literal 0 HcmV?d00001 diff --git a/stable/firefox/13.0.2/ix_values.yaml b/stable/firefox/13.0.2/ix_values.yaml new file mode 100644 index 0000000..c2ff5aa --- /dev/null +++ b/stable/firefox/13.0.2/ix_values.yaml @@ -0,0 +1,41 @@ +image: + repository: ghcr.io/linuxserver/firefox + pullPolicy: IfNotPresent + tag: 124.0.1@sha256:e906a0ea71f2dd3a8949d3713a9d8b17fc537edce6d66dd28c7f1e30dac8bff5 +securityContext: + container: + readOnlyRootFilesystem: false + runAsNonRoot: false + runAsUser: 0 + runAsGroup: 0 +service: + main: + ports: + main: + protocol: http + port: 10131 +workload: + main: + podSpec: + containers: + main: + probes: + liveness: + type: http + readiness: + type: http + startup: + type: http + env: + FM_HOME: "/config" + CUSTOM_PORT: "{{ .Values.service.main.ports.main.port }}" + TITLE: "TrueChartVNC Client" +persistence: + config: + enabled: true + mountPath: /config + varrun: + enabled: false +portal: + open: + enabled: true diff --git a/stable/firefox/13.0.2/questions.yaml b/stable/firefox/13.0.2/questions.yaml new file mode 100644 index 0000000..9e48fe5 --- /dev/null +++ b/stable/firefox/13.0.2/questions.yaml @@ -0,0 +1,2851 @@ +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 + label: Image Environment + schema: + additional_attrs: true + type: dict + attrs: + - variable: TITLE + label: Title + description: The page title displayed on the web browser + schema: + type: string + default: "TrueChartVNC Client" + - 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 Minecraft Server runs on + 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: 10131 + 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 Config. + 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: 0 + - variable: runAsGroup + label: runAsGroup + description: The groupID this App of the user running the application + schema: + type: int + default: 0 + # 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: 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/firefox/13.0.2/templates/NOTES.txt b/stable/firefox/13.0.2/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/firefox/13.0.2/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/firefox/13.0.2/templates/common.yaml b/stable/firefox/13.0.2/templates/common.yaml new file mode 100644 index 0000000..b51394e --- /dev/null +++ b/stable/firefox/13.0.2/templates/common.yaml @@ -0,0 +1 @@ +{{ include "tc.v1.common.loader.all" . }} diff --git a/stable/firefox/13.0.2/values.yaml b/stable/firefox/13.0.2/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/firefox/app_versions.json b/stable/firefox/app_versions.json new file mode 100644 index 0000000..373382e --- /dev/null +++ b/stable/firefox/app_versions.json @@ -0,0 +1,64633 @@ +{ + "13.0.2": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/firefox/13.0.2", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/timezone", + "definitions/certificate", + "definitions/interface", + "normalize/interfaceConfiguration" + ], + "human_version": "124.0.1_13.0.2", + "version": "13.0.2", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "truecharts.org/category": "browser", + "truecharts.org/max_helm_version": "3.14", + "truecharts.org/min_helm_version": "3.11", + "truecharts.org/train": "stable" + }, + "apiVersion": "v2", + "appVersion": "124.0.1", + "dependencies": [ + { + "name": "common", + "version": "20.2.4", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation.", + "home": "https://truecharts.org/charts/stable/firefox", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/firefox.png", + "keywords": [ + "firefox", + "browser" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "firefox", + "sources": [ + "https://github.com/linuxserver/docker-firefox", + "https://github.com/truecharts/charts/tree/master/charts/stable/firefox", + "https://ghcr.io/linuxserver/firefox" + ], + "type": "application", + "version": "13.0.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", + "label": "Image Environment", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "TITLE", + "label": "Title", + "description": "The page title displayed on the web browser", + "schema": { + "type": "string", + "default": "TrueChartVNC Client" + } + } + ] + } + }, + { + "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 Minecraft Server runs on", + "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": 10131, + "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 Config.", + "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": 0 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID this App of the user running the application", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "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": "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 free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation.

\n

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

\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

firefox-13.0.2 (2024-03-25)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.4@f245f5c by renovate (#19731)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/firefox to 124.0.1@e906a0e by renovate (#19703)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/firefox to v124.0.1@46761f7 by renovate (#19676)

    \n
  • \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/firefox to 123.0.1@55adf05 by renovate (#19382)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

firefox-13.0.2 (2024-03-25)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.4@f245f5c by renovate (#19731)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/firefox to 124.0.1@e906a0e by renovate (#19703)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/firefox to v124.0.1@46761f7 by renovate (#19676)

    \n
  • \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/firefox to 123.0.1@55adf05 by renovate (#19382)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

firefox-13.0.1 (2024-03-25)

\n

Chore

\n
    \n
  • \n

    update container image ghcr.io/linuxserver/firefox to 124.0.1@e906a0e by renovate (#19703)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/firefox to v124.0.1@46761f7 by renovate (#19676)

    \n
  • \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/firefox to 123.0.1@55adf05 by renovate (#19382)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

firefox-13.0.1 (2024-03-25)

\n

Chore

\n
    \n
  • \n

    update container image ghcr.io/linuxserver/firefox to 124.0.1@e906a0e by renovate (#19703)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/firefox to v124.0.1@46761f7 by renovate (#19676)

    \n
  • \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/firefox to 123.0.1@55adf05 by renovate (#19382)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

firefox-13.0.1 (2024-03-25)

\n

Chore

\n
    \n
  • \n

    update container image ghcr.io/linuxserver/firefox to 124.0.1@e906a0e by renovate (#19703)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/firefox to v124.0.1@46761f7 by renovate (#19676)

    \n
  • \n
" + }, + "13.0.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/firefox/13.0.1", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/timezone", + "definitions/certificate", + "definitions/interface", + "normalize/interfaceConfiguration" + ], + "human_version": "124.0.1_13.0.1", + "version": "13.0.1", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "truecharts.org/category": "browser", + "truecharts.org/max_helm_version": "3.14", + "truecharts.org/min_helm_version": "3.11", + "truecharts.org/train": "stable" + }, + "apiVersion": "v2", + "appVersion": "124.0.1", + "dependencies": [ + { + "name": "common", + "version": "20.2.3", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation.", + "home": "https://truecharts.org/charts/stable/firefox", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/firefox.png", + "keywords": [ + "firefox", + "browser" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "firefox", + "sources": [ + "https://github.com/linuxserver/docker-firefox", + "https://github.com/truecharts/charts/tree/master/charts/stable/firefox", + "https://ghcr.io/linuxserver/firefox" + ], + "type": "application", + "version": "13.0.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", + "label": "Image Environment", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "TITLE", + "label": "Title", + "description": "The page title displayed on the web browser", + "schema": { + "type": "string", + "default": "TrueChartVNC Client" + } + } + ] + } + }, + { + "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 Minecraft Server runs on", + "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": 10131, + "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 Config.", + "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": 0 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID this App of the user running the application", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "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": "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 free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation.

\n

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

\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

firefox-13.0.1 (2024-03-25)

\n

Chore

\n
    \n
  • \n

    update container image ghcr.io/linuxserver/firefox to 124.0.1@e906a0e by renovate (#19703)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/firefox to v124.0.1@46761f7 by renovate (#19676)

    \n
  • \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/firefox to 123.0.1@55adf05 by renovate (#19382)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

firefox-13.0.1 (2024-03-25)

\n

Chore

\n
    \n
  • \n

    update container image ghcr.io/linuxserver/firefox to 124.0.1@e906a0e by renovate (#19703)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/firefox to v124.0.1@46761f7 by renovate (#19676)

    \n
  • \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/firefox to 123.0.1@55adf05 by renovate (#19382)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

firefox-13.0.1 (2024-03-25)

\n

Chore

\n
    \n
  • \n

    update container image ghcr.io/linuxserver/firefox to 124.0.1@e906a0e by renovate (#19703)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/firefox to v124.0.1@46761f7 by renovate (#19676)

    \n
  • \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/firefox to 123.0.1@55adf05 by renovate (#19382)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

firefox-13.0.1 (2024-03-24)

\n

Chore

\n
    \n
  • \n

    update container image ghcr.io/linuxserver/firefox to 124.0.1@e906a0e by renovate (#19703)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/firefox to v124.0.1@46761f7 by renovate (#19676)

    \n
  • \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/firefox to 123.0.1@55adf05 by renovate (#19382)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

firefox-13.0.1 (2024-03-24)

\n

Chore

\n
    \n
  • \n

    update container image ghcr.io/linuxserver/firefox to 124.0.1@e906a0e by renovate (#19703)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/firefox to v124.0.1@46761f7 by renovate (#19676)

    \n
  • \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
" + }, + "13.0.0": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/firefox/13.0.0", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/timezone", + "definitions/certificate", + "definitions/interface", + "normalize/interfaceConfiguration" + ], + "human_version": "124.0.1_13.0.0", + "version": "13.0.0", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "truecharts.org/category": "browser", + "truecharts.org/max_helm_version": "3.14", + "truecharts.org/min_helm_version": "3.11", + "truecharts.org/train": "stable" + }, + "apiVersion": "v2", + "appVersion": "124.0.1", + "dependencies": [ + { + "name": "common", + "version": "20.2.3", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation.", + "home": "https://truecharts.org/charts/stable/firefox", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/firefox.png", + "keywords": [ + "firefox", + "browser" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "firefox", + "sources": [ + "https://github.com/linuxserver/docker-firefox", + "https://github.com/truecharts/charts/tree/master/charts/stable/firefox", + "https://ghcr.io/linuxserver/firefox" + ], + "type": "application", + "version": "13.0.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", + "label": "Image Environment", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "TITLE", + "label": "Title", + "description": "The page title displayed on the web browser", + "schema": { + "type": "string", + "default": "TrueChartVNC Client" + } + } + ] + } + }, + { + "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 Minecraft Server runs on", + "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": 10131, + "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 Config.", + "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": 0 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID this App of the user running the application", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "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": "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 free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation.

\n

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

\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

firefox-13.0.0 (2024-03-24)

\n

Chore

\n
    \n
  • \n

    update container image ghcr.io/linuxserver/firefox to v124.0.1@46761f7 by renovate (#19676)

    \n
  • \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/firefox to 123.0.1@55adf05 by renovate (#19382)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

firefox-13.0.0 (2024-03-24)

\n

Chore

\n
    \n
  • \n

    update container image ghcr.io/linuxserver/firefox to v124.0.1@46761f7 by renovate (#19676)

    \n
  • \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/firefox to 123.0.1@55adf05 by renovate (#19382)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

firefox-13.0.0 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image ghcr.io/linuxserver/firefox to v124.0.1@46761f7 by renovate (#19676)

    \n
  • \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/firefox to 123.0.1@55adf05 by renovate (#19382)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

firefox-13.0.0 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image ghcr.io/linuxserver/firefox to v124.0.1@46761f7 by renovate (#19676)

    \n
  • \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/firefox to 123.0.1@55adf05 by renovate (#19382)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

firefox-13.0.0 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image ghcr.io/linuxserver/firefox to v124.0.1@46761f7 by renovate (#19676)

    \n
  • \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/firefox to 123.0.1@55adf05 by renovate (#19382)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

firefox-13.0.0 (2024-03-23)

\n

Chore

" + }, + "12.3.2": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/firefox/12.3.2", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/timezone", + "definitions/certificate", + "definitions/interface", + "normalize/interfaceConfiguration" + ], + "human_version": "123.0.1_12.3.2", + "version": "12.3.2", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "truecharts.org/category": "browser", + "truecharts.org/max_helm_version": "3.14", + "truecharts.org/min_helm_version": "3.11", + "truecharts.org/train": "stable" + }, + "apiVersion": "v2", + "appVersion": "123.0.1", + "dependencies": [ + { + "name": "common", + "version": "20.2.2", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation.", + "home": "https://truecharts.org/charts/stable/firefox", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/firefox.png", + "keywords": [ + "firefox", + "browser" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "firefox", + "sources": [ + "https://github.com/linuxserver/docker-firefox", + "https://github.com/truecharts/charts/tree/master/charts/stable/firefox", + "https://ghcr.io/linuxserver/firefox" + ], + "type": "application", + "version": "12.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", + "label": "Image Environment", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "TITLE", + "label": "Title", + "description": "The page title displayed on the web browser", + "schema": { + "type": "string", + "default": "TrueChartVNC Client" + } + } + ] + } + }, + { + "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 Minecraft Server runs on", + "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": 10131, + "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 Config.", + "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": 0 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID this App of the user running the application", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "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": "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 free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation.

\n

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

\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

firefox-12.3.2 (2024-03-18)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/firefox to 123.0.1@55adf05 by renovate (#19382)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

firefox-12.3.2 (2024-03-18)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/firefox to 123.0.1@55adf05 by renovate (#19382)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

firefox-12.3.2 (2024-03-18)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/firefox to 123.0.1@55adf05 by renovate (#19382)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

firefox-12.3.2 (2024-03-18)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/firefox to 123.0.1@55adf05 by renovate (#19382)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

firefox-12.3.2 (2024-03-18)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/firefox to 123.0.1@55adf05 by renovate (#19382)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

firefox-12.3.2 (2024-03-18)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/firefox to 123.0.1@55adf05 by renovate (#19382)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

firefox-12.3.2 (2024-03-18)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/firefox to 123.0.1@55adf05 by renovate (#19382)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
" + }, + "12.3.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/firefox/12.3.1", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/timezone", + "definitions/certificate", + "definitions/interface", + "normalize/interfaceConfiguration" + ], + "human_version": "123.0.1_12.3.1", + "version": "12.3.1", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "truecharts.org/category": "browser", + "truecharts.org/max_helm_version": "3.14", + "truecharts.org/min_helm_version": "3.11", + "truecharts.org/train": "stable" + }, + "apiVersion": "v2", + "appVersion": "123.0.1", + "dependencies": [ + { + "name": "common", + "version": "20.2.0", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation.", + "home": "https://truecharts.org/charts/stable/firefox", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/firefox.png", + "keywords": [ + "firefox", + "browser" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "firefox", + "sources": [ + "https://github.com/linuxserver/docker-firefox", + "https://github.com/truecharts/charts/tree/master/charts/stable/firefox", + "https://ghcr.io/linuxserver/firefox" + ], + "type": "application", + "version": "12.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", + "label": "Image Environment", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "TITLE", + "label": "Title", + "description": "The page title displayed on the web browser", + "schema": { + "type": "string", + "default": "TrueChartVNC Client" + } + } + ] + } + }, + { + "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 Minecraft Server runs on", + "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": 10131, + "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 Config.", + "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": 0 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID this App of the user running the application", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "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": "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 free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation.

\n

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

\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

firefox-12.3.1 (2024-03-17)

\n

Chore

\n
    \n
  • \n

    update container image ghcr.io/linuxserver/firefox to 123.0.1@55adf05 by renovate (#19382)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

firefox-12.3.1 (2024-03-17)

\n

Chore

\n
    \n
  • \n

    update container image ghcr.io/linuxserver/firefox to 123.0.1@55adf05 by renovate (#19382)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

firefox-12.3.1 (2024-03-17)

\n

Chore

\n
    \n
  • \n

    update container image ghcr.io/linuxserver/firefox to 123.0.1@55adf05 by renovate (#19382)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

firefox-12.3.1 (2024-03-17)

\n

Chore

\n
    \n
  • \n

    update container image ghcr.io/linuxserver/firefox to 123.0.1@55adf05 by renovate (#19382)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

firefox-12.3.1 (2024-03-17)

\n

Chore

\n
    \n
  • \n

    update container image ghcr.io/linuxserver/firefox to 123.0.1@55adf05 by renovate (#19382)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

firefox-12.3.1 (2024-03-17)

\n

Chore

\n
    \n
  • \n

    update container image ghcr.io/linuxserver/firefox to 123.0.1@55adf05 by renovate (#19382)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

firefox-12.3.1 (2024-03-17)

\n

Chore

\n
    \n
  • \n

    update container image ghcr.io/linuxserver/firefox to 123.0.1@55adf05 by renovate (#19382)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

firefox-12.3.1 (2024-03-17)

\n

Chore

\n
    \n
  • \n

    update container image ghcr.io/linuxserver/firefox to 123.0.1@55adf05 by renovate (#19382)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

firefox-12.3.1 (2024-03-17)

" + }, + "12.3.0": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/firefox/12.3.0", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/timezone", + "definitions/certificate", + "definitions/interface", + "normalize/interfaceConfiguration" + ], + "human_version": "123.0.1_12.3.0", + "version": "12.3.0", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "truecharts.org/category": "browser", + "truecharts.org/max_helm_version": "3.14", + "truecharts.org/min_helm_version": "3.11", + "truecharts.org/train": "stable" + }, + "apiVersion": "v2", + "appVersion": "123.0.1", + "dependencies": [ + { + "name": "common", + "version": "20.2.0", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation.", + "home": "https://truecharts.org/charts/stable/firefox", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/firefox.png", + "keywords": [ + "firefox", + "browser" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "firefox", + "sources": [ + "https://github.com/linuxserver/docker-firefox", + "https://github.com/truecharts/charts/tree/master/charts/stable/firefox", + "https://ghcr.io/linuxserver/firefox" + ], + "type": "application", + "version": "12.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", + "label": "Image Environment", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "TITLE", + "label": "Title", + "description": "The page title displayed on the web browser", + "schema": { + "type": "string", + "default": "TrueChartVNC Client" + } + } + ] + } + }, + { + "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 Minecraft Server runs on", + "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": 10131, + "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 Config.", + "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": 0 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID this App of the user running the application", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "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": "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 free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation.

\n

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

\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

firefox-12.3.0 (2024-03-16)

\n

Chore

\n
    \n
  • update container image common to v20.2.0@91ade87 by renovate (#19361)
  • \n
\n

firefox-12.3.0 (2024-03-16)

\n

Chore

\n
    \n
  • update container image common to v20.2.0@91ade87 by renovate (#19361)
  • \n
\n

firefox-12.3.0 (2024-03-16)

\n

Chore

\n
    \n
  • update container image common to v20.2.0@91ade87 by renovate (#19361)
  • \n
\n

firefox-12.3.0 (2024-03-16)

\n

Chore

\n
    \n
  • update container image common to v20.2.0@91ade87 by renovate (#19361)
  • \n
\n

firefox-12.3.0 (2024-03-16)

\n

Chore

\n
    \n
  • update container image common to v20.2.0@91ade87 by renovate (#19361)
  • \n
\n

firefox-12.3.0 (2024-03-16)

\n

Chore

\n
    \n
  • update container image common to v20.2.0@91ade87 by renovate (#19361)
  • \n
\n

firefox-12.3.0 (2024-03-16)

\n

Chore

\n
    \n
  • update container image common to v20.2.0@91ade87 by renovate (#19361)
  • \n
\n

firefox-12.2.0 (2024-03-16)

\n

Chore

\n
    \n
  • update container image common to v20.1.5@dc867e0 by renovate (#19210)
  • \n
\n

firefox-12.1.2 (2024-03-12)

\n

Chore

\n
    \n
  • update container image common to v20.0.9@caa8bac by renovate (#19179)
  • \n
\n

firefox-12.1.1 (2024-03-12)

\n

Chore

\n
    \n
  • update container image common to v20.0.8@021a874 by renovate (#19175)
  • \n
" + }, + "12.2.0": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/firefox/12.2.0", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/timezone", + "definitions/certificate", + "definitions/interface", + "normalize/interfaceConfiguration" + ], + "human_version": "123.0.1_12.2.0", + "version": "12.2.0", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "truecharts.org/category": "browser", + "truecharts.org/max_helm_version": "3.14", + "truecharts.org/min_helm_version": "3.11", + "truecharts.org/train": "stable" + }, + "apiVersion": "v2", + "appVersion": "123.0.1", + "dependencies": [ + { + "name": "common", + "version": "20.1.5", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation.", + "home": "https://truecharts.org/charts/stable/firefox", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/firefox.png", + "keywords": [ + "firefox", + "browser" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "firefox", + "sources": [ + "https://github.com/linuxserver/docker-firefox", + "https://github.com/truecharts/charts/tree/master/charts/stable/firefox", + "https://ghcr.io/linuxserver/firefox" + ], + "type": "application", + "version": "12.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", + "label": "Image Environment", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "TITLE", + "label": "Title", + "description": "The page title displayed on the web browser", + "schema": { + "type": "string", + "default": "TrueChartVNC Client" + } + } + ] + } + }, + { + "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 Minecraft Server runs on", + "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": 10131, + "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 Config.", + "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": 0 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID this App of the user running the application", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "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": "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 free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation.

\n

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

\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

firefox-12.2.0 (2024-03-16)

\n

Chore

\n
    \n
  • update container image common to v20.1.5@dc867e0 by renovate (#19210)
  • \n
\n

firefox-12.1.2 (2024-03-12)

\n

Chore

\n
    \n
  • update container image common to v20.0.9@caa8bac by renovate (#19179)
  • \n
\n

firefox-12.1.1 (2024-03-12)

\n

Chore

\n
    \n
  • update container image common to v20.0.8@021a874 by renovate (#19175)
  • \n
\n

firefox-12.1.0 (2024-03-11)

\n

Chore

\n
    \n
  • update container image common to v20.0.6@5f6c753 by renovate (#19131)
  • \n
\n

firefox-12.0.0 (2024-03-11)

\n

Chore

\n
    \n
  • update container image ghcr.io/linuxserver/firefox to v123.0.1@b616ef4 by renovate (#19132)
  • \n
\n

firefox-11.4.1 (2024-03-07)

\n

Chore

\n
    \n
  • bump everything to trigger re-release
  • \n
\n

firefox-11.4.0 (2024-03-07)

\n

Chore

\n
    \n
  • update container image common to v19.0.0@eef2062 by renovate (#18956)
  • \n
\n

firefox-11.3.0 (2024-03-06)

\n

Chore

\n
    \n
  • update container image common to v18.2.0@9e8b7d4 by renovate (#18943)
  • \n
\n

firefox-11.2.3 (2024-03-05)

\n

Chore

\n
    \n
  • bump everything to force helm release again
  • \n
\n

firefox-11.2.2 (2024-03-05)

\n

Chore

\n
    \n
  • \n

    force rereleases

    \n
  • \n
  • \n

    update container image common to v18.1.6@904d84b by renovate (#18835)

    \n
  • \n
" + }, + "11.4.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/firefox/11.4.1", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/timezone", + "definitions/certificate", + "definitions/interface", + "normalize/interfaceConfiguration" + ], + "human_version": "120.0.1_11.4.1", + "version": "11.4.1", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "truecharts.org/category": "browser", + "truecharts.org/max_helm_version": "3.14", + "truecharts.org/min_helm_version": "3.11", + "truecharts.org/train": "stable" + }, + "apiVersion": "v2", + "appVersion": "120.0.1", + "dependencies": [ + { + "name": "common", + "version": "19.0.0", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation.", + "home": "https://truecharts.org/charts/stable/firefox", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/firefox.png", + "keywords": [ + "firefox", + "browser" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "firefox", + "sources": [ + "https://github.com/linuxserver/docker-firefox", + "https://github.com/truecharts/charts/tree/master/charts/stable/firefox", + "https://ghcr.io/linuxserver/firefox" + ], + "type": "application", + "version": "11.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", + "label": "Image Environment", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "TITLE", + "label": "Title", + "description": "The page title displayed on the web browser", + "schema": { + "type": "string", + "default": "TrueChartVNC Client" + } + } + ] + } + }, + { + "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 Minecraft Server runs on", + "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": 10131, + "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 Config.", + "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": 0 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID this App of the user running the application", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "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": "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 free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation.

\n

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

\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

firefox-11.4.1 (2024-03-07)

\n

Chore

\n
    \n
  • bump everything to trigger re-release
  • \n
\n

firefox-11.4.0 (2024-03-07)

\n

Chore

\n
    \n
  • update container image common to v19.0.0@eef2062 by renovate (#18956)
  • \n
\n

firefox-11.3.0 (2024-03-06)

\n

Chore

\n
    \n
  • update container image common to v18.2.0@9e8b7d4 by renovate (#18943)
  • \n
\n

firefox-11.2.3 (2024-03-05)

\n

Chore

\n
    \n
  • bump everything to force helm release again
  • \n
\n

firefox-11.2.2 (2024-03-05)

\n

Chore

\n
    \n
  • \n

    force rereleases

    \n
  • \n
  • \n

    update container image common to v18.1.6@904d84b by renovate (#18835)

    \n
  • \n
\n

firefox-10.0.9 (2024-02-03)

\n

Chore

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

firefox-10.0.8 (2024-01-26)

\n

Chore

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

firefox-10.0.7 (2024-01-21)

\n

Chore

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

firefox-10.0.6 (2024-01-21)

\n

Chore

\n
    \n
  • update container image common to v17.2.26@24c98f7 by renovate (#17409)
  • \n
" + }, + "11.4.0": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/firefox/11.4.0", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/timezone", + "definitions/certificate", + "definitions/interface", + "normalize/interfaceConfiguration" + ], + "human_version": "120.0.1_11.4.0", + "version": "11.4.0", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "truecharts.org/category": "browser", + "truecharts.org/max_helm_version": "3.14", + "truecharts.org/min_helm_version": "3.11", + "truecharts.org/train": "stable" + }, + "apiVersion": "v2", + "appVersion": "120.0.1", + "dependencies": [ + { + "name": "common", + "version": "19.0.0", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation.", + "home": "https://truecharts.org/charts/stable/firefox", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/firefox.png", + "keywords": [ + "firefox", + "browser" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "firefox", + "sources": [ + "https://github.com/linuxserver/docker-firefox", + "https://github.com/truecharts/charts/tree/master/charts/stable/firefox", + "https://ghcr.io/linuxserver/firefox" + ], + "type": "application", + "version": "11.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", + "label": "Image Environment", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "TITLE", + "label": "Title", + "description": "The page title displayed on the web browser", + "schema": { + "type": "string", + "default": "TrueChartVNC Client" + } + } + ] + } + }, + { + "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 Minecraft Server runs on", + "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": 10131, + "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 Config.", + "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": 0 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID this App of the user running the application", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "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": "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 free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation.

\n

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

\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

firefox-11.4.0 (2024-03-07)

\n

Chore

\n
    \n
  • update container image common to v19.0.0@eef2062 by renovate (#18956)
  • \n
\n

firefox-11.3.0 (2024-03-06)

\n

Chore

\n
    \n
  • update container image common to v18.2.0@9e8b7d4 by renovate (#18943)
  • \n
\n

firefox-11.2.3 (2024-03-05)

\n

Chore

\n
    \n
  • bump everything to force helm release again
  • \n
\n

firefox-11.2.2 (2024-03-05)

\n

Chore

\n
    \n
  • \n

    force rereleases

    \n
  • \n
  • \n

    update container image common to v18.1.6@904d84b by renovate (#18835)

    \n
  • \n
\n

firefox-10.0.9 (2024-02-03)

\n

Chore

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

firefox-10.0.8 (2024-01-26)

\n

Chore

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

firefox-10.0.7 (2024-01-21)

\n

Chore

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

firefox-10.0.6 (2024-01-21)

\n

Chore

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

firefox-10.0.5 (2024-01-21)

\n

Chore

\n
    \n
  • update metadata in chart.yaml (#17457)
  • \n
" + }, + "11.3.0": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/firefox/11.3.0", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/timezone", + "definitions/certificate", + "definitions/interface", + "normalize/interfaceConfiguration" + ], + "human_version": "120.0.1_11.3.0", + "version": "11.3.0", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "truecharts.org/category": "browser", + "truecharts.org/max_helm_version": "3.14", + "truecharts.org/min_helm_version": "3.11", + "truecharts.org/train": "stable" + }, + "apiVersion": "v2", + "appVersion": "120.0.1", + "dependencies": [ + { + "name": "common", + "version": "18.2.0", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation.", + "home": "https://truecharts.org/charts/stable/firefox", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/firefox.png", + "keywords": [ + "firefox", + "browser" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "firefox", + "sources": [ + "https://github.com/linuxserver/docker-firefox", + "https://github.com/truecharts/charts/tree/master/charts/stable/firefox", + "https://ghcr.io/linuxserver/firefox" + ], + "type": "application", + "version": "11.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", + "label": "Image Environment", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "TITLE", + "label": "Title", + "description": "The page title displayed on the web browser", + "schema": { + "type": "string", + "default": "TrueChartVNC Client" + } + } + ] + } + }, + { + "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 Minecraft Server runs on", + "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": 10131, + "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 Config.", + "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": 0 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID this App of the user running the application", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "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": "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 free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation.

\n

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

\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

firefox-11.3.0 (2024-03-06)

\n

Chore

\n
    \n
  • update container image common to v18.2.0@9e8b7d4 by renovate (#18943)
  • \n
\n

firefox-11.2.3 (2024-03-05)

\n

Chore

\n
    \n
  • bump everything to force helm release again
  • \n
\n

firefox-11.2.2 (2024-03-05)

\n

Chore

\n
    \n
  • \n

    force rereleases

    \n
  • \n
  • \n

    update container image common to v18.1.6@904d84b by renovate (#18835)

    \n
  • \n
\n

firefox-10.0.9 (2024-02-03)

\n

Chore

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

firefox-10.0.8 (2024-01-26)

\n

Chore

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

firefox-10.0.7 (2024-01-21)

\n

Chore

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

firefox-10.0.6 (2024-01-21)

\n

Chore

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

firefox-10.0.5 (2024-01-21)

\n

Chore

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

firefox-10.0.4 (2024-01-21)

\n

Chore

\n
    \n
  • update container image ghcr.io/linuxserver/firefox to 120.0.1@ac3c881 by renovate (#17351)
  • \n
" + }, + "11.2.3": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/firefox/11.2.3", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/timezone", + "definitions/certificate", + "definitions/interface", + "normalize/interfaceConfiguration" + ], + "human_version": "120.0.1_11.2.3", + "version": "11.2.3", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "truecharts.org/category": "browser", + "truecharts.org/max_helm_version": "3.14", + "truecharts.org/min_helm_version": "3.11", + "truecharts.org/train": "stable" + }, + "apiVersion": "v2", + "appVersion": "120.0.1", + "dependencies": [ + { + "name": "common", + "version": "18.1.6", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation.", + "home": "https://truecharts.org/charts/stable/firefox", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/firefox.png", + "keywords": [ + "firefox", + "browser" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "firefox", + "sources": [ + "https://github.com/linuxserver/docker-firefox", + "https://github.com/truecharts/charts/tree/master/charts/stable/firefox", + "https://ghcr.io/linuxserver/firefox" + ], + "type": "application", + "version": "11.2.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", + "label": "Image Environment", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "TITLE", + "label": "Title", + "description": "The page title displayed on the web browser", + "schema": { + "type": "string", + "default": "TrueChartVNC Client" + } + } + ] + } + }, + { + "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 Minecraft Server runs on", + "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": 10131, + "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 Config.", + "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": 0 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID this App of the user running the application", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "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": "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 free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation.

\n

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

\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

firefox-11.2.3 (2024-03-05)

\n

Chore

\n
    \n
  • bump everything to force helm release again
  • \n
\n

firefox-11.2.2 (2024-03-05)

\n

Chore

\n
    \n
  • \n

    force rereleases

    \n
  • \n
  • \n

    update container image common to v18.1.6@904d84b by renovate (#18835)

    \n
  • \n
\n

firefox-10.0.9 (2024-02-03)

\n

Chore

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

firefox-10.0.8 (2024-01-26)

\n

Chore

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

firefox-10.0.7 (2024-01-21)

\n

Chore

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

firefox-10.0.6 (2024-01-21)

\n

Chore

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

firefox-10.0.5 (2024-01-21)

\n

Chore

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

firefox-10.0.4 (2024-01-21)

\n

Chore

\n
    \n
  • update container image ghcr.io/linuxserver/firefox to 120.0.1@ac3c881 by renovate (#17351)
  • \n
\n

firefox-10.0.3 (2024-01-15)

\n

Chore

\n
    \n
  • update container image ghcr.io/linuxserver/firefox to 120.0.1@34df0f7 by renovate (#17232)
  • \n
" + }, + "10.2.0": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/firefox/10.2.0", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/interface", + "normalize/interfaceConfiguration", + "definitions/gpuConfiguration", + "definitions/timezone", + "definitions/certificate" + ], + "human_version": "120.0.1_10.2.0", + "version": "10.2.0", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "truecharts.org/category": "browser", + "truecharts.org/max_helm_version": "3.14", + "truecharts.org/min_helm_version": "3.12", + "truecharts.org/train": "stable" + }, + "apiVersion": "v2", + "appVersion": "120.0.1", + "dependencies": [ + { + "name": "common", + "version": "17.5.0", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation.", + "home": "https://truecharts.org/charts/stable/firefox", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/firefox.png", + "keywords": [ + "firefox", + "browser" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "firefox", + "sources": [ + "https://github.com/linuxserver/docker-firefox", + "https://github.com/truecharts/charts/tree/master/charts/stable/firefox", + "https://ghcr.io/linuxserver/firefox" + ], + "type": "application", + "version": "10.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", + "label": "Image Environment", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "TITLE", + "label": "Title", + "description": "The page title displayed on the web browser", + "schema": { + "type": "string", + "default": "TrueChartVNC Client" + } + } + ] + } + }, + { + "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 Minecraft Server runs on", + "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": 10131, + "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 Config.", + "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": 0 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID this App of the user running the application", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "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": "

a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation.

\n

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

\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

firefox-10.0.9 (2024-02-03)

\n

Chore

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

firefox-10.0.8 (2024-01-26)

\n

Chore

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

firefox-10.0.7 (2024-01-21)

\n

Chore

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

firefox-10.0.6 (2024-01-21)

\n

Chore

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

firefox-10.0.5 (2024-01-21)

\n

Chore

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

firefox-10.0.4 (2024-01-21)

\n

Chore

\n
    \n
  • update container image ghcr.io/linuxserver/firefox to 120.0.1@ac3c881 by renovate (#17351)
  • \n
\n

firefox-10.0.3 (2024-01-15)

\n

Chore

\n
    \n
  • update container image ghcr.io/linuxserver/firefox to 120.0.1@34df0f7 by renovate (#17232)
  • \n
\n

firefox-10.0.2 (2024-01-09)

\n

Chore

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

firefox-10.0.1 (2024-01-08)

\n

Chore

\n
    \n
  • update container image ghcr.io/linuxserver/firefox to 120.0.1@2bf06b5 by renovate (#16940)
  • \n
\n

firefox-10.0.0 (2024-01-03)

\n

Chore

" + }, + "10.1.0": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/firefox/10.1.0", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/interface", + "normalize/interfaceConfiguration", + "definitions/gpuConfiguration", + "definitions/timezone", + "definitions/certificate" + ], + "human_version": "120.0.1_10.1.0", + "version": "10.1.0", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "truecharts.org/category": "browser", + "truecharts.org/max_helm_version": "3.14", + "truecharts.org/min_helm_version": "3.12", + "truecharts.org/train": "stable" + }, + "apiVersion": "v2", + "appVersion": "120.0.1", + "dependencies": [ + { + "name": "common", + "version": "17.4.2", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation.", + "home": "https://truecharts.org/charts/stable/firefox", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/firefox.png", + "keywords": [ + "firefox", + "browser" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "firefox", + "sources": [ + "https://github.com/linuxserver/docker-firefox", + "https://github.com/truecharts/charts/tree/master/charts/stable/firefox", + "https://ghcr.io/linuxserver/firefox" + ], + "type": "application", + "version": "10.1.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", + "label": "Image Environment", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "TITLE", + "label": "Title", + "description": "The page title displayed on the web browser", + "schema": { + "type": "string", + "default": "TrueChartVNC Client" + } + } + ] + } + }, + { + "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 Minecraft Server runs on", + "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": 10131, + "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 Config.", + "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": 0 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID this App of the user running the application", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "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": "

a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation.

\n

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

\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

firefox-10.0.9 (2024-02-03)

\n

Chore

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

firefox-10.0.8 (2024-01-26)

\n

Chore

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

firefox-10.0.7 (2024-01-21)

\n

Chore

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

firefox-10.0.6 (2024-01-21)

\n

Chore

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

firefox-10.0.5 (2024-01-21)

\n

Chore

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

firefox-10.0.4 (2024-01-21)

\n

Chore

\n
    \n
  • update container image ghcr.io/linuxserver/firefox to 120.0.1@ac3c881 by renovate (#17351)
  • \n
\n

firefox-10.0.3 (2024-01-15)

\n

Chore

\n
    \n
  • update container image ghcr.io/linuxserver/firefox to 120.0.1@34df0f7 by renovate (#17232)
  • \n
\n

firefox-10.0.2 (2024-01-09)

\n

Chore

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

firefox-10.0.1 (2024-01-08)

\n

Chore

\n
    \n
  • update container image ghcr.io/linuxserver/firefox to 120.0.1@2bf06b5 by renovate (#16940)
  • \n
\n

firefox-10.0.0 (2024-01-03)

\n

Chore

" + } +} \ No newline at end of file diff --git a/stable/firefox/item.yaml b/stable/firefox/item.yaml new file mode 100644 index 0000000..c17da30 --- /dev/null +++ b/stable/firefox/item.yaml @@ -0,0 +1,4 @@ +icon_url: https://truecharts.org/img/hotlink-ok/chart-icons/firefox.png +categories: + - browser +screenshots: [] diff --git a/stable/frigate/12.2.0/.helmignore b/stable/frigate/12.2.0/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/frigate/12.2.0/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/frigate/12.2.0/CHANGELOG.md b/stable/frigate/12.2.0/CHANGELOG.md new file mode 100644 index 0000000..cfe4e0a --- /dev/null +++ b/stable/frigate/12.2.0/CHANGELOG.md @@ -0,0 +1,100 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + + +## [frigate-12.1.11](https://github.com/truecharts/charts/compare/frigate-12.1.10...frigate-12.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)) + + +## [frigate-12.1.10](https://github.com/truecharts/charts/compare/frigate-12.1.9...frigate-12.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)) + + +## [frigate-12.1.9](https://github.com/truecharts/charts/compare/frigate-12.1.8...frigate-12.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)) + + +## [frigate-12.1.8](https://github.com/truecharts/charts/compare/frigate-12.1.7...frigate-12.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)) + + +## [frigate-12.1.7](https://github.com/truecharts/charts/compare/frigate-12.1.6...frigate-12.1.7) (2024-01-21) + +### Chore + + + +- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) + + + + +## [frigate-12.1.6](https://github.com/truecharts/charts/compare/frigate-12.1.5...frigate-12.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)) + + +## [frigate-12.1.5](https://github.com/truecharts/charts/compare/frigate-12.1.4...frigate-12.1.5) (2024-01-02) + +### Chore + + + +- force bump to ensure up-to-date catalogs + + +## [frigate-12.1.4](https://github.com/truecharts/charts/compare/frigate-12.1.3...frigate-12.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)) + + +## [frigate-12.1.3](https://github.com/truecharts/charts/compare/frigate-12.1.0...frigate-12.1.3) (2024-01-01) + +### Chore + + + +- bump all charts for OCI test push + +- move everything to consume OCI-hosted common-chart dependency + +- update container image common to v17.2.19[@4ebb688](https://github.com/4ebb688) by renovate ([#16733](https://github.com/truecharts/charts/issues/16733)) + +- update container image common to v17.2.18[@085ba3c](https://github.com/085ba3c) by renovate ([#16732](https://github.com/truecharts/charts/issues/16732)) \ No newline at end of file diff --git a/stable/frigate/12.2.0/Chart.yaml b/stable/frigate/12.2.0/Chart.yaml new file mode 100644 index 0000000..4164cd7 --- /dev/null +++ b/stable/frigate/12.2.0/Chart.yaml @@ -0,0 +1,39 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: nvr + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.12" + truecharts.org/train: stable +apiVersion: v2 +appVersion: 0.12.1 +dependencies: + - name: common + version: 17.4.2 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: NVR With Realtime Object Detection for IP Cameras +home: https://truecharts.org/charts/stable/frigate +icon: https://truecharts.org/img/hotlink-ok/chart-icons/frigate.png +keywords: + - encode + - nvr + - media + - frigate +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: frigate +sources: + - https://github.com/blakeblackshear/frigate + - https://github.com/truecharts/charts/tree/master/charts/stable/frigate + - https://ghcr.io/blakeblackshear/frigate +type: application +version: 12.2.0 diff --git a/stable/frigate/12.2.0/README.md b/stable/frigate/12.2.0/README.md new file mode 100644 index 0000000..bb1903d --- /dev/null +++ b/stable/frigate/12.2.0/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/frigate) + +**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/frigate/12.2.0/app-readme.md b/stable/frigate/12.2.0/app-readme.md new file mode 100644 index 0000000..2f2f6dd --- /dev/null +++ b/stable/frigate/12.2.0/app-readme.md @@ -0,0 +1,8 @@ +NVR With Realtime Object Detection for IP Cameras + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/frigate](https://truecharts.org/charts/stable/frigate) + +--- + +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/frigate/12.2.0/charts/common-17.4.2.tgz b/stable/frigate/12.2.0/charts/common-17.4.2.tgz new file mode 100644 index 0000000000000000000000000000000000000000..31f3a104561f859f297067776ab86a1503525be4 GIT binary patch literal 100097 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 l8bLay74+E3;;+DksJU3 literal 0 HcmV?d00001 diff --git a/stable/frigate/12.2.0/ix_values.yaml b/stable/frigate/12.2.0/ix_values.yaml new file mode 100644 index 0000000..f5513e2 --- /dev/null +++ b/stable/frigate/12.2.0/ix_values.yaml @@ -0,0 +1,96 @@ +image: + repository: ghcr.io/blakeblackshear/frigate + pullPolicy: IfNotPresent + tag: 0.12.1@sha256:bb7f7e76a13eccef0b12704e5851cc774a12af1f12df387d6a70a796a3e938c3 +tensorrtImage: + repository: ghcr.io/blakeblackshear/frigate + pullPolicy: IfNotPresent + tag: 0.12.1-tensorrt@sha256:db6e62d94206803011307296242ee6bfcc185bcf4eb6f68a6fdab8fa7f03a3fb +# When this is defined, the contents will be mounted +# as configmap into the container at /config/config.yml. +frigateConfig: {} +# -- https://docs.frigate.video/configuration/ +# mqtt: +# enabled: False +# cameras: +# dummy: +# enabled: False +# ffmpeg: +# inputs: +# - path: rtsp://127.0.0.1:554/rtsp +# roles: +# - detect + +workload: + main: + podSpec: + initContainers: + init-config: + enabled: "{{ not .Values.frigateConfig }}" + type: init + imageSelector: alpineImage + command: + - /bin/sh + - -c + - | + mkdir -p /config + if [ ! -f /config/config.yml ]; then + echo "Config file not found, copying dummy..." + cp /dummy-config/config.yml.dummy /config/config.yml + echo "Config file copied, you can now edit it at /config/config.yml" + fi +securityContext: + container: + readOnlyRootFilesystem: false + runAsNonRoot: false + runAsUser: 0 + runAsGroup: 0 +service: + main: + ports: + main: + port: 10500 + protocol: http + targetPort: 5000 + rtmp: + enabled: true + ports: + rtmp: + enabled: true + port: 1935 + targetPort: 1935 + rtsp: + enabled: true + ports: + rtsp: + enabled: true + port: 8554 + targetPort: 8554 + webrtc: + enabled: true + ports: + webrtc-tcp: + enabled: true + port: 8555 + targetPort: 8555 + webrtc-udp: + enabled: true + port: 8555 + protocol: udp + targetPort: 8555 +persistence: + media: + enabled: true + mountPath: /media + config: + # Only enable when not using frigateConfig + enabled: false + mountPath: /config + targetSelector: + main: + main: {} + init-config: {} +portal: + open: + enabled: true +updated: true diff --git a/stable/frigate/12.2.0/questions.yaml b/stable/frigate/12.2.0/questions.yaml new file mode 100644 index 0000000..188238a --- /dev/null +++ b/stable/frigate/12.2.0/questions.yaml @@ -0,0 +1,3321 @@ +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: imageSelector + label: Select Image + schema: + type: string + default: image + enum: + - value: image + description: Base Image + - value: tensorrtImage + description: Image with TensorRT libraries for nvidia cards + - 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: 10500 + required: true + - variable: rtmp + label: RTMP Service + description: The service on which nodes connect to. + 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: rtmp + label: RTMP 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: 1935 + required: true + - variable: rtsp + label: RTSP Service + description: The service on which nodes connect to. + 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: rtsp + label: RTSP 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: 8554 + required: true + - variable: webrtc + label: WebRTC Service + description: The service on which nodes connect to. + 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: webrtc-tcp + label: WebRTC (TCP) 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: 8555 + required: true + - variable: webrtc-udp + label: WebRTC (UDP) 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: 8555 + 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: media + label: App Media + description: Stores the Application Media and DB + 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: config + label: App Config + 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: 0 + - variable: runAsGroup + label: runAsGroup + description: The groupID this App of the user running the application + schema: + type: int + default: 0 + # 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/frigate/12.2.0/templates/NOTES.txt b/stable/frigate/12.2.0/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/frigate/12.2.0/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/frigate/12.2.0/templates/_configmap.tpl b/stable/frigate/12.2.0/templates/_configmap.tpl new file mode 100644 index 0000000..ebf2580 --- /dev/null +++ b/stable/frigate/12.2.0/templates/_configmap.tpl @@ -0,0 +1,42 @@ +{{/* Define the configmap */}} +{{- define "frigate.configmap" -}} +enabled: true +data: + {{- if .Values.frigateConfig }} + config.yml: | + {{- .Values.frigateConfig | toYaml | nindent 4 }} + {{- else }} + config.yml.dummy: | + mqtt: + enabled: false + cameras: + dummy: + enabled: false + ffmpeg: + inputs: + - path: rtsp://127.0.0.1:554/rtsp + roles: + - detect + {{- end }} +{{- end -}} + +{{- define "frigate.configVolume" -}} +enabled: true +type: configmap +objectName: frigate-config +targetSelector: + main: + main: {} + init-config: {} +{{- if .Values.frigateConfig }} +mountPath: /config +items: + - key: config.yml + path: config.yml +{{- else }} +mountPath: /dummy-config +items: + - key: config.yml.dummy + path: config.yml.dummy +{{- end -}} +{{- end -}} diff --git a/stable/frigate/12.2.0/templates/common.yaml b/stable/frigate/12.2.0/templates/common.yaml new file mode 100644 index 0000000..6ec5e06 --- /dev/null +++ b/stable/frigate/12.2.0/templates/common.yaml @@ -0,0 +1,20 @@ +{{/* Make sure all variables are set properly */}} +{{- include "tc.v1.common.loader.init" . }} + +{{/* Render configmap for frigate */}} +{{- $config := include "frigate.configmap" . | fromYaml -}} +{{- if $config -}} + {{- $_ := set .Values.configmap "frigate-config" $config -}} +{{- end -}} + +{{- if not .Values.frigateConfig -}} + {{- $_ := set .Values.persistence.config "enabled" true -}} +{{- end -}} + +{{- $vol := include "frigate.configVolume" . | fromYaml -}} +{{- if $vol -}} + {{- $_ := set .Values.persistence "frigate-config" $vol -}} +{{- end -}} + +{{/* Render the templates */}} +{{ include "tc.v1.common.loader.apply" . }} diff --git a/stable/frigate/12.2.0/values.yaml b/stable/frigate/12.2.0/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/frigate/12.3.0/.helmignore b/stable/frigate/12.3.0/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/frigate/12.3.0/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/frigate/12.3.0/CHANGELOG.md b/stable/frigate/12.3.0/CHANGELOG.md new file mode 100644 index 0000000..01cbec1 --- /dev/null +++ b/stable/frigate/12.3.0/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + + + +## [frigate-12.1.11](https://github.com/truecharts/charts/compare/frigate-12.1.10...frigate-12.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)) + + +## [frigate-12.1.10](https://github.com/truecharts/charts/compare/frigate-12.1.9...frigate-12.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)) + + +## [frigate-12.1.9](https://github.com/truecharts/charts/compare/frigate-12.1.8...frigate-12.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)) + + +## [frigate-12.1.8](https://github.com/truecharts/charts/compare/frigate-12.1.7...frigate-12.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)) + + +## [frigate-12.1.7](https://github.com/truecharts/charts/compare/frigate-12.1.6...frigate-12.1.7) (2024-01-21) + +### Chore + + + +- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) + + + + +## [frigate-12.1.6](https://github.com/truecharts/charts/compare/frigate-12.1.5...frigate-12.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)) + + +## [frigate-12.1.5](https://github.com/truecharts/charts/compare/frigate-12.1.4...frigate-12.1.5) (2024-01-02) + +### Chore + + + +- force bump to ensure up-to-date catalogs + + +## [frigate-12.1.4](https://github.com/truecharts/charts/compare/frigate-12.1.3...frigate-12.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)) + + +## [frigate-12.1.3](https://github.com/truecharts/charts/compare/frigate-12.1.0...frigate-12.1.3) (2024-01-01) + +### Chore + + + +- bump all charts for OCI test push + +- move everything to consume OCI-hosted common-chart dependency + +- update container image common to v17.2.19[@4ebb688](https://github.com/4ebb688) by renovate ([#16733](https://github.com/truecharts/charts/issues/16733)) diff --git a/stable/frigate/12.3.0/Chart.yaml b/stable/frigate/12.3.0/Chart.yaml new file mode 100644 index 0000000..702589f --- /dev/null +++ b/stable/frigate/12.3.0/Chart.yaml @@ -0,0 +1,39 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: nvr + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.12" + truecharts.org/train: stable +apiVersion: v2 +appVersion: 0.12.1 +dependencies: + - name: common + version: 17.5.0 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: NVR With Realtime Object Detection for IP Cameras +home: https://truecharts.org/charts/stable/frigate +icon: https://truecharts.org/img/hotlink-ok/chart-icons/frigate.png +keywords: + - encode + - nvr + - media + - frigate +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: frigate +sources: + - https://github.com/blakeblackshear/frigate + - https://github.com/truecharts/charts/tree/master/charts/stable/frigate + - https://ghcr.io/blakeblackshear/frigate +type: application +version: 12.3.0 diff --git a/stable/frigate/12.3.0/README.md b/stable/frigate/12.3.0/README.md new file mode 100644 index 0000000..bb1903d --- /dev/null +++ b/stable/frigate/12.3.0/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/frigate) + +**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/frigate/12.3.0/app-readme.md b/stable/frigate/12.3.0/app-readme.md new file mode 100644 index 0000000..2f2f6dd --- /dev/null +++ b/stable/frigate/12.3.0/app-readme.md @@ -0,0 +1,8 @@ +NVR With Realtime Object Detection for IP Cameras + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/frigate](https://truecharts.org/charts/stable/frigate) + +--- + +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/frigate/12.3.0/charts/common-17.5.0.tgz b/stable/frigate/12.3.0/charts/common-17.5.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..3a5534883aaac1a331bf10ad166cff7fe5d2dd75 GIT binary patch literal 100452 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 z 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 Wm9Bh-<^K-=0RR7ge;?HVjtl_2wPFzf literal 0 HcmV?d00001 diff --git a/stable/frigate/12.3.0/ix_values.yaml b/stable/frigate/12.3.0/ix_values.yaml new file mode 100644 index 0000000..f5513e2 --- /dev/null +++ b/stable/frigate/12.3.0/ix_values.yaml @@ -0,0 +1,96 @@ +image: + repository: ghcr.io/blakeblackshear/frigate + pullPolicy: IfNotPresent + tag: 0.12.1@sha256:bb7f7e76a13eccef0b12704e5851cc774a12af1f12df387d6a70a796a3e938c3 +tensorrtImage: + repository: ghcr.io/blakeblackshear/frigate + pullPolicy: IfNotPresent + tag: 0.12.1-tensorrt@sha256:db6e62d94206803011307296242ee6bfcc185bcf4eb6f68a6fdab8fa7f03a3fb +# When this is defined, the contents will be mounted +# as configmap into the container at /config/config.yml. +frigateConfig: {} +# -- https://docs.frigate.video/configuration/ +# mqtt: +# enabled: False +# cameras: +# dummy: +# enabled: False +# ffmpeg: +# inputs: +# - path: rtsp://127.0.0.1:554/rtsp +# roles: +# - detect + +workload: + main: + podSpec: + initContainers: + init-config: + enabled: "{{ not .Values.frigateConfig }}" + type: init + imageSelector: alpineImage + command: + - /bin/sh + - -c + - | + mkdir -p /config + if [ ! -f /config/config.yml ]; then + echo "Config file not found, copying dummy..." + cp /dummy-config/config.yml.dummy /config/config.yml + echo "Config file copied, you can now edit it at /config/config.yml" + fi +securityContext: + container: + readOnlyRootFilesystem: false + runAsNonRoot: false + runAsUser: 0 + runAsGroup: 0 +service: + main: + ports: + main: + port: 10500 + protocol: http + targetPort: 5000 + rtmp: + enabled: true + ports: + rtmp: + enabled: true + port: 1935 + targetPort: 1935 + rtsp: + enabled: true + ports: + rtsp: + enabled: true + port: 8554 + targetPort: 8554 + webrtc: + enabled: true + ports: + webrtc-tcp: + enabled: true + port: 8555 + targetPort: 8555 + webrtc-udp: + enabled: true + port: 8555 + protocol: udp + targetPort: 8555 +persistence: + media: + enabled: true + mountPath: /media + config: + # Only enable when not using frigateConfig + enabled: false + mountPath: /config + targetSelector: + main: + main: {} + init-config: {} +portal: + open: + enabled: true +updated: true diff --git a/stable/frigate/12.3.0/questions.yaml b/stable/frigate/12.3.0/questions.yaml new file mode 100644 index 0000000..188238a --- /dev/null +++ b/stable/frigate/12.3.0/questions.yaml @@ -0,0 +1,3321 @@ +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: imageSelector + label: Select Image + schema: + type: string + default: image + enum: + - value: image + description: Base Image + - value: tensorrtImage + description: Image with TensorRT libraries for nvidia cards + - 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: 10500 + required: true + - variable: rtmp + label: RTMP Service + description: The service on which nodes connect to. + 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: rtmp + label: RTMP 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: 1935 + required: true + - variable: rtsp + label: RTSP Service + description: The service on which nodes connect to. + 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: rtsp + label: RTSP 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: 8554 + required: true + - variable: webrtc + label: WebRTC Service + description: The service on which nodes connect to. + 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: webrtc-tcp + label: WebRTC (TCP) 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: 8555 + required: true + - variable: webrtc-udp + label: WebRTC (UDP) 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: 8555 + 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: media + label: App Media + description: Stores the Application Media and DB + 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: config + label: App Config + 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: 0 + - variable: runAsGroup + label: runAsGroup + description: The groupID this App of the user running the application + schema: + type: int + default: 0 + # 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/frigate/12.3.0/templates/NOTES.txt b/stable/frigate/12.3.0/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/frigate/12.3.0/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/frigate/12.3.0/templates/_configmap.tpl b/stable/frigate/12.3.0/templates/_configmap.tpl new file mode 100644 index 0000000..ebf2580 --- /dev/null +++ b/stable/frigate/12.3.0/templates/_configmap.tpl @@ -0,0 +1,42 @@ +{{/* Define the configmap */}} +{{- define "frigate.configmap" -}} +enabled: true +data: + {{- if .Values.frigateConfig }} + config.yml: | + {{- .Values.frigateConfig | toYaml | nindent 4 }} + {{- else }} + config.yml.dummy: | + mqtt: + enabled: false + cameras: + dummy: + enabled: false + ffmpeg: + inputs: + - path: rtsp://127.0.0.1:554/rtsp + roles: + - detect + {{- end }} +{{- end -}} + +{{- define "frigate.configVolume" -}} +enabled: true +type: configmap +objectName: frigate-config +targetSelector: + main: + main: {} + init-config: {} +{{- if .Values.frigateConfig }} +mountPath: /config +items: + - key: config.yml + path: config.yml +{{- else }} +mountPath: /dummy-config +items: + - key: config.yml.dummy + path: config.yml.dummy +{{- end -}} +{{- end -}} diff --git a/stable/frigate/12.3.0/templates/common.yaml b/stable/frigate/12.3.0/templates/common.yaml new file mode 100644 index 0000000..6ec5e06 --- /dev/null +++ b/stable/frigate/12.3.0/templates/common.yaml @@ -0,0 +1,20 @@ +{{/* Make sure all variables are set properly */}} +{{- include "tc.v1.common.loader.init" . }} + +{{/* Render configmap for frigate */}} +{{- $config := include "frigate.configmap" . | fromYaml -}} +{{- if $config -}} + {{- $_ := set .Values.configmap "frigate-config" $config -}} +{{- end -}} + +{{- if not .Values.frigateConfig -}} + {{- $_ := set .Values.persistence.config "enabled" true -}} +{{- end -}} + +{{- $vol := include "frigate.configVolume" . | fromYaml -}} +{{- if $vol -}} + {{- $_ := set .Values.persistence "frigate-config" $vol -}} +{{- end -}} + +{{/* Render the templates */}} +{{ include "tc.v1.common.loader.apply" . }} diff --git a/stable/frigate/12.3.0/values.yaml b/stable/frigate/12.3.0/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/frigate/13.2.3/.helmignore b/stable/frigate/13.2.3/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/frigate/13.2.3/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/frigate/13.2.3/CHANGELOG.md b/stable/frigate/13.2.3/CHANGELOG.md new file mode 100644 index 0000000..83649f3 --- /dev/null +++ b/stable/frigate/13.2.3/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + +## [frigate-13.2.3](https://github.com/truecharts/charts/compare/frigate-13.2.2...frigate-13.2.3) (2024-03-05) + +### Chore + + + +- bump everything to force helm release again + + +## [frigate-13.2.2](https://github.com/truecharts/charts/compare/frigate-13.2.0...frigate-13.2.2) (2024-03-05) + +### Chore + + + +- force rereleases + +- update container image common to v18.1.6[@904d84b](https://github.com/904d84b) by renovate ([#18835](https://github.com/truecharts/charts/issues/18835)) + + + + + + + + + + +## [frigate-12.1.11](https://github.com/truecharts/charts/compare/frigate-12.1.10...frigate-12.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)) + + +## [frigate-12.1.10](https://github.com/truecharts/charts/compare/frigate-12.1.9...frigate-12.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)) + + +## [frigate-12.1.9](https://github.com/truecharts/charts/compare/frigate-12.1.8...frigate-12.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)) + + +## [frigate-12.1.8](https://github.com/truecharts/charts/compare/frigate-12.1.7...frigate-12.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)) + + +## [frigate-12.1.7](https://github.com/truecharts/charts/compare/frigate-12.1.6...frigate-12.1.7) (2024-01-21) + +### Chore + + + +- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) + + + + +## [frigate-12.1.6](https://github.com/truecharts/charts/compare/frigate-12.1.5...frigate-12.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)) + + +## [frigate-12.1.5](https://github.com/truecharts/charts/compare/frigate-12.1.4...frigate-12.1.5) (2024-01-02) + +### Chore + + diff --git a/stable/frigate/13.2.3/Chart.yaml b/stable/frigate/13.2.3/Chart.yaml new file mode 100644 index 0000000..638b2e4 --- /dev/null +++ b/stable/frigate/13.2.3/Chart.yaml @@ -0,0 +1,39 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: nvr + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.11" + truecharts.org/train: stable +apiVersion: v2 +appVersion: 0.12.1 +dependencies: + - name: common + version: 18.1.6 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: NVR With Realtime Object Detection for IP Cameras +home: https://truecharts.org/charts/stable/frigate +icon: https://truecharts.org/img/hotlink-ok/chart-icons/frigate.png +keywords: + - encode + - nvr + - media + - frigate +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: frigate +sources: + - https://github.com/blakeblackshear/frigate + - https://github.com/truecharts/charts/tree/master/charts/stable/frigate + - https://ghcr.io/blakeblackshear/frigate +type: application +version: 13.2.3 diff --git a/stable/frigate/13.2.3/README.md b/stable/frigate/13.2.3/README.md new file mode 100644 index 0000000..bb1903d --- /dev/null +++ b/stable/frigate/13.2.3/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/frigate) + +**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/frigate/13.2.3/app-readme.md b/stable/frigate/13.2.3/app-readme.md new file mode 100644 index 0000000..2f2f6dd --- /dev/null +++ b/stable/frigate/13.2.3/app-readme.md @@ -0,0 +1,8 @@ +NVR With Realtime Object Detection for IP Cameras + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/frigate](https://truecharts.org/charts/stable/frigate) + +--- + +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/frigate/13.2.3/charts/common-18.1.6.tgz b/stable/frigate/13.2.3/charts/common-18.1.6.tgz new file mode 100644 index 0000000000000000000000000000000000000000..3ada4bb6e11b85db0cb91d1dddb95d9177de3af8 GIT binary patch literal 99389 zcmV)KK)SyliwG0|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-F~yv>9?DW?;6ckr`P%pG@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?DAdb8fEeCc_;eb##v|DVGkLG+n6fTjGu+3YvE-7Np_w|iUu 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!;XHr`v6#vEM#u_^<){jm{x#G)ArdVFz~n zgGR6Ab-D+wZUgp~`9D-b#ORa|wi-!Y(qP%BH(M!|T?AqCu-6)Sy+(7?Y;?SXQLl$Q zuM0=b=J@cSH}1EZ&4veIe+&`yMjhDc`^`qT)f$PFG=Qljq9FJRV*f?mzQO|FT z{EoL2QIGgaDO!ywFI$s^4X&Mf%cAK)x7+BoT1_AN9lzIVA9gy8W)mHF?Q!4p{Z98_ zH0t{PL9^?(V1L~3VQbv$j2azp)apaH990-ZI9!9EvYa(Hn}?~V4D?Z>(d(k-A@U*Y zjC+TTw%_S>5b8I2jc&8qgq?%-VW->f`Dk?58Mm9GUa#5eb^47?w|lS@L+ZtldDGP> zs)8Cv86;ws&p~T68g<6wgTq$;pwnu!MyNmPq7FLjj1M~P&bZY*Jm~iiN3h}bny}yM zAGQv?5$bxV)9AvbDBdL_Im3!%m}h=(k4) z5H-ghZ1NHZ{ZYpoHxHrTfbG%vuyN2sqvce*pP)5XH!o$am_|AYTVAU-9(Oy)?~IUt zh&tmYJnT2yt!DFZ1Y50fzuRv%dfl$yIPf}+#>hkCX4m%`2jfH3@Ru*_#jggnB|cg< z)-!yE#xRD{{l%{u;ZD8NO6Md(e%EjG{noe#dn5ngpfy6>Zu1Zw9(b_j`EB28A2bge zjqX9K;U6?c2W^OY8i zj@y0M^&8%Sf7tN*osN%MZNGWY?Kk>|jl=GEH0pN!)?ufEyu+q{&~9~_<6fiPU(Uy8 zFvidyJrrYAtr+26>!5ouI%pp9HQVYpd;US^pwk#1_=lsmchKu~JL6`*+dJqryN6!4 z)$7BichGD2{qDGZc;GKZI7U8xFo8v-Vr0=_r`b9Io_E+AH=E5)+w%_&#$CU8 z=#Sgo)@a-xb-Vq>xOvd(j(eO5G-1p4k=I;BT@p^nBd9B@6(fAu>K&j~`>@sbI&kD4 zj{HWuiN?JaJb-P!)KRnB?lrw}d)#aG4;#Hk>u?M^qu#jH_4>`_%w0MEpzy=h1)y5Q z^K1>dvIG8?K3Wk{4+0|;koyXkd*)Fpwn(8!z*q45>m5& zaDY&EZ45YlK_m#gn%ckM7`;tk>_3#=_c%rqUa_3wDeRTRHqh39W0P1g{Z^yZY#cT_ zh65b5M+c*R$M1E}$Zzz=hlky6v(xXk4-eWMuf?ZhV~kL@>9=6JH-`P*=n#%z@8FP2 zf#Y>>co31bjRy%(CNM>L3M1txJVi08S9ZWr8nBcW^`!3`^nK)WIUo8WcmV<*i!f3c zFTfpI0E%ZgfHBu-IOM<1AP)bk;nYhoY+XTp#Xi(nR^YqKc~K~sa-12f(VmDGjO-#Yy) zYQgvp`2bRlLcPRMLv>ie!qf%=g$JMRYF#-H|C-=9+i~<%8a=us3UXg<)9I71LCkw27m~=~^~G!OzCW z5d8ghv)(+cSSqb$X-;FBbo30LwR)B)g;zKj>USnEd#6xu-Vy&ZnzB_|&1&&q%fMzW zO0KG>3(}t4;)~^py#s2BRzDFc!V3izz)vWc0fuG~XZw1+MvziXbBTzs3CI;+Qzs(z zfOs&l%H*(%Ae*MxaS&E%@o`|i00zS=$fk9$E^4W9Vn6d%n!P6>iTR3^wlgd28~pt> zXx5vZTB87(begz|(HMU$0(+^9D3VF&VNWgRX1;M?PUM*^FJ}Oso>L+a%rv5nG{e+= z%l^C+ixAFAQOUs(XG#x&E?m{tg`V1vGF!^c`7k?g>);JxQy|Uq!V<|>k(}au^dsrE z44^wR^h$n<7zJ33w)F52Ungt0w6f-VwK!zk- zE6C9-yNX4GTIs5>GD4Vzz`?(RA)KT}?!t{~IVzceT2Sh;XP6l0VfSbxA_b6DiN%YE z2q$ODA+lCjbVblBP|>%1o1&cj7B}Z(LlHCOgbVl0`7n=dOd<+Ke43c3XdeiY<^o~m z9IyjPfgMbmrRGj)B&{6EKGaq*@*X3e@0w)~mdbT^D&tv!YPY*Dk${Ol4B z!e3W-F#fV)5&l!*b}&IJr@fi8YMtf-aviGVid*?iOd%)7Npa)p+>HEUdqS9R{tBJP(J9l8FYmSS&?h&VvDhalmD52Ic81-zO1dNsRW~qdV>LkiZy*3@K#;dMtrK zumJZYz7x9I8^qD%girycFx(eR#1oNXTz3*@ya{hZ9OIFManRU9<`_>Uq(~?NNf_{1 zy&ws=hoPA1OsZ&*ff&=f$`1I~zhX50_rG76%tMmoH5lPK#S>b;I}ou$MsA_|G(z6~ zjw)CWWq1`1C#vXQTH|>W2GJC@c1smdLF5OhpQ8Ly5T4z(vg1_r66O_n~Ka5 zN>7F{3fVOpn|OCFBXXXtoeb1mUr|7wYhh~?$qZh6;i;u4)zTd1s^o=1Bd0&2RM`xT6HvjR#YvzTA0I7FNk@CO z?JPP%Mw%*ky)>9G3w8v(I~4jt)Qb@iA*Y=8=on8xrz8n{KE)^sS>0?)s$x1jB>eoA zu7^*lVb*(la0;mo9Q8*&_Xtm>Oy?^AS*6({pPy{o4lTV^$K>M*sL=wXH>FSftRWt z)}~ChW#Az+6T_>`!dLRmIk`vimBL3AmI{~=SY>bJCs&*nLZ9_Y_(#A-lxS3=&OOpu3aE6!&n3m4J!dfbv@ijqWk8p{5k6X_81itg4e z1~N+mhNA#k;v!*F6ayp!@L$ng&2L9V-~bH-@8u|PDMyP_a}=PMZ~;oVG|rp#-ad?Q zjZbX4FF~o12^6UPN?{Aec{9~Xg_ff=Vqv>druWd=wInb-{6M#&IKRTc=J$+nfdZV3 zRhAPDluMM66iNI&(?Rr`g=6dx zLeGOTWOb#wy%2m9Yp^oan`+(mf*vK_9b$z4Dr z!bFFj1mTLC=vy7Z63Vhn+X(yj>qZZdi@%}d%92Cspmetr&f3$zPh{6KbzY zj;9$h%gCU~P%Az`uM7S!yno?{%u@!<*^rNf=O0H(t8V)`+5(I*3VgY33Gdu2Uy{vO zJM0eMWG7Z^=neq1{UeDz#HG?9TLj4Y^ga%(-*+?mGg_Sa0~?%FWMsmc^!?2gfwL1c zG|9-wB$}ptqKa>7`a|jRzsDzzkH<>k5)l-_gd_{H8V9QGo?$~auu*p$v~5**ki~3B6zh* z83M3aerzG)4-ga@u^e9P z0_o|(;=B;vhdMW%R^pOu#K{qv~>VpX<=ml$e+W|v!m}evVAUZ;%nbi#Y=ln z6)#|fRsPO_T`IR#iuX&lO1YvkQ!}r7J$%nR8*6tyUK<9KXi`w{AD5CPGeZ`tJDvKE z99GI@_S~*4`dYLriw`*TVwJegdP@tJ`i@$UTv#7)CH{@tbyX5DvF4;AS+AIvYRHaw zUyYdx;1C3uiadQY$OdU~iyNL!c)KYe6)`LK8$CPK;X{V$C<#W255jE`2XpE60O3Wi{3FN5N<2Bu{sPv0wnItxjW_22azhx~_AsjU1;NRx*ta}33bkb&H9-=CS2R5C{~*XgHP{LZ(Sp2ua|-T~*ut;)`V zgled!VO2AQspyinSTlYZhC0=6j5-xB7AeQ(O7zaJQ#MC57p2YdzY0D_zOwGfHiYL@In97RB64s|;XTVqKVCKoUQM49`(5nv}tH zORWtX#jG}y4v(dftumIU4VO^m)?#7(KH90ZQP1B=c_2PJxuH<58fExdg}#FB3c66 z11j)&Plw;^0TaH$`HvmTD}AJ7KoeihznFqBP9yA*4}28G$P>Zm>He>qtfbi9Xy9e> zISxN^y5U_v0k2)2TXTR^?JB3eJNQ zHkFDb(FYTn4Rcz#UIH*-Q=$ACe}Wxw#8&~Qo(E%*?_6n3BK#vnGKX=Tgj@wkD2ny< zJwWAdQeKmmTP$zomW0{2o`)iK>xUUXSLs@2q2wdVZn5q3K#6zPy*0U~^lQOUZ(%%f zYC|sN-4=c$2^;Z6e9Ono^qQRJFW}#`aXyl+vBbdfXWZE28gK%`UYf zoS{B;ttI87ts;WN*T^ozDyVICQK;#cNfa*^lQ<1?^Kpz#-({+BSmPEJZb|bpZO_Kv_(TseN|Ma+;TulwOd{` z#j(brB(4y7w9CIRa)N4_aHA@(E2HUAM*5Az;-5cUT@?9i8D~DB$4l^5?lDW$2z|}h zMX5U+1jBpGys5R*p^wsdq;5x`w`W)Lj#=bIUwg{qDlg0FD^2s#oRvL9Np+(C@`fco zZRp0Nyp)bPcVaFVgn5M0drXvrg1omQXS1+mN5p6Cg7ZWilaTXMi&gVcu;Cllpn3jN zc)T@D9>wad`p?Vp9b#FndgkmeL;%JUfue~fJvPawq|y&+HNM4*e6}?o3mqL=Sq2?; z6~(dNP@^%hXuoq;MAm% z!!c#nyp#socf6Ez!jyQOV3A~1Z_n9?%X9%kb2y&rA6d>&&sq#Eshs65oKsWY-jwwP zY$Rqv*NJD)idAy5^5@w_dD~#g)ft%_{niIzac#ERt)?W76>*;o{2m}u)@|mga4Afj_;|J}4wZsu6r-9J&`50i%t_}m6rs>Z zp@$I#JDbF+;)T)VQO6}*QcIXTU*3-zlxxl>h_aY06tePiV1q9chL#Bu^X%Td7Aaz7GJIvTOO@=SH^a;G z_cy2K{{$ze!<*~($2Vsm=Fg!!ToZyfCW0|Sa+8PPHV#yd>nUBidX;1IKh6*7R(HPX5q8UnC z3(y353*EfDbXoX`%Y=qvqfA|G)UEGw(99L^5{5=g?H6LYaNG>ZZQ9Jzn>_^@;uctO z3G9DB&1@>XR2>|P<4h{Xl*Ay3eDTxPD#RG5p4L;SF%qd5IY zVagf7feuB~KLsiFV3aU*{whvCoHmqq)t>Dmi+Gpj7=mbW%O{X5BKx2+tQ+8(!Y697 zX(tTvTF<}%sKQ8{SE=;r=68{?#sJf}=50~xOS+4$x6*B1Qnud}u5{kSMKT-lwL6w4 zHKAt?z0B_cXr<+q(;R1OfP{eJa1x+e$mgI!fvP*J$-TG(SSh`CC}O;VhN|zBQ-CF$ z3o#J(-mgyDwT~jjzokN!aL$S5-e0Lz_(zcb_b}KnQuiQ#i;KGN!y8mlF`UK9=?b#hGV`! z_ztF+2nAC(M_`0dn2wda&UTyxeA5>&d|Th9!YIIb2zaF!-7XO6uxn8OJp^8wSZfC9HE%a=T*6fE z^f#?VqnPVVB~6Qkna&p%Z+mg6Sas=NpsCAmU+%*Q-_}W7ENpA?z*C;CsMAizGeX!3Wa4=QhI|zGMlS84azUGD8!Z)zt={bKX}+m5 z$6M9Jl!?4~MXfql8EZ!}5~BLjZltHSd5AK_QDIj+dDX<8bQnY8K4o#vUVwzZXE5M{ z%y_v`0K+?#x=Wo{=@sITWwbDMDJ%$h@&5e0o{o&V%T{A2ucFs(GP;m6(z+cbcMt#j z9GGm)o117_sxO*ksXAayu{VS;&JLrq5VMmv+DF?fLVcvmnnYEC_Bh1MAL(GIr*+3P zvA8AA-G5~s!Rzt6Mjk&drVk8V!E=|65xFNSBA7vStiaB+D9PXBQ> zycvSIFcAK&0M=2O-~HiWg(deRLn8L}Z>e6Z#8){JZMPWZ2dVS{;h|_kx3z|UMf`X2 zlVd7Vt5UgJ{&#|6j56oz@`%cOa-7!8{XNm-)`Q*@-A*yP6_d#IhRdg7%%s6mPW4rF zEz=!ZR1NbNa=8BTt3;%_>s01%dG+Dx`RVbE*7|R?!t-jEORPQ=DIN9zO=hpA2u8P~ z;Er;XcfmdvDROWBuT0SxL4Q}k5`6?eUSGcBTA8@!iQIC|aLa_T>2GfTEmzg_C7%ll zr|btHG&3$XgX;Owo73}ZK>;@=-43DhjrOPh$X2h(4lHT*?a}+Urz;yh=7SEVm;r0h zcYrpDq@IFU9d=9!Mbb>f`A4cL>pY(NLPFK-PRh5W@4102W!zNVG-d;1$C-%|mSOh? z@E@rrfz1fUGZ?xyfh<-Ie8*C-tbsX(kc-C%sze-yaTybO9lWP#oCKMOxvV%UgJIJt zCkS-R+4qHD-&b$<0Ggvv_K74+1gfPuN*yx_P@^{hHl-@5;&(-G$ONJB%o=lfc9Vty z7D=4uA`r~t8&N)81{~S|RI3~p4j6~v`p4sTyM3r47cA>TK9pa$s|rj+C(}SIPCD5k zG3(W^=n<1Y%@ygU1<5YKPz-nR#8<<3;X2&xWb#~^uqWe8q^)P#Bi%_}ldhOyJKc$C zyZ&D?0O#*@ID@~D5Z=?eM`p&IO2JYWn1CH{j<_x)ZouUfNFA+p^TW2O^m; za=T{Eg)Xw05v_3>fKfn3<_iv|D8}r^n9RiJADv_ZALO_#>0kjtCwJ&HJ!#5jb+j(| zu{`gV+Eo=F$(vVInu_As4X`7wBGYa9EB)%QYBxP`+R6nBQz#4dN0kxj{#Y> ze_T!8kRC{_fhrGCud$6J}l;+FG-0jM?`jYicfp*Z3#$M4phKIsyxPaIPt zjPc~KQxCw<2T2@IuGK_|2=Y}|7^=`LURZ+?V6KsmY3k{*So5wIae)!(j+{J6 zNt9t<+{Yo(;Zi+%n2&cz7*biH-d~>&b@r3g|C4W-CvUiVk|M5|^uTmTvzJ1dMDf8UJuhM7H{-`YGMpjuJNI>qST7S3_Yd%Ta>Ycxf7(y8))s z%O2pEv7rF4jeJbvs(8riy>>y6c0%Yc3DqFfD<{<_>rXht}=M>sFT+ zj28iZ{Xi)8-RPNX=JWN{PGXwh{{b9Dd{@djojdUhIuaou(5FCO~*;CErd7MIMYG~uL7A={U+e{XW<4PJu@VkxoAhb%#z>bJZe<@I#=dPMwTguE0j z>c(s3Fv;9TFW^ogy^>ZC9oss1t*mBgC3)ff_jK-Ei1R`Im&9INW3M`*10@{1^}r2Y zgIC354)Ca+FdXPHu7X!S_H2zfeX21b?3jJ5g6~09?!;Wjt6CTp*W-F+)${;VJs1R> zM%82DBN5h%VjbOEEe0WuT&wx1sk&X=-F2_|$76tgO$kutx?44Kg+HG!2J^c1rAo_` z4$^DsrRhS`W1Ih-8+pEd{QTn4Lujp(rOQ%h?su1`!diXIPn1$PWmDdTRCU)$b?L%U z(HR9KbZJ-Kni`d=OYtIlr!cZh!d;hc0}mS^9dEPl2->GC=pmad6RbJ^ME zavv9&JohR4`%6pRU(d6q{-=bmN2!0S^uJc8ozwps{q9!(dx=Nte_7Ef8{4k@pKwS~ z%#i<34bIj!`0{fDeC18lg9-ov*Ah*9ZaxfH#`Avqw1yNX0*&ntVmnqm#y)sT{Z7ccO)KjHw<1!ZWazoT$Is94g8N{_Hy(9?w+rIyQP zx_Vt?S2n+deFCV$nL?jG51f~>?C;>$gfLU51`wB~tgUPeaR9375<{K6h6CJ}0Cc(v zwepIBnX7ATY{G84ln|zGUNbC>v(ONSK9~PGS-EH}*gm-rC3ODRgW&&hnBLO$uX64mKhXlP zV*R%pIsL!c*y{f;^O*Io#(G1#KVN4G;&SyrqiU-`}67P)$PU6yVK$6^@r2z0jQF&%D-LS@W037>axL0Q)27!_+F>H z4pqu);YI+W7>8^Os(+d9{bgQFVTlZ=ik4iSJw7|RF8NC5p7^?(RqqS%D$L4ldkf~U zEJ89@sBSfG>GBW5qqhu?dGFDf0Py44_31B1=jUb+^^4of_cw1Y-(Q^E4&T4IIK3Gv z<4zW8)?8uMmJL}?3Ds=5Nk$MLoTt_zzJS$QE?UX<&cE91rJ#Qii&yP|CND0TJ;vI# zoVME5q_c6aN8&$}?6ZAV$baf$ndg@O`rUR;{@dz*FY`R3{HJEmgXBL|=T9#GStm!& zEyrzg|IO{A1t9gL&{sz-Eo9R83CJI=E^d$B-~1$Y+E=NN^EXE(d}>>}pm0-NUxdZc zyb~-FI|`*sya_3U%tONz5Vn_-02}pgJyapS0Z~A_jjedy;R&Dyav^3KDy+AO2xY3 z{ND=2`FYO>^iEG#kn~{$5G3zCf#wC$<5pIGR#|;5L*-KWPi6sln(==P`+vKUk^h># zes_ER`y!8#|MVS{`UWSpS`FKkNU|Y&Tom_5Tu&S^qcLTWdF<0h;;qARVx3swscFKb{`wIz1*d-WS(* z3HL`ssu3ZqNMl?=hLqsuwq=EEs%17CjjW<+zgqk3K}9RL}Gq=K;OaKoYcqxIp6 znCU~rz|ZgBoZb#kkFQT}M2>BdZIFtza_Y(`4_Wt#>+CAxLOzY1ybXy7pQ#vncQ~BX zE5Be70%|Tab-(M&Z2!st4DR8AR_;P_uahOiD3WociO8laE)^6Br~hQVUg`*W3(mt)8n)b2r1=;pOqq{P+GG#`|#+7Tq@P*D3Mt zRQa2uo73Bqvujl)z$2@Q=(8-yb@kiJi{n!%ZZDm#<{EHU4!;@Rz8{`m53i2af|5@9 zER>_;?yY$Maf2sf?ahFTXk5pkq!{e!982y1lx-{Kr3U&(DT8rx!Bt zCU1jSyLEX*x@k%1ZNn!+RrjnLuqUU(o7=OiC&RUGYd668j2w1v^_k)mn@DeWHw~Qr zrMP%Em-0Q2{ z+7a9_qCCJAytv)3Pjgu+|H}(!pIiU$wtM}o|6ilIjsJa-$H@P3tidaNu?m-1_|j6| za=RHN0N_yGR;BNQTVE?svq}NB{JTexqASRzOL9l#py)bPP#2baSF?~;Wg1_^3b8IF znMdjxds@lgSR!Rl6&WbAoK_qCe!p7549!wqWToq3P2P1P{1+=aB3J$@IAU1CTTua2 zE{g`F{%vuZ{N2`{%3?L;p5nNVYX-+zos_TVQK$uNaZ|O-Ma?;%8Msvpcg0+j1GV|7 zCgE;)rU^iX5Mmd#>5!R;YJf?+#Ku)~}dFWITc-d0nrl!MJ$J*05Ak8U8K~aPL&>=PTi|mDR zFhoNqINmrhOxpz{$y+>DX&CGEH=TW!d#62(6`!en{w#yn-f)dbeB?UNC0}K38a4E5 zVdobS0@ZsQqe%i|zv>=9n+AD%hN!J?Lb(IxEW1y^2ygYq|8hJjtAsO`7PWyx;Y z(VtUrf2^R54L-~DKR#MdRQ^`$fBk-|n?3(+H@EqJU*su^|K$wji^TnEHm7A%UQAzI zR4rvEwKNTEu{^6pkd)cD0l@Pp%%6OxH|5eyemYfVMdYu25MB`Ro1Ww-aAi67(hQuU zSk*|$)m+s)4@^C-mZ~6@*1AdwT}Hzs+81T4@WJ%P*%^$ogft)4p`{g5xRjhJ&{Y&o zOIA~JK(z?MqX}zi4NuYh)|j}8)|Mn)NbG2J$a;b5yavG|6t5(>jhr)&^B{^TUVFK@ zoSDPrbX5f(Mp!f1mUD&_^g~IT&gKFj>kxO9UbBpLQtDq#I$7>vl+)_oQo^NxA4)e3 zz5v7us_p*(PD7f+NZqgojFMqrZajlH1QGG&1*v!pl8~cg=a$GPx)8pvRZn@GdTG-35tovkd-dyRgzG={Nh z$ktKMS6VYihY*ko8~;?4@;6n*s+Ll{776!%06(7nxI&(IC=1H&DaDq>)iOrv#e^RsW>}~$l{6gi4-z&^ zP2n_EEdjNJv}K0J2k8Gx?LTI!KCAz4yOWRqY`3@m|1a`9WBg|!qg(0yYij*DV?gCm zPd=Z=DkoVO1mylI#&aB?2|DFmL|s3q&y|)t&K|u#IlH<2<@)UAbcr+V@bu>W*@^x0 z?b%BPmkv*_j;@bxF0Tim`nPHYfU~Qcqc`WL!`nAU$3LH5oD4uU9J2>x9Rc9yv-9)e zFK0K$KMmAf9i{PpooqUizilQR33!Is!OnWIgPpS2!IUhwr~f!Ue}8g%a&da|%jNaY z!`ri~51ry9AoET(4akFHEv=)QZ!Xw!1;Kiyj>pBMSdmtC8$bDV#7}0J zudMV2uk?p-xv8jv1Hc7R{zFKi=%cu@SXdDG9$K%Y_4sO*_w4g3f<5V?W&&5zTiz3c%p>$^YiCQtyZhR2!G&eDiGP< zd+ZG6FbK{?Z41-XXt2ARjp|qjraX#YMv6c;DgW5zds>WVs@H1Pm!~u>^qH~e{1RH( z#U4qpqZGu8QVlxoTE8;%v)REqMEv~OM7Im2GYY^fC1Ti=^98@N`s+v^%I#!u@Au{71i?&HvnM_8Z&%|0N!| z%f}@A-(<9r-Cxd|7uowoQTbc$ztU2bP~=;lOuVk@V13PfRrg^dyQ-yfl`=15g;z~~ zfC2Ue=P`s_M!f8fb4ygW0JcC$zx(!f-+s}3n?}eRJb0N7Bji0| zzH@ZlEuTLri`7SU_Igd9HP?hb&nsRV4#e_j11o5QEk(rFEj^0n&w&$F2N&xicC(03 z6;vbQSM{q4c}=x7c63T&@p`vtRk>5)#ki7wZ0=+uVlS{}3lyO0UQnIBUzc_1DZPY+ ztvRymkMBC{ZsU!jj|{~j49-G^;xY8l74aP`US#^Ok8hMgZ`q!ZK3`~e&`)lcu<=@N zGFz|p24WXkVor^1`2SvaoB!)&9--%* zh`}Brwh0Z;M^Qi)GZeC~ObIl-TvH7+OW;c=f~N5&s)8_zXsQVs5_}7~ph0%44Q{o; zuUQ*3YjtD#Ahm*-0hmGNP0t;%dpTw=sGVfQ5S1<3)n)T~>`UpeFQdPHZMy4Mt+&3o z&YIO%v&;VgWU$Mssb5M(eR1{lTT)G*M=kw=DruoQy4GA(uWSwUrM1uASD4vu`>gYn z>i-w zhhS?3*jfR;W-EZ1sarF^)(o&U18mIzTQk7c46ro=Y@e_BDbxQ^=tl%^Li=AM{;QL_ z|F7NM>i;kDsH|0Tus5Oo>xuJnx<8dEgM{+GCofSF2`h_@04l+dvKXvs2uM3+DOb-D zXQhXNehbREMs};3Z&mY`Rn3zTMNHjt0DV73l%h4YVzaZEdK(mec=Hj7*+X#=b-siU zwrc+$2H1P*4L~dQ|4yUb%-;XgZf*Df7kQlhUkvspg#ZEY4=D+#o^9+@z-$YWDcvk0 zc}u&!6#U|7?=xR)+I2^~fB>i~8LGtz)vE6Y2!! z-;!Vlp#XBp9p=z*tmyA#xB8CL@6*H)XIs2rb?^aO!GYE>-l9tQN<~*N2SCp)_ zo|Hy~EVMyUttBrSQqUiUhWWKYRJNwOKiyL%|4&Jbeh35=KN`(&xGVzthO& z|Lioj_kX^~qw;@R!o8595e1L}2u4AIg#0D4v!#Wp@cp|qkuPVJQa=#FP<@;Pfs_I2HYomj zBY>t6)NoRu)^~aNjga|OX1ZwvGpUiMkp7Gopbo0?#zR@qy&FqxxOMxx0hCJ2y0zC< z*5_gg*6qQ$k?Ir#EycOTj$Bzpm$hXNw_`B$!7J4}ja!uy@p6vh82end)KKi#uGXPR z{Mt&-SQF_P^_L|uENLJsv6pMHRw z;J(*rtnvpJxES*Ha%qSg(dD$2T>EDn`W7)?l`K8UYdsROm~d@WdYsgOIU`TklLOvf z3)VIvD$Q_sjiLa1kUBN3_g3|$ssuk4S4!VomD;KjVlnnC`r>g0&*Q82?->s8Z(<~_ zQ0$?Q!3omcs{whvLNH_`0!KjrFy)=z<7&HyfDI5-DI-yY{Ava8 zWwJns=>lT5h!vw=q;gp1dg&$8H(@xa^EQrxpqfLyoD5aw)ii2LE)rU~Y^*s|_fX8< z!4OWCTcAtV&pH7+MeVW}qA|XEYMbKv+dQqZl#)z*ECyY^-UB`fnP!1gGD8uUglx6P zxg_afz0>fX*u4_1TwS$*!%6NSP4V$>;RsEk`cy9ubl+jer<3B|kayOfb?-uuW?g!z|l(8t)|02kyG@C$8H7zcO z{(f2)Wr{NhYC&Z!xoQNxI~4jN5w{wpT);umsHsLQxu{CC854XT)%6c0KkeG$m(zgL zgPQ2OAf2FGB>I^)o9Qn9XpS>Qig8sV>lbnrqcQ$i-7STr$S}zCU7ed}U)zjUb>HH$ z?h}!iq$*FnJdc09%&Way021jT&+lVZIOu)Kf%eo6u( z%Wyy^@5T&yPKtJEZ?-o0$Tfv zU*Oa5ih~wWgv<&l5pdJtsI9+93n;H|%7naU97o=NoA8pv`d*7f63EDvF|tXof!Q75 zU{_F%Whuu3nmq?espp96z`nS#ZWYQ!dRgC;ca&2;=N^^m5v%8?=khilJiz5G2MJ{; zK28x>vuO+Enz+k1uKk6p@~Zm9DJ69U&)_LRwg$_eL)G3ZTaC}bym3&4*N z|5oPz>h-hnf2~$`>;L;Aj}YlDW~#IIJh9EggdA64SUq=7qTKh2Gea%r45Y`4$ATrNdSxu037;%7`f6t~9nG z$?8Su@d76jdXZ=5xmxeP18O`PHZJ0<*#ECcfW5`D=KpH8d);jOPruXXZTJ6|ctrgF z8z;)&+Lz?;tF!jCBKFn1iA2Tfvjp5bQ}cnL_fFl-1mWjFrZ(qCh2uLUTqiK!sqlqD z^z(y~57y6@SwC#w5gR0gM}+b_l*$M77fT*_vBorA3$fK^!HX%79g`d!mzJFR z%dxQ|hzdB8*%_BZ`5mauE#1YMt#$mNmLO=;B8R2*aa~kxc#pvM5%b3u1=gE6R*n3e z$$eZlTR2Y&sYSVr)B-?$N2-+;DjB&lbl06!W%ZvlotBd6K@({yq>WFZf+>}1&LVlL zhHfRw*HUW^mtL9NzwS<^GaHDa>PPWj=9H`nkukTOi8!|HhPK_%wj0`ZL;E^5wC#TO z2j0&%e%_OP%Fcfx6jMwY3fTt|B(o=70kbOpv)|16|2CSft^dc1Ji?>nDl^!daQTSl zU)HnZ>cevP4f%Z?9}QVDipd;v7K370(s}_H5qS^v=~2U-41-_*5Au$u=@+ z$W+6x3rd!27vIOo3m~4UBfr6GAYy>x1*l5Y#J%+aVyJ3bu&YONZ^*}G&F+e_nbQR) z$}Ih!X+S2fsArQ^d@9eqWgK*}ljR{^Im=G0wtmXrgr72(Qk`X>&`q-`+89;;Pj!ld zS)ESzb!Ok1G)e!TY86!P5Q>U2`YneU&Fk)kJ}JZXYomp`xNT;u~{h6hCZF3`8-epjtmV%eb2UfU#q30n=-x1$V16EGOXztamDo^vQOZg6v zy{i`be!DZ(>cxyCA(J62N-nqG-G zs!C_0YC+NZjQBYNSm|t1^R!N9qvPS(rY<*f`kEfFRl_me9LnLCJ{QW*rW}^)f5bn* zG)}}ic$4@O^!Tg5SLlD8UO%V*b=%wgKQHnK^)4d5Zw7lL274naV15pLS)H(GQZH2! zODe3RHI`H@4(Ti@yeg8jsM>=AI15MVxdH;DRG7vAT;&`87X1IOh!0Y{fuh00!FvH=|9O3|u0;GJ>>{n^BVn&86#^Jlp#ieSK|i!0)v&audiYwO_U-wkH+tF7xT5Gl+c~*Mv7Y!s>T(!> z1nKewuDT%V#W+eYbF><@zS-?v5MY0q;5iDb&k_^;XL?HIzq$8P`QJN@b|;_zeH;J% zB2S_J&v5|pY%@+kMfsCo)C=f%l^f9U`hGy7Xo+*phvS?-4FGdN&Wl3ScSnJCIN(AWef%8- zIhTX2F#V@{%H;oe1UIGttn&Zw=I(#*b~;=Cj~97_WPknU=y((2KA$vSR^AuWcB#Ox zOROXD>$2+NyI-)6EMZ&~0GR3m;2!%3kQjtS_;1LYRAs;TpINvx5na+^x%%anT1y(2 zgnurl4S@(u*p$Thx8h9OpFX8N@W+xE*CaqyP?i5UN5CmH%abmZI+iQj^%8(zPG;rn z$QDpdc-~f8{pO|BZ$o}GcQ-E=AjOInWj81~ZjNod!J&`CiQ*pS*Oz1>M!{c_rER<1 zx6A#7mpcj2H5&8cFv4$Rl0-|^T?K$A@761pmyu}JV?pY!@gvV8Nm%3@{8(PJUh4|k zKePH=s{fIMJt^qhdRFLv{YJZ&)&F|^=2riEiAUuBy|J}Cz!xQ=08#+K$jJ=MHNtB? zF;qriDlgNAF#=wUAVYqI^G$U=A*U7y@F<4yqP|x8U@`5g#@nqRgRdxI3am`q`>8l- zZwdvJrs^$oy-QWBgrRlv^NND&=H>mgnOw=AHj>=eMJAuo*L*64ktL!e#?LtPZ7T3> z$v*4<>E`C@I-LsAAn_J4F|RV-T{FIosf}b$_IUx!T>D;?7|H^gs7rSCgyBGMOm$Ve zV24oBg27DH0E)=9+)*feGIyc&M?rCn4Bb74~IDNC~&jd1b4;MP;wBz6ggJ=p{ z&X9!2UK`c7*H_1K1?=X&rK=V6bhm23+I7b5^XF92v)U_F*vyPA(!jn*hHab4Z!>FW=<>`NwTrZ(P0?%pt7z9h zw2NSjLUxVDB?$)8?`gR9MCxpxKBb#qDdVVux+tE8j+n(|D!-MLt3d9lrleV8G5R&Z zG4j)uZP1cCE2e1~F7*9n4g~*Bm#wRG(SV-$&iiVFuL z>!r+yXqWmOn2S~12%}JOQ@V;%jaa~hhrCX zXQe!u5T$Bh1id>H`g#uAD*h!^ou4D7XX&E z$VCkyCCHp_X~lblCsVg-6V&C~Y#7yNCuPDb^lRz1o)5{BneNh=pnke(B@3oTLHt}1 zR@M*e&o8Z=ZlC9V%IrTBdGQlcJ~+=R|KD~e>;KzpH2Yio&r3W)e;ta!-h>B$oHk$9 z2S82TrCtDOnRWaC($Z`ZsTTQP`R~Q)9n$ZsGCHV|4^HBs>AvYuG6`4QJTZ6;s+SS` zH9<}@>ZS_oEI?4E>Yd6wB-N{)g%dFx@6|?Uh3>DY}k(u0*{erxjOnEx->u*8EaF4~qC(x7_W?=Zl?u zy6*m*Za+bqUxu#&Oj(8#<+z5lGw4P30G=jrU;(XrN^@{x*u>FkT0A{29Q8UV^wQdQ zC?9s`%h)?ShYa1JMRDcFa7a9FbH8!FED2vVuXaLe{R^iS$%AP!rzQ;iTMhGMn`7&mXZ&U(^?x}>b zrgyFB)5hc7=-kt?b&h*m2N$b?%M^k)TK23c_IVa!2Ierva1XIbY?Kt5ZcsaiYqx z(l3fz)gPBOx;!(enO_m|Fbu@SfI`NU64B{L;r+mUDtsto6f6J<#i@2ge0~0H%{85E#K>uS);s9gL7D1E{fhWN&7l$GYng;fNmh5a zyi%F-;fSJ8D$$tj>b7$e@k^%y)7EY!Zf9n-#?l^dixBpDlcHM^3z0ePZo$f2<~|Y; zziyRXyKe^7-7K!ZOi}0{im8a=Q{xs9e-DgFEOr{^27s>-lHIJCp@1`HXF$%$6Jcx3YMag8!{4sqaaWNT!a{~G1IEr zDsK!%qN5%f0x zzC$Cdxj7H*ID0$g;nr}p$$0KUE5td0{u>y;(Bq_X#JTbaXQh5}WPcz5z2`HlDp?ew1uOt7*)E>-Yp-dy{$hSK8K|GOGpR zfdk-0alatGaAvkhU`xTmzp@jhU+p@X2W*t6k4-8Ia9r>v%F;1XQQ^c0#M1-IwkHw zt9Sddx&D1Z(J)Xh?v7zYK`YPNWNKzq8T0=2^5O+rmYe`3fS1`fQRqhmhfLJl%yMkx zCdtFmc@9jz%!Q=e=S80t=RYbk^J&LGEBwD&{bn}*OTXLbZqI*S;&IM@)M#(;9H>09 z_eCAToVmQhF)UklJqNK|t%Q+x{KpNsLv9L3alxE@8l}n3cu|u+<{?K@hRn~E0w!w_ zQw@GYhA}<4zZwJC*5LFf@KpNzxxzVtSn}@DQG6k@T$UBKXev)zHzAId?*9xjG)@A# z0VnVk`+u*~>1Ox;W@8)w|00jv|J7g*H{%5EqbMMY8G508Ulf(UrPnnhW!@iYKiAz~ z(`B%6=jw9Cbx-2EfI#1F{sRoKFF21O>M}xRH*gq5G|jtY5#pQJ!c%m&+xK?+{t7el z7OmLf<1_QR&af-)_xl32#In=Wj6F%k9;O?Iz~ACGmN9SjT8@Z66bC1TYkKK<^ZKXG zPdU|IzmkdNU{Ma-;&p$JA93UO~7vrA%37mzKX8;EvgPrZJV+bu1l7o(N{Xe}m=BWmN75aa> z*UIMq>o za{qw@rynCI^XpmX?4Q=X_ftbjW=H^{m}GBE$~5$PW&PC=(Rw4uW{4hIeCVNBp11aa zt$pCx?E_Iv=9tf66c=2dX})QZB6sUo1Y5jz4Bnx$kX^;+_ z{2$WuR6EOlX#pFxyf?+NHZy(Yygy`io23PowYe1ybI*G6-_wqPSK9xw=fAB+x3iW1 zUgRl||HKT~yb$;m90(U6^bm3ILC3>|RUaYSJ=b9|rYe14QT9GO&Lz>Zc(kdSITlVq zzAi2g);I@#n83L`7yh%zdByTpe!4h`-Z8Byd}?AH$%&E9$K09b7jgGnEj0Quo~!d^ zc|w^|Uw(4VD}59o-crditoym-9JWL}D?P2wToz=XPwTU1f%%<{sX$Go>zs3{kfF%H zx9gbsoI9Gf0^Mex68XV=&=LZWat5pPPgtG{>^hI zPqnHS;-5BEe*|MAMHh&!>bS4Xjz73K`lFg1d48eu`qdI9%(7^o_Kxgx-Vwq?%LOTg zxs6ek{AOHI5eZIyhg04OKOUkiBBSvUI6ZlJear>?=nr@VcJ>e0uS|4XO18)GgFnSj z0EjToVRi)v9F*b)wzRDAs54f@a`cl)DrHPcR))P7i7qY1Yk2^W-ST5*1dj)r%L}z(qaGh z&JXVM^s(c=>}~JZ@!t;C{=X}FnpBS@9rpM%&;#u+LG$Q81LyuYN`^*S8r~E;=sS7= zWZLkjlP>?zWtqWknMHr00caCxg)5Ux*jK)*nm=;FFSTnxy%;7#GV;LA{%)sL6N+s+ z;I~j9&M#kqU-$rY4C=iRa1HvQyMMk`LPVnmp%2+GMt6S9TXKWoRKU%k?izu-o(aSY zQ0(637p=dp4(Pfvy8Gv`DHF6)8meei156UC9niaW;Ev}6<{+N_*``ZnA0NeJASsn1 zOokc6A7jpOY=c3J^6=az(FArcUsae4$}kG60q;(Q!9ZKx-_}-OEcKG2EITCv-j~!j z@&3HUQJ1-hepD;Ma%=~VHL1egtpNO>Pp$kf2KjO0KkRI6@0H>|Z||<- zKd42)rm5={Ig;MpMcJRlom6!IMZv_R;`D1k;zo^kUHN+NL;Yb97_%2IpRc?z?)7-o)W78_A=nIS6jxtqvfj^X9I z6IazVgE8{M*U??(S7Gqr$Jdn7R2&zRtuh1aBp|G;Rvj-;H_f84pH1JUp-+8RBNX!Ce27ReLKAEK#%TB&P9O^w;6=#*d8Tsd-$Q`&41#+& z#Q=Vyw7G)=ltG!F(GLPjc|Vx~oZsE1XD=^aqK zi2`%Aq_!&qyn0(dMKqzMejrpa2}>`^m5fI0^GipgPT8u| zvReXsQBl1X2S%WtDX3YknIG+7MD>Y;nP`_&(auT|TYD-DohOZ>}7e$#FX4oYc@4>IjLMuPGtx@?uKzW#5#pBVN3Q(M_mn>C;KT za&a#}3kj<_V16O-EYRHoi0ZKvmcB)&3v}ue1w;df*37;ZYB?u@tw-y;*{%zKQ|;wd z+#0c|saP7W+3LMll`hFErzW! ziALjaeypx4PRs<#71CgJ^?Nw=bUV9gW$-%c)JvPLTr<*$;ZY^nGw7w0^aa>d{)4zn z#ij03+;Q@fRc4PMvkYdu!j0 z|9EhCu=f97$@95|{|}!AEAjv5O_lurahHGK+jpJ+znrqubeR_bG_<~nH_#;?fk(Xn z!29T~ET}pg4CAoa`0|K{;Jlq0Frq8-LUVMg_+B7X?5*G6s9QgR-&%#4 zofG2mt?Ya`RT$Z|wf^l5>uTXI!LDvB!L?c4Wma!8k(U?zzo3PD=F0(125P!lmvbj+ z8#y;a5ART(1hQfJ-I;PnRFvO!z26T|lE8reX2Nll4Ez6|Lab{fyXYd3gh+7f3d6ZX*9fcy8tvwA`kbX@%Aw18 z4yUI5oRyo;hQ8M1e(I-I|HHuuhItIbUlzIu-lYHSmEwPG?eDGcf2`zbqyMRC@I71v zXUP0(UkAUIq9M5qfDoK|z`J0}otO6Pr^b_6qqs{^)8`d2%cbO{~Lm$K5 zx%%252yT`q>Y~A8A5Q>UVnpdSg5hSxvRq0a*vF*O3gp9oqB}O=N5D^0E8hy8nk>L^ z3FAmiP!@B{iho@peu1Y^ z{#V=SRUXfk{iRv{-{0A{^S|uutn5M_F*q97i9wb4e{HbQ3i01T(CskJ4g|c?`GI)p&@gX2OMvSWggKrH`F{dqm?4<~P(<)~jRLm( zXVn6l|F7U-Zrj2;mydERMtK>T;Q2J_IpKfX)bLJ}>XXD*R%w$i zzOr&t;&^w(QVRK|9P;%e(fw|d$~zHO-Lc%q-?6t9;=HP2r-ie)+mDb|-aU-#obv0O z^54Q^Jk8J~3LV!H2b~VsOdyptuL+AjxH0Jf&(p+lE2ODea^C2sEjld( zxM>nx!Yq=(WbL<{n5`*UTwVM%gCBF41Y#5%A6%gMgkzC)omcpaPx{4xE9i%R&mtmk z2k;6;#LT-qxQCw}46p|I|8Q%|j{kLduzk3e|5x!a$zI*(S)Rx*L4I2)Urpay!Co)b zMwZvhH;M16?7R|tLCB>D=|!0W)%vKi%a&cakgl#hYQbJb$|S7A;-qrNCqLxvz2z%{#OBEa8k!AX{Ca zghO>vhn!Bd5cHpmG>}G)B2h$2s$!5tIOHo8^`8Yr&`X5s1X3L|bXRLhDeXqG58@0% zp7m(>IZj9DQ$E>}Va`M@29Xdnnk z=e)Uic|qkODnIg57(7CG9D--h5=5Ro19uRxos;R;(?Y<5!95l*?qG}_0AJH=qfLNM z^?$nUrWwRAAw6)CXBkXLJbf-I^J)SFO5&-2U;&^LSpazs9!60xqHo6tlXwcSKY#)P zL2Lu}W0VXz1t^}pPkgsFw`+$RnQ;hdrBdwyuVTp*^RanNxs*=PP|u#t>sfAst)pF; zS6O579dog2d(pq(S?BsGKMnSu35xSEyiWWSj}V#j0J!P=cWYe@|Kq>7sJ+LWq>k8fu8;1=8)VH7PG7my2A9TiJ;X?=A39UL96Re^uqrzHOif8_ox zOeQb$6rPM=aKBgzs0R6edw+MwKL6d@S)c!|P8AyP+f+`}p3kaH*mtSJ8tSeR^rz#RlRh9Uh^*a=x(h5r*l zhzjAlp}$KFm)=#Rpe4kg8VHs!gMPA7V6mhS^gaDohZg23q(e_do}ragR`f&A+q`L} zD(V}|z>nf0@8*dl2SwyBMoRRnRc{sDh=u!8FOB6Qk4DCC%)J+0xq!KdY>zrt# zXgKn~7Vu*9;DIe}9x;>{5sw2Gci7aaiFx1JzAntKYuUl(yG0gg35oCnLkxU%Ww3x#hGgB?>zZk$`_Gtj4xPCX2C5qxJOvSctOV-L zBHh(s*mN?|1C-S@U4zr9sna1rMgJqLcEG!w$nKzGGNEHo$ zRPHg;&ONgsvxWnc7hsd+>eAm8NhZF4C?Sq!tpU)mK^eC>6r7+JqlXUIjEU&7Y=yz@ zh?lCQcy0H!BqtS&hO?ELUeAm$Wmp}sIc$M3EjkCvoF&eRvpvrnXTD3+EU@?j2>K6< zl5b&*sg?h?qNy(J3LsQ|E=WViDl)c&b)8ss8ji783J9)h`7xu=joED z6V#;3HSbMp*{|W`thp=865T{0ez?O5h(ArX5f+=GmF21In^l&6w9Q8X;+ddcLYSVQ zbSkU>mfZJ%vilhMA?S5V+qvM{5}e5uO^d)&47$Yxqk;-I0dQ9=A;fr!2E9(BEMYco zZ2a>fAt1CxqW=v1eH6tIJV0=tpa(t$l@vJ0&={D*@EpXD{0XzYC?WuUO5-SqNIYc_ zuaOd#13v+oN|C~rUKnLCV18}{aX%=2Nf?g&Nrdu@PHkVU01A)J36v8H2PH3V`WWY9 zh=G@5C`CrEV|kzJd#4;`Pj%9a=cFW7Ljg#TjX@!_KBu(fc<2k5mdJ6G47qkGq*SG4 zD(J^CMihPmxrW9(0GTCooW~?eV_7+Zn7JE12N9*eG9IA>0>pJ#HO-5gY$hp$h??>M z*Gx(cU3!uN)GetdDGD9a)cjr}lUJ@=hKgN*ad%=(N^H(CI`V9Gp~R_EwVno&ER}k~ ze8Q5lPyi9oDoOyAm)Ig;?wi>JvMj>dWf2`mC19-&yX>cx{3ip&JWl@C-Tm!S{?~)u zb^Py@JazJ)e7#&5uqnFH4<-j%-C3zDi1oG?l?P2=ZDc~Zhg6A#CdBpXh>Eg>21yYYAf9OXEzic02@DRl@z$A-O5JNwtTLlG% zizd(W@g2-?0gwVZ1=0%^+)a5uC?wUEA3yk0EYHCihxDMwq)9&@FzeBc`T?@*hpLij z0gw^GEP#X--GIA_ilWT@_%|POr_l=;3$+6_;|LSrMG5iP{}1*&;0Ypn9T{_AQ{FGU z&i}i8xVyd1|GSb$7mAo?Pnu>Z%~&q&;?@ikk&8U1px)`F zP5#t^4=}Y0c+SY}ES`(aB%aKGvl(}N7QAcXx~~X#GiB6FG_OucwIbZlA$dUA{UwT{ zU^)Zl39py3di98lq7?D_KVupEXAz`-Ls|3(-3H@J6dvaU;lQWby?^h6-!6}5=*B4Z z>yh^b^e7qjCp%@dSGNA0{6Byhi3ZFEynkEhw~u81-P_vVE7^b7`CnG^aI1t5BaxN_TH*)EZL*q5mHBM`3&P6W@R^f zj|Gf;<0t+QW=0RY;Pg|<&6f#Ex^SG5DR^H3`N6C9gm<7cLYUyi(O_U&G_5Yn;h1Fz zD527+yLr$8CxMCZ@AbiZ*3gIN%!hJ_h`36i^siF;H5Unl@o&ToeYG@{gdVwU(lgQ) zCM27(OAscJD@^1Yv=qgVIUbIRxoqL5tC1r@(xZOgTYU-`6Gygh|TmGkFRR5NpjtN5$iQ>5pK~46b{XIMW&-T{-TK-?j zQ?1Xkd*8ZNYlyug7>}jyOa!;f?xAehA4kb8ZTWU$YURZlDut-?_Wm<)oTl*<_#lI^ z{|Sab)D;KE*1aR6V@1Bi|MTK0_Dty2{MM3zF&s}Qz;Wtl&}={-f{xu6GYw#Qv$fI$ zMxPk{#LYDKF014VwWU%76h)|zz(s}u$`kHV+XHXYVdjSr++;aCKfVUnC&#Z(!Ns-L zrY{u-yylIl<>1GP25|%kLUFGZc0b3SS;zl**4D*r|NpCn|KGOl|F?axd$2zLUCG1E zJ5s|KOAq@mYs_2oFq+{26DS>!L)o$!*Gavnhr3-mN!JzlALoVtxIz?x}5Xv?pB88nulWCPTtZPCfBwSNAPoW+vl< zS?>kyTBAh5)bw$V$rT*JPj8riq4z)U{q7%I-M@U;-0c2M{@wjs=b8Mw^S2F;W8MLq zF{J+`^0#QeQ)ka((^PlCWW?!#H#wHZ7K#|fnb{!x1o&|}@{@cFvnb$GH}Emk-80Sz zb4-yok3V())MMAdY44axkg!nD;OV5Og?pkO3T+q3%2VNlrG(%HYR)hzzEU{xF^?~B zH!aNAJc`|nbB6t0u{`*~*I29gTT18)PWf-WldYe5o?7`2kyXfl+gp3vw*0rZ_WxMT z(}uIqX<%yS4O{F8`YaMVigdnNzB z!?pgulBb@PBidnQl(?vUh&hA(!ImMuxEa)fz>o@Kbr0IXLxG(e|UGIB5L!a^LJryk{=5C?wBubD;(fmw=T?i1;YT%Iidm-NG6?-9G(B%0Q9 zmSPg#jMG?0EJc_MGl)ONNB#a&{C_DUeTt9v_jY&s3}e=l+WjH)iGSx~!vL5djN{qb z`Wwda7=`df7-70I%-wd1GV&Y3#BN?|&ava^r^1z$>+Ah9ybJ7l^xcuwaf`yO`={n_ z21Bf(X|k=+!zA>Skx~t`mpyp=UX{m2L@QE^kXA^NPAg|nQ!6?$i;WybXy3IWiafGN zr`)Tn3rFw(J4z%%G0b{Awe8h~B_0SUI&o^qgFJcdtd>Apv1Sr!g{z6A6{;qaEL7v( z*_4xmF;31Y8OKpRUi?RiA$gRWd6F-6^i&{Ka&qbRIBl#jm{Sb8PjR>0pt@?^G4JCq z(8DY)0(r2h;K}9UiJ9T4IkMEwv4&^uT>lyPJ5(V6#yO!ZoLvnGNbbjAlY;NaE8;BN zEY)FnMEG=Ss{>jdN501i5>$3hFJv#e>UiW_7vn^gd!JX{$tvrxwa5pdhl#Omx+{p4 zDXOqv&6Vh)4R+IE-un1iml)I@w!2ZOyq@Miy>(?hD`h`e%D)Vw-67t+Z z#mr`q7|Hc7d<@t(NoD=BA~Gvse;uhWOtR3vFfti?riL;@@9IJ;FJ@7JqW#r@rd_0r zs$IfF*Zyjv>~dO~VO+6kWZq!g867$Hhb|uq8J-F5u&IWRxJfrc3FZS+f!97ZAm=wps{N6eWaJ>N0M51O&3{ zmEZQMS^v_g%!KgAUH@C<^}qK2U&+(r{DOUkfTYv#Ho&RnhlY`N}981W~;??wZP*%<}hdOtN4?Mtu%U@{C zh>WLh{byr8xnM(fO;85=xBee_HistIu>N-s4|i?EP zvGl2%~@}+Ub9Q_21P@NNt7_|d+Bo@7qh^9>6J)X$;jtP9oh0u)Z2Vvd+xCc zJ-vug*G8$LzFo|KaSvXUar-QFj@a+pAU%-20%vDC?rQvQsTt4=WS*%c$QK#6oSQgr|_Yfr^ zdSF2|`%f`#&*JhQpA>5WkkerS32=B1 zPm_tALtX4rDjMb;Lb2rAyhenQF-)w`d=lCVSJ4`Wv$Yty7DL&DxyyrlxTyFkHVh7H zweru93qP8aBYO0`$Ss^Umf#|mX~x$nuPatE!^2P0I0_gXt7Z#v;P~?L_1VcWlW$J0 zPG6p$-<%!4zFwQe{)L~J9P+FpQ&=F~0O>+o*xDen1W{|}V- z4=fvxXLRckMN+(L36*{jK#YHf)3dOxjCpc$dVPKS`{_S!&t5(OfEPQKaAt#YeR^_r zdc#a$YZ>)%o@)6|?EC#&;Q;V>{(pPB_WAGD*4qDnHP0;apS}+-F6(i4NBVtJ*GA0K zL38fF|7M({2W%z?Kn4lrT`1vc$2f;^fV9f-$|doZv#JL_J`$TqfW~PCF^*7j1crY^ zsdx{QAe*Lyy*@s@-q}B3AEe*%9904MC%VIx_|uQtR=NYUTUJ6St@5K(-{mm%pMhT? z2}VGDVWPDjzd#DzJO_LkXwj;^HAx{{ZE*8x7fhZg;Lq%g2)vNLV!iO_mhCB-vZDn) z+xyq_4r;^y5yB+%(<>?2FZujudw0i*|Gl%bz2^U`c|?3>5k5-hhItNHW|!B zC}dgoRg|d~F=>spjSyios8?uwZFdP-<4DPpmI$e7=H*xidUPq)qKxcO;;ky=2P=ji z5}1|B6xU5PHQS~7jv*PLuuxsa1|#=7T>y4f*L)+LdU0Ko{M#+2EL1d%QJw|xNaVd^ z%vBEf38zn$#^r1&jYxLGH)UO~DQ)163Oy3ZKFP2A1E&h#-ftp7n;!TAKIVuh)u4>y z+NpEVryc(%#s+ZuiNGxJV=;Rg_k%|MZ^wV!+27k*pZ~AqG5P->Lt_BV;l(T46?#_7 z`Yy4gG@CQCPn#J0vN7l1wG7p%Q5067DnY&Anx>@QEUPz3>uQ`z;`$FDuq(kq7ugTi zJHf)wEd2kP_(|x;D4Ed(tbzaU9Uj>BpPhrO`#@w(5 z*PJ)C_?ks4Q0qSfm+rwZ1JPNc4L>}k3KtIi7}5#VZc+p&34BsnV3U$j22nh@Iz7HQ z1*iY-=Jfpf?BX1p{R+-6ZoujPJG;KQ23qTX^=i-doXE2Po)P{Ah>Mp0>djXEmY@{H zXgFH6B=aV)U z5KICTil`sVn$CW?4hXufVaABg*b@}9(7vpi@oFj1*#y^N^9V_cKz{J!Yd9Rkgj`2| z2;k(D;`JzU3sU(M5A{$C^jz(xi?=1~U2-{F+U z&}PDzC-)6cL`K#(FtIT1d5|a*g2VI2ws)|ab}nIu50DmLz}F)TJjEZtJ)C+Loa!Z} z$&qD^pvYxnNsElCA_JdJ8Iet-l-QYdb(~}Jn~$COLQIIW5#YT5@&OP8?jS%3%a>ZD zP97q{etBT?pD0Rz_Z)bo79ChEfqtXt4rYl@Ungw96^)wu&`N0p8SASPf_Z&wusUqFGwZ}+wTJ~b;!&S12&t>DViD{3Kl*@V@In+@?7zZT>dmiuxG4knO9dlgf8W|^s zN^(qC8mS@7szk?Lr#v@wDr;Rt8Q7#!Ur$MR9k4kxUTp2`J$9GwAbEf=0oyDk7HzR4 z8um(Jpu1;vGpcGwwhYEhW~;dDul#_+f9CUPPRPbOwiz2lVZLp z?i4!Zt+UdkpsUb*4~_-XuJf&T?ULLt&rk~Zwm_$61_veU3QM3NOot zVtD({z&n281HmOPru&=JhpQLK_8j5rYh%XChEJHunPptO`nznM7Y5B(Xff>Nq?j{? zy>_^(4UgKwZ!TV59D%nNv1YO&PuH@l=j&t6Sk<;ZWiKkG?8+wX z5~uC=HgV^ex@fkkJC_^95BoIBe~+I3Vf)a||FyHVzrT+EzLKX|{&R4~ncY8}r;K#b zvuxX@09I)`5QtQtCst^-g0AW;-Ciohr()YFSY9#2(_@6I!GyD&0~gA4cFk$~e4~JuuZ8RIZb5C4c*(L0@Bg zD}-FdgmavyIH>hIoOWFA<$ybPjoC=`JDj@6WHq!DDpkuV>^P~kC@LoT3|&S^JXM=w zRrjBRRd@YoSMw^LR{K96jd$}Zf=&A0)}HPEzq7Z!j{mcgXNIlEo&_`LfzpaJOLVf9 zmS%}v$#SO-JgdxQMFDnLUj%gZSeT2UyNB!e4=Z_Q;QwM4%&!1eLuKE8eo*9@XXZ+G1Xm;tp!CR=D^uyx0S~8FlZ@rWZkWWz{<|ycbb0m*@ z9()Xj(F7(nHX=hs@!Y$D9pUaThE>fQ&(^G6nI_2nm zm7(}#QXBTKjuE@4vpEMMQhF>SVYOBGepI^u2__;vKse~K1Bjle=P6c+dR#6cVp?j* z^?q{ksnz~pUS~7uf{ps$f$jghyS4WJUClGY{_oxX*#PAwpe0xV zo8qv}d@rlY5?G??+7!5c?57p~pEK{He46vwDwBr8@x_~$E|Ef-?q?|Q)F2O;%t=7k(=!mJa`S@zI^7e3X`+#8*LW!D*H%AUYQ z`?Z4k;@q)%{o`N+!#su|=lcs>1a6Z5_V@Pf^?$Io|F7n0UjK5~t@(hLcK~1p{ABG2 zS);;F$VR34@}RWL^Q&ii8|R(LJ*H#QNEg zOcnrg6o>)lsE}*=6E{A@1rLGaJ~8n+>D_3TdKZA z3r_&hlxAL5*P>k&*r60F$u!$?5!UyHqatS?mmm;_re3Z@OxE5Tze=p6)mj|(sNHPr zr(UVuT2BNQ0=!wZ710rnP~vA(eK(p^>_)7`wZFkPeX96B@uLK0{aZg9;)M?X+vNYY z^FM7LZg1_c`Tr^&k^h_IS%Lu_Y@Q}_G3L)FPmh9g7}RREfUjSlh;p1g(;t*C6ZnZJ zHa+q)($jYeR#e1VW89Ooqa4GK{+YofWU*`*ix;>(X_2km>PUN6_ExOl%x@(Ru2@SR z{6sSUnEq{YWbSs`Ceu|k0Fu*V7T>_*ng3K8xn5-!In!5LL5ZUPddeTRC@A{jXDo1~ z*$8`E-HxqvxZbSQl1F`-_&@#bC*kAzf7$mxw-5IZw$}WA6_3IH#b7US3lI>0id{hU zWyu?XgH;N@K&5&gS#$0m;A!IjFqteW{x|XegTsBx z|6`lITJ!%EJO=+iO(x4>`!JdO6fB?hk#91ml$LM;e+h^AxfK z>T|@61|CLvMz;iyb=VVmZ#$gPt7P#T_bwLiHY`nC$=7mdT&t~u5GBl{rl4@|l#3*u zvK^-|dNGhjuxg{N7nH)by5ibx%~BQ&JLk3y(5=3(7Yqa=UF|@Q{d;(pkc;dbq12Nt zyLMA+BNwFB8v8Xv<0CUCjd7|QNF(0waC!v??0{FenDd{52*x4()1gqJ3~VM4Y{oDF zn;R4G1>D0a?(hU;X5uyV6?_4MD8r<~QE}t~D_I%&q&BRKFqwSd%C8SHIG~Gr`b zlIK+7rOH!UGd7!EZ!->uW_70G!BfnjeXvtySCY|%PZ{F{(7A`x25i*JdpPC1O(LN! zJDbRiW-pWg&S|(|c`_O`;HT72!gDcWHmkSJoJ4W2C~e7Z9Td?Q*3B zA{5&#H;b8f!g&MsB+x6$dh7=q;fi+TWHpXw%pxu3YLp0OMun10I){YdDdrjHjjJ;r z*bMwJi~}D-*%J*#yLrbd6FnWEJPGZ5H)ffVR1%iXqMYM=U%h;-=3lT2VHMEqRF{o? zlEcAaFMT{{f7pOTN!8e>elKZ|1b5NXVm!rO9n;_fF|CJtgFKGKnifl-0*w*}EW|s8 z!OTWlQ${Fuu0oWMu;hy)d%I&JIqAvo{EthYj2yVD)6m9^pbYMV=ak;mD^-xw!--J^ zeWHO;-cO@Ljdo~l8phC`kAgN=xTztR|}jRHU#$Ca%C*ynad@ufOo79IuZ>YjaAwj zg`@c?+RB2h-3uIy8)}(O=T;^6eq&lI+jVpK$K>&V=F!2ZiD($AvArwOL7LM$6Tws)j;SB-ptqo7B=uSLjz7UT&A0Z{YUQLjHdpVe+W{ABVeJ zCI64Z_4(gQo|63kdTG8NV(R=X@;~p(;~WOU#B~(NhQe_pi59nozL`uTY()zx&%to` zdE04m#0DY^*pXbDOtz1EI>|>t>&ZizbrDAjsVLgUB`e$snT(vu?G}9 zUk#PP@t1cnxaiK%#Qz7;Cm5bC<^)pD|F^gHcS`*KaC@EqVI_~j|9_=}y*w`vId^`F z9iZsUQn!HqGjKdXQ3#SK1}TaX0yAvnxEIb54Tgk7b&}8)jNN8_VVob_T>2T+Hz~u_cO&v?BWV*t=SiCt2)q^1PdWdPe0~< zY(Qo%3U8C>qyDzjaPP@sEpp-X!897>N%S#?!bzphJ;8y9Yghs?Ao8j}9D7u~AE!B? zn`2I*I3iOIc*D$3M^S)1;7y_sBA4+n@Og9{jWiBPqqx~m%QFn-F$lVeHOKvXjsX2< zmNdf{1}B1l9KB#+#s34Nq*fDD%O1lZ&muAv0D6HR2RY?}^W^6@;sb9ms!)vLLe66! zZvM*_1{DEs{!5E;X|K$i|I(qneRF*MdnF+LwHj8b--;rts*Do-}S%+>q|f4zQ{p**FsbLwNd57C*& zwxAS+I*Z@9d{w4k8Blrd@W4*TX-bh0@5HRU_kefvUz7uQbVBJIpj~A)%%VQ~drlCy z*QYmSFy>ZcyCxJi%vNhOgIq(vy^)V!UA~=5$rz^j%`~Nql;cF3>JQW0>vU{Wt&X|j z)!^QZ*u1qTzQVav^Q{+0mM2M+41tfiW3w z&I>3Cxp$UUM50v%&*V^M2l4j$^y+qTC<{ZNTbl&&YCaIJt}fnQ-YyQt3Bj?2(@BO9 z`SqGksSNrd^E|(}0wIE!iN#{>JqIx)03Q@8C8px+eS#hU8TkYZumr&r0(0h}%$!J~ zp)1;S6hl141dhvd?Hnbv$Q%T?KDfO)J$`w6asK)rw^tVzVq5mMtCw8KK*@o2zoikd zP-8VKVEL{Bds}67s}L(H%x=u;*IBOJ?R$Be?0?bNAHr)G!+@YULjSU-;rwUkaA(hs z|8uyvzW=+D$FToV-GmLe7RY5era)sF{S@{S|NhEmD8;19mfy;6jMC{PPA~OPLrhzZ`H)?7GI5q1;93u{?+`} zEtv%#E3CS071-qgjC6=Lc{ms`y3gZ=Y zInO;>C+(XG71rk;+T5{ztfxu-OHoD^4FK8{|7Yi5*Y^L~-C4_jD|rn0j}7(`qrWkD zKZWooda`7}PiDM=*(3_!xj%-_)vrSGD*H^Z0;Ue0qL5p7pyQ&yJl2pkBMd~A)?Tk? z`ScDf40@uZDZOxbWCSw?%?C=!)q?T3;SoO@LSmSsv|Y0Q3>+sR^N?T%dZJ6E5I;h; zs0FPHyp%pF%YV0YmBgT5#fhy$goAcC1xc9%6%>iEy6Zy)F446#i^j^lYW2)Q{8AKM z9@^Dc#|s>E(59pyrfn+7`JDf$O;~eOI9DkhkE_Myp0_2EHcVa z>t?Vqi&Yn^=dv}Qt6MSBcvQ^f8roJw-*8Nj%DLTgejA;3&ho06?wsb!?UQv^&RJBO z92Fxd_7gf-?g?1N)v6voD(WoK}D}UWV$r+h8{2B9~R<1=wWQ9n81I zMYwXaRafyykX~kppa8|Xy@CX3mAS&Go{GBiQt_ri0r|1oy>Q^i@tq&szvSQ5-YIeF zxWl?BQtJ6(d0S?WoU~MBUx<#n$z`2aOK!@Kmkr8`Z0E*cuu`%m0imEro~AGZrDnMq zNF(70VN!sTzZke)xjN$rR>>rflsUpQQiVFFuZf<)wj= z>a#tI=D9t=wt$(G_HwJOHS`88U-=3q5sCab`U6_QX!*I0kEQPB@NlP}PlbA7t3C|) zD+JKQuv@^yyc{Mpv4m@3g|KS*I#X3Hg+WjAQ|ubarOyVYq${U zuG~ zvMkP(&xkH$)Sv=v;3sq+mhDjijc#!<@f5`@WSzA7Z^>Y~iMOT*X_QBv%onJSN#L)yM5MvK` zbc>3_-*lFeJT=`w7=Rng7sRltNK?x&O9M}wymwqqeuf>6&4PNa?Q(+P73-2vngP;v z0(4D5gE>Z6dCnwau5@Q@Tp|Q3bA|FXAl4WoO#8RQ{<-+OBz6^qtiD*Spy=e7qk9~K znVdZI_KF`3@e4O1U1&87u$KK%F+KsKS4`#{T7=2@IIFu;=pr5p#ipnteiuW{V#+PCv!u{rZ({9+vx$t8-3Y znbkVWaQYN}GJ?U+;0eUeYE+lXX5LwQK!Wrd1^3^w4}6PQq!S#%x59tLUS$j5@8AV( z1*)593{mcMs;EU%EmY6o^cA=^Y=f4%Webo%BDq9CvZmiZs61KpXjx*VEmg8I#V=j* zByxm~_?^+05T++6ox0v?RYO?>`$*@fRd2P&UCBIGk7z~AReJOq;hy31Q28W zm1w@GmclGTq5SO#z9Z#dhJ@k9!w+**DxacfdV&p?^q}&qa|j*Tu|bS{a{44W*Y{#S%ad93?i+uNo1k2_o22kZPFD|rm@?Me>zawIo3cYX?~P3z6F z4S@=DNgk^V?o=abnPrq{QM`6bQN{Nm^aHGoQYfgeU!U;5j-HsdAiJb!mdmu4KE_cp z1Y6I!Ck*%RVbd-m&%qe_%=0KuSl!|rO?Ip2PMlrazUt0mC}>2h#ljA#wTZ?NaS+f8 z(%b_c2kUhdeiyVjrJ0|EqEY5NL`HDR9HvHo62>qD{vDdY;-C?1u)AeEZPsl0#W@!f zJ^&DdVnP!H#y$x~zz3;M2+Wq`>@d$i07^grByzSabcX|8nm)l%Msti;?U<18+{>R8}}YzkIjzQm?>}7(&Kj-HBhs zWc#1Zt^fY--uvzDUp{ztydJXRVwOVM*W+p z|0?RgiTb}ss%%6Hn47;M+72$o zxs$dXN+jk`nzhrhVy*G85M`*&lMX=$qE0gmQg&^Z8P$QBUToM`c^B=D)uVC)Gx+@l&jNZwl1bP;99ygiq zUeb2vN`_vx6fK8_ryd>mqkd6xfT4n*XSC1L`wd~$mE2+0|2Q4v-jfwO694$esMoB4KisNXj zmgcItM-TNp(IPx=kaA4t=8v>Pe-97#?D${Xdt19}`|m0q!~R=HaMxnkflQpS z6w8P;nSKhhaH&sAH4d9sOjH61Zy2LHKlT9PId}|n$#<0QgpQdOw3-|6sv=s;!f!Fm z+$HH3Rg48)cbDV&GH5|(Q0;OhckJ!2U!V9?F}cj5Nfg5&JjH<@Gb33EL{&j{ASz#n zrE0||b~X!x0FBej3=N`~`O;B=sZ_}<#$6M2!JG%is4ecjMu8uX5GEe48q43Z@rFiI z{x7hPvI9T$@1i&&5oFf$&ngB;P|T^KNY4*L4#N+_BU^fHtOP)}#%BH5xU)LPqiHU$^u+;&LONo9aM8vq}Omn^vjzn{-y1dO4dh(HHs@RX5{fu8^$ z<7k+`5O9*ZY?byRX$WfMe$&Q)!VDa3vymB)+g*lfgjs!0W^tjf)`y_JmlA`E3Cyx6 z6b_o2smRfKDZH%JgvpIGRNbBkT7g~-jf#8Sm>nWNKroJmBSH)2DMyM$u@IJVe?VXc z#9N%n&#inegVk6U@h0}E*b*2C1#KPFJr*Zn8+N5a+IEL7b;bl!x*A$-2o@T!ex!Dl zCnOp}aZkcCv~2Hf5}<@btxa3ept-AdXU|~KuIugZ3JNqDFs{!qGNY}+G0j^TDI8ON zE)q$A)+_-i5i?$4`oUXhZtIqWxo5TxWQKW7;5fZ7^jV>nsHl@(b!1f)nx!I!sd;@J zW#o!+(w25go}aBO!HP(U3|4DHrP!mbXic_Z{vDWobx-Q2pR1 zggG1DMM(&J9>VS4U$9!tS?T=r=JuDf^Ov{Rr&sUJPEM^o-w(qRk*vGU9#$u7dU_LQ z?@mrV3D({YWNT(BLGjYFF|C^9HCwDXwLL!!6)x4HJ_Gp%VPa%jq-tiCCq*{K2!lHq z_&J7D8KpWWK_D2RhlBy(-1-gUc6UGqe^Vw-d8SeU|OL6}rXF->!E} zF$iW@6Ls4~4Z^c53pOL{gdg=)u1{}RZq*s1#@plWBk44sB{>FcjK3gR}O{5)v`m`Q1ml`2JojiEHwJF?BhY5`i0gth8X)pcyFjeLVokb+jIi}IqSq&^jhS1bV3hJb9yFn9kM)tH~wA@yK0^I6%srB<% zPt*Rd9aYaA0-(YFbN_I+bpQY0aP9xOlE>KpwZUFu7BCI!Pay;t{aLmUFhMb2Y_t#? z1O01&LU;|c3Czxh3Cdttx=@LdK{OousRuj^gA5W6c$0uQFITSJjJ$W;k%bTDOfE*E z+x=(Y=Jm^~BOqf@{%>%O2zYmL!^9nw6L5WVUAkw=E?W$t{8U~6 zfZ|(-TJC;TOmK&5l3FM~p!-#gs}=83x9k>G@CDOoSG;#uUxKrg;1)W;wPp)2{by7P zrt`tRifW0b3X;brpQcKvPd)XeLb-5)!}*;Pn0P-6DBgaCQhzAbR~Lds0hgkpo1Gm! zt20?$>P*(@V5Z=F@EY_kxl~z9emICe0k7}5FsiqrRiLCHLOBMD&Bj$d9}H0T;AbJg zv5!aKeZLXajkKVsy|6$WMKV@y>Gzt1ixp&Gfq||V^16JBJRV7im z)6{&lN)!u^6_agPrQ~a1^q8AfN(_aS5kKs#X>QJI0V+*0tp~;1deEP%vR}+0&>H)p zepGMmfGo7A_0CJkG^NI&0TBI#q}%X#jbV8+s0K~hHDVM z&X_77MLsk-d3>x;j|P0qQ~F+{hLg@Ev+be|)QWkpXOb)xQ+O4nJi}9|&VOuQ^fB$;GSNbyZTtv40N%h6#o&Ng-7X90`CNE5ZWEl$CmY#+Y29 ztECIt{b%4B5)kB=pfO-81|`f-BZb*G!kBrdJJLDXs+U_~u>g4;7t*xQrPf->u-sgy zGPFWP$6GHtxh?nEOWc1tDRZ|TmDcb5H{jcE8y~pTbWA!vlVf=%BRuAvMs890rzlP za?09}qgKd3++U>;UKK7?M_A?vn$0$yVznEwo*wj@4_e6+qLP4x^Ou2Givz8~Y0IGG zTs_is=W^ew(Qm}kkw4Lu>-}?aA;vZ3ur}YU-iq1PX>DgS$>b;l#w5Ox%rg1sH>3mA5o403)34mhyJaTotfZX7*vUihv7)*|cSQbFtm^0D)+-~Wer9H>YHDze z^Kw&{(kLWg`U&7nis`EcME1r7%n>D^?fGBB`7g_2(2b)345mR0yCPLi{}z6NLEH1- z2LG?^-Mww={C9W%aDRRNyNbs+|D}Tp_z*AW=(i!WQq2W*c|y0r|M+eXgUuc;>oiy% z_p-jT0^-kZZRSRbp>OR1vqg2KQr>$3<^#)VLOb?>dHidGVe+1@U!TxYEJQo6T0}`{ zGfPCJxpIP+GFa`ceUfH*=H>sxEL|S|-`}|9hiML9zQ# z9O;%ri}B+;R$;vpG(Yq5f01&v)fUje|97_zcP#$Dx3l*DT+L(fe=(?!vISJ<=>3T{ z0M*HFtOzW33!uGP))pYk_+&)OczuIbI2b|hT_Ey9KiaO*t+_Ij>dsjOx)mwD-9{vr z!&PdyShXA$F&ORKtL7N4@`a&NNPjUZ4gLT6^@*7NM^&Il2ovtbLjPhrwFT0K=-Sf( zJMs0MLD*3KuB)Fj$JlT4oOs2T0Kzd;uSGL|}7Xt+hDy(>?Rb ze@dfkApth(|A)5yckf_(E&r|LG4KD%L0uaG=9dArZvI@B01_-s3VbX>fTI1{8qo4_ z^8XN~bU7qJ1abd1h@;?sgmMhel7DiCiPWV1o>X*aN*Q7(*Y! zp6%xz-lZ9wL@4LiH4(bcQ{YXuc>r^Uw^0|TegO4`ov=_G&H~OW;cGy>^fAMZ4&-s1 zj{Ng{4EDDi{+$_QIe1lvIFvzAUF>+{1?+J}21{)Wcu)Col{G=D` zg?y)1{piZ+=5@dqaCfj5s`O@tyQ4|7w#}h9oVi8Im*z5qDWw$yqtB`E?l-FB>Jw_x zeLAt{kk+z!&jMwn4B+U`+dI3S0*8l6^_YK=$z{?kc6Ew)p;Ql7=mI!8|@|M%&H z`K>xuSn=mu3^O)+C6S9(YU@!M;LbN=%Lw zXhT46m9B*603+b1DF!)9i_LF~q|aHhSaBc2n7@UOud5>zB=FMMkC-FB7!9F4yYB)t zfZ;(+7X?+kxs;Qb!DM5z2zr$C?8<^1f<=MJ{w@rVP3}!T{pY0`8mBR2Sxnf9m=g@0 zuoMKF$Oa6dIAxG-sm!yI@l&vQg2rQ*5T33$jr}RxXHg8Pm>r-jqdE%Dgi4}h*x@r& z>~KfSf$a%oH*I@DG0L2c%fez>a66iugYwgF%0OofSs_Jh1)^jq z-qS%~@A53>uP8m)8@8O;D@LDMm$lhtgGk7urVW`>`RGN3a@r(l^uQN(x9lJOIM(2b zNbeN1vCovIh#X~IqIg;oBFdX~$AZ78XJ5Ogh5R4h{oRk|%lyZmdij56cYpi9j{mZ? zyY~NE$y00G2w{qQ4}N5rGBo)+gJD#@Ps42$%C=Cs5RDc%EDvmyS6{LI%K2Dy1HHuR z0cH0w^2^@X+Of>#>%6L(e#5lNE!+*NXF>uVBSx1~zOvV| zX1tN~8B=8_yj#+^325t)<0B`?@n~a*k|A2&*l}p4&c6z)@N(b;vd{i1V0Kr&(0%GD(Lv-5r;Nb(phe4d=It zSk(oWe3A|qnlT$c!jx&h+LLs+oJrG85p{~J-I8+7v-a{tPEVq-KZNpL-w|MyPT~kA z+g@`XrvEZ$UPHfHUM3M%Wecv+pynA;8j&@&awcjctSGA*&0 z?&t{scJg06>8_qW7l1A}e*O9hOeXZj)#=N#>)YQhu5b8ft_J@Or&n+wD^%G#_*d=& z^QX_B89qb2YVd;tIUZH?i6l9}UG-G|>4PCLXAq<~W z9!J}wjI>~weiCxWLi%a!M@iuWv57lsA^>*qGF#JhE8!(*yS-iyT*nYHli>hmV0()$ zEUg6qF#Qg;x5SG_i$5&^^FMnCdjv$7&c~6i?U0qz< ztZZwj#ZHHm9)WI`x%qE=)~Wv$bh}LU+d16YKGZ%+D$oKS^9YhhTeh~xMf;WeFof#` zyOITa^7`!L_unqwUZ37xo}IsX>@{0DgSD3}mHI1Iou3Wyk!$U>TV-rg$vF?YU6Mr* zzt{%dE>5EmX29F{Y*FK@_t!!%;;o#}4*W(t0J>Wx!l!RClvc<1Q;$$1mTUo!`E_KD|0W zesfv@MESs#Dy~X5s3s*dr7MMC`3y|hJ*o-MjU7{nZ3_lxeL@&i{0j{f|YKkxQw$NTaFn?GN@KGP+bJEX=wWiPK$oPl~Xg^PijEL3Nr z#W_$`!rT&Hz?j32O`Soizdyp$M9o|Nm zPV6b@zGV^r8EgFd6?8-PGc1%r&>cA-*{ajNDdF*9VnGzyP>C+-KY9UkSG~HZqRmB_ zHW!aa8?-dqpk~@=x2o%Y>D6sr^jmxL&Hl9T{}gt{IWK=T-~T$;-M9Tew-0yL_rF&1 zu=`)%+3hdspjdbH%k9Lt*u5{)+Wwti`ZAGied9~Jj{M_X43j4v)pxY)ZnXer9Gg7y zJ+tL>pbW1~AKKqs8@0N*W}KteUt8PV-8%3TWUaisd!v`fALFW9XmYWOe_Px?vue0* zp5pOKW7{zVG#o)|$ zZLkW`e0K&dX!>P8#eC)gB)NvTHOM*0JbG*4 z$}+A|$|!*Z;-EyyfWs0@zCR|D|-G4DXxh|GN8Qz5dUfy_^OB zr=lw$*Q$vX?s2AGuS3>>x=afuz&2`pD-3;ep z+!bklE!4E|?u;n`n%@=gI{Uv8J-<+*`gu%%x8;3@`kQ%;xrLs>A}xdwa{{dBypq%n zR?i|}7gf7oze+MpQ4UBprIV5kJMcjg#k}uyDnCSVEWcpzK8fNFRzBAP>ii z!lqCQ^uj_hFm9?foWa->o29wpWL`e*@NfbaX ziPm3pc6Gq=o|!wDpJlAn(&NETgznez*`>i;_}y_iM%Qr^z>0)@1%MAO`=r_OW-0Za z6BRZLTpYMa;whjTeGI|bC5SM)Qg}a`IzKAk7sxM}=Wmc8z043n0pk8%n{k8*#Uu4( z#(VZp5ncOpDgQV{jSHEs^s1&BPQ}%td{t2MRG`G*iM~lWcHqbHogdtbC>K<)Wz>}2 zD0T-?g0gH`2}sD#`KF_O)4hWaLRjn(nsUrA(GVwoHiU%EP3^2xFQ8|Z<&fyKW=agu zDqC$u1II2%L7B153$$K<&2k#rjzv#L_AF0qX=sxmRX-XD#;79R48GabKCHX49& zj>&I6)~cCvPzPUbfKN;tg>wJI*6Pkh?@Zt?+5qH08@~|mWs63_{z}^Tsp1)Rw6Pe(Jsde>Ls@Og8J^%AfNJ0!{kg{??(L|LgE@Z@vGo;xYDrDT}KC zUxpxnDbV8A4=NFqda+gqe+qR_vv}}GS^r{sVH^Ixs1n$y{~g---?z5+*7m=ZJWl?< zG$oL8%^z74GJ{@y2?Vvff8DN55D?%XAS0j1tW}t8_Oflt zW<{rXHj6x??W3gEN)D*)!5ms13%{!E(tJCTF_OWisf$tR!>cLZ>6CTDLZ>PZtFBm? zkTm6rN+GROs|sAIl}x?z2w|cjR@QK9vDegG15gW1S4SdB{qZ7g)B1BX*(1|*p*|}h zb&YS(0=i%sj+kVLiBF=ykSV1RKnVy=ggL+krd)xxm~AM5R5+(otTf^NiJ}B}&w;1f zbz)UN>*#XZL|M5iC&Jm~iN+HWN5^@&E0hz8!Da$0Xk$~g{jlmo>c;8=>&E*MJ|Dot z2qp$uMPT^%yja83gdZC^V`~r2xm-a>Qzo2eepeC0)oHuKr7r8zW8D~Ac#BlQC8<{s zqZhJZ)_kKZOV2a*S_Ae0M2Ty}tL1MedPASU2Ym4Ti(w-t#cRB%59<*JYJ3UAg7wWJLG8yMsNL1So|3 zUJjw#BJJYC2*t`B+$^X2;`-~Q<&r0_H1&n@A0EqoN7-PPZ^S>+iasd1!L4+%cyoUCo zrrP7l3JaPGZH>FM6>>d}wuv7dUS_UjBlwTSTMm7$T&ga{>m zHq~uElL})aYq@4)7006Yd|MS3uR z32yajv77%V!wh2FzZIvu^D2JgY103;w@dyXTLWfeOHmuB0xLJ)! zPNKM1loq>PAtE>UzVv`6aHszi)dD|`Vdeqvj1PzhynFcnv-jrBZR6PD=G7Q`t~lLO_htM`!6am1Opy#h$?+ul?ys;C8#jqo;%>33I~IxM z-~c%1;NUEjddZPo@_ouB+`&NCd5W+IRxB&@C6mM1P~$CY2vZ442oZ{Os|-zZtYIbK zk!p3Sxcv9<#!khxAmM<#-D7d&l5|ex_Jv)YmdU5%h?|JkX3k z^fR&sCT(meJ5r`8=VRIVbLOS4R+$Ehg{Kp3Em~U5n8*HAO;gt4Z~nhPV=uP9aM`OE zvR|cIt?*WRP#u)T3X^>XJd)Hj#wo31+em!8s4ea_3w&~ndKJN+nW!g>4!}4w3 zOr|g|H!5iYef?b4&ZfZEnUte(K_v1$R?JK~cPHJp5Rd@t60&XnThf#bOZfHd_6^Sj zRL^y0nPB^;TiJh$ZY;BQdr0(a#dv%K&NnEZ{X*5-Zk7&RNStpgIwpH*4xqDlN>W$1 z7cKE#aXd-0O>`@qd5p%&x;1LS4s?a_KQ`?`MJCsv7YKVG%kK5YT`oua#N6O&QB`j8 z%I)1usux43!l6U0TOpDi?@@GF$~#M`V7x2e*{a^IjaZHBSZtS2YovNSx?771m(HDR z4DcxNlyh7TVqxJcJ6^~F5b7s=h?XNiZdv1M8-rDH~ zxUKyc0Jgh`92tM#?gG~Xe$Oh4w)%h;_pz1>M%Tk#wG+q`X3O}1RH~yzLC0IQN=p%= z#Ky?xO`$imV~%>UK{KHfeSsm5S%7Hw`tTzrh{`@2Mk%kNpM#Bg!#KC>vm29+=FTCb z>!60ZFb#S1-T-Xe*4`la*PL>Nox6Upi-J`f#bM*NTxs(`oj+~OeYtn1iM@RmLqgs< z*L*lkd=`05B}=R|BuCmtP=s5gNVAN}+HH?^b}tM~bRMn|_*gc0^_g+vizbxW2F>!&moUllzFe9#O8*8K1xWt1u-m$i(XuGW_7w@jw zqGV!kVHZOZjgz64=(IEXSmh=UmJOMul`T`zVbzMqVBsXfeKzyAteC8`812s6eZla@iIdp9vl9L=2VrT9~4w(UyCqzZQ9gm zJGyq-Kq&ZHNGhzXqJV2NSbi#L7@+Qc7rYgCGIuiMyVQYV&G9OcgHuw zwNBeSM9uB3UTLl0H=K_FEI^DPDcF2+p8%Wy%kW4G;4&Nz?HdUZvSVmhszBGU;-aA= z4YRvr%{DqJnvkgAEd4@4o9*N>*-n@fgsyOo9I;JmKWY?@^^?kaq@kq9@0t6o4|~-#&Xo76$Xjb+uO*^=&@LhNRW0!L zqTd6+-9`wk1H4`k>;d5RB4NvW$Bhu>#k-7qLzMiFy9#oP)qobEk_0T!IUzH4lNH7@ zQlR{-{A8KTZ=_j4F1f!VYjexJzfUtxnRFOjq_WG$f|d4!-ICp$FzXeOpGduBU35eV z9)p_#Y^pYx#%Ta{x>6=)prgq=f;m8#Rd}PNbJU5Z9g`Gh1vb+Z_KYJtS34qwz zl$Ip&-B#}=LBPCYw)EhlU%PwP=C zDlEQbl$Hr3%vDv^2t@f{05&(QRb!Ke?PuT>-Jw_}w_`?fIfBu>W+5S4b}X>z*-l$h z%@W@`x!YxvAx!9YmmpWlb|yK~`t+f&n*hiRIX};Ej!dE58vS#Q@OyjawW-jjc9Tmy z3Q%8sn-VXlddIQ@i6cs~JxHpgWIy_D?9cGj-v8pHKsO@n&h{tDtKPr_-k^?_;7$Ht zyL)#2*WH7oz4iU?DxOxXT3ZK0Z58w%{6cHoKEQ3t}l?a^1M9pILgX%ucMMk_Cb zQ9B>zQfesUHE6@p-IAHey)_lx;B;Gv+gn)3-^QRE`P>x5yZ4smcn%A+b&Kw|a#3t6 zOJf{TG2%47gZCuxiJcDNUUVU8sBOKX`dc!L!L`S5%HR#^Yzo$3|Fv`E#Q)gc*M^Fb#r}%32NTvrgia>Y{5zm=bH!O}_+}y(wM6H~K#-k#GWY7#1ieES0rL&o0t3(6&wYLA}=#kfR&)!;Zrgs^NrC@IusPMCp=EL3% zDm1b--&T5QkB89$&1n%AH>_xjOSViGwrrU#^4?n3sJrZdv4Gw>pyXb*%t*h#Wo{Os zYTo4OENdlt)OOCAkufSOdaekIT@qb{Zzj$*><$ZWCjgs6!(*v_O-mzdJv1rIvf=IQ z8s!Np5EHW60>Z&H5el=>-R`rdOJ6riH_BD2+(YEea6(IG35p74; z%zb6$2f@qjyn|7A6=3zuR!})yplJR-`tEfbSvw)_DB(5*W4RI zp`(1SUAS-~@;h`*P&msS)9`5p4Jk2p8u7?r4*0%BVa$~~VhbZv0~ukOgs?E*RyX0F zUJ2}spxl_u%ITUe1zue%ehA;dTLj1~N8k>DC`}3;1t6Mb9w?b~A0d>z{5+#XWjZ6p zZwdZvtb&2{tDTI0mQJr(PH(w=_4Olt8=_ejGs_U-F^|_fZMv?gx5u8N9FOnAJgQUg zv(JHsXhp7Z%03Xn%x{7Z2FEIwdYq=Wv#gP6W-uqsT$nDQs-;8OK@#5s-eGC>40EJ1 zse9LE9iW?{wV)jJ_IwA%*#zzcASg@on5y<22RAJ*;h<+C@*L!73lf5Fcv_t~%rV`* z6-MA5z}#0u*0QTSbnBk9sqNJZZa)JTbe0%~w@?ITSsg;f@sXb$T{s+2)h+hayn*tU zWcO0O;{1bIXZsmAWBJJd1Z2wYrTE%n%!awC6f)1r9RhbSDLf&`-6d+e+_>M(XlC41 zLAz8d2h!bZX`JR$SQO1$Mot5cIJRmD?^_+SLEu}=5R_QP1l-^`N_bFr7L?ar!?fMX znX$V)sV-i%CRu!WFHl8(4~i6waS{RS1C8k^jQ$qX zC7`zY*gG!{{w!Ob+WF5a7E80L`iX@+HoZOsvUS7KyxrkA1~4Wmh%m`wc+WHGN*=;9 z2a{QrrFnrOu!(L!l;3aVvt;0l)7oK1Xv5m9Fas4i?x9{mWTLx9fah3@cmj!G<)pOG z-U}4GVnjqE;to^vk{Ofid5f4y8~)$&qLRrI=A4(CpxOMw-AMgfO9F0Tjgixt-Il zUUjJYUc-Xe#Q@on3&-+?v*UPGO zuT4-q9g@j5i~M~IYP;8yQ?S3q=A~_H=)U*S%VJ z|I;|8I3%b5kn77S!dOp^*}>4RXz2`%VVF92;}ai<3D(P)ARD$cSD+;kokadqqFvlkjrK9jL_{5Ac0||d9C2lf7^95-)ozITDBLW1%YodW zY!&3dLWX&3zrZHo?K!^4;|-aM@OLFX4Yhg@*0x zdqA=n7louL_?4`_iN9%4f4OE_gX{`)TIC2+qdKY?CkFzuI2w#JWl?1Wwl%qjSk|j zM^CC>V>O=za+E|U_lo?`(7u{x_1d?=`f8}d(`x@OsRC}?|GPW({m6tp1)r2^<|%i{a;$?J>31z?*8t`$^SYUt@r;bo_2d%v*XrO zQ9S4oJN}A4`&MR|#_zsBE~V-0lbUnBAR4Z%t$O!bX0MnEd;Bc?3MTUV|(yp^Yg;AD&o#8L+LhelHn|%gaTGAW* zWvkjfLfUR)B3w6^Hf2Uw#u0FK&Qe`@ief&XX5ZN&rGf9=`!AG@QYgPk@1U&YhH{;SWczRbG)>S_gI*WY4S zeQ_-8Fmjkgr<6OqolU`kZUymY-s5#o^ZtK$`>(wt*Z%8pE&s3Nski^?dFwA~`=wQF zad_zFq#;8V>-jQeSYla-DH}8|QRy!hBgF3W%1nA^d7AuBdL4j({(oRzV3v2qJU*hV zZ^cXCy`6wSey>Rov7tgsYCya|S)ATaQBnjTxGZ3S##fggq7CC>s9l0erxT6j3%pQUUC4G z27HF)ii%%5v`*172*<4*toExfk^HR=s+_xxTk!omqq%N0S|yB|mK)l5P0J1K!^Ul; z#m0h40FESgiXISCr`B3r99{YXaB-%8?Gtfp-ucIS8u-7AAimTgu<`sivg3b_jz;VI z-<3Sx^Pf~N%h~To5HQzLbDE70ETH^G`9ppXHs9rsfsp!{WuLJ44oGPpUYc$X!G{TA z$!YJ?nG^wp;iA-g-=+C&oWf3K-uBqK9#dtipP}~CDWr@|wV#qMONOM?-!O}P{i-D& z5xz)zalwb2TIyKUlmC-KNV6N1KXt?U6xZX^K>y3Q^h=xpo9O?+fkXdyMr;3{l{`F# zkeF{!Cgbmg;q*8n2~UCx{voL_~13lARct;aGJpUUXSB3 zzbbELRXmUCe*OAEdq_qekos}yNBa(g)2b~yLLUT=?8M}y|5+Mse}c0jeUr|TLbwH= zh9Uj+A-zQ%nL!i%KXmiIAC7j{^nVqPVgE^|d|EN(%P<5gc-OV<)#FtLv@g9oInl24 z?Hua-gA4xLy_1o7&61`_0oV1hx)*6QY$5wM5329GD%G1AqEq<-CAh#a#{WiTy3c?c z@dO~vO0HgB`dC5JEd!t|joxM4@S|>^)(ue!rR!AMvc(#QClv&r>F=^M`cKksY`SA3 zztvoLP#v49xxFi!{ZW2V)%0H&&nyFsCb@E|A(Xr*sM{ZsEx>KUaI_#o%7ThLh43=@+nUEX|FRV zTIIz6`TqUM7ElT#+tQg|d$94c?^@bimhMpEaG0YkCAdiQd+lWbZ?pz3W^sIx#yI5R zZpvbr`oK#U#k~VeQQT{(E;!R=g-H?N#3|0+`YWhQr&jo-FJV%ft)Oxn@kGx9-mPfp zSn;wU_y!W3L?|i1zU!RZ6;PPpw9w@?K}lO#1Vnui52uI_I^VFEhzTt}zA3-)&_vyv z)mMt!aJj(hn{I_vWxcXIW=lhuhgtzynioAR0oKfe0Xa|O*%Yz!?DC*$jdg{%6+-j$ z8ZCoS4UpZ1u$3c{&hl_6AOx;dQ>_riNh=CxIWF#n%fWF6)LB*g!J!7Do?L^qJWg{! ziZsW`4M55KKM5cyz})@hno27uyhRZ!CPT98JlGc+8w4nsznEnx;9V>-fhd{3%G2rc z(1Oy+&fmEmpE4pl#}>(`j{wo2`FHA|{j);bQy`uRWY&i|Jg zyjw~Q&}9F4bl~{^?;fqs|0{X;8DCEIQidMJu~{sd$AA7;1L;`}&`uC!5!ilruTi^j ziY+JjpX%W)oTBI2Z?2}b{UM~1Gc1>h<5W|2vYiW#w4hDoz^XP3Lod?KqcBeY?Kf&<;I1l0J8LasC1#IZCWfLqiHd=nx9?r`z8IL>6`qxHKg0#szK*Udp)qy$nV=zfc@s`Kj1egFJXNicP zGlGD=r2c`6$=`SdqfgODy);GFzt-ErqNftK(p-d`QOT)_oO!oOcm`k-eJ-Knson+y ztCqOWS9Qw2{8JrNV5HWomR80xD>C=&HMVMXqrnS)^%H>LZJHq4&(?GdlCv%Qt21LO zE!foJmiB8R0QASF#7(rN#bhme5gk{W=50R%|DX#>z$YSS7b&1aVp&0M(LG_l0y+9T z!+Dv&|ErewmDlEYDCJ;=7xq-L8}Sz;6~xG4l##|A?DCPjO?j1R%FFhp+qh;HzQ>mf+#C{%o2H|msw1?Ar6RvgNwCZVX!1?50JH%zMk@{vF}}Q zB&}MiIXqMp{y8~LHT|c@s?!)lf|k_-Hr@Y?4)>h+FKhb0n#Z93^biZgoG(lHwdM0@ zNxm_L-n}^lo}Bx1{7Uz|N^zR%$Ao9By$SAVDz z9b4xg2~O?tO&01PA1r=kYlO49PR)r-FR|ui##2xK#ogb-p8t0C_jaB0-`f6jHIGaG zzEZ^}Ilg%0p)@%%PtC zU!1@ALGu66TK~6_$EE)l=P&x8{TJsi9yQ%(@IM62r}+ILH2>oKg@=4na2n}7EwnQE zzZTBwIt?UVmiY6L_}ZtQ{{Kc$zPuH96a7DQ>HpC>|I2C~m;SRkUvmJl_#cJ`a2&f_ zfICywdY=4ERd+}ve|-Xqe1_VP>j&X742Xe!Pt&H7b&patq`GU02jWN-W2!6N*I3;&JEc5SjETD=0?~a`N|GhQ+U(Msu|G+8ggZy)s#z##5`2Ze*{7YBXAZX=y zqN+F)UwEc=Nc_9uZLFP7ttXtb@LQFQ*2MZXJ6=oSKgm-~|5fa?OBCj)c)0lQyPo*( zqy2UM*Ofd5{XeHu4(OZ%KIz~!CdIPMz*rE0?~3^-T=$5={&>5U1&of-?6-=KmAwmgkvmcoU~ z$Zno;)tFty_R6u5X=cf?K9(5S(t|Z@KLao6@eG>~ra1)=^2xD4M527@;~3)*1%9~G z+;vnlQgM0%Gqh@IX(afZY^+&J(!!a!G`CR2J)A^N9vK%ROQR~p)rXPjX;@ynzS={W z*mzdkW(-qL+{d3^%&Fo32`EX|Bv?e?f6eSJG<-rFDrS}%|nktpnNOm@p66d zV0vf$dN17VoS_Q@te>5w6TK_7jlM2MxRL3$&ADcZN zI1RDJO2N)-lJB3Upaqp<;v?x63PSW~0#X&vpzjE7#*t&`Q-_61HyYYH_}YTO*K}I+ z9!=9Z;$c5np3o@e1Sremdypo8(q<4^GDK7VTAXt&)NupMB09EHVfz{QAcPcv*ybRB z7v^O-n~wmRql6JQL2z0?DnfEofafSdq;zQ$jRc(TIZM8-tsKD!_thAcVvAW;+tj0o zre`ofexxf>;V3oM7uYovS!&sOwE?5zswGgdC^41@QBMH1;nmjTgiszpt*-SbeyuP4 z^ea=D{Pdihb2-Xr#+H04hpMD7CyLI)MJ-%%yuWd2al!GLvgXe<-u9yqvh<+keN9h8 zSPEn&_5VnKe}1*gPxDmkf08s(xrQG0{{Lui$G-pHAFc2ISMnJ5KX20r0j1<#QVXQ7 zpGT|xF$dAN)~C#`zk)!Y`cTaKpc0IZaR54n0a&tsl`XjDtT-!hJS0V$oyM_#Mr2_n z?GsM$0-|Y}Tq4S=zJGrbFx|ixObVRb1jj;Y!usaA5LXDfeGWF}OjA@2!F%%GnER9~ zJSqRitxUbo^a}Hif!jEIJVd|(e6O1R(|I$`0}m7bYiIvp*UtYtI^0{||F7gR=>J6; z0XgSDO!~5HpgAMck(GKr&Tp*)B4F}q|$!6@>Q@`X@%Cq4Fl3y== zTRc;z>^DMl93rM9(e7Cez|IKlj==7|k=K(KK8+%Ni=ivzzt$L_TVF3wPB1A@5+dzp zhsOnFsrUmT%wPhx)L!5`06~=AC3i57PA|>_rmFiFTaiW-SGW+epT zI!Ak>UFg^%j|RB02(+7>CK*C$&)CFy?#3FY(gD@ih)_IR17!-dm>z}$A3+X$E#0Df zitnl8`E`r zt!iqA>q=`i1};j4zX(p-T&n4*; z(JU#u4DSuRMS#q51d@~m(E>p+!O0B?Sa@?LG*raSryHt)6)YJ*e_-v?ua*;OO9=d) zSc~^ALfEwI-5&{Pq25JsbP0o+j1AKVw0@m@En}*6w;pJp7E8($XS%|)Tas;CVp2CI z-Swp6N_GHDo&*AjtotLZ8?ryX8X4 zMOq2#Fi!8lW{l{V3+w%W^`KAb_A~Hd0t-OyNmwwmce;)!&eNRE>D>e+GUJby?Wer# zma7k~NDisKA2)Uw8xGx8`n9;es(1m@i7ZG^F~r$?e~7bB6}S&Tz?N^I`7O)?8_$Do z7ti{M11HSM&D;cI&JDO8d9z3_nE{@^NDz4TY>j?KRIJs>{3fh0=%Q4X7*Yji2&cYu z;!;lW+hw?8@F}I-QfF+RcyesD9I#%$dhq^KOsDZ3ye9z&-Z9?)29qf)!byFqrG_E2 zO2K54T;Et0PRUdcpiOnZe}5uMv8x0B?&s8XIEA<9JSpDgZ_~75&dcWXPI-o+2FzKi zxq8m`{reO5trM|W3sl@?V8fa?#^S!k(>eHf^~6`j9gd({v>E>Aaidt`8J4j=haRKD zrX579TmhVbj{=OVpn~3+UGaF=-TGp6nmQA+RhRq6O5bCp`QeaN6|R|0F%9k%+N9Hr zX0s5@{973kT?bSg4OC`;WaNC;$8Y?(X{jZxxSu|0kv# zusQD~5`?pg9_*zdS;v1~$z#y}_k7A_4)7&Ozp;QGE!nq5(KpH0l7Y)( zZ6no>c!psTbRqc0I84f_QYCk%^t$_q(k$Y!^0jG0_xpp)uP%6t=IkgHT-{;6nKi3KmIlG|Gk}EC;#j2?*5wpui`QJ zKcDg*kAL|$MbmwD`CgAey^!3Z(aA;lJ zO(6L@a;;SPks1W}%Nbo+mbtHlh0ap9l|LjQj2F7gw3WFVxqS^+qGls+fAyuR*=)1> zZjgg}_&p&$By${LxEfnr5Zq)l?j|4berYG$H`y#0SOOLLtUz;&JGP&JNl|3vczgQ> z7n9jFYlW6dAlaVcD2mY?%+dCBoL+B_uE*i%VCV2K+#CPp;CcsM?}u<7{^f9I|L`w6 z!t>GS0|Fg5Vzi;b*4%YrZt9cCh?@~^AFS4Jp zfF7;jXN{t74yT%bc$L2~63bLoL9se@f3M&emDb#-{Zm8#QO@i=!!VsC#WGBw>HNR9 zvu~gO4|do3|CKx@{pV8-#GLoT1)OE{cv*pGD82IosP2Eo3E$|0e?DWgb9@3udR;R( zvvq{)&Q$oGhs%T}Ze>XyP`E5f_Ip8pb^1N(y*-IR1tIb9i zIWey%8u%4u_~f1d7)3kgyRC-`PF*vY1!GiqXt5oFI-p3e@Y98^?rR-X46%*9^G#tk zx6|e>2NqzO5?c7uBpaNtLPGFO!sD?)hNO>A$<+}2GAqExr}Hathw`#iRoFuvth(zS zfyA|(xBOEh|4m?yF7h-)T*pT;7%nCPHl6#k17ArDFA-dg1&B6pE%YFhUJpy2eme-tiMVJUBluD{gxV0+xF_1S7rGh!ON=Y ze}VETPMG8GuQ?3S1E)LUCK0flgN(zn%Ag${AK7^1Ik-;uhpf$T2hI>u z0cHZv!UId#)lfInT!bFFMfWla5u3Y#cT|Bl%aAs%TXcWLIyBx27i+d>D$qa>)3bhL zkX3klHw}tU*R6IRr=gUX zy}U&tW`%lVUy10|#N4y@{BK@ae_vOh?#!hy}7^4as;EZG$BO}aZ(V_^*GpQ|FduV|LpD_uI)cp@)+m8>M39T zI9Sp0BR(8fj;QaWVyI2TN{)(EtH3y2=ukam-jII5;m0w|(jHd2&o;TtRy)U*Z4c^D zEDmpcNL<#L!Y`M%=34l=qNIGQ!NO8n3nP8sIk_aG3 z?kOdn!dnEUm=y39ks)}U-m#EGrW$7mzJVhBUpS4yH;{-?jviy~{h#5fmjC8yJe#6r zb^rgTP5%Ew%l>EQaQ|SP|7|6YA^-i(r+isqPpq6rE7~dedluwO1MNR(GLyv2U?P^( zLnbZJ!SiG#cYv?S@~gLGr1?&K$;3%j5*whI8VhYGh5Wf(c6@>P%*r(YTG*6(@`KnG z?ZP8pSTVy{k!C2LVnQ_W8(429duvDR+Ywmqz_d+5fl7>0?1n z`>$Gd+!@75@gpj~-~@;6eL-|8)27QyL;9LhQFBV@+w#)UW>aGr$Ja2teIbI9=zOb8 ztZuIi^ce)%JPbsq9@@}C%ows3S_XB<^t?jfK#}9AafonMQArU4mSP4LlO@3|n^^(O zGDX``5X(kZ0I!x_ZYhwpc2)p&ng4Dnpvz`f0CO@XOM=Tyjen2D!&5)wn(ZUTd~ZZK({5UwnetJtK_k?YJsdPzeRI zxRenbabm8hA_eFRCPh#UtZUY%tsFP9LtReH+DH=v9|+!ME%4&Ye659q)MNk2DuLJZ zwc6cqsVVpn~Sd_rGrhs%S50WH}_S5hVfRG@nAoen0**7#$rQ{WCC7`}s=i+ZqtF zb5L2L{M49L2qhurm+E$vvY6A zCi|+;^)k1C3N3C6p3b^smgKJT-KXo8y=JhOEZr?_q@rK(YD<~mvbb%xT7X@kYSCuO zG7K`eke_U=k90jh&F4RUtY5|qpvnI8aA(){|2rD(t(WZqKAFDkS#29D3z7@k(6Vy`aEh4 z$#)o4-+V_=DW^{$xyaENe*wXEP`2mI)mtGHm4Fv1;CYgmWB{p5bO-YYkQkB)__*C} zXv(^G0`nKFtZt856!*UDG#i!EE{scPYs`>DZ+6SRF)Y!cWWntS&9_-HWm=o%^Z)E0 zIQf6}*YO`#@)+`;oa%nXzM6aO$0qodL+M-eo1zHMrf#AWg8%J`f{sQ))HcLG@vcP# z^@>JW*G7}ws%aEe?8EE zsqos_`pXs5dOh3x`10bzuW$Z-h5z~uu~+{!`0GXhHjDI2vNSpzozrR8_+*hOuY#h__{W_c$81G{3m7D2b2GH57zSE4|@#xPaSi5 zmH%oiULTwMR}N*Z`de1@r|HxFc*?)#!L3z0Yt_zA@HF#(W;^|m`Tq`f-T0pe2M25Z zzlz7;|7@!JW&Tx`_m7S9i*Y=>%_pCOMc6B=c_nc`xsZ6%z=B-+7PjNZ#FZ~t=!RF9 zcJLJRrPvQZ@MTN_5G2KzSSRrf(bjQ=?#R{hFcu_g8NDuMPRCoivXRn_9hqPV=xS9Y zjpCG`t<3T8BFzgJFEsOd1I{38X1)?4{5e@{34TsG_V0;h=s*+Ck`A((22MO{2aZ^! z@ho9?ggyW)J4eTg(Seb*CInXcr&{vgfQaW;BNW0}F}XzCN!w$p%D%tABuwWhzppT6 zb%&w1YJjSLF#J+oBvm$Cg5xw@e)2X>$K6hbW4&6-a%@Gp$Sm$qwL3ZTsD`5X8=OA7=V?}DXu;pe1gbab2AgNkRohMzl6P@JKBIEA<9 zJSpDgZ__m6tG5MG*#FOy0_9^Esxg>vOS?WVy8VGP-JV!Pvm(uPQ%~ci*3U8>2^J#? z@?R~6Aby4un4Ok;hc91!Gg;--Mkq^`d&A^}X>PW(;ooCY$Ie`ImBU5vcJ+32DXBGP z-M&ZTV`T?XZetCm$9p{b!#~aEzhwNt`5$%;5032f-|qf8{^v>_|n?Q9S&~FI!Zvnkk)XGA7L$$E-q^nmKyZS~Y6cQH7dyP@lFLhX;cM<#UuTghO7n zq4(Cx#$-%vJ!7Wn76x7Y!VeQ?y_U>HByHi(B#c_IvqD!%SOGR-Q z&q#st5BZD~zs!<|-CZhg&j18bdY4dn;Pm1=D8p9;W;*!~=`BivL3?(rmj7`-KBHo9 z9oudO{JpJ1w0E(Z^qT@~$~xZwi-Y$K#3&hPDcM_X`!tE~nHF0##&p{m%9(R2bKKVm z04HQs{s_8OfqP8Y0FH4^>>TtP^D?G^D8F$#up1QCg17$pv|T^Dv6i8?$?8x<9LfM} z%m-T3p+ieCCu|(koW~)(RZDW9UX-hMu;d8B=~i>7wGwU+2-Cyc79$YA8ry3*XpN?N z!m~uFhe|AoT2G68!0g?n6$JR4UvLQDN4Xh7wzT zEk`EH@ISoHv291HTDSr;c2xf;8*e>+2Lk}eHjWLLIJq%L05kkM1+u)oW3)`Yt+^fa z_AL6oaHqh7H1B<*5RS}QaaL!|?AT?8VVV>WCnz^U%XOV8qZKt;5s>6~Gpf7#?)PaT9wnir>WHi5P_ zt2qko0y2hnI$T!55Fcfv_n`{<>u1_^Q7D_Hr6wBXQ+3J0AX!?7=m3f)Omv2#RB^^U zWU>y`B7&I!MoM9#r&g^7v_dKt*mMD>MI z+54KSNkRY=LF>N5#vaRUvLSLHQ0kDIit+A|KYigpMPJ@vmWHC(7yMJAW0|OvPf6>D zpByVcci>NU3}A_oxrtZ1V1gbkL>U59lrv)nTBxtk8EbI@Tc0320+1a&a1rvy^3dx- zO$8BbDU&&&1s8$IJ>aweO1&_{4wjhmNjY5(Lw)gXkNUAEHGxmerHl8Y+vgR)giYH$ zDgd5lF`A;J5c|Bm`lZMgK^`B}@?ib^3{MODk9qjO_J4aj2af&U-rE0rC68hMaq;_E z&z2wF+)R(o=7Wx+XKRm*Y#vI1x*CUqthmVKJ(Ki4`uVEo^M-Gf6X{_oz= zn*OiiG3fs#o9cd9K&45;W8(tdwQq}>{naVl7ErWtz}Gonyg6U^lCRMWNrRvMv%T<^ ze`u-~0m3@Z%R0}?+7fte3B2k&FP!`wYrdp!*Qs9Csa~peuRmH^{^LDW=f4-26#0y8 zkzZ!f4Jx)jG4oYscGvMR*l_;a-?jaJcXtnV*80DdJnVe;1{IK}01(4#6cc{r{{U%AV?64~C5lYn(qHcBP;*o?#|BPXf6M*;;ENp#X1P-I(SGKmdDn- zaGCN&jwp$Io!+7RLO>IM;4PY?+zx4N#IoV_{M_FOG+I~D1g(Lc3kU(*IA-)4tKE*= z+XA8v;;y#nKY9hOpC9>n>3@C=!|hK@q}N?P7mWkgK>zoSc5MC6=xDT#|Fe?Ey8ma> z4a9td*OUg2(;UzRv5ZED*0+4ee=duF_rIK;DSLqJXW#h0M}fj;Anp?dBz<{oYU~HK#W9YWo>D9|IW2 z7KH_LPtmii%75n-Z#)& z>5tW~=u4n|`xz*)$rjsI`NH-o)ez5G-0}o0vC>eue0uvCC~+x-67|CAu?p=HMg9wx z8vLN7$nV*WLc_#ZR!Pf_m2p`)UNM59`O!cHdsT@JUSSm|VLkPX76(aup$p`&AI`{q zd!gSE+qik5DYbnr! zlAZ-YS2&Yh=?76kA2)OKd4_WoHH#^V4$ua!0>J(qRM6K%k3_XdC$s_D30I@}JCPF3 zQXR=gXlL^8st*6ScV{*9f7xq)^)%7{qh0&_f3!aTujt|QpYE9pp)Bmj2AJ(Np?~~c zGaT4p`=*5zZB+w`;B7wx=PV;!jQ@?moQF`-ME4DruZEAwXTCOpM!q zq*vU3u-}@Vlk0`qTTFnwo>1Ccsheek(l0MGjjRTbX3wT;o==lVbs<%|?mYpshn4no ztau;_2LrIVq2twv&@MW8MWu4gSXz#lnm^7FjP3zcecGDpa(o)fs~k`SeSRnHM_FSb zOem|Ca5m}T-3j(#teY~Li9w8sn7U}j#O>^1es2f#_j(hXJ=P6o)8~24;xc$#RD4nIng*gL1!o!0Z_$0w%HIEv zb*x!GEuRYh&j`ZyCm2PTdr6;`w6(J=(7^vGEofL^xuXJ;RNO=60Ts&+V%0%tZ)+qylLh+CC-7; zr6@zWQp%z^qTh-;gc2~F#Rbk{F{8$@-*E{nAvdiQ)$4}vb*4B~o~%uS$eTF5hA{}( zl*QMszo5UuP?R6SD3T^Z)(mI|-cJR74yE)bDT?MX${Zcc`p<#Yp6yj8#joqMn6$}Rhcm~% zRjD@q29qd8R*ztl;N&Jog9ejJtCq*|uF=cdY{F-@Xp46a5-s#;VdGhUZJetuC|u)9 zzp{lQ)-)2NZ#M0CH}=X=cCpO{vEJz+U{h}PZZqVr%&GwX)lKvoC(|dU58R$5tkwYvQWXB zZ7B=&B=RgN$4FExD98AQ++L1pDWbGs&H|3s%vqFQiaE(75#nm@e#$Nt{#$g%%8TI+vT@>n$QB30t_a#W73oCOYf4|bC4 zK&}MrJ)3826k&Fer$rj3vF_qrgqhgzYTtW;Wr%x73Yy3kWAS(fv_sd*@>SQ4nE=V> z2hmcz`|S_9cfw+v2jDC_&kVtOR7s&$;BKegjODcyCE`3|=+8-O)8o?)oDXfp^|*fRvxju?RY-5z|c2?o4>nMj3$ zzFxK6VXXxD#jA3#4=c(6PE|8Wh)0UoI^cArowRNR>`cmt{Apf@i2HQp{GI4Syq7(G z1G6kcBEMfb(Y%y4@!w>)PSvL7R;N{buF4f@Oze0A)V$7w9!%F>y zcC{j_v-sMwJEf_zvqILLs;4-4tC1zP&?*!~T1n5aHe-EQdb^7qV#^`&)9VD^Ok~3A zk5A`UPNr)ezM7q>EVX43vE*dc1Nkw;FCe2$c* zYh$JmUUG>vArur}J#jag*a<-#TKHRmL^=V&b8vrPlPM8H!4IS<3IMiL6F|uLEAsIx5?_@*EcY61zO`*u;&iab{7a zGRGK&7=iDkXznZ{!mL$G4>zkrWlw3RNtG>iqjgsQCZN70=1XAU*)mlpfG75fur`gy zYR)%gxfRvXP2|8ZEx;LH>Ua(@FO&N9tx$T(CEP1&+SvLb9u{&6G$#xB%COt0V@mZb zNe2_{iDGTr%O!NiImBbpssdTf`4%EsHXRJNls`3#y-u*CA!;poOg-OnjR_(QVYW2V3Un=oKSHUZ>w^`BrM_>)b|9t-nAwALITUGt z_n`%@$yZb2`}_AN>c_DsiqQknny&jFDRpdnyRgRne_-c-*gM!=$A4JKW9@%!di$UN zT62$$1{k3Cd>7=90UhnG;(o{tG%9F9oq*L$A{O2MA96Sz9HSH~5eYuj=PH!J1U$*twsC)_cLyLW~CtrrrF`Qo1k@d19DPVZ3Q}s*c z(0WN<2P}o!809Z!FqUtGx~+UwpWIXfMfBC3?3*L)NbhB*B_LjcZ}!0{eF=J%!Hvg| zNHj!Qfm|}T4_KdD-$zdMJy8PvYayBh-H(1HKrC7BX z&oAct0sH4Lu-A>V(s(bPRkk=zyRI?Tg3p+Ty0p^4I=B?uC%Kx+3b&Sd6ZCboX zFuFgDq8t%YpC_d0{I}!ie-3xo@t;@oSp2_gdV9GUt!VqP$p_Wr==UJFAv&TRcyCX2 zr>N^RjZMx}1?Ipy6>6QFv}&NncvWxgu~5K2_tTaB6GRA3lhg4SC%9;L3~ZqPd!s{} z{_pSat^L1O@>ul$l20#?^VusEbgL!7981IHafHJ|3($5r+)8i36k?e~8l?vF-p?FCmU zpISAE)+EU_EW^=#9Dywkfa@2l#_b!If9dkh>4{wS&rjzj5W=%s48N0sz5h*1%l045 zvDQzYPh0u#GD9Iz=3jJ2^r!#daq_?KjrMoe^4}^ROa4h3r#US1m8e{lL#dR z*md>!E&VBaIgSVvmGF!}2MCti4a@bt)TNxi>$Pz3h@X!9zucG|1b`;}|IzNA&Hs1T z`CnG^Sp2_?w$QHtP_COtDFNu<_ay?XS^l4h<@aa)*fS4akp91gQ`DFJ|L*?bp=1Al zxIX`_XlI}JXXJKChB|_eQ{0n$}C8sF|T@{!lCWP zSe{PxI#2W#m3vYpyt;?Nn$Io8=N=WC`;jNxpO(e`)K5qLuP0&XjsG9*?Ku2@wD$j7 z$z$<iKIznJiciHs>4?;~n)O;bN6a-|8ECx)^7QW?$? ziUM_EEv?b_65vwnw_E&PIU-*eUu%9A41Q^YxNICuH3x2ZU)jau35O{`e!#GpCBAAS z@k-qNA;V+-;U7Q$FVY;|pzTjE3=tu3(x~3SyWwf#|0C!Ae>6H=^Z%7RjNn}SenxjW zn{2>ldl`P8&BLL#aDIj)u-QCpBVIU=_vPv*3h}`Htbq7acb?XIw$t zs<@Q?L3#x0FKeQRNb`i2Z8xTob=&bdle1IDsfiTfJoX;J=pQ*Q(7Pl=0sl>z`Wu+s z2ij-*H!XgVMrE8cO_Zw~+%%0)gS(~UI?3udBdB+td`b+DG!33BfRZA=Z}yy&D@^yG zbb(;dd3`8(coPQvql{*3(K}p2Z>5&Ipu_b(M*K7@Z53qP$ z{Iy;kEfCr7I(Bi{2dq6UY2MK{P^AAu1eIM2et+PnUj9qQh3j`pTCHV6UfeB2a7(ExG-)6)5j~vAa60`-gY-^szvngVJ8{+bSzxf-h$a*eS z6i>;2JSBk-6oFme7lvB>1Dh+YtJ9*$@%5~b_K@A0`*_bW zJbWuZ|D3$0f&TM9&SFSNCzo&IX`ui6JA3=K{nz^bcSVnO|9i80b&{Oa#~wNE0?BlP}We834gn0CH5!@`QjOcnkHH-Rl!)U5zyz2* zJ_j(qgZD&l*#^Q!pV@-hRcWGTPJ(O#D+D+f-Fo@wB|KOR<~(7hTPf`UgpeRrCP|A4 zPHvt6z6I4vQScw1fIwe}mMYo+)VR$yz8s(Un50&~)F4_Rbm{Wi@b=_@djf)g2LB8K zQxPc;Oq?v~sQP&$|Mu)ZO|-wu01WII;A6_CK4R8MEi>!Dg!gt+iyv+^CJ<)wkt^%DONJ zjp_LLB;55=_q3P)e_z-Mq)GpCv~SD*yL+Rx{l`k4HWDz~;lsJ*WzmOSWOewXEKlc{ z;50$G&qUogs`%-=*20z77+p6ryl``)zDEVbNdSTuC`Lt@EWsmfPh407zS3> zGT~@Qvrsksk4BpvQ!Q8kRD#;&Hkq~g3r-^2g7Y5`7q8O%70wA|iexrrX=u-o_XFz zai19!F`I`02GWD*Je-jtoi?RNs_0egsh*=$VN+{t5l-UaB3g@!TR29rfINDU_Z06f zIrLaFaw)EA@K#-k043W6^`>|A(A;820ogc{REP?uP*5l^08RC zytcsGv;bt5Wob?ct7bOSMyZhV_z024Px%~C5ssqYka>lBCoT}nUtiYtvDO<@c%@5P zyPl7hV=MW^)44}lu-a%T++X42cD1H# z`x*G~?!~)fa2m(y9Y~Y-9*_)$c#K23a|qaG*TLqy>w6i1^sk0W=pFrdd;-|)ZGHc) zhpiA3mS%Sa03@W4l2#T5)|Btr+7YU#8aD7}lQ ze|>~9s&57TP#M(&(BqR)8?gH4kx|>qf2P8^n;h6^|Fdhyf89MiI$X*9_p{?VpHy%f`ts--tj>mTCM1gz*!vUTgQni+r$dq0Obh z#JZ$-D+DRu9ToegOID)cGZ_hY9tfV|3Q}Mt^;nM{|CDxJO9(p(cxPDU&$i^ z&U433vDevr12y4&XoGzVsk1`34-a5YduIei^v@h65z1NJi!|z@we=6EXNG7dnV5$K z*S&IurKyh9ja?0!M^q-UsLA6rD{w3mN{D$;o|5I$=(DXr^i}5SST-6EaNoK>@fT~& z1-=Gu(Y<~O2~jX`{Zd)33iP=gcu?dsDl+i53PNu0%Is~OGsQe)Cln?ryg(>BOS5~e zs*%rvA3~T(mz^p^D^LdVqiqLdlIG%6wV})-bvM^u46Em%b6l!!nC~4H%)-~On7nyd z3>EP08=s;AM$DI?8RX`*Vd0-AQn8EyF`?*w4#EivZ|SDkn4{3~$+HgC~A@wGJ=7_HeWN6Q?d7qBvp$k8ULf50HkjSr`B?Bbvz(Tn99>=m!G z%3Le0N76Vp3T53isc&`<6zP}v-^fQF9Y0rD)^3Cc?quuS{%rM984+F|9}B83m%kNJ zrkQPK^Kh873YziOvp=hd^FU7}yAi`{6myF-uELaoQZfXNxF_O11R*-w(8@VFHj z)|VBn)jAf7wsf5Qd;7qYPw`y*Tbw{x_&zdrx1 zaom(bu3nG6D`lES`8S(~O8(Uaa65b?+fD_%#mNo8Ns+32 zf6^>2iMY+%b4^Z`8;+6*dj5dP4Xv*(#8RSCa$>@C(OF6ezK)TKccliatx9{|k;sG~_DG%y_a=_ZCzjPku*GMiSHH9B)<*XW$JQ3<$W_H6#> z{Af+<*>NovvKH9?pii^>PY;R@D*x{uj_mvoM|+2(wfw(|$0PqkTmHYyP}r0FU!iq) zJoi53Ai7BAmG?ZRIM+pH`|3+Fq^T^+mc4pPO@s7A%QSi1C|fU|-BnZYU;KU+cvMQe zY}OICdSWn%XtgprIG+q2aGQ-$4cS477Tx^&_b25ql_X+lC6REYp(b@;kD-n$aKpBN z-8>t?uombxaumn1Iy)NCI=-q{uUuBD2vcDRqpWLY!6z5Aemkjm=t$QlFfDN2SwpV% zU`)brP#2n2+b$&@>0+d4;S<3S#EO?8Z-0WbBF#`fT_*K6d+PcB z&d$NUlmBz)Xm`#3SMhL`o+bsvBC5OX;5SKhMSWKR?x6>IZX&iA`qHKxRHS?FUCVovpI!Cz?gA67S zxPdIzcY;ua?AA2zFZGg(qIj#m3SCP1_>91hjZt31eh z+f-dT%9J#(suE7pyQKQ#H1%BVGHVSgBUKAWC4T5K^WJ3hE(`m!-p5I0DbJO4g<&ZV zrDm^t-~GR7N_sjgQeaFN5Dk z2=)T!BeO(CTNyJ%4vqnPNoHZl=-l&bG){B0#ojVSAWoC#>=#`dD0-5m(WSV>&JpwW zI@_}ae(x@LmY5rPlWyXZzZ2Fk#ydP^IfJ+r z&M|;-h7)v7Uy1?*g|i$N_rgW`Sgo6UmYkBeY4Sczi(_s!W`6sPp!^t&)XNZN@EXUs zz=#}cn@mJ7ygWRE88LukOdiRgF zFW-xo#<7e)F`nYWfGEsn$6$9f8cnsAQ#4H}@^*j43ZLn<+0Yy%h!{=rm5jciP;Wn- zPGRDVD};shX1kbX+YmO0S2*p>CL2q_c2h0_C)KYS8R3&2tp8_BFDeM0!W86N`md zhOlYOM1hj{>1ZkiGb!Vh3Ui)7tP}t>CgHX*BRnZj5Lir2vlvWcmL%FKpf_<+Q_jnh zRP~!Yon?m9V-b^KmPW%d`IVKc1MhYqz zW7BXenhH8h^*co}8YY?^FS<^2Nsktv=GpPno93A=p{>u8^ZmOX(jtlgqaZ99RgtED zb&yGJiBG-=IS?K^YFFRh@o<>c#@HIOzZovRe?N8x(rS;`z_C86VH0|C-+C(7WXru% zR`BhdiWSs(^LPhfSAT^QOeQF*=JmDbkCv*S;lI*r!!zbz>2(`#6it`3F#z9~)xrP5 zX>47u)7IpOmpBxZ=K-Gn%~ALj6h%=7y=!JpHIQt@YLvk*{zzmXn5oF?)zWV*NarZeafAX;zB4^$^e-9LL34T1&jlA zC^yXmIOP6fUWWoybBGRR~ zDzk+c-j-Tex`$$*bbgxVBjCuEFtfKltEi4#%`=}{efoTswsyjh)3A8m$nvyELw@`X zCPk4M-A_`&7G{V$OYmU(g zAD7S2+tW+HvUrwZ;=(jS_VQjN)n&UFinp_ClqaY_oo{<9O zpF$kvcI$FN7jK=Qe2zn8w(e1E>;8t?QRfv-BES;(7Ae5fEJjn56o3I0p#p_vWGeqG zo@+UKadML*LY^~w1jbX8^{V9tDK;2;cg|}`JA?)zFZz(qk=3RMW|$=5#whw?+{7@N z5Lg$j`(QJef@APe;mRu3qH5QgetH~g0!9AeGohySU9%2rtS5H4_SYcBXzg|lVlc)z zDgGvCq734wqd!EwMsE%S7?Vb-#OO64Qt=&T2g*h zgcJUDD@>mpm_&4a7w9GzE+@vXVUa^L#<%t&(ZVcP-p^XQn<5OazeOd-3`*Qzr)eDc z%gdX0&pb$APU>qmuM>)Nx3KD^$nUch3k!(Ns=mrn5d`#;=6Z9m4o82&~kj!pquC5<(C5G35?mOq7-r0 zKoOc9@CvT!jnThc4gTJ2)YW?AbzQFIf@O5Wv#jI^ybeV6kIz($;?UEu9|^va-IBunWoBr$Ai0?|t!3IF!Pq=9qQ?Cy8nVXYiw@-QP@9GNR}%W{qL_!{ zdY!`P7Z}4NM0wy_3gxMUA<89B!&qzL{KB`B%(J7vo`08VhcC@-q@1_j#XP@&@lGhW z4dtLisH6(qIr&%2us)e?nJVGaKBnq;GQU-}V9_dltC-(fY6WcVpHD?NtU>Q@?_Yy| z;5cR!L~>T9F{0;6Ltiw@nJ%{U$UWZPeoBs+|FJ?LM~6<5W!-<^VnR3FX%fl9xZ6~9 zV;gFCN_iY3n1ETvz@_6blv_G)a2Bn$H(3E!>Sd!n;s0>Iq|4curTjQ}dpDvX?X-?nbCQpWcz9%JzOnXO^$^+hWH?S1481Fwq&uis~BcVb-29F+RzK&XZT zr6lGhVV3=t#{nO)_+`Nz_y(hD|1Bj&AXYa0P0Iv)CR7>G3S05)w-}(dH!3gc=vr5% z1CQfgepOG+{l9btSK_v z46)aVJU(zwR9z<4N^vh)R$u(7?|V%dt4Cw~YUV=Iy>6{R8fP9Qa^i#q6Ef3Vd9<*W z4%SoJlxW;|v8Kz+QzPCw3%tT+j3-|DDB8SYDVUy;;ZvTyh=P8NfXpu@(8RMOnZ7ZN zVwJ9mm14JVB-)_a{e*HytH|HvhUu-wqM=p)Y6Z(tjj-viX~hiA+bn6nefQzzF*uF+ zb!3hpw^YfQ!3>H(j>s%703?7T#*nvk6#cABr;h%A$zZ~Q$}GtOn&|)0;ht^(wY#_W z|6R$`g8r*z@TgdTg4(*0lX?U%7hsj%mEi)MYls&7z-q%~3?*bIwKe-?5?14@<`(6k zO@^T(gY%5?jjIFWW)p8xJ zsS3uUx3yZ{VK60vu?lmr$QrZr()DBZ^WRq>E|`ce_o8+4 zcx%jCQ1Z?#k#fOee*WI%i^_cB>$_9K-ilODQE5*ftL)pAO8T$vN`EmtEY_0$e}DgY z-_8HD-{pVWOeur}HKJ#02ibE()3(n*khn=yeg+0<=dhUdq?uRsS#PqM4z;x3f{WH1 zoUHDM>*D7!&!(KJSv^YiW6)gQ-BN;>`3AZIQL8ftU(-oYw&?3g+*X4rW?(UK_}a)P z)KplP+5KgEi|l7GWl9@~@$W#mSe7zK6H-U`Kl;*y{>RC~n&tn3{paMcqyHNzP3S-0 z0Bz|%-!ne?&wpTMSTh0KL;m@9)PVl;=A5ibzy|8AsI(SJ=hHNnx(zuK{a!t1yO z_XDj6E6yL#l|5MVUQ%+XhS|1(nO_g3{?2#FRI9ZSqZKB_hW;e0H);j-dxGy%92H}o zs06DDw)rIIw-VRA+6!FuBGB9bMh$7`Ht_gij3X7c;|WKRh@tvKaVkvi@=XP#W^lU+ zp}anf!M?jqcK}YM6EKVcX3P$X$MPo{d4?bmk|%i#BEF%;t9Oov(NJ8vn8;M2khLp1 zt(S0XmyfoPJ{DuM4e0*_r4$Eir2i*-M+N%d+5b0Fn#liZ1GJ?3dfWKuzJ_S%0s50i z6?m7|uG9q#s9PpDlNf2Nn(73)ZynCn19kDlkMeu#bbS5_;s*R?xjLCr+5F%#?@^nE4Z_!jpc-V{h<=_F&Pz>}tN6BCY zO*u@-tH$R3N7*Y!Q6c}UHT~8P`*Mi+6SY++9^wc-zt)jCnEU# zWW!k;gcT_u3Gv>WtVjFcojs@OVXe`}t9Nwe<0uXIKPA&eZ~kSe)Bg^N`rqEse#iee zQJUy~Vgt0){^X|d^W#x=w#p zw?VRzc^za;^7GvXY2>>Lp--~a z5S2yzS&`1Ahw}Vtm%^m2=B4MOQu$JqR;Ft?8({6~mg?_0H7<8~J}ITE0sYsJ?-ynO zb@so#gAjmQleY_ggh9CI1Xh&JprvuK2HiX{-U{ zpw!jR4<@=R)CH^o6gn@v{>fTZ-v9jItj6*eKsjcg%@t5Kq{f#(`6QHH0~McZ8nIN1 z%WF^hSqdTqS!&I=OkXl|C%r7<*7LBFu6$ypg8x(WfJKyek{}9GLKhVP>iGYm>;HYQ zce>a4e{ZDJbM$QW^?oo}86IU09EEzO0wJT~Vv#$9OXxD=EYNL0Fh;?nkUz3dSqw+? z0khP6%l+~z@B;#&e6;=qW09U)P)-s9mA{tlD6u~WD3lB+pHmOHpo18S)50V1t-&qg z)E5md*`>nM;R+nIVctzL=|^PZAkjVQU}~D-4QZ1G1pP`DnzfupK$> zl!(h)98Zy{ei({dhH^o3GZ;@6OyFAgA~G!VHH#>M;ao2q3J2g^NCeTG&t>)*kT|Fu zNo|PSECb5R?~@RwGVq?v81oJ$PC5`z`k#_~Fl9yMiP6iF2D^HOccpd>fHj&La1L-2 z+ze5MNt{p4d-=iAykCALl2i;_JS4nbaIa1D)?TpBMgf58IRl{oR%U)<@hpJuf&d8e zggheBB5w_cWQL4P_E{t0E+Ed_5CIvE0EK*~_NhEyVqm*6v5)v?8tlr|uot;9FHqKI z%lrDgdxBh3D)>K3NpcoNYmfi7cY5r;|2jGD-v4fG0KMV! zg;OES^=-U?lK})$1aOKbYzI)Z3mL-?^3GufDdq?kh=ed)74fu*LLv0m7>aCZmMAVR zPEViAi5tsi*(TT7PQu|Lz?f7T^Dz9Ch@66QzayNA3ql6!aN@N-6NmufVrN z-17p{`orYqYmB6RI20Nx9^pKvY-V?n4RmO*vYufW3i1r2>#PgwHhZg>9?A_CY}kV| zb1AfO$+EiGk@g%r$W5`WnYpTX5y0owmwBxm|3cz9-&KqMi-?p^gjl$tvF874aUpS* zBpjaoQ$NoMx=YbW=UZ-N2lCCP)rlh}k5C$nQFxtbYtSkUbMhZXBC8Uk+!K^0%MqEz zVTmQqMzk0>Qi1+P+B2iMX!jwBaDdZj4j_9(VbRCH+^Ftx;L^f%d_k#`uBgWH$9}F9 zE6h2m+Hi83oMEdwLNR!e7>$j|Gzw*Yw7=e6UpW>f@2y(4D>DP2(~C@>{Z~d}PXe5x zSt(maz2`J&W7&b7%v{7-64sc=hg`6Av`X1HwoWPpS~ueXRh=0$ESEfUe1Yqd(#oe`XY z`lqQ{o3?*9xV*6y9iN44s%w(Q3u~wdsK^GoNlE@-xzkMjMXD-#;qzwMg$5rCOJINu z-C>q5{-0-k15v$t+lB&{jml8L1RgS7zs2dl;YU#(4#D0nLWxs`q7h&zp)vzK|5e#? z4J)(F{%07T*AF_!N6uqmyt&C(kJUd$leA`C7Z|6|*YwZ!G}KU7BV6-O3a6iqbDI)L z4Pz4Tim=S!Cs~D)8e(41c!_a=rK(BHHlav#W+Ps_{wR1o>brv`5cG|Qmv1UcEy+`M z*EfOutGu}DYhpAQ3_QFvM%pvSIHirIJ)h%z-ZKo;BS?F@ifb_OHVxd72};K}egID> zPQeo;@x!3`3dq6hVP=9D zjWyRHqVtnh1tPxzQ~zolRNPSumiS&NhJ~K^Z(l(2+NI6 zR-X6{x?Eb%6{2&KEqJkv;>|lMa$5U{>dvYUXW8-ew)P&(lB3z=L|XD~>6y&uudqVp z$Mzd>2Er+qf4Q7vEWJYqnV$}poWyLr@4TnZmnpLR;4OK!3g;`Bv^!ZliB*u<~S zTDxq=SPGDsz#YBAampkef=mkbu1c>Y^^|Zq-RxV*R{l;hEi3Ct2EmtR11XrfJt@S! zneV<-3#ixrH$xGkn#}BDd5)?kFa^h*TGY{82_`hOr*N zMa&#mWm21cefdveuPI4` zl;xrJ_hrC$wIW-@YcLHz<#2yi21yc&cj{d3+X2IA3LZ$Rq`()y5*&m64(QuR_z`WF z*~ndF`A?1evTJNXYq{O5wu9j`ctq)H5mG?CcztPd)8|qulolLC*q;V9IOD`4EPP_jhj{Ta<|1ArgwqLG@=W z>f206Lbthc*45XZs--xWF$n_+)vynrn2Sa(S->YJW|^G+$~y~pm%t~M?Gz==3n=}H zPPf%v-H&h*ZM&BVnYq`TNy{{#AAi5Ud%FXs`Hfh$Fug1#rkptp0xcm6bML|JCcA%EENf{Nrzg0YfH$A)>D_BV?OMg zE`jm}Rt?&mWO3nTHq}|_ipkx~T2_j@lC*PXeR;*EcVa}QVPB0)cfM`9d*rW7inF5T z#d{Qj2(rS)uMeo9=hDT&xJ@?{TJ;1zd-EccOMb+;URU;5#jhK;T_}4K)Iyg*J=Am? ztiZZCH|6w7`H%6PJB?6#lb==U{J)R(-1ndR2VMNv%@ouAcc+$nwI)BkiJr~Mrx94d zu;;~n{kFUejd9T(nz z9d`Erjg(gQf78ZjdZKF+{UEnnRV+c)7)srAn&m1NeX;ozq7-^pP6*D{z?A*GsrE1X3u^N102eW6JAG7vQgEj$7$&5G#Kyse?r4CA&)PA zfuVRjOyXNK!{|vxtZ7RL>dybsfh+$X93OP=KQ~e;&%fFSgOY7v5rL9Af-IE%R)3FJ z((;u}ILhD)@Vnr*-$0r~V37CH*#mT`KL0_4QJhN0`1QqqKRn!X`TxN|$Nx7{8l8W0 z8`zxR_(2K)=7;*@ZB~C}-hY|akf@>lcqN1hu3MG#sKctu#}yVClkLP4fd-A`b2t~mZ&^eoZ^Hzp zV_lX1`;~{JTGQZvTTs;lp=s6wp{cKj&ZxVFQceHqG(t-x{#B)p{vWvh|NAGWUH;$A zlt%PlYy;bt$-hWyF8)P0Z3@(1yB}{B&#d_Xw4Nm+Wq{cn*Pt0 zbNo=Hn*Q&f92WEco}L_Z^nVkj5&bW@&}!t}TOY*Fy)Q`TiRaEDGwl5!k+Q=l%oFr8 zz%lqqqx|QY@C)FuhX@EWpY5B##)PKkV`0x_#+E?k)z?y{c2V5&T;lN`%;z+E=HiDw z=uf7p{O7iJeBmP@4U!KKOh_IF;(aqMdsIJ=z zi?Dcf?LoTj{8wTvTvYh3XgK{Gzw417uZrO*#;>XYJwU?0x<2pT<g{b4X{^F41^`Bkod6i5D`wt zh=QM{H2N733Vu?MDwa>m3Smyeh9n&?vzDeWzLDI~8k7@$rEI)<^(|wWS*hvDn*dh7 z@+C7+J_c#CTXrA<%KAsM#A!863C+hST5afjmdOs*2&(U;TMwb7++Z=wOo*@%Y{p?S z>rB=9WU1C{lgR>{M7LeX7A+w-F7h6x*#iCb$pOsu(CveM7HBc-gZ@{AD0&4mnmb|%Tg$owSJf=cV6HvNh6*=d9IOURgSV}q zMy)kTn5_Ty9x%5caxUe1JjP2mOnGOz{jxC{CL% zjsVy6$B9Q-Udy!4mZ0uYijRB5R^nmCplu~D4&F1Pwl!6yH zPRr+Kf2~vSAfgpenHha=foW*4hbu<^P&fL+y|oTMLX63=A8ugqp2_&Fd+xJ}QhooQ ztJxky@B`FuH)S5zrD-ARB7>|lJ%+7S+wYG zRIY`JD#nL}fqDdgQM34c;Vw*ZR8%oOEDY49#IlY3O@JPhIy#p={jPmRQXaOav`O8) z=Qj8qq!drU?;yr;h~g9+v_jVQc`wJ%uIIhGTN)STe_4)%s^H#3RCa5xes)82hh(}g zxy*&nxrZU&V=q$jBb-DPV75(PKpz@aTT(?IwJ@^3)u3ZnZj8$pBu@DGKcSBif#J(v z0!rdv$?z^g!P?&c93Jc!-v1tS@!vO7ROB@h|CI~@U*=_EeCT~MFt$zOploi4kETIA z>`)*&@{tqz3CCiPU_|HyraOQk1jcEauvaf%qImFxA8~?03CYo4e!P{Ild|4N4JJIqo-=Wp=@ zrxL?>IvFC$ha_u(5son%qY(T`h5`&lDa5f2dY^-3Q}H}_G>z&&=QW#wKNR3oNK+g? zyg@LGaEvk`;5w1HH9@F;;j_z>*f1hAYbjRgS2E-ZD^3CD(}-nj5(?=;G=T9OPy`uq z@Q86VP*TW0NvzgX|E2OVne}yIy8Hj`0r3A<8&G5)>8V{^CG2`P@9v7+U9}-`%0#|Q z$1P8P&a;rYspYuNUz5=?OVsbCi*x$+rq=)Cj~<`c{}$8y+i&27;HQ?)tDg59NjLrW z{eN#8og2RY`Ki>Pz2VNhZ9NC@x8K|tFm??C#lAeHeGaMY96I3q)eM;XVn`LI&jDCo z)c|@ZfR>#(7oxwO0q$gPPhu(7TmsM=;Ez9gzmnm7M$-Xc2?}yissVvthPeL@l<0M| z!Z-$9S*+B^e<4H@5;K%8BLUXge-8IgUHR{1uY3Quks<`WH)56VP`Ww^(Aqc~mH{c6 zVTMUuB@&S+6jB=w;2la0Nl1jV=8_wrB#MSGc$C5rg(-TNOEB5svhTdrlpzU5$bvH2 zAD4m>5;CdS#^?!<7_mVcam1O)RSP6~0Io!$zZ|kn#U8m-6hJ++UEJA%jQJpsZ3HzI-Z!3GC`THyTdZ#rC`hlhWxwsT2kbzwpl-|6wLrad*KuCP3M@3XCN1|ve z`U0&rt1or@A0-i)Pf)y!08q#OPmf*u&;H(i7yoG^Me_e_l~*VLSUYFq5`f_B%;oy} z`(PtdLO!dT5EGpFeoi?7$pja6#0WL@9KgP9*ziRm*VXM{-Z_-79T7u)F1uG)f%(Mf zdar0a$#)#*b6MS0%1Eq}jymaR)zVQ7|6ls<=RfNC|IxweiR=Gyw0F|+|4kIZC1SXI^%G(Ld#Px(U_}W(qC-UxRl0-;`?@=tBVTwZU z)k-waFINOF*S8;ROr}u?h6vDUEI7R9GADr)MiGiIo5-#v@B^MqC!Q{Sz&T`?ii?y7 zJVUX#CGm6vgA~tD!Mw~D43Dr%^B+#-Q!w*hhoT7brW}&U(3C=&-s1@Z=@_ONIuke- z{-L59J>jDMoTX?2P`n&$zN;O#5Wu`&18cOv>3rDawVL53!jbGL% z-rERxBz&90IP#kLqan8+%L`0pV;nLwh>*W8_qvJyS z&y&5*{;Ns(+UQbE3zwd zj0sDxP|CMvgLyJ)FFHjW#LeZKhMnD9zFDTD%bW9t9bMj>FWM0sLyB%F;ad8Y6)3&t z5c=9JiiA`q)G2z4<44v2gJPqF&m0o!y5T-obKuPS>pyMU|Bo(uxVKFoLz+>Q(x)m- zkV+^f6sPm0sE$Ca0BL#TViIOAES4osCajz=RnVn&sHP+#5qX&3B^1H%oWv}p5Xb3a zo7up-6!01b!D-N0gdwYbhSLOX1Js%jjhET18o;7&y*LtK^_#9r>u-yVrEGqf#NSdF zpc_On33V8OMaN$Wb@_vvl1RtdT7LgW#n|%I;sis%R8S%*T)%3xnogr7&~|a-d+mFM zXcK0b)m@GqVLPC1LPBx9#kCEHV?>$qI9Go)@rmZxWi9R!_!OgMXmX=xawWsSF;35| zq1a!V4##S>p&>OnJu2VsvL{D@(c8apX1*kAQ;q$Hr7%UKX|$9Fc-{NIy`zHv*Zyhu z{%<2i7<=y2DzDT7+}S!`q6e5U1)FdIE6n)E<15}dg00dKOqv8TRnlxP0&0954)wch z_8ChcO|eKy@>x5L<-^QV@To5~$Yk|8ullZ(lxq1ePyCaGf_UFPB~+dN|NgQ2{_pT) zzw`gwNU`ES`_VvT!X;pdRg$sj%$T#F57wi`%E{ALhXW!p6N#6)NUVc z;Qb;ww*2OR;(K^YekuO!$aDVohO105RIP}0(a&Go_fbS=)!y(3S1kZ|HqGZQ0eFY}(TV{1WBs*@0QoNKWPoNefPcn1 zA)qU(D$V)-Vz&SPXu$su4)+}Xe{g!xz5m%r$=?63nDKXZ{|2veS8DUOhU^&pt=|gP z{zA(td%aazr^3{)RLv)=HN358yf-1c!hiz01M&`v8O>}E_38i6KMDiNhf=tycTM`{ zp2;hlmi_V}GCe+qQkCz}9e@5NUJw3f7paPjx|Q#z>+m#MtQ5~WxvY~oHeZ_af8|}a zzy(09{(pQ}(EpD*{=bn@@c&$~9ANk)elZq+k}-d@CV~YYf?qY|rVpn^}kdd?B9NhxX4J__qX*8KOWVW5T8|en4O= zh7+^{wz3+WsjHkg**AkbaEwPeJj_(Iu?%$1ow6CwH5`Rcq^>uad2TcATg;={qq@dh8T%I{xUUg>U&>&5+xv)mgqpZfuufSOx zTFaoeS-uROh0t~E!N2@UMEc`Z(=nn*hMc1ahI0Tjxb7CRyD;{t3EWiGjXAxJqq&&E z45$hpr#kBwmdBZ+;_2|sQgiiPO~Wnv#}rcpU@EY4hrS~vqq)1~O_|A9I3YI~IBt79 zD6L6B8Q^SQvbd7=#B{a?FaIYnMD*n^Fp8Fs{3S~b|KB^@bMrqRA02k@KQ~guk$neo z3{afXc|vfUiky5h`st8nV^uZiXqWT923aJ75kWzS`M13n{!=BauMa-tu2s;cCL{)-t z28=Ktkc(&nS4RY?ejCi;a)@m3D;J=*tiIpDM+8LoQUv6EaPfspJ3pSidkYYygtGeX z)a>XN8-1-zIC7SVa41uZzk|sOw%vRx1JO#Dp~~k{^`PTd1rcPdRWDY{20h8}c&)l% zDnMT??8^y!K;UK?MXH;2Ln%ZAY%mz{N*k!4iS4?xLqIm@?e_KAd8;1i5C#q4UVKOq zjbQ{X;}p>m3{b0HkZPW_ZqTI`=Ua88h5hCWv(SPx0MAlF;e(7;*{%!Ou<2pBdEaiq zlUbAXma%c}VwkWoX?GM=SRK{0bzki#%XXGVl(i6bJ2=Xd>G*=;$2LboU*M z;e+}Ek8r?c`gW2*-mt#Umv<-y388!+W+KH-X8Xi{yAi)JVb(djx%vL~ZJWj9Z5s^y zJ&F(|;Jrmo-jYBViknjt0mUIIk%H13i`OuCoF;dYmM@CLPykU3p*;?F>d|o9ZuMhh zZ%>`l{W+FW{U66TU6BE>M*lxNId=8`?4(ax)Tzs-$I?-s;NF*Fgm{c3fw@-5Qs2KWiK#E zIFU<<=OVGvLMcGF(3Lgfo=(v@$C)YAwIdUbM}$sPvMmPkz){UD5&~eLW3$@bbFuIN z#fZXGWYtQ!6#I_|B#^NuLPI7l`Vb16*g!G?Ax<9pG77G@ABsZE7V9EJeDYBoV8jLj z&Oq8|2(9XI0x5>!a0PuTNX>dB@dH^+uM$$DUV{h+k7F`rXaybTz#8?Eo@*Yt7|stC}Z>GET7L0JUuzBAF(oT`Q)utF&vT?162Y4SlwOwm@cHGslupmTE05 zx2lNaXpn=g(KL!geCk(UR|r7zRS&Pn2D*iH)9!lR3XETU4Yst*CqCHkUQq7f zTNnOYRaI}43@^;Ql;<_%UHhA;VTkef0~keI7Vn>5-F(~kH+V$zKIn^CRBttM@8NS1 zvI9U6kYsK<4Lfg(CR3KaK`1%r6}PgPacWh7Oe-&i(@yp72nlF7ft zPc|aIaEJ`0c06}A4@SQ^J{;bd&{RUhazm0>ozulo4KoCuZ z;@Nm0s)0%kRUHX<}Y zVZLBk5>muc6b=T1qLaTdf1>TJZdrpQg>iTmC1ZFsoq*#S#B`t^Wk^+XZ9A;zID6)v zV`^jIpyxj)R+D}W2#Nx^PBlD2oGCqqfd;9!vd%Q3KHsU&PS<^7Rr}5w{|-i!On!uu zsC7-T1=H7FqpM`4DUH}PO_GXh+m>9P=C8nLI1>Q#F&J- z!(YTk>ASDFyj#nVL7sba83V1~UgtUI)5|77Hd{U6T4t@^a$D^F`pxw#ja0@yn3!U{ zK_(=|DdCK3Af2iI?Dlrx=4yMPms$q;ZRNk zpA-}h^y4&f!TX3%BDRFS;0m+LEdVK*#>MBDgvwK8v*_(?M7uVvxEy7V(Fg^qj>1JQ zjXVfD{9xrV+kQo*a}NM*~ygG^QbG%(4$7jH1vTe2HwC?HFrXJk$!PaNtA{P`(Gwr zFKYy>^Zz;CbMpV}pY9!X_P>o3$sRKe<}QIxeEAoB`0sgNV!ZWlU^L9z887tLWjM@+ zZM@gdKR%NMQTN}Zm=$viWjJwrz-f;aDPdvx0c*m?Rye zqh5^<35-Ksr*=WI+GT6fM2;&qYP}eh3t=xsK0sqNEDmkV)7O?5=CRr~2$!&C!@>=s zBSI%2S9~OA1vUj@U<_w`k4@kQX^V|e{E&|Mb~`veY{85TYT!|}ie~7(?5NMXDa6Al z?CtJn~$bAn17j+Dahwv@gnY zSfFeOapEo9h1;}&HzFsx#f@J_eMSGr&|F0gBF=+guFk&WIz?4cCb6cXdt@s|?&UqhI0VTw1vmvb26p<$ z5q9qH~iRQYy53^>*vQxKgm+b|3$Qo<$b_v`2XJV z>7MKVb-LHZf8I!G!hluKm7Kk4Zj_>l$$)fKU>nVa)mqfG)dLy4?SeNFfnxj#a5d1M z0SD19m_z^gqqn=eYxbvu>}qcS*|*g-?@oT+vL3pcup@?wjb6xBzk`(g2q)2YMf*6k zUkn&_+K-6Jm7o7{7GmIrgn5901;|02|Nnj={`>yvahLynBZUhIJ#e{ZBn zKZQbUG-3Z)f%&HpHm#NMr_g%+cY=8GkauWVS8QCK>2}aUugwi%VTmhm3f+l+{`*2} z;B|L~jV{AJma8v);y$f=FPA%fe79f49bfcAQ+uuXFr@)acDsxRpvo8{#7d4tvkSLS z0uGHtLBKUFif8vJDbn7=R{2mFGY}$%A7bh7{Y2=aTzTQ+u7T*5 zeb-fL(MMY4cc-$$c7m^LR1_gDW1MP6<}*Eg@_uwBTd#8Sweq18o)3wREoTZcDlCWq zlmnrNk!Xg5Fd-7<6ussxpS+xU)jQvr2gXHvTV=s99r4|4IKX&wVD2@{gaJ|$Iu+gy zr%aAFB_KnxW;CCyhvCPhHZ7^r=pEl&O;eQC)7?UPi&yF|A#0zkte*)Y3(u5Ht96cO zddb)nQ8(|LaqP`gjpGzOQ0UJou9IVx)E9x9b@b;Zl{^_eCSxMPZ)HOie;2D2M&7TO6{~s4h?XUkdW_rNC0GG{ zG-td(Ai;~mptt*NQ87TYBA*6k-pRF}qZ++PsZ@V_$rRWx0zCi|D{RjDnfu|xhu*YKvWgf(EmeKH_a&e zlk4-L_iu^chx*y@{V)N!{vU3vap34}LdLN`T8XdAacb2VmYrB|f*N~F! zfvn3}BwI?mKTqOduEN?gA+99)2?Y-TbmH7gAQ!=*l3-Cf%zb9xC4o!aI!NMX+8*>3o!eJZ7 z&l?hg9C4uLugdw;H{UCC0QGIQRyX2FIQ;yA#xz`}hD+4y8oayct$)JZ1oCosyZ#N( z>;|^Uk=o#GY}F+Bq>484l^?m{)U5Cd*voT1H{Z|ysFD9@3Rm#@yH@@?IypLa?f*yn zo&V=XiX^BqgY)V{KAE_=rIaTd8PUP#sGp5&0F&fKeU&aD_HW-2WGpdX{eaUk zZ+{ktR(0 zO^tN9c%Z_K`5xAG)HqmSHqC9oH+SC27O_CayeSTv%XJMrWSU0=bSA+@3ja;+B2OlW zttmrSBt(}tKEFSU?mDL!^tWOXqF->*_qpZeaBE!hY;^G7ZfZ!5_}P@_`&n0gqubAd zOc@g*%=yYCIuio&AMJ^&U{?ceT+iC}%}yMa`%yVeRmlGo6N=Nh$nLn#`@h4JlY`>@ z-*G4ZZ=y(+rUREb0}qiA=!^60?k)bS(5qfVn5D9k=kb7eOu;wacaVX?#*t7w&*4S< z4jez6M-WeZ);ga^#K%&!-BpP~74(Fqgu(~JiP<1FvwRm<*|M{hEqvqakt%5mlsz0~ zDNJ$T`6RQ5ipMG?zx6}RB-L~uR8}D=XXjjrM>g#ICzCQbuW(y*HY3q=f-LKQ{+QSE z%u!L(vhlLX&^5-oa_rr^*Wmo_vdwc%bI-8J@ciy_6>s!w=SC!mWSEGot9)pKfZ@U8 z|6l`5e4{J@q&HAMq9>mRLLnZ;`Q$NJv=*xns7rhfjBPI zE$pd$iB%F<*{}}=-hSLC$)M3gu4bXza#Z}Up^dj@Wwat5u{v6D_08Qfv?3m{=b;tx zh^>lN_&_Z%*)lD%m((;HlkXhlzb`RD4`BI|cc|{29Vi3|xOwkxms*3wY^l8R`2v_j z$r-C}9BXF%b@!aBz9$w^>`GGezZcVX7sG^&N$R;TRtoQoM7)w4_hjZYuh=WLswW#V z)zG(tbeAP6pZc{ZdMT5^H`6GRy8&qQ0RP+9lSac6ctseWT{%s6ULv*CnuqPdw{q54 zjg8nEaJj?A%Je#ODGkN${W;iGJ1|=$*U6$nM{2N#@?&qI;G2d@5#DNTYBhzO&=3Tf z(jeEvGG#oKvmsPPzmni(|K&?$&rzF&@~=ZHGFDH>Z1n1BS^+;F;VmV_euYZD#>XsR z*z*Wq0d(aUqXLcRC`*f?zAS& zNe8!noDLCuzh8g;kE4Ur!u`+jQK$cJq$tuM(;cqp3P|mo z)&ihv^&A&Ldb2mX3evUP-3IBTl9u2pKRuJ=DLQW_ddfAbmOW*i=f50Mn0z9sQ|p$i zLQY+L%_>)|mDKt))KknkISXkC zdMS#^g8t<>bq0mQ0;+@FV@*^DUG<~UBosoO!`YW4EoM8moiwLt#%CwhWdyks?mmZ7 zA^#b#bC)v$*U5h;hwlCV>G5HA|G$x92Q^=v3xM1_i-dl)n{L1z!068sx6Ie+yU!A0 z%tWn~tR>qui27>1&R?awfH|q{L@lG`XXrXmy)t#H@+JEbERuQQqi`iyQVO;9LNgJx z>hOK+pW@Z~w5%|Gkmo36`=lA<&IH(Mk+- z8?RpwbY{U21xrKlY*ZSw@oOUwy76DCBtmDbs}u^$gUQs3g?8J|PcW=qq6W+JB}<13 z$9wuHM8uXMgf{PWYR52ZD2LXZ_fOUm+BTxn$1DXlmH(D81J=oZrzh_H@BaQ_m;ZGm z#X~%UED6-=g}_A&f?f!l76%LFLC^8{DCEM{#zIH(Xkaw-41IlK;sPc_4}i~JV63qy z)-72lI$GQ1)0Q7gZD${a5b18&MP$j3!L+$HfpVj^#d7)Y2@S`DJZ|Fs&q4A1&tVt; zZ6if&<#*E*rZ|51K`yzxX_->#5VtBpQ0=Fd!e7>E{Q}>lY8DL1PoeZo(q0voZNxs+ zzEaTBlfOdYu5yxFNqJR}K0k4)>dO@BK53srz0A#oqDs2`jM7on{AjUaB`<1J zVlj?lnncBr<6Fz#1k1A{!JQmmwbB)ItD;zy#iMj( ztD271_SUCb?CzxQwMgCBMr|Z^mu`(VBDU2Dm!@SGSVmzbG2f9eRRl8xB+lcn?tm$i zpBRczkP_O|7Fui6)Wc0kc$c66FamHYLRZIsNx=x>h<6*~2qXl@sb&?0eeaE2t$=!> zRtvz{GJsuh@gYG$ibC*{YV@;+p`8*LJ-c6b4i*;mT@9lD1|<=hPf(n;lc__a-D)KK z0%~_DOwni>-JzDaG1ZVQ5=*Nga&I7-khnE!p=h>F#QsW#?NIuaH&_!g=aj^)5eg`Y zmqn`6%)0U)Rr+6mXu3OrF?`_4ApZ-GZ~zwx3192~3k7~A7is^;@*dMXR2dH_s^t}aSYmMV|@Lk#jMoM%vm-<&R6SahJ;zE zaB<+D-z7}*c`l#h=f9beam^qwkdr}W@73|s(j({m7tT$lV=M~l1;&)5C{n&ri$?v7|-wZ{Fl9#^>VemLj z)U(Hk1Y%9w$$)kC|AP}J{=>n+=}8y=cOymYW$zlV&I4TRq=C1Swyxlnpw=%c%8u2O z?6<^9?&$s|C-Hd%NEeq@{@`Mc!D|5m=zs-!K$Rk;cM4W%{r7LwR#yQojxKxq z>(_Ygo?B?;qJTK72@FKAT}cfZazT3+6I{fb>S17-j~_3hcB|Ec~LP~PtJ)KzI~+4x#$XhlBl#QoFr*e>RuYPG

-61c2{C4( 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 literal 0 HcmV?d00001 diff --git a/stable/frigate/13.3.0/ix_values.yaml b/stable/frigate/13.3.0/ix_values.yaml new file mode 100644 index 0000000..f5513e2 --- /dev/null +++ b/stable/frigate/13.3.0/ix_values.yaml @@ -0,0 +1,96 @@ +image: + repository: ghcr.io/blakeblackshear/frigate + pullPolicy: IfNotPresent + tag: 0.12.1@sha256:bb7f7e76a13eccef0b12704e5851cc774a12af1f12df387d6a70a796a3e938c3 +tensorrtImage: + repository: ghcr.io/blakeblackshear/frigate + pullPolicy: IfNotPresent + tag: 0.12.1-tensorrt@sha256:db6e62d94206803011307296242ee6bfcc185bcf4eb6f68a6fdab8fa7f03a3fb +# When this is defined, the contents will be mounted +# as configmap into the container at /config/config.yml. +frigateConfig: {} +# -- https://docs.frigate.video/configuration/ +# mqtt: +# enabled: False +# cameras: +# dummy: +# enabled: False +# ffmpeg: +# inputs: +# - path: rtsp://127.0.0.1:554/rtsp +# roles: +# - detect + +workload: + main: + podSpec: + initContainers: + init-config: + enabled: "{{ not .Values.frigateConfig }}" + type: init + imageSelector: alpineImage + command: + - /bin/sh + - -c + - | + mkdir -p /config + if [ ! -f /config/config.yml ]; then + echo "Config file not found, copying dummy..." + cp /dummy-config/config.yml.dummy /config/config.yml + echo "Config file copied, you can now edit it at /config/config.yml" + fi +securityContext: + container: + readOnlyRootFilesystem: false + runAsNonRoot: false + runAsUser: 0 + runAsGroup: 0 +service: + main: + ports: + main: + port: 10500 + protocol: http + targetPort: 5000 + rtmp: + enabled: true + ports: + rtmp: + enabled: true + port: 1935 + targetPort: 1935 + rtsp: + enabled: true + ports: + rtsp: + enabled: true + port: 8554 + targetPort: 8554 + webrtc: + enabled: true + ports: + webrtc-tcp: + enabled: true + port: 8555 + targetPort: 8555 + webrtc-udp: + enabled: true + port: 8555 + protocol: udp + targetPort: 8555 +persistence: + media: + enabled: true + mountPath: /media + config: + # Only enable when not using frigateConfig + enabled: false + mountPath: /config + targetSelector: + main: + main: {} + init-config: {} +portal: + open: + enabled: true +updated: true diff --git a/stable/frigate/13.3.0/questions.yaml b/stable/frigate/13.3.0/questions.yaml new file mode 100644 index 0000000..2bbd14f --- /dev/null +++ b/stable/frigate/13.3.0/questions.yaml @@ -0,0 +1,3293 @@ +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: imageSelector + label: Select Image + schema: + type: string + default: image + enum: + - value: image + description: Base Image + - value: tensorrtImage + description: Image with TensorRT libraries for nvidia cards + - 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: 10500 + required: true + - variable: rtmp + label: RTMP Service + description: The service on which nodes connect to. + 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: rtmp + label: RTMP 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: 1935 + required: true + - variable: rtsp + label: RTSP Service + description: The service on which nodes connect to. + 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: rtsp + label: RTSP 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: 8554 + required: true + - variable: webrtc + label: WebRTC Service + description: The service on which nodes connect to. + 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: webrtc-tcp + label: WebRTC (TCP) 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: 8555 + required: true + - variable: webrtc-udp + label: WebRTC (UDP) 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: 8555 + 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: media + label: App Media + description: Stores the Application Media and DB + 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: config + label: App Config + 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: 0 + - variable: runAsGroup + label: runAsGroup + description: The groupID this App of the user running the application + schema: + type: int + default: 0 + # 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: 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/frigate/13.3.0/templates/NOTES.txt b/stable/frigate/13.3.0/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/frigate/13.3.0/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/frigate/13.3.0/templates/_configmap.tpl b/stable/frigate/13.3.0/templates/_configmap.tpl new file mode 100644 index 0000000..ebf2580 --- /dev/null +++ b/stable/frigate/13.3.0/templates/_configmap.tpl @@ -0,0 +1,42 @@ +{{/* Define the configmap */}} +{{- define "frigate.configmap" -}} +enabled: true +data: + {{- if .Values.frigateConfig }} + config.yml: | + {{- .Values.frigateConfig | toYaml | nindent 4 }} + {{- else }} + config.yml.dummy: | + mqtt: + enabled: false + cameras: + dummy: + enabled: false + ffmpeg: + inputs: + - path: rtsp://127.0.0.1:554/rtsp + roles: + - detect + {{- end }} +{{- end -}} + +{{- define "frigate.configVolume" -}} +enabled: true +type: configmap +objectName: frigate-config +targetSelector: + main: + main: {} + init-config: {} +{{- if .Values.frigateConfig }} +mountPath: /config +items: + - key: config.yml + path: config.yml +{{- else }} +mountPath: /dummy-config +items: + - key: config.yml.dummy + path: config.yml.dummy +{{- end -}} +{{- end -}} diff --git a/stable/frigate/13.3.0/templates/common.yaml b/stable/frigate/13.3.0/templates/common.yaml new file mode 100644 index 0000000..6ec5e06 --- /dev/null +++ b/stable/frigate/13.3.0/templates/common.yaml @@ -0,0 +1,20 @@ +{{/* Make sure all variables are set properly */}} +{{- include "tc.v1.common.loader.init" . }} + +{{/* Render configmap for frigate */}} +{{- $config := include "frigate.configmap" . | fromYaml -}} +{{- if $config -}} + {{- $_ := set .Values.configmap "frigate-config" $config -}} +{{- end -}} + +{{- if not .Values.frigateConfig -}} + {{- $_ := set .Values.persistence.config "enabled" true -}} +{{- end -}} + +{{- $vol := include "frigate.configVolume" . | fromYaml -}} +{{- if $vol -}} + {{- $_ := set .Values.persistence "frigate-config" $vol -}} +{{- end -}} + +{{/* Render the templates */}} +{{ include "tc.v1.common.loader.apply" . }} diff --git a/stable/frigate/13.3.0/values.yaml b/stable/frigate/13.3.0/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/frigate/13.4.0/.helmignore b/stable/frigate/13.4.0/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/frigate/13.4.0/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/frigate/13.4.0/CHANGELOG.md b/stable/frigate/13.4.0/CHANGELOG.md new file mode 100644 index 0000000..a40136a --- /dev/null +++ b/stable/frigate/13.4.0/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + +## [frigate-13.4.0](https://github.com/truecharts/charts/compare/frigate-13.3.0...frigate-13.4.0) (2024-03-07) + +### Chore + + + +- update container image common to v19.0.0[@eef2062](https://github.com/eef2062) by renovate ([#18956](https://github.com/truecharts/charts/issues/18956)) + + +## [frigate-13.3.0](https://github.com/truecharts/charts/compare/frigate-13.2.3...frigate-13.3.0) (2024-03-06) + +### Chore + + + +- update container image common to v18.2.0[@9e8b7d4](https://github.com/9e8b7d4) by renovate ([#18943](https://github.com/truecharts/charts/issues/18943)) + + +## [frigate-13.2.3](https://github.com/truecharts/charts/compare/frigate-13.2.2...frigate-13.2.3) (2024-03-05) + +### Chore + + + +- bump everything to force helm release again + + +## [frigate-13.2.2](https://github.com/truecharts/charts/compare/frigate-13.2.0...frigate-13.2.2) (2024-03-05) + +### Chore + + + +- force rereleases + +- update container image common to v18.1.6[@904d84b](https://github.com/904d84b) by renovate ([#18835](https://github.com/truecharts/charts/issues/18835)) + + + + + + + + + + +## [frigate-12.1.11](https://github.com/truecharts/charts/compare/frigate-12.1.10...frigate-12.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)) + + +## [frigate-12.1.10](https://github.com/truecharts/charts/compare/frigate-12.1.9...frigate-12.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)) + + +## [frigate-12.1.9](https://github.com/truecharts/charts/compare/frigate-12.1.8...frigate-12.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)) + + +## [frigate-12.1.8](https://github.com/truecharts/charts/compare/frigate-12.1.7...frigate-12.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)) + + +## [frigate-12.1.7](https://github.com/truecharts/charts/compare/frigate-12.1.6...frigate-12.1.7) (2024-01-21) + +### Chore + + + +- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) diff --git a/stable/frigate/13.4.0/Chart.yaml b/stable/frigate/13.4.0/Chart.yaml new file mode 100644 index 0000000..38712ed --- /dev/null +++ b/stable/frigate/13.4.0/Chart.yaml @@ -0,0 +1,39 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: nvr + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.11" + truecharts.org/train: stable +apiVersion: v2 +appVersion: 0.12.1 +dependencies: + - name: common + version: 19.0.0 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: NVR With Realtime Object Detection for IP Cameras +home: https://truecharts.org/charts/stable/frigate +icon: https://truecharts.org/img/hotlink-ok/chart-icons/frigate.png +keywords: + - encode + - nvr + - media + - frigate +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: frigate +sources: + - https://github.com/blakeblackshear/frigate + - https://github.com/truecharts/charts/tree/master/charts/stable/frigate + - https://ghcr.io/blakeblackshear/frigate +type: application +version: 13.4.0 diff --git a/stable/frigate/13.4.0/README.md b/stable/frigate/13.4.0/README.md new file mode 100644 index 0000000..bb1903d --- /dev/null +++ b/stable/frigate/13.4.0/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/frigate) + +**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/frigate/13.4.0/app-changelog.md b/stable/frigate/13.4.0/app-changelog.md new file mode 100644 index 0000000..d1309ae --- /dev/null +++ b/stable/frigate/13.4.0/app-changelog.md @@ -0,0 +1,9 @@ + + +## [frigate-13.4.0](https://github.com/truecharts/charts/compare/frigate-13.3.0...frigate-13.4.0) (2024-03-07) + +### Chore + + + +- update container image common to v19.0.0[@eef2062](https://github.com/eef2062) by renovate ([#18956](https://github.com/truecharts/charts/issues/18956)) \ No newline at end of file diff --git a/stable/frigate/13.4.0/app-readme.md b/stable/frigate/13.4.0/app-readme.md new file mode 100644 index 0000000..2f2f6dd --- /dev/null +++ b/stable/frigate/13.4.0/app-readme.md @@ -0,0 +1,8 @@ +NVR With Realtime Object Detection for IP Cameras + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/frigate](https://truecharts.org/charts/stable/frigate) + +--- + +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/frigate/13.4.0/charts/common-19.0.0.tgz b/stable/frigate/13.4.0/charts/common-19.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..d8852c18c5a656b47ae3433e07b362b4a5c7e8f3 GIT binary patch literal 99991 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

mg5=B?;V2=`k7*xQD4jaM9?D+^FTBH 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 z77 + 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: config + label: App Config + 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: 0 + - variable: runAsGroup + label: runAsGroup + description: The groupID this App of the user running the application + schema: + type: int + default: 0 + # 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: 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/frigate/13.4.0/templates/NOTES.txt b/stable/frigate/13.4.0/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/frigate/13.4.0/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/frigate/13.4.0/templates/_configmap.tpl b/stable/frigate/13.4.0/templates/_configmap.tpl new file mode 100644 index 0000000..ebf2580 --- /dev/null +++ b/stable/frigate/13.4.0/templates/_configmap.tpl @@ -0,0 +1,42 @@ +{{/* Define the configmap */}} +{{- define "frigate.configmap" -}} +enabled: true +data: + {{- if .Values.frigateConfig }} + config.yml: | + {{- .Values.frigateConfig | toYaml | nindent 4 }} + {{- else }} + config.yml.dummy: | + mqtt: + enabled: false + cameras: + dummy: + enabled: false + ffmpeg: + inputs: + - path: rtsp://127.0.0.1:554/rtsp + roles: + - detect + {{- end }} +{{- end -}} + +{{- define "frigate.configVolume" -}} +enabled: true +type: configmap +objectName: frigate-config +targetSelector: + main: + main: {} + init-config: {} +{{- if .Values.frigateConfig }} +mountPath: /config +items: + - key: config.yml + path: config.yml +{{- else }} +mountPath: /dummy-config +items: + - key: config.yml.dummy + path: config.yml.dummy +{{- end -}} +{{- end -}} diff --git a/stable/frigate/13.4.0/templates/common.yaml b/stable/frigate/13.4.0/templates/common.yaml new file mode 100644 index 0000000..6ec5e06 --- /dev/null +++ b/stable/frigate/13.4.0/templates/common.yaml @@ -0,0 +1,20 @@ +{{/* Make sure all variables are set properly */}} +{{- include "tc.v1.common.loader.init" . }} + +{{/* Render configmap for frigate */}} +{{- $config := include "frigate.configmap" . | fromYaml -}} +{{- if $config -}} + {{- $_ := set .Values.configmap "frigate-config" $config -}} +{{- end -}} + +{{- if not .Values.frigateConfig -}} + {{- $_ := set .Values.persistence.config "enabled" true -}} +{{- end -}} + +{{- $vol := include "frigate.configVolume" . | fromYaml -}} +{{- if $vol -}} + {{- $_ := set .Values.persistence "frigate-config" $vol -}} +{{- end -}} + +{{/* Render the templates */}} +{{ include "tc.v1.common.loader.apply" . }} diff --git a/stable/frigate/13.4.0/values.yaml b/stable/frigate/13.4.0/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/frigate/13.4.1/.helmignore b/stable/frigate/13.4.1/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/frigate/13.4.1/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/frigate/13.4.1/CHANGELOG.md b/stable/frigate/13.4.1/CHANGELOG.md new file mode 100644 index 0000000..8047cae --- /dev/null +++ b/stable/frigate/13.4.1/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + +## [frigate-13.4.1](https://github.com/truecharts/charts/compare/frigate-13.4.0...frigate-13.4.1) (2024-03-07) + +### Chore + + + +- bump everything to trigger re-release + + +## [frigate-13.4.0](https://github.com/truecharts/charts/compare/frigate-13.3.0...frigate-13.4.0) (2024-03-07) + +### Chore + + + +- update container image common to v19.0.0[@eef2062](https://github.com/eef2062) by renovate ([#18956](https://github.com/truecharts/charts/issues/18956)) + + +## [frigate-13.3.0](https://github.com/truecharts/charts/compare/frigate-13.2.3...frigate-13.3.0) (2024-03-06) + +### Chore + + + +- update container image common to v18.2.0[@9e8b7d4](https://github.com/9e8b7d4) by renovate ([#18943](https://github.com/truecharts/charts/issues/18943)) + + +## [frigate-13.2.3](https://github.com/truecharts/charts/compare/frigate-13.2.2...frigate-13.2.3) (2024-03-05) + +### Chore + + + +- bump everything to force helm release again + + +## [frigate-13.2.2](https://github.com/truecharts/charts/compare/frigate-13.2.0...frigate-13.2.2) (2024-03-05) + +### Chore + + + +- force rereleases + +- update container image common to v18.1.6[@904d84b](https://github.com/904d84b) by renovate ([#18835](https://github.com/truecharts/charts/issues/18835)) + + + + + + + + + + +## [frigate-12.1.11](https://github.com/truecharts/charts/compare/frigate-12.1.10...frigate-12.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)) + + +## [frigate-12.1.10](https://github.com/truecharts/charts/compare/frigate-12.1.9...frigate-12.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)) + + +## [frigate-12.1.9](https://github.com/truecharts/charts/compare/frigate-12.1.8...frigate-12.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)) + + +## [frigate-12.1.8](https://github.com/truecharts/charts/compare/frigate-12.1.7...frigate-12.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)) diff --git a/stable/frigate/13.4.1/Chart.yaml b/stable/frigate/13.4.1/Chart.yaml new file mode 100644 index 0000000..b914539 --- /dev/null +++ b/stable/frigate/13.4.1/Chart.yaml @@ -0,0 +1,39 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: nvr + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.11" + truecharts.org/train: stable +apiVersion: v2 +appVersion: 0.12.1 +dependencies: + - name: common + version: 19.0.0 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: NVR With Realtime Object Detection for IP Cameras +home: https://truecharts.org/charts/stable/frigate +icon: https://truecharts.org/img/hotlink-ok/chart-icons/frigate.png +keywords: + - encode + - nvr + - media + - frigate +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: frigate +sources: + - https://github.com/blakeblackshear/frigate + - https://github.com/truecharts/charts/tree/master/charts/stable/frigate + - https://ghcr.io/blakeblackshear/frigate +type: application +version: 13.4.1 diff --git a/stable/frigate/13.4.1/README.md b/stable/frigate/13.4.1/README.md new file mode 100644 index 0000000..bb1903d --- /dev/null +++ b/stable/frigate/13.4.1/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/frigate) + +**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/frigate/13.4.1/app-readme.md b/stable/frigate/13.4.1/app-readme.md new file mode 100644 index 0000000..2f2f6dd --- /dev/null +++ b/stable/frigate/13.4.1/app-readme.md @@ -0,0 +1,8 @@ +NVR With Realtime Object Detection for IP Cameras + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/frigate](https://truecharts.org/charts/stable/frigate) + +--- + +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/frigate/13.4.1/charts/common-19.0.0.tgz b/stable/frigate/13.4.1/charts/common-19.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..d8852c18c5a656b47ae3433e07b362b4a5c7e8f3 GIT binary patch literal 99991 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

mg5=B?;V2=`k7*xQD4jaM9?D+^FTBH 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 z77 + 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: config + label: App Config + 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: 0 + - variable: runAsGroup + label: runAsGroup + description: The groupID this App of the user running the application + schema: + type: int + default: 0 + # 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: 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/frigate/13.4.1/templates/NOTES.txt b/stable/frigate/13.4.1/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/frigate/13.4.1/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/frigate/13.4.1/templates/_configmap.tpl b/stable/frigate/13.4.1/templates/_configmap.tpl new file mode 100644 index 0000000..ebf2580 --- /dev/null +++ b/stable/frigate/13.4.1/templates/_configmap.tpl @@ -0,0 +1,42 @@ +{{/* Define the configmap */}} +{{- define "frigate.configmap" -}} +enabled: true +data: + {{- if .Values.frigateConfig }} + config.yml: | + {{- .Values.frigateConfig | toYaml | nindent 4 }} + {{- else }} + config.yml.dummy: | + mqtt: + enabled: false + cameras: + dummy: + enabled: false + ffmpeg: + inputs: + - path: rtsp://127.0.0.1:554/rtsp + roles: + - detect + {{- end }} +{{- end -}} + +{{- define "frigate.configVolume" -}} +enabled: true +type: configmap +objectName: frigate-config +targetSelector: + main: + main: {} + init-config: {} +{{- if .Values.frigateConfig }} +mountPath: /config +items: + - key: config.yml + path: config.yml +{{- else }} +mountPath: /dummy-config +items: + - key: config.yml.dummy + path: config.yml.dummy +{{- end -}} +{{- end -}} diff --git a/stable/frigate/13.4.1/templates/common.yaml b/stable/frigate/13.4.1/templates/common.yaml new file mode 100644 index 0000000..6ec5e06 --- /dev/null +++ b/stable/frigate/13.4.1/templates/common.yaml @@ -0,0 +1,20 @@ +{{/* Make sure all variables are set properly */}} +{{- include "tc.v1.common.loader.init" . }} + +{{/* Render configmap for frigate */}} +{{- $config := include "frigate.configmap" . | fromYaml -}} +{{- if $config -}} + {{- $_ := set .Values.configmap "frigate-config" $config -}} +{{- end -}} + +{{- if not .Values.frigateConfig -}} + {{- $_ := set .Values.persistence.config "enabled" true -}} +{{- end -}} + +{{- $vol := include "frigate.configVolume" . | fromYaml -}} +{{- if $vol -}} + {{- $_ := set .Values.persistence "frigate-config" $vol -}} +{{- end -}} + +{{/* Render the templates */}} +{{ include "tc.v1.common.loader.apply" . }} diff --git a/stable/frigate/13.4.1/values.yaml b/stable/frigate/13.4.1/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/frigate/14.3.0/.helmignore b/stable/frigate/14.3.0/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/frigate/14.3.0/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/frigate/14.3.0/CHANGELOG.md b/stable/frigate/14.3.0/CHANGELOG.md new file mode 100644 index 0000000..7960d57 --- /dev/null +++ b/stable/frigate/14.3.0/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + +## [frigate-14.3.0](https://github.com/truecharts/charts/compare/frigate-14.2.0...frigate-14.3.0) (2024-03-16) + +### Chore + + + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [frigate-14.3.0](https://github.com/truecharts/charts/compare/frigate-14.2.0...frigate-14.3.0) (2024-03-16) + +### Chore + + + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [frigate-14.3.0](https://github.com/truecharts/charts/compare/frigate-14.2.0...frigate-14.3.0) (2024-03-16) + +### Chore + + + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [frigate-14.3.0](https://github.com/truecharts/charts/compare/frigate-14.2.0...frigate-14.3.0) (2024-03-16) + +### Chore + + + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [frigate-14.3.0](https://github.com/truecharts/charts/compare/frigate-14.2.0...frigate-14.3.0) (2024-03-16) + +### Chore + + + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [frigate-14.3.0](https://github.com/truecharts/charts/compare/frigate-14.2.0...frigate-14.3.0) (2024-03-16) + +### Chore + + + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [frigate-14.3.0](https://github.com/truecharts/charts/compare/frigate-14.2.0...frigate-14.3.0) (2024-03-16) + +### Chore + + + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [frigate-14.3.0](https://github.com/truecharts/charts/compare/frigate-14.2.0...frigate-14.3.0) (2024-03-16) + +### Chore + + + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [frigate-14.3.0](https://github.com/truecharts/charts/compare/frigate-14.2.0...frigate-14.3.0) (2024-03-16) + +### Chore + + + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [frigate-14.3.0](https://github.com/truecharts/charts/compare/frigate-14.2.0...frigate-14.3.0) (2024-03-16) + +### Chore + + + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + diff --git a/stable/frigate/14.3.0/Chart.yaml b/stable/frigate/14.3.0/Chart.yaml new file mode 100644 index 0000000..6d4aebd --- /dev/null +++ b/stable/frigate/14.3.0/Chart.yaml @@ -0,0 +1,39 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: nvr + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.11" + truecharts.org/train: stable +apiVersion: v2 +appVersion: 0.13.2 +dependencies: + - name: common + version: 20.2.0 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: NVR With Realtime Object Detection for IP Cameras +home: https://truecharts.org/charts/stable/frigate +icon: https://truecharts.org/img/hotlink-ok/chart-icons/frigate.png +keywords: + - encode + - nvr + - media + - frigate +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: frigate +sources: + - https://github.com/blakeblackshear/frigate + - https://github.com/truecharts/charts/tree/master/charts/stable/frigate + - https://ghcr.io/blakeblackshear/frigate +type: application +version: 14.3.0 diff --git a/stable/frigate/14.3.0/README.md b/stable/frigate/14.3.0/README.md new file mode 100644 index 0000000..bb1903d --- /dev/null +++ b/stable/frigate/14.3.0/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/frigate) + +**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/frigate/14.3.0/app-changelog.md b/stable/frigate/14.3.0/app-changelog.md new file mode 100644 index 0000000..c8f41b6 --- /dev/null +++ b/stable/frigate/14.3.0/app-changelog.md @@ -0,0 +1,9 @@ + + +## [frigate-14.3.0](https://github.com/truecharts/charts/compare/frigate-14.2.0...frigate-14.3.0) (2024-03-16) + +### Chore + + + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) \ No newline at end of file diff --git a/stable/frigate/14.3.0/app-readme.md b/stable/frigate/14.3.0/app-readme.md new file mode 100644 index 0000000..2f2f6dd --- /dev/null +++ b/stable/frigate/14.3.0/app-readme.md @@ -0,0 +1,8 @@ +NVR With Realtime Object Detection for IP Cameras + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/frigate](https://truecharts.org/charts/stable/frigate) + +--- + +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/frigate/14.3.0/charts/common-20.2.0.tgz b/stable/frigate/14.3.0/charts/common-20.2.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..8bc207a92f0f2456ddda65216a8fafb7bb9d5b09 GIT binary patch literal 101653 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 z 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%0AZSzDiWTb()Y-C~3y!p)O`y!G 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 literal 0 HcmV?d00001 diff --git a/stable/frigate/14.3.0/ix_values.yaml b/stable/frigate/14.3.0/ix_values.yaml new file mode 100644 index 0000000..7760996 --- /dev/null +++ b/stable/frigate/14.3.0/ix_values.yaml @@ -0,0 +1,101 @@ +image: + repository: ghcr.io/blakeblackshear/frigate + pullPolicy: IfNotPresent + tag: 0.13.2@sha256:2906991ccad85035b176941f9dedfd35088ff710c39d45ef1baa9a49f2b16734 +tensorrtImage: + repository: ghcr.io/blakeblackshear/frigate + pullPolicy: IfNotPresent + tag: 0.13.2-tensorrt@sha256:07cc224cdf2feef0af9c860c044ac7ea0ac4adfca7f68b37dc3958bc3a3ee357 + +# When this is defined, the contents will be mounted +# as configmap into the container at /config/config.yml. +frigateConfig: {} +# -- https://docs.frigate.video/configuration/ +# mqtt: +# enabled: False +# cameras: +# dummy: +# enabled: False +# ffmpeg: +# inputs: +# - path: rtsp://127.0.0.1:554/rtsp +# roles: +# - detect + +workload: + main: + podSpec: + initContainers: + init-config: + enabled: "{{ not .Values.frigateConfig }}" + type: init + imageSelector: alpineImage + command: + - /bin/sh + - -c + - | + mkdir -p /config + if [ ! -f /config/config.yml ]; then + echo "Config file not found, copying dummy..." + cp /dummy-config/config.yml /config/config.yml + echo "Config file copied, you can now edit it at /config/config.yml" + else + echo "Config file found, you can edit it at /config/config.yml" + fi + +securityContext: + container: + readOnlyRootFilesystem: false + runAsNonRoot: false + runAsUser: 0 + runAsGroup: 0 + +service: + main: + ports: + main: + port: 10500 + protocol: http + targetPort: 5000 + rtmp: + enabled: true + ports: + rtmp: + enabled: true + port: 1935 + targetPort: 1935 + rtsp: + enabled: true + ports: + rtsp: + enabled: true + port: 8554 + targetPort: 8554 + webrtc: + enabled: true + ports: + webrtc-tcp: + enabled: true + port: 8555 + targetPort: 8555 + webrtc-udp: + enabled: true + port: 8555 + protocol: udp + targetPort: 8555 + +persistence: + media: + enabled: true + mountPath: /media + config: + enabled: true + mountPath: /config + targetSelector: + main: + main: {} + init-config: {} + +portal: + open: + enabled: true diff --git a/stable/frigate/14.3.0/questions.yaml b/stable/frigate/14.3.0/questions.yaml new file mode 100644 index 0000000..2bbd14f --- /dev/null +++ b/stable/frigate/14.3.0/questions.yaml @@ -0,0 +1,3293 @@ +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: imageSelector + label: Select Image + schema: + type: string + default: image + enum: + - value: image + description: Base Image + - value: tensorrtImage + description: Image with TensorRT libraries for nvidia cards + - 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: 10500 + required: true + - variable: rtmp + label: RTMP Service + description: The service on which nodes connect to. + 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: rtmp + label: RTMP 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: 1935 + required: true + - variable: rtsp + label: RTSP Service + description: The service on which nodes connect to. + 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: rtsp + label: RTSP 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: 8554 + required: true + - variable: webrtc + label: WebRTC Service + description: The service on which nodes connect to. + 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: webrtc-tcp + label: WebRTC (TCP) 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: 8555 + required: true + - variable: webrtc-udp + label: WebRTC (UDP) 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: 8555 + 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: media + label: App Media + description: Stores the Application Media and DB + 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: config + label: App Config + 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: 0 + - variable: runAsGroup + label: runAsGroup + description: The groupID this App of the user running the application + schema: + type: int + default: 0 + # 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: 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/frigate/14.3.0/templates/NOTES.txt b/stable/frigate/14.3.0/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/frigate/14.3.0/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/frigate/14.3.0/templates/_configmap.tpl b/stable/frigate/14.3.0/templates/_configmap.tpl new file mode 100644 index 0000000..140aa24 --- /dev/null +++ b/stable/frigate/14.3.0/templates/_configmap.tpl @@ -0,0 +1,43 @@ +{{/* Define the configmap */}} +{{- define "frigate.configmap" -}} +enabled: true +data: + config.yml: | + {{- if .Values.frigateConfig }} + {{- .Values.frigateConfig | toYaml | nindent 4 }} + {{- else }} + mqtt: + enabled: false + cameras: + dummy: + enabled: false + ffmpeg: + inputs: + - path: rtsp://127.0.0.1:554/rtsp + roles: + - detect + {{- end }} +{{- end -}} + +{{- define "frigate.configVolume" -}} +{{- $mountPath := "/dummy-config/config.yml" -}} +{{- if .Values.frigateConfig }} + {{- $mountPath = "/config/config.yaml" -}} +{{- end }} +enabled: true +type: configmap +objectName: frigate-config +items: + - key: config.yml + path: config.yml +targetSelector: + main: + main: + subPath: config.yml + mountPath: {{ $mountPath }} + readOnly: true + init-config: + subPath: config.yml + mountPath: {{ $mountPath }} + readOnly: true +{{- end -}} diff --git a/stable/frigate/14.3.0/templates/common.yaml b/stable/frigate/14.3.0/templates/common.yaml new file mode 100644 index 0000000..2b55474 --- /dev/null +++ b/stable/frigate/14.3.0/templates/common.yaml @@ -0,0 +1,17 @@ +{{/* Make sure all variables are set properly */}} +{{- include "tc.v1.common.loader.init" . }} + +{{/* Render configmap for frigate */}} +{{- $config := include "frigate.configmap" . | fromYaml -}} +{{- if $config -}} + {{- $_ := set .Values.configmap "frigate-config" $config -}} +{{- end -}} + + +{{- $vol := include "frigate.configVolume" . | fromYaml -}} +{{- if $vol -}} + {{- $_ := set .Values.persistence "frigate-config" $vol -}} +{{- end -}} + +{{/* Render the templates */}} +{{ include "tc.v1.common.loader.apply" . }} diff --git a/stable/frigate/14.3.0/values.yaml b/stable/frigate/14.3.0/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/frigate/14.3.1/.helmignore b/stable/frigate/14.3.1/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/frigate/14.3.1/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/frigate/14.3.1/CHANGELOG.md b/stable/frigate/14.3.1/CHANGELOG.md new file mode 100644 index 0000000..3eb76be --- /dev/null +++ b/stable/frigate/14.3.1/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + +## [frigate-14.3.1](https://github.com/truecharts/charts/compare/frigate-14.2.0...frigate-14.3.1) (2024-03-17) + +### Chore + + + +- 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)) + + +## [frigate-14.3.1](https://github.com/truecharts/charts/compare/frigate-14.2.0...frigate-14.3.1) (2024-03-17) + +### Chore + + + +- 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)) + + +## [frigate-14.3.1](https://github.com/truecharts/charts/compare/frigate-14.2.0...frigate-14.3.1) (2024-03-17) + +### Chore + + + +- 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)) + + +## [frigate-14.3.1](https://github.com/truecharts/charts/compare/frigate-14.2.0...frigate-14.3.1) (2024-03-17) + +### Chore + + + +- 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)) + + +## [frigate-14.3.1](https://github.com/truecharts/charts/compare/frigate-14.2.0...frigate-14.3.1) (2024-03-17) + +### Chore + + + +- 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)) + + +## [frigate-14.3.1](https://github.com/truecharts/charts/compare/frigate-14.2.0...frigate-14.3.1) (2024-03-17) + +### Chore + + + +- 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)) + + +## [frigate-14.3.1](https://github.com/truecharts/charts/compare/frigate-14.2.0...frigate-14.3.1) (2024-03-17) + +### Chore + + + +- 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)) + + +## [frigate-14.3.1](https://github.com/truecharts/charts/compare/frigate-14.2.0...frigate-14.3.1) (2024-03-17) + +### Chore + + + +- 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)) + + +## [frigate-14.3.1](https://github.com/truecharts/charts/compare/frigate-14.2.0...frigate-14.3.1) (2024-03-17) diff --git a/stable/frigate/14.3.1/Chart.yaml b/stable/frigate/14.3.1/Chart.yaml new file mode 100644 index 0000000..f775e07 --- /dev/null +++ b/stable/frigate/14.3.1/Chart.yaml @@ -0,0 +1,39 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: nvr + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.11" + truecharts.org/train: stable +apiVersion: v2 +appVersion: 0.13.2 +dependencies: + - name: common + version: 20.2.2 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: NVR With Realtime Object Detection for IP Cameras +home: https://truecharts.org/charts/stable/frigate +icon: https://truecharts.org/img/hotlink-ok/chart-icons/frigate.png +keywords: + - encode + - nvr + - media + - frigate +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: frigate +sources: + - https://github.com/blakeblackshear/frigate + - https://github.com/truecharts/charts/tree/master/charts/stable/frigate + - https://ghcr.io/blakeblackshear/frigate +type: application +version: 14.3.1 diff --git a/stable/frigate/14.3.1/README.md b/stable/frigate/14.3.1/README.md new file mode 100644 index 0000000..bb1903d --- /dev/null +++ b/stable/frigate/14.3.1/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/frigate) + +**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/frigate/14.3.1/app-changelog.md b/stable/frigate/14.3.1/app-changelog.md new file mode 100644 index 0000000..7102887 --- /dev/null +++ b/stable/frigate/14.3.1/app-changelog.md @@ -0,0 +1,11 @@ + + +## [frigate-14.3.1](https://github.com/truecharts/charts/compare/frigate-14.2.0...frigate-14.3.1) (2024-03-17) + +### Chore + + + +- 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)) \ No newline at end of file diff --git a/stable/frigate/14.3.1/app-readme.md b/stable/frigate/14.3.1/app-readme.md new file mode 100644 index 0000000..2f2f6dd --- /dev/null +++ b/stable/frigate/14.3.1/app-readme.md @@ -0,0 +1,8 @@ +NVR With Realtime Object Detection for IP Cameras + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/frigate](https://truecharts.org/charts/stable/frigate) + +--- + +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/frigate/14.3.1/charts/common-20.2.2.tgz b/stable/frigate/14.3.1/charts/common-20.2.2.tgz new file mode 100644 index 0000000000000000000000000000000000000000..a03705c84630d53af93b6d6ffdf44b22f1a2597f GIT binary patch literal 101828 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 literal 0 HcmV?d00001 diff --git a/stable/frigate/14.3.1/ix_values.yaml b/stable/frigate/14.3.1/ix_values.yaml new file mode 100644 index 0000000..7760996 --- /dev/null +++ b/stable/frigate/14.3.1/ix_values.yaml @@ -0,0 +1,101 @@ +image: + repository: ghcr.io/blakeblackshear/frigate + pullPolicy: IfNotPresent + tag: 0.13.2@sha256:2906991ccad85035b176941f9dedfd35088ff710c39d45ef1baa9a49f2b16734 +tensorrtImage: + repository: ghcr.io/blakeblackshear/frigate + pullPolicy: IfNotPresent + tag: 0.13.2-tensorrt@sha256:07cc224cdf2feef0af9c860c044ac7ea0ac4adfca7f68b37dc3958bc3a3ee357 + +# When this is defined, the contents will be mounted +# as configmap into the container at /config/config.yml. +frigateConfig: {} +# -- https://docs.frigate.video/configuration/ +# mqtt: +# enabled: False +# cameras: +# dummy: +# enabled: False +# ffmpeg: +# inputs: +# - path: rtsp://127.0.0.1:554/rtsp +# roles: +# - detect + +workload: + main: + podSpec: + initContainers: + init-config: + enabled: "{{ not .Values.frigateConfig }}" + type: init + imageSelector: alpineImage + command: + - /bin/sh + - -c + - | + mkdir -p /config + if [ ! -f /config/config.yml ]; then + echo "Config file not found, copying dummy..." + cp /dummy-config/config.yml /config/config.yml + echo "Config file copied, you can now edit it at /config/config.yml" + else + echo "Config file found, you can edit it at /config/config.yml" + fi + +securityContext: + container: + readOnlyRootFilesystem: false + runAsNonRoot: false + runAsUser: 0 + runAsGroup: 0 + +service: + main: + ports: + main: + port: 10500 + protocol: http + targetPort: 5000 + rtmp: + enabled: true + ports: + rtmp: + enabled: true + port: 1935 + targetPort: 1935 + rtsp: + enabled: true + ports: + rtsp: + enabled: true + port: 8554 + targetPort: 8554 + webrtc: + enabled: true + ports: + webrtc-tcp: + enabled: true + port: 8555 + targetPort: 8555 + webrtc-udp: + enabled: true + port: 8555 + protocol: udp + targetPort: 8555 + +persistence: + media: + enabled: true + mountPath: /media + config: + enabled: true + mountPath: /config + targetSelector: + main: + main: {} + init-config: {} + +portal: + open: + enabled: true diff --git a/stable/frigate/14.3.1/questions.yaml b/stable/frigate/14.3.1/questions.yaml new file mode 100644 index 0000000..2bbd14f --- /dev/null +++ b/stable/frigate/14.3.1/questions.yaml @@ -0,0 +1,3293 @@ +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: imageSelector + label: Select Image + schema: + type: string + default: image + enum: + - value: image + description: Base Image + - value: tensorrtImage + description: Image with TensorRT libraries for nvidia cards + - 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: 10500 + required: true + - variable: rtmp + label: RTMP Service + description: The service on which nodes connect to. + 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: rtmp + label: RTMP 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: 1935 + required: true + - variable: rtsp + label: RTSP Service + description: The service on which nodes connect to. + 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: rtsp + label: RTSP 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: 8554 + required: true + - variable: webrtc + label: WebRTC Service + description: The service on which nodes connect to. + 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: webrtc-tcp + label: WebRTC (TCP) 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: 8555 + required: true + - variable: webrtc-udp + label: WebRTC (UDP) 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: 8555 + 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: media + label: App Media + description: Stores the Application Media and DB + 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: config + label: App Config + 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: 0 + - variable: runAsGroup + label: runAsGroup + description: The groupID this App of the user running the application + schema: + type: int + default: 0 + # 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: 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/frigate/14.3.1/templates/NOTES.txt b/stable/frigate/14.3.1/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/frigate/14.3.1/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/frigate/14.3.1/templates/_configmap.tpl b/stable/frigate/14.3.1/templates/_configmap.tpl new file mode 100644 index 0000000..140aa24 --- /dev/null +++ b/stable/frigate/14.3.1/templates/_configmap.tpl @@ -0,0 +1,43 @@ +{{/* Define the configmap */}} +{{- define "frigate.configmap" -}} +enabled: true +data: + config.yml: | + {{- if .Values.frigateConfig }} + {{- .Values.frigateConfig | toYaml | nindent 4 }} + {{- else }} + mqtt: + enabled: false + cameras: + dummy: + enabled: false + ffmpeg: + inputs: + - path: rtsp://127.0.0.1:554/rtsp + roles: + - detect + {{- end }} +{{- end -}} + +{{- define "frigate.configVolume" -}} +{{- $mountPath := "/dummy-config/config.yml" -}} +{{- if .Values.frigateConfig }} + {{- $mountPath = "/config/config.yaml" -}} +{{- end }} +enabled: true +type: configmap +objectName: frigate-config +items: + - key: config.yml + path: config.yml +targetSelector: + main: + main: + subPath: config.yml + mountPath: {{ $mountPath }} + readOnly: true + init-config: + subPath: config.yml + mountPath: {{ $mountPath }} + readOnly: true +{{- end -}} diff --git a/stable/frigate/14.3.1/templates/common.yaml b/stable/frigate/14.3.1/templates/common.yaml new file mode 100644 index 0000000..2b55474 --- /dev/null +++ b/stable/frigate/14.3.1/templates/common.yaml @@ -0,0 +1,17 @@ +{{/* Make sure all variables are set properly */}} +{{- include "tc.v1.common.loader.init" . }} + +{{/* Render configmap for frigate */}} +{{- $config := include "frigate.configmap" . | fromYaml -}} +{{- if $config -}} + {{- $_ := set .Values.configmap "frigate-config" $config -}} +{{- end -}} + + +{{- $vol := include "frigate.configVolume" . | fromYaml -}} +{{- if $vol -}} + {{- $_ := set .Values.persistence "frigate-config" $vol -}} +{{- end -}} + +{{/* Render the templates */}} +{{ include "tc.v1.common.loader.apply" . }} diff --git a/stable/frigate/14.3.1/values.yaml b/stable/frigate/14.3.1/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/frigate/14.3.2/.helmignore b/stable/frigate/14.3.2/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/frigate/14.3.2/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/frigate/14.3.2/CHANGELOG.md b/stable/frigate/14.3.2/CHANGELOG.md new file mode 100644 index 0000000..476e053 --- /dev/null +++ b/stable/frigate/14.3.2/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + +## [frigate-14.3.2](https://github.com/truecharts/charts/compare/frigate-14.2.0...frigate-14.3.2) (2024-03-23) + +### Chore + + + +- 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)) + + +## [frigate-14.3.2](https://github.com/truecharts/charts/compare/frigate-14.2.0...frigate-14.3.2) (2024-03-23) + +### Chore + + + +- 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)) + + +## [frigate-14.3.2](https://github.com/truecharts/charts/compare/frigate-14.2.0...frigate-14.3.2) (2024-03-23) + +### Chore + + + +- 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)) + + +## [frigate-14.3.2](https://github.com/truecharts/charts/compare/frigate-14.2.0...frigate-14.3.2) (2024-03-23) + +### Chore + + + +- 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)) + + +## [frigate-14.3.2](https://github.com/truecharts/charts/compare/frigate-14.2.0...frigate-14.3.2) (2024-03-23) + +### Chore + + + +- 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)) + + +## [frigate-14.3.2](https://github.com/truecharts/charts/compare/frigate-14.2.0...frigate-14.3.2) (2024-03-23) + +### Chore + + + +- 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)) + + +## [frigate-14.3.2](https://github.com/truecharts/charts/compare/frigate-14.2.0...frigate-14.3.2) (2024-03-23) + +### Chore + + + +- 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)) diff --git a/stable/frigate/14.3.2/Chart.yaml b/stable/frigate/14.3.2/Chart.yaml new file mode 100644 index 0000000..eaebabe --- /dev/null +++ b/stable/frigate/14.3.2/Chart.yaml @@ -0,0 +1,39 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: nvr + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.11" + truecharts.org/train: stable +apiVersion: v2 +appVersion: 0.13.2 +dependencies: + - name: common + version: 20.2.3 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: NVR With Realtime Object Detection for IP Cameras +home: https://truecharts.org/charts/stable/frigate +icon: https://truecharts.org/img/hotlink-ok/chart-icons/frigate.png +keywords: + - encode + - nvr + - media + - frigate +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: frigate +sources: + - https://github.com/blakeblackshear/frigate + - https://github.com/truecharts/charts/tree/master/charts/stable/frigate + - https://ghcr.io/blakeblackshear/frigate +type: application +version: 14.3.2 diff --git a/stable/frigate/14.3.2/README.md b/stable/frigate/14.3.2/README.md new file mode 100644 index 0000000..bb1903d --- /dev/null +++ b/stable/frigate/14.3.2/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/frigate) + +**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/frigate/14.3.2/app-changelog.md b/stable/frigate/14.3.2/app-changelog.md new file mode 100644 index 0000000..4e57216 --- /dev/null +++ b/stable/frigate/14.3.2/app-changelog.md @@ -0,0 +1,13 @@ + + +## [frigate-14.3.2](https://github.com/truecharts/charts/compare/frigate-14.2.0...frigate-14.3.2) (2024-03-23) + +### Chore + + + +- 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)) \ No newline at end of file diff --git a/stable/frigate/14.3.2/app-readme.md b/stable/frigate/14.3.2/app-readme.md new file mode 100644 index 0000000..2f2f6dd --- /dev/null +++ b/stable/frigate/14.3.2/app-readme.md @@ -0,0 +1,8 @@ +NVR With Realtime Object Detection for IP Cameras + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/frigate](https://truecharts.org/charts/stable/frigate) + +--- + +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/frigate/14.3.2/charts/common-20.2.3.tgz b/stable/frigate/14.3.2/charts/common-20.2.3.tgz new file mode 100644 index 0000000000000000000000000000000000000000..701ca7141bec7a024c6a235eece1372f39cd79bb GIT binary patch literal 101772 zcmV)LK)JskiwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PMZ%avM3aFxbEO6bPy(#_AO*-X(F4Cq7wHck63e))8g*%+5EV z0jod~N5w*Q0i?|KIAUL8UvHme1BpwaZX_j9vfaZvXWC*FkVqteL}ns0;j!tIh5IKH z9Ee;bWP_TOf+-T1EA=^h+(8wcHPtvtgaGeGdyVX7QqrXeh`yhJrPp1awZ~ zMZSDMJrZ)#M{nK_E^5tsv#3aT$NT8t6@(C~p%70=AMsffu~@)6gl2KjM-w3;-rwK% zDfd|H*F84fr{SCmvM)aHtDB#Hy%BK*NAv@UIb~rV&07^5MfPWa1>vIN6Yj+{67cTF zS?I~XP(X(k8D2lh|XSAfW)Lv;Bi!ry(bO<&G@wS?u$ErG}EmDm8;?4PI1g zNH=pg8xq^qKmYZ0v)<~|8@0xtD^pBEfoVu$07j;m26FsH?0+SI>nt8ukfy#vfDG|7 z6;yGJfmlSOZ_umE4KA%ly;W~lzVy7_KI=W2|IcwSBm9{*fTjGu*=jYL-7Nn<=rp$c z|0SLsRI8z%0ye|}Qj?%EhF@|wfR6(r5cYj4`6dpK`icTPB!T1?>W@D9^m%y&XQPpu zg0t;ptC|{;+wcf`1is$9JAKzjC$l&vp$Ha;vnfGr_&>xG9Qh1|Oqgv1i3#PJy8(bc zs#Yrqjc^bQv3GY$MtBwo*zk12r({G!f-vHO#du6k0?hd(o)RP`SfG0v1ZYUmj1wRB z3>*aL>ca`w5KeF?KeIWB<5@s_6p>hdhtDp^bdwSb6vb>vkmRQD4SwDLZ8PO9ddBd-*E~LO%99!Z~`& ze4+*q!wdM`*YZaVT@&p88dE{ugw_EebKGiPhIDPu_OMjF6UCg3Kqt-3OthEHQUSlQQ(u^l!T#RGFe+!V7rGU|#TweX8OBXUB z`Q5O=Wy~m7E*e|$vDvF2G$lf^M~6Wj`#x8%FW$He8wq9@hh9RyuQ|)H%hsjvSV2g{ zn2hLM7O;L@1{l4%pO6rRg!shYU85NZ`z*x6fN;cO~0oSfl79}L_;j67z^!dTP3@t!p=M)DcZ{3 zMp3XpbR@gY?oU`O-;T!tL6mD6`f5zg_a(g)UX4X0^jOSm(Bm)ESD3qRX-KEDDGHfS zuB5C1LX%uSG`!UB`sk?9XqXymQo`I8EJ9Pp1&Wx@5e|JMwLzt;AsTwY%%|ZPd0{k$ z+CC#31RM2@NM08DH5{;z0E`Mq7twJLnC-LzZT`&IoorFB0yM#M2^eeLt>%-6ggyzq zg&B={Wd~iwbc$mdEEJ0o43Ut}VuJ1o@>%%j1P=uUO=p3iQJ}Ujj_#?LppbAud}Ldo zgjaO66R4#Zi$e75V-!%2f=AWFOUh7|c?%7`zEdqP9n2H6`04iL+Z~#KV6Ek&?DFL&I zd=z$bNM={1l;7Ag6_os~mS8*!kNJB};y&v34wF|u#cUQi?+Etag~8&QG4Ue}2w!kP zrVdYpMSd02ISt5|oN*5aSlMF|5il~JefKRVp2w!qRm?^-Aciq0%ft07l+#YjQSiyb z5gyWj3Yu^c?E8K6kALc4e#{(6poWewE-HpW{3_~l7J0YV>D z8;w@WGSDmLmrq#D(@LO6%vTFYjo>Id5%r6c2@c1^toV1KoR@DYpJL%n)U29CQ9!07 z6gYqy+|Cfb;GPK7Z?zt;31_odiaIO%9GjvNzkp7uk>0&%)<>O2qcMe_Q!)ikbqGpI zOn#dYo+{eR6zn$M(n`fPq&7XMaQWf<^!)ht~*zdA|3ko?4f#3wkGYO9oxFB9%=KF0*acQcsB z!98Bc8RCcBywhsyk2K~&eK}#_h>jIKSkfU^rU-qeq7398k=OnHF-d zACQ1}f@#ipHye^TB!cidW&1exCVf=JQ@_`-^ZdQtLPsq2q=Y|aa_UEtUBZx@k|OCX$Woq6l0HErB$k4 zL(kAxKJ)m#oJIk|{{HpZ@#)*M`qba8n0J!iQ%u9YBYykN-V%Y#vT)w0-60_^y!3~^ zVk+Ev%pXL=GxH*0Z^`bEG^?I`g?dA$vqHqxUx_sim#KyDMA2 zdicTy>FYC&x)hA+e8HRbkBi?;&0rSxkws&~)oB6wC^~58UA7h3 zt@BWjcm#r=;aB;BV8sH`jx?CswV1 zxhL}TU$e>`g#1N_r_`%Ob8i)-Xzne8v}CC|jnsTB@Boy%=W7q4Tq_9O(NK=nmDzE` z2NujgET>aD0D8#DN6G~a$5$Ut;FI}X^JM9@5jWMK4Ly*a)82zSW&lR>=N&MF=0Kdw zWCdJ(0HnFVf_k-Z#Ge}j)sh{)Df6YaIpXGpls1T59{UnK^~;VUw4pJFzg^_{bofP( z=hNX6kcVl_Kw49u)DQb@2IfV}VC?$>KIIa_n{mOWUxXg2X^Usf=2Y$@wi|WlRYHQ8 z&TR?x!+zUACjb(i49?|#2Rj=Jk(94Z8M)V^PoLFlf-SeE<~k2?#3yVeLw)+H8t9g| zrH3)5RHqArhO;N6Yq@rWq_`*FR?#aXYwT8B**X!)eUcW@3t$6z3f`+qxo<_~ld?O- zeNGTJG+5S2HBl^O++M26Jk9FS4vMIEhgfKbJ@K({`Mzx-ntQOlOKnA;6pe{MI1nTz z{;q|R!BTl3<_1Ga3QGMs5C4aFg7|0@vnd*!9ABI{XMB|%^ezmP_hd{)BnHP2n6LEX z*+(G-g}@4N+8#HHwbB0{|9tK?z>t_z=D+}RH4B0P@nRwsU4OTdc?qNc&`O1>qX!60 zaRfE&uUrEhKxoal5CxvHw7EL8ewC{c53vX39u7#3f(mZoC)2mfcQj<<)rwJO z4Z;47r-8L@Xlsfoq1yZOsfOst+A`?hlma9RD|~j)2@6BwN$Eo>9MCU)g7bGaLmm$0 z4y4W*0TYQ9i%2Ldu#g}&QXT{>2-v-R3I5B7hO(0}8piCNoAWY-P>jPdDaWaXlFrr5 zOI4GEKC0l*Q`E_lFHGXZ0n%sS+|H4xL*juP)@`1UR$p`t2G9wu27$hYeB z8z#ks1koOfblWWC)F-iVPLy*f!C+Z~`#fSHXK@9gdmPId>GCxCH+9a+l|f7H^2qVx z)qV|H=dajls3Gj^>{Q_YU1|&>;?WWH&^2QMz0=M@P;6&MH>>=Wlv|Ak4#Rdoq22^3 zHV0li;0H1!XiP#9V?q3iDlU607g)ybk{oElxfJ#7X|J`{>E9E^h5g22{dWWsjrK`# zWf^7{r}nI|rL6m-^G2Ihlf!sm2vv!2Rrhxc8j{Pg+U`E6& zJTG)u@VvNA*}nXDUl+8#3GI6Opx!XP2?wNka6~%9Yxf$Sf6&B)9P|!4-ENzV{PtnP z#|?bY=p5ljW7s-4>fnxl*yy#qPWQ0YZQ$NAZ-`1r1fMV_RwHRjS}Ys&W-Gz6OE7L8 z^;$!(*Juu#jgEIX?DdG}b@8y-9336@MhC5Cv*BTUFv0|T!w&8o_{~PQ)fK!%Oey7(V-E2ra5v)d07c54x+Z?reqXs!3q=o&XPOH;6 z9N}(v)I2=uHAkaf@2GKb*lP^i?MAoR866HgqfWauY7B?|L9cbN6vg{7Sz~d_QqF>D zIP1l0^+uy^2Nr{WL^`7;K00W&Tg~Rt5Vu;RgYH4I(d%~o#-Z0~G=?4-HM_pokc+9| zFJIS--z;iN9JXAnr}U1DaEvGWi{A{woqESvHH7$Gzj5HVMm^jc`iF9vn472}nA5>OJZK|Ft0yT?@2Og-1f zEFolvbVzr2G-@B4OOjm5PxiN1bNt@Tln>4SU{EZ`5oy zJCd;Nfk*zF!PM$N-kchox=c1aVre4lvDRn%qSm_35Js#-C^N3Gr= zX|<192VMsc{iC7ZXgA5I*TRRm-SfJKq}grvn%<~A>NO9J8ofsAXoNe%-l)~}4w~Ll zgw0HBb_=l`PZYLZz-E4k1)Y;xG~Q3V(GAMgX1Cs}uGduWsZI6jt@WC^lK;}jbS{}a z)n>QWu6G{R;KRGv&t?63%v0l7o5Nw>!!TIh<%eL< ztGCv|Kzp%~@Wa(5;zm31TvJbF2mLQ|MhF5sK|>O-`-&9V=TRbYD|sGZEI@nF1&{|z z*}CVHE@fT5rpm7iQFggR8aZtCj*gm*RC^qgHF!#6v0EHxCXE3F)qlfut{rfWWJ%{VR>hPct0*52g1#jmcP6ET?z^dnK_g zv^C(kBnE+{)o3*vN6n7iy$;*M!{I^4?{&z~Zybz{j=J4u=b+m@I&62mmSm-k5h2~C z-@@(Q2p{x@M|g;PheuL@8LflEgNSU5l>|W9un_I?PPE7Sgv6v?*+IuiEM-#EQ%;=N z_lYl6RP6i8!{4V6;f~`4x+4q3>68XImddz<{O2jA;hznhdg*8yT{-2Xzv($R8>4Uv`z&so{Wpc(5n8M)YG5*mv6ar#OTe^yK`?b!DgY2xWqc==UkUCrf zgSuQpYJ$trkCgL0!s(e|=E6@za76WJt2h-MC(ikd0I5ebF!6jQc0waubDGUe^O^{F z(l3w1LJAvL5Czv^2X@i9WT=%c8YfeY^%j-j-{KIDlcSo#U1~WhnOIg->Ue5dnB-vh zWC-yt#Hl3WMZ~~W-*M}$6&76)Z;Eu_tK6fwB)`MT<=Ai{Y&i%-xVaeQv5i^8(NInk zo2|h|K+;?cs+t3C3@38qIJ4B;DGg#Z%yU^ND|%>EKrROkKL$K(aLU z(?!iWx&E5)pMdksn5>-kcFyW`nvaD|Q6*R0$+Kh&rE)J7R}L8($7~kaZ(|kHwX7-X zIc=zXOHT27>W_(V7giQPs%O^8zFJg6E?^_{NhX9EPAN#0l&YtXr=2$-f`GG>5HuY3 z)tQkA8cx@{n`dj*qztd?+>u4*s|{RoU{)OVWjuzo2)|P_{OV-^&yz4I{9Q>zmBjZ) zvUWBlAbe!!c^;_plep1aO9I3ZV$G|pB&sx~H)l7;{frni#)91A1&Y~BtfM^Xa!=Eo z00;z2tK(e>NyYd}nOMoek_RJ#<3I}90xKT^xla--W--}IpFkVOof(dCD2UcHuqS3X z2o~s`#dn~ny&)1!NeCSljl+FlA|Av$O2r906=niLwyBt~nUJ8VN9<{|PLwm_1kJ)g z&guo5p?e&{OczQ&!ve*W-&JzjrRJ{XG%2C(WcvhusV+vz>L7Dhfhf-Jw>`fr4 zgI1DpOhR!@MoviO4uU9J<13>lgRt=GS>|3kI~<<>3l04>AS$x|qyReALC`I$p5E3n zwbWj_R#mmxmbA)=N;N1~qF$RyOD*VyE_>-H4H=D+B-&?az1s@LF`fmQ7s>&YlufDA zuHD6ieks$1tmh7C3hEGhcO>*d_=^dGP-@AIOzbk^6E+KcIq5hFMba@{(VZ`0J zbQQGd6h=nokQ%w83n!1>*Y_)xi20|K$1`A1Z)QfcDTtiQa6Ii(Y)m5P!X#`<9PQMr zM6FV9e~}W0`tySoQ!@6I#BwsF;qe^PKq6sCJjEa1huD2vxhKO3W1u+ACC9}e43%|2 z$AH*^6*Y_i!p!{XOsoUM6w8CCq#~cS43d5aLWv1+(h^F_;XCW^Em>Gb%u3v-&8Rk2 zhCmCCkSUC=F&JN|Hy7-l#8(<0U07*nR+@E1xU{Sd5~1@79GYNWcrn3(q>|F9d`Lc- z;?S?8vehY~q!ZX}mL?I7@stS231FqbSjC$dg2a$8PJaVUQ#nJQeT;CZQdqfEhHr0Z zD8;(B;Ie-{of4m7VTyncyh(MSUFvqwl|{wMl5engH;V?U{})VodA;Jhb%%f0BshsI z$;5=jh^QPBulTOvyu%`JhzG!hB??jmGP2g31SDosx&p7=d9&Wz#}Tc`dCm6~C_OTP z2DM))Y{B{`?U<#NSeq>tFn}Ei^W&MIlX#<^)bRr)KREnFC zl2`ma+axXruCtt}dFm^-N{d-l%Zt^z)i&zIoz~N-_#5D%wiJVr#xYJ2!pws*WKE^I zyAXU58?Y+jnr_{7^dHW=J0c2+uD+;rQ4X1DST`nhziuI^(k^5VpAb;Tm7gXCt3j`W zNa!)C@tho^;Vkr3Mk=WXfIVkUVmexYZ|cQBZi%6iNF1R-_tc@gX;d|tierFH&2-PF zF>D(PGz%q#m5_>q0DXWt4sma}dE^RCs+&b^tCo^sG@Awse}pYN^cI#D6LybA>a7SC zrg7b_uBe1xHEw3S^X(S2lAw@elteyJnJ@@PbcEE31_ks!rh+KiQeHN_^6l;<=5CfG zmfV9sK`t?eGX5-%M{crXC;WK_ zA>RIx#U7DD=|C(3lKS*M4xHb2Q~nECocnzjoKk93PNwAj&4i%yQ#&-Xp_NGtP31&| zZ+iM;71gpQCyq}?S^8Wu@ZBK zWH0kRU}K(yB4FQF_OSquQLSbWugQMaM8Iom3rsL6>{`FFQzk2ZNCnwFU09qK!h4*w zn2r@q#Kqz^9CGwvSencLiJRq{-uVMOPM{lD??w4 zc4hcLLoe338J)MhaH;R;^(ck)zEtAh=v`Omxq~&Q6v=wUzSKi@EcLQ-fQl{-bsy0vq z{UHC(#N5v~d3PU@_}U)EoQH}a8UD9}&Q(HQKQW^2nN8busbS868Wo%bqdjwMM4ZIE zX8vgSB6rLuM9@doR;MvZ@&oX!x^B`PrtMS(0rrluD!UVuo2ZIxPbMh?Sgh2K#8~B% zfVft%uxHiaosrwYzX`CnMplEuq4oBE~>JrbvmR1HZo zeV>Sy)YRF^oMKoODq+D-@6YX7E1Q#8D)tj2gXddJPVDk+Ulg~hI*Vr9K(!6)nh8uz zm*kwIW<577b*d?+kz(qoZ&?geH8xBg1-pnk6)%R=dUGv*=NEIuO^3}Bzjf_$p|>Q2v%1zuaNnjO7^o08FV0vW1e# z4Ddm-pu|V_1XKYdiX=E?bD>Ll+Byj6Bn!mXCLYxW_-2*U44Gr1xA+bm5W?Ds%|f@$ z36A~R2-Covp2)x7g=cXr8Acikw$q4w6ft(7$PE~x??;+nC1d=~6w-5S2S9-^DoF?O zp|XL3i4vPDDiXp|Nts#btLzcx1`Ba*S&%%{Zn>QXmfN9SUVrX}cX<4zt0xr!p!2gMBnk&Vgyw_e~zV#L5b zq(l1mOmxm3ve7M)|F}`=%8N?HJIU4jt1XD*B$b4^ULhtPq*X|S0Mle8!S==gFAL{U zC5x%AzS-;?G#s(S%c=lM(Y=YLedn)Xz=r!$piriYyF)*g?l~6-erNIEK9bT6KcxkdUZc-SI4xdccg6*jzk@ zbdECZSLry;%2sY!n0@PcBoeoNnDK;F&SwrvKH=h)x-Jl$d3W7gn`6zq29A1*<8i7s zmZIKm;WsuDL%E1=<#^miG5ff<4IqhBiXxJ#jvvyOW5XGXSfDw@o>bzwxu=3+jzjn5qyE@X2qf5rG( z1sa*40Db8zn-UVvt^0}N%&L7^ZKoDGSCcwPv^wX)VMSoCP^mpRJ_@$PeB89caCMGsz6S1|&1<*KLReayQL1m6~00l4NJqO=i^Gd_mxwL43ps2qi>k>)J^VirgF>N*V?} zRJL5dZ%fwsBvV+viHRH%DKcsBnh?;PGE#&#k*Tp@%4wev#h5hIyw^odTDcTRrFW}a zpd{8bRKx{w#{>j`l@nEyJTg^vj~GwRGLml+mi+wT>axgR%WCtW$1CtoemzIb2z|rT zq0}7>g26o%-o)AE$VX*8(l>zc+w-e=$FA_AuRW#8<;6I24|86Sb8_NnfeyN_Ze5hK zhHp&3OURh>HI^blm`5nNsz*C0sHY3`kcA}K0I~=;U#dDSm%M@oQ4tCAxCfczY0R`MUY^BU)L;2iZ3w;APQbE=bltAYsREM`XiWG>9br|?{ zgeNvrB8|Cl=A|;wzLlkv52nKFltLb1vpc)tnCS(G?csQ$dSp36J!>p<1aeVuw=GP0 zcTYBVv9efzniEg46Udahcp}d(%G*XuZimTSL*aY?gKM+ZZZ#EgoLKxEaY7rN^Z@F( zdPz}?fm)yGJB~~+si*ux!!Zqw({d)TAQi2t)`yOAWEPF}f73^6BlWc}!YXIa1eAJD%{CZ2y~UQzcA+`%c8 zcYo--ovY+M|8mSkHaD3rWflz^p{wK)V&!qPXEs4g&=5mB1otLnN|JV(U8m7zPyL9- zACfDE&33Kf$dQmuD%&HRMJEK9CRb9iV0bZMF)<;zw=|do$d*A*pvVd4% z2G_iSM}JB7r}Y+*yG+Y=lEOtKo4A}!ha{Hs2aZ2N&z>aN-+k0d%4>Ht$uSTM5vSoe zAhl4=L5%{}w=}bRxY%E7lXoN%vVwtXE+o`|6`V^L2zOW2XV}L3kJH~1@deyoqPh2H z?iBtJ@=I&?7&&dE043*+$s>K0xq<(+xlkW^XB^Cv-J8Qj_|;ao_Y?@HjLCg z4hHMuRja8y6N-OH+Bf93?s9I*T?uMO=`02jd-JA>-ZIu|3*Wh!)4qF4#6&60D!Dgs zyl5O_pX9>iNNhZ+F^ZYWXs#HIN}u6FST7#Q1tK>G%|tkw;5k7fIWg<=_$Bt4O6@Bg_ zYWu9O*CjrBH4FJHk^;Y!G%TwJ3QTc0!vT7g6i95oXG)-igX}b}TzA?LpOM>0-)UV} z(c7~j29whp2Z1w-(@(zVhNylrhEDTtV&nRGH6p%Ry_KI`qE6YJ2kvL}Yp2>2) zr%swI<@S(IhO_Y=5^-`S6R`1xgxpsPJ%vHmMyWX5$+12l4`8ev*XD%h4G8JmW32SS zs&=hS%p?2WERIPi_HjgSZ2C@7OrkB zAZQ>*L2l&A(5M!)jbkyQ9&Gh?f3Mp{&r^P&Hd+gE)fKgxx(D01Xt9vgmv$pL3e7`Q znS~0w;;DN|_LM6Yfy=nz@VWpAf6rnd2U*B+!vKeOI$@SR1~MxoMV8^hT6`!F@bdk| zMLiiAeG#(3?ihHP@jWqxQX_5J(c<*rzb}x@?!CE*W`y;kNtPs4b*9)G#)M>t(RoP4 z=^Nwy>=mItG-YjmD4;zJsqlv;%;;&|u}$o6lq?pk!qtj}@<+zRA*m#3G5GI`w9{A( zom`(C-<+YdzulZ&4$j|QqVpfo<+~en_P6uF%>XI2>MsSbj+5&E9u5|4q#p%=sMfzE zx~&#p)l77KO|*xh)(61%&&EU><@t*FZ`G%i5lXL0?a27wGZIshIkZ-1KlW3~PtIQc z6pe2^>`ln+go<03MAcNM^XU&=IS&4-4(s)uUUy_swag#naP#Fig-CTbRaw53)dy!6 zXD2sE&x%{4@VwfU6046PZNeVnv+1h|!O`t7xZ@J#U9>Mnirm}(D^oNk*xvaRPPs@S4FX`vHMwCdFn{y*Pezc2O-TkdF3tgOhx# z{pmll)oZE)OPc-Z`2A03D;qtLgN`OtAZO5b(6v^86Zbo+j}az}6J>#s{3FqnP3}x{ zo271eC*fPltJ^|WGH#-7TC;(HA!$BgzC-gL(7%-GEcJ2?NNV7&GH=vyc&B5CUR|Bv zT$|G=;_sqM=crO=;sVvku{YUw*15Xw;-R$rThQ*;z-EZ!DGt*%fh<-j_$f=lvIgc9 zV<{dJtTS9##$}Dub@ZN-(JaWsqGjiX3NuZn91!S4vhPb^-&a5FAu=bS>Jys@2mwp- zf~L$UNRM70xs*!uKFJF)ib*0Q<0vAbJ?>IFEi4IOnUK9zN4|n^V8X_j?2F3CVuuX8 zQysNYH3BIt%uAC((rt)_$=qYZJK|Xb0hF)zywAriPMtfuSNxyuAWtC0)me3$XRj_mCXq0Tx{j|osJjnBTj;mQ;3?pSvl_&KI4)Zr5qgObQH3;Nzi1q-S8cD zP(yE(mD@xMX;SUX9z_nn854zK~RhqshW35 zV7HUHPwIIB=A}E&Sr9+G+p^X}IxNedFt|0KsedX@!sD5k$hBw^A5=pyp5_Q7YrHgR zF4AGV%DoLvib)i(MUss%CXi6P0tIiP0JiJzw$Hcrs5p#$le2^GtB_mwO5*+7#N)Xx zqTs=8G#ZUYuhaQX<-KiW|LwMWz3-Zx?!iH~anS8HzH79at%KHgsPQa4&O9?NaQt24 z$!%pj_l-QCKJEWdF&8r^12DwTWZcMESUJ}r1e)EUeMCdB?<#hn4aIgMrEe>NKmrqX zQ~6>4^XJN^Pc@yH6IF#*pEv7jF4m#Bx*PXY)5X6}M?RqbYbi9)FeyPt=zHT7re<>8 zoxJJlvJyf?fL}iliiANz-$kRmzTQA=^ZP%bV{O{W`0uAeK}=9bz_8B|kWeF^6zjjX z!?T>Gbz7&3>geBK?*BWU1`bUmDHF)*y>8H^A?&|KVd8#pE;zWF`qVG{v?X*&ptU4GK*OS_7)%E~Y zJsbp*M%5GM69|qbv5Aqc7K4B@_G*4=>TXwecMW0fTp+(C1gJ`7uxg2u%omG!-8j!B zWl9I>wQ|c%Lo;KW|D79oxqkfo;xR+$tdyn8(p-m-UY;6j{V_jLO5v1E`81?zdYx34 zE*u@`Qb58q?aEuzqf$*%yolZjjO>y~ugi1;4;vv9y0q>HnHZ$P5z-&m86ned5p7do ziZ={ZMfQpF*_7z(Fo)`rJ?EB6rZe?GM6w&tsQX(mTK+^Z>X&b_++eQn2*S zH3c&KF~uQiIMy7JhU0{+me*&g_$*9v8Jo0dmDSXYQg@_;QEE~YGs-2bQg=VaD%WF{ z3A?mCC}fwVqn2Zs`6axZi7w$N=f$I1Iz?A=l!{$17epW);d{A@Pq4~CudW>u$(qPC zmz`~C?vq9)&wa}N{?bzS*Ym8Y|7qdtQR?3+{jb$&=k&j3qqo)nUgA;uUsiO=rU}pv zZ#3j27Q}z32Ip!Ua`~lWrPX!c{R%>X)Dmr|b3US4g+_n+w1yN1G28A3*p4-iaS!=o zf_?hZjY0sA$yE6gO+w;^UBs|ZGVA%0_nn;LZ3hPQ!iE7f1}@KOxQX#M5Hw3Y-J-%160+QMVdT765zf9 zU^0K`l~)uOUR`5j1H0@}LfE33fOmW7`#F#=>F}NH<=pLAQNy1?)>~u+5T_R5IlMFU%me~ zdk5M5ztQb9w)_7}JkPlQn<=z>_t(jNh=mYj(FZJ<)sR%j|dvc{svD8c;z^G6d}VNfM&Vvzy!F)3@iBsW;ch zzb@M>vvzGeNZ-g_Y15-TX{TI9h3DTWOIu%SpWN*Jw3`20>>kVhSMvX6vzz7rokn-d z|6k(yYR~`7w0q#`U-`oRQipCu+u+xF4DqUtoDa_%J~003PJQ&R~|f`_kXvV z|2MjgR+|4e4?3OBmjA!RW95IHr*}lhAob~d$yV@JIbGLd-Sf!Y3N^)1k<9O7f%~O) z3t3$^U!O%v=$b`!KIx->*DOnuEHtE{FXg{ZRxVl#w$JWE1zrC2AozbArnhwc>zfNs zo@fDBvHshQoc`ZzZ1w+_dF=YvW4$5WU#>F^ak=`RQMGj)P_(VCU*gy$+b~9eD_K-6 zX4fttYYGNZmb;!?c0F4Sbg4DL(Y~H$SXk3?@L)@UYj5cG4xeH>Fu&jaa{2Dm{u=y! zaQpV%>HCYbin1;sbb2|s{pIZJ>h|*Z?b+b$`or0EA5~dcmEYdo$iGLU>axL0l8c-1 z_}(NB4|Vcza3erbOhYk3)j!Sm{xq*9uppVNrlpi;PtH%TOTO~C2VZxy>U{xTh55~0 zZ^0avMM&lf)t$y2UH)Ns^p@c!n5gnm4~KKu3f;=&H1d2##h{mq+q?=Mep2k+lp zp4|+zaVHBkYp$?s%Y|&Fgl@LnBm)Ep=ZUpQE?~Wui&nC`^RG60Y3N_X;#GT~$xBLR zkFj(IynZ)Mnk@ycK`)r>T@}It*=egy-gKj%7|84cZ7kQph{?oJPLGquj^B*q% zIVVTYEyrzg|IO{A1t86&Fc)wwEoAdH0^|=@m$%37Z+?cI_EjR}{3Rt5KDDh~RJf_G zFT&Dj-U*h89fi`R*{|Jp3dP%8Gp|izkmS``5S;D2v{559Kfcin1S9sPgu-{1)k?B9&BB=0?e<^|H@R#tyjS$!=-jTF@% ztq)gVrVoffzr25Qb~`vbxjwsr)QOOpkwfx2bu&ur5$9HRlRX9QHZ<6Qu*U`XOvTu{ zqv5z-`ISNlsJ$9C{oPy({AYo1aE}+fau>3DlN}pJk%}XoLHcC4oK3AmAKb1g5(je| zuZix~dG$aL2H&iJV0EJn4rVdY3ss-j+zf7=p6h&eH-p>3yOUq!@BKNB_v2YubZ5I? z=ghm)bLJMPtKIMy>z^6L~=*I zZQ$&0H`m9v$Jaj@!W1g54l?&&NERu;X7u_#se=j22 zR^?t_}QT)~Um{rWVQrSiYJyZ5>E|8Bc?koEs-w6^iTFY;LVUyU_-Wp2`u z5{q0~+FNcnqXZxts_V(j1%T^o1$tI#z>a_S5OZ>c#binDh#VACr;6%exld~r>cUg& zi&$aKEj05e)F@Q)SJWukQ%44>w5ip`!NEbbLIs&7y2wh`#hSX@2K*N*CL&k;DmY?T z!&^}U)Gmt_r1|Y|n*254pUPr2)t-`aA2$q6vN|PS&!f-?+HmQ&%6Kg~pB=bW40pv` zQviDq8?xtFR^hITIAiNkT9w+rInVkY=TPN2WEy#}lS82?wNkxl-nwE^Ixut<*2IIAJJ_vgmbhny}&~8G?3FAoc17YTg_O(b48dCc^(O2-w7=Ayyvm1f zoH+D-k!79Gb0g~-jacB5c=O9!!F_>^DX&CGEH<^8od#5{%HJ_<{{;Y!6-bjrIK1v(J7PDO^g< z1n4S?CMBzhIiOku;n9S3w1%f>errrzO>0MzE+lreI%K^-bzXzu5s6n4+(j-mkMkgk zDPDWIxty89<#g2rA4XU^*_LyL1oT5mo6P0{AnOo!m0q)qc1r4BO*&QXVU#oK-crIP zfFDXX1HJ&n3aah@fX>uCeEPmUt7N#hSx+$yQN(<8BQ71GSt!wQb4%nCU4ZYalkK9^ z3t&~Y`{EWJn(w~2^Le(EPNd;vns9on&sLV_y(Ygo8bjfUn2`dUp@8B*(j;eSj7^vB4&jz>yuv(NK{$Yb#=!o=n4zD{%j~Qeg z&+tsEq#&l}>m=jjSBYcucoq^`_V>un4C#2qOTV;=Ss^RXOG{Xp5NU5dVPL#w#1osaCYsVmk!RZj<1hz-d*=m^)J;5Lg!aE$8Rpq2DfjHPkuSOJnf@uI1&%YI)czI z=NA`)U(at&e(vkLI!fdHI@xq2f7whr67&qQgPrwa2Rmi4g9%w~&;E9D@&5Ge^z!WH z*LT;y3~tY_K6HwcfXqADG$0R(wRDbdzPVt_6$I;*Ivy93VntfnZT#fd5kL8@KRNl& z3oz#!OZ^DX3i+>f&}wAQ|GJIs`QM8?pk$rc3A?8y|h6S$IG zBQFc7zYB|{E|-^Oofm}_Aea?O%D)PWNSq)hB|%YzsN@QxSIQiQgIy(KmkZfBN;{hN z_nL~}r*8gsHr9lAP{R57`E#XKt5tABKS(uI3Xk(<<&K7aUr&*@II2vEzvUz;32VRPB(-{|UNjxU#m5aG9k$Cq> z9Cnx8V`nkPL2v=J9ZVCW!R~H0s$(6P>L`90DFBr~YQF;0r21o5?rAZd>R#(vU!Kym z&}YV-^Gj&u7JDSYjuQ|sN;RBn*ZGy9pUV!`A>!xHHo6^@&L}{yw20wS&If+y^fx7a zXuH>qv|7OFD?EY%ryvW`UMb&S$|0+w>j1%ASWRi7t2kUF@tELYd*;O5t ztCV?JE4*&{0}iMUoW~M!8S%2a_7DqivY+hTs`uZ-&aF`0?%Uga`$hL{9ucqq;AJ|9 zi1F40YI`SM9vtU0Q4*K6{uxhBkcUh&#UK`ehZu!1(&Qp9}I(xYhp95``(aIr38 zH;af=Q8i+I)x5e?*Hk-W$0sa?*SkflDm@imj4PSP#{C0 zrI)ak&o_Wq|Ad6fQd2m6n007&Nanic@3Cttt>U|Zj;4Zwo^ zCX4{d5NxdgTPwiVYz440b!!ILngOJlYLSXpcY&D@QTTspovRl=BtD3*8YCaosBJ?c>*!N??IayOHwmX}xw?W}YHXpHAJQNqG z^Cg6^Rr~)Spx#q&09vvCcN*$(n2QG9``fmnT8UWyP5oHkTJyG-Z?o8b%WKr*^tB`5d^5OnL#bg*(ZU%TS4(ZK~Qv-v|45^=lT4( zqGh%9q%;n)&;~`dmbz$2Lw^_=_SXhc*_!VDzs9AS~!lYtp(>cZ8w)nvy8GP%N+f2} z+G{84bFl=Q?!kqX>NEr+#iffKr)3dS)|EZd9mAoIUg_Q$+^Uj@@8%?qsV`+q1I2xv z);bJ{Upwg;YmlDNd|3j+kp{97d$|_tBukZ4t|zsm_WJp=7VLj6=8`2MzCpG?w6|Fc zll)+b5NAJ*12)7#NttT`nHB4o_UlTaJsJ3?3hU1&CBD2+otftw5vHG$KF=jS*Bl=x znAbPJeXq$#=MOG$F_iDs(tsP$)wESy`xhGe4l!SqEIq|*Jr;_XNo`bloYav$BTv>- z3cR}(oNWRsO=);dqJVmsr)oOyo$5_p34biEl)QH;wRI&TV(K~crK1d#$)0%Qb4U$SY#bw z3cK=_Oj*3xWN)Sb@i84*1D8+#NqJq@eahs28jhu&`~vyknvH{Y?)<;i+}i(NyBr>^-|IfD{kABAYhfMDa#smMWD6XP036p%^G6q;ef?qG`;GQ z6PH~16h67HuhAIy4O!S*3m>5n4l_DuWBa-Jy!BvRRYN6t1Ai# zNf8LHuy#?+Hy@Jw!Gk2gA@=S_=tIhIJ)d%+5k>P$%WaMXS7pZFioTEP=7*N_c3nX+ z)j+BjHJ~^QGUPV@K7!7=&M5m;C$o8m1hT9>h;;#EJzB0}GNK=sK+NQ}Y)iDVxv{^{^o4oXiWJi9l{snSpoGw?yY7B>SlV&daUK1 z*F?Z;fAR}_GG0m05CtimkQjiQj7V*LCR0FpbJHi5J(D=f{=0-%BsTYQ%oKsFTpSaZ z^ahyQ5eaq$HQbpyEI{2VX+Gd~7$OQ5U7O^rw`|KVvecTxjI8$HmKf`YmY58t<*9yw#LnR8ziJ z^Nt&BSzEI8>+I=;DV=r}E|<3Sq&8i%zb*WHZwo}Mf}#H=1g@{_DU<)S6V9;^*qcmA zC{E=TKp!Lit<3+`JIKcWwOYOH{m(D*fJk?#1{)=#jgsNsgaEi?Hho$7Z)wk$3xF%D zt|I}i1fq_iReklhsY;E-VLdr*=@2}Zm?i}>FQj!Z^hPPk?6Mr2Z$U6yI&5X)+SBE) zjEM5>N@E+6tX_m3FK{AZ7I|i#>-GL`#H~lb#zmYJ`~MXSsJD35{9ny>ubYkkIp{PG zw)_7}JP`l?CKcuH>`Q9+^;!E`5&L@HL{PE%ECKhasrkUr`&8Y{1mWjFCN}3sh2y74 zxK3bxs=^lv(a#S`K3G3rX8o}Jl-QskJR+1oMX7vHf3f6|N4r4w_%Z?fMN?%P%3ngC zZBTz&>WG*>a4s16ln(KBz9taBYg;hcL4c0i8Hgai?ZdELT<>Sh~wfSS5nhKk*-oOg+rfT{J27rm@@U&vtV__7>k z#`DFo&7fMXmLR9|GZsu~$p%d7H~X3VR#c*Dqky4o@`d-&KWuc@KQj}&1QuBW>dZh| z50pl$whW}fZVx5UmkAzuQYq*PxcWO|3oa;ELxN>J-s^&8(!mL4lv4!oPCVsynwAX3m&FG zc1&_`(zKM+Uyh9%fm6Vd?9R9x%D<7`+>%|a*;>aRY6*faEpk{oAJ;|Ih4%=2A2EMi zQDD89L0~>S*m0WM8@29261594Q;!jZ8x;- zhW2%AXxshl54@jk{Jbaol%4-XB<7S05{eHjm`$H_1cEIq-OH>Pt_ zRsEf<<#Ad;C?*2au#bM75HV4O)GLh(!XrUq@eN4On)2TlB>%T@23KTC;RiOsg*9Sz9s%^oo9?iXh z9G-{u8meT@8d5Q5$@feTK*=ymZi*^S`8ZA zB%P9rQT6{+CnT8G`DEYZ`K>7f_5Z0>QT2|Hs3^bRa+uM)p1$5EVZVNDxJa*Ymo6z;EV#;QrPysDkN_XGn((|w=mzpO9A+O1?NYuf6l&ET{ zTt}~y{4=uX9a%U&?eM;2LaMXK`V`-h^H98tFByxfPJ6o!oV41K(i?TAtz6@1Emf!J zSBAn|PH!*m`VVJURX!b73yRjK%+Hy_N@tUvr*%FZo(#@6b=6U-ugP&+H5~EHp&X9* zbD_LJRk2k6WBw`S@eF4Eo0&f*kG~3hh5py+9c1G_8{N(}|Idp&px#By_w8U0VX!x% z0_Nw?m(>Z2CiPM!v82K}T4PDo;*idg!mA=Vi>f_1fU|Ivo+}_g$$?26z*WBSZ^8fn ziuowP8)>R-!!-XW3eUHpDwsvWQzrvC!+wF(=FPZZ(+k&=7(HVynv#|avVP>d-CH55 z<_}kkeE<>8v6nwZCYFqC)4x-6EP7ivL9yFidH9JjXP^!+>a?H1}1K z@>j5dh-o-ZD_Ks_Y}ViPQNSPHhd7Hw>g6glQiWF|lC!SI(Th`UO z%fDO9>PuREj>Di*`9G#CreXnN;Pc-9-)=Xv`9BXj&29Yei#$sH*MkjXzY)pb1^9(! zeixM$(tft+T5^86(t09ynmijjPSJ(b>482p$hsh{eNd8uk~uF)xA3~W-s&?3?oEh4 z3yN<0xN>>WH=!12gw+z->H}MS;6?QTFbwCGg)&b&*ITL$N>+$sLZ(qh3P~TNqzhzj zX^`J8*gc8O#0RM>#Q+q@G*6JK3*lZ&qvSG2r%~sd+ukKZ?iaZBqxvi{(f>(Lsr)zh zUMl~4r_pWY^S^K7zhC4j^#3^tFr9A338*N4@{4)_ovd;LI$7Tj2#S_C*L*n1`O_dY z2XbB(qNctUhXWDAslZ@}9vD zDDmofx+{>CZikEoYxn>qU>@iO^bPy*z(W5fB?|~2L2oBCRNoh`DYd` zpFx+5SgwDiORXi1E5bjQ(*_`dXJW!)`g?Jv?N6T)=l2sujB6HTx5h54P`edEN+f%yrH2_!?ETb z_SctWB383slBI3C+_%g9g_k=E$Tbk0JL@+0w+xQ&UEG1!1D>W8JNrdy_u>6F-oGa}P? zZf2yvm(Gxa_VaV4pwLSAx!IEja>Zg{DVBkyGPA5b&a!lFwE5gK+$2Y;)J%}{&8k0R zEXX}xn4Hro2R9r<6WmG-Nl4taQT^%q>O`%8-Q2fib>zR@oRojM7?gc_e`;$b!#ct= zK(EX&UNV6&0zW~dxF;;ySAXKWRR`8?YTQ15P82<-y;6nE&e$Ri?2BaBcA5M(vv!6q z&zw=aNGsYDz1F{qcKu_z2*)H8*JMezLMHT54ydJSiiEzCX*f z;q5s~*G(|S2?SJJrZ93|s*H$ksedDTu}V6^sMw@a!m5|BT!*ikNibntKqnMj`!hAU zOA4zJI;Yt3Ihpy9vJ0kXr8=2_QZ+Qh-W>^jGl$*sb?4jC`D>@CChwBjs&~`!*=l)r zf%LF+?k!{bMUzMh0LxmGq6SC_D(72L@t)A}Bwe+M>gsJajOueLNy01gTj{o*56M%R z?vk0Hf2Pw)7EFzT__-pioFC4gUs^leKF|G>*?&0k;wPkhNIk3kf7_i-#{Sc5w72>H zUgQD&bpV6C2@e1@ZN97zfS$Tby#SIj>-YgArNtuBEy}<0-;2{bB;QwMbkHRqoW#M< zebb?23NG9{(SMDq?;`x$jHH^;H&r-i0YI6mM`A%o)WgPzlphH4B1))A_Yp@tJo=Vs*XV|8R2wX1d8-d*#qeimv03t5C0~X(g3h2k^s= zHNTY4gC_pg5qEp?`C=!ZX+M8Sx1TZ3FT+;>7v?tfqVJK(qGWG#bo#Fik&#Y8w5R^e zQbV2OWipIH$vO#Tm$ElEsO?Z?S5@VrmN!K#LB!VZqpmv%?#G^QX`vF1JRD#jjNALm*^mU5n z=lPX$47mRTGVc*sUH6mU=U2#Qgo7((Oo9bsAslW;%s0p2&RjD|N36JJCVvV&Hz-q| ztY0x7={YpSa!IpL>&p5HmsdK0J|1!sDqWh2UDI}MB7W(NV8-aJrS8nEHdwmj?GVCU zZ%Trj#UME+-7Q#|%e+V;=GUFFYxm8fx|_xI*9i$zh*A#WdwSd==I@~qi($h7=fd-= zJ;a$|<%x$dzb8SEp73%uxojkxBX22+D_Dv_ zZXj5Mj)OoCa1mn2#ms1ItDG_fi;jb!>hR~Z@ns3_1$uT8KI$$<0qOB9tQA%on3&&& zIYu*=uf!hX+})Ia)`9=Xw1-w^OQ$|`1MJ<*hg4idYf5}joc)8I6BXP$(Om8bo;!_v*P?mM`k|l7-)t6SL>jeJ^wlA zHhbIipO<)2=RbP1H+T+I9@+b%4q>UeyuvXoTXsDMv0Sa0U~lD*8+J$1DIDQSIrlWm zkX^{4Hhs)Pj;1V`pDP7S))b~2{Dv%IW^#Wuma(m+=|8|z>GS7`IEr|Z zcgZ2dH?f5$=x(>~?e_f@=HM+_v4h9w;!QiluDIXt3m6g0j!`p)BprL0Y#e~U!*3ib z-s-g+F@FFjCWUKy=|S`Q$IVYU&R)Nji23UdLgD<_G(OKiGjbdt8TuFFp7IG&3n$M2 z4p9a>*H6bz)-^e*nXyYa>ly?2pvk+E18=lJdn6SK5|6M)u9*L{L;8o#?)7nvGN>)v zo|2*d0-Kb4avK#|cdqJJX4^t5w+Fj*!D`;b`9Tk@f0C$k*UyvdC~k}@`t*avBB<-` z`~M*)9Oe3da%;>}4FD_j|8}pH&Hs1MJlNj<^dgVa@xhUJildEK{?*L+3a$@$+C)kK|X)3#FDqsX~}J(sjqG*mb&x_!jp@*hXRygI%V{P(-W0F11ReL z&LqHMkx&$bF4fEx?C^f|E$p8^SCo9I^V7d&e!=Cd*%EHI&!`y6|f5v1?xrmFe8_CV{6jS>a zPQo4Gm?!B6KSqVzN&PME;(rZRJ=;F3(_P2$f?`@&a`qoYP!B46D2ZHM$ z#1Wsc=k@<>cN#hWpKfn!|9g=K1Ufa?{Qqa~-@n_&l>~A8`*Z#Z9Dbd-RyLB~_Pw6X z-gP_fw6_!6Ydh(k$z*b95|VgL5exyzaVPoTKL=0Z#fKi2leBnFcVrSM6beA0s!*sB zgS`-W&w%*I@|}T8gFNSyZ6&`swHoCvv&QstmPOx(lB*PkRra}e2A}v5L@0}ND@kf4 zNj;W7kz>3vcU{JZ%W(D;A9+~&n)`W%PX^1AF5HUP?-FkZ8(yH7tK9qV%JWn`%6?@5 z9W~dRqOMJ=uax&^L~paQKwXK%x`r}8EPU<=Y&!PU9r%69mC9LCs@F!2Ts+Z!QHdTKFV!IPp9Xq_{RLBop?P@2cjHobgNT8qgqx z*?c+aCBW6o|8nSKt>u03CyRZvu}Cn?@k7rvmW;l)Jb2MeDDx1G=t^ZvJ&-$^`9{hAJA>0F#7j2lS>LxT6_?d5EWf zw&_yY#|JSPNJ`}hlR*LTr<8LX+hCBQaeNk%WCFVvuPRIiE{xJ@z`IjnFwj=_|GyiItT=&M{M&u9gsLYUO`1$PXL; zVS8tDYtxDUu)C7~m-4ic|HU*|umaEpYyEMWWHcrVOl;h_EUe6g)qOyhui2 zasM`tLjtcz5fV7KXJa+aFeT6=!7vUgtGt0^h+;mtcL|AxXkxAA6b)X(31p!If+XuB z<7*g25aTx}=5(5(Cr4UMld?w(gQ@i4@D>6*E+Dvt_ZYy>bU1Hd9~DsMlH?s>IZE;P zhL`hXD3xhjjn!$aM`dRA=N429(^Aj;DQtYrjnq18*P>Q__C|#^)~-cac-H15i=_;Q zxo)*-)~z&u^K_Zdf`L}A3W*0Y)d&>)wWZ89B^1L?(G*kmec4uaIzK+!y zK(sD8-ft3_au+rIU)Ad}EQ@bCsI;jj??HumxGJ`CICs8OT_~V3LFP-ADv^5yGgyQM zZk`w`v6)thOAj@@t|6v>cQc^-i};(HrZurKR<|Vz%+!+FQw{LyZT%F{UbvNvM(iV3PorLO&}rE(G`^^)UW)@GP|uVtt=7zscKoFJ zq{mDe9aCx4N@!f|D=%k*CeBg-T!^vOsV(yQIiVL)4bo?HX}$@QjKGX?C-6s-#puq% zeEc$4^7)u*PshRw&xaCDvOx;Z9Il`V=#B{9mOW%Bh8p$)`G$#CHf+u|3ni`Gv{PFu z7dCvQbi63bOfkbQxLyKE#iU}UVV-!-&*DtoreiZWOZD+jGpAUMjOEP$NRko6QJBK` zCTPTf?$JkiP9eLWeW2RoF=3Id@w_+)Fg=Xwc26M@)-r9iYQ&WVT&jDz&N$m{T1urJ zxKg8?4Yb5Jbd)-eo;Wx5m91FHV{Jog$tWB^d7SJOO^5R27FAfL`eI#XL6#HRabScV>xTB^%=QX-wam;eE1Xx zI{v)^<_J^q>E3uv!ht>l#$tUv&*lA8;gOX`mP@0P2F2XE6O7mfOHXeaJ`=*zqtERp3NusN>j(2h0 zNv}uy|4EK|+l+-g+f`gfT!vIkhgI-u7rdmcp0M&>)ts02Ywd0=u4H@a2<@A%IH5Q5 zVoHl<-;~`&^hlXuYOE_t%vHR~BlK}xRf(EV86I$AVC*}R96-e_NvTDsD7|(ZUu%u{ z)fIn`4S(+dz{9YB@kjCbV=BLU&`pyYwx;MrqwDHzmVDBZR&@E;BsbHdX>bg$!pD&* z)wM%gnGIha#CJ4TYQz)+$vX+qz=_85W&a$S09`X`qFjT1xF8 zpz1&%bPG#PYzIJ-$OBW@S7J<)R3cS~d=mBWZ0WIVysGn$l*+^$>SePX(y7ls;K>7}stiMt$k?E;WRC6}6Jlf}L)Erv}2v!BM{{8U|4xHSlrDbLMd&`%akyK2zs=#$mZO*LW!q!`1%pqEb47ht{AoVrxx>psO@ra>v^5N}Q~*)2C? zla>UDZb_wbk!j(h=yMB&pz^7A3ynAkyrbPuqNg)$V>bv9ObR~ZG}^F}5|5Kb(|XrE zae4}PPX{zpx}&n5Gn_E@E>wsdAOci9a8?w(IPWK4);w z`(iLdU&Qr`h2#5W<+S;ie`@_dbA;0Q-9H=Se{AmA@qhOZ4p#o3OL@Mu@c-n~U@7;% zcvH^(FWluHxMWaw|4UBU`+SiXz%;ZT#T)d3kHCXo0ONi1R~A&A4u;`*V|;l)k0Rbq z4H(gtS)qA4)zX{D^u6_fV#c$~ucm$?FgH0gi4PW;Esy}kXF{+@y>qTYzT9$3x=PCXEuv*pgq2d+bGPygN%6W(^}6Aib!ChGJ_ z({wl>sUmqx+mgPh5>^D^>$96jN>CJ-G9C4N0*fMvsdOlz=&!AtaOMyg$~M!ltpYU= z7b;8k%2OfPKJMw>XsCb)Q;3ELc~PJdBttmH-SZq4A)UH@IkGy7MVN;-Nt%$vm}tGS zasbvSNO_thS!Csjl0iU^$hjt`b(uG!+!5ET3%UL>moSAPhP^ZOwLuVEcPHw+!NVU; z09s&1fi{BSdd0F_NFeZsq|y@P!+)V0HsFUK%yTQ>7M+?bz&*b|cW8L&3cevf>ViB= z0YwlciBqn_C}!cM`6=qW%rrN0@{q6?K%!mg6Y$OV1{mHnj4yc9Bsp4Oy@s6)VVc7N z_Y_Q4UG6?pWWniFp`vz3?VaWjD{75G5)EHFk@H(jD@ky7=U)BG1qCQ2d5(yeCy8^JyuA+5hmnLE^_J}`@4N1(70q)1wV}Agy(r&OiP|W z1s#*vL&dWB8R$tBHoY%`ytI!0wa~?wH9i)vbRzxiBl3f4A5HQ{{lmhv>n|6=$b^bEjkV@mnoto+@{|0a5E}EbcD+OaSTwGK7FD8&Ar5rF=!JFk^)%>P4wnN(QWgkcFD6=o=%erwa;Al{Mi` z;>bm^+KOQPJm-dt&J#95PZ|`t`jOD@Lo6b**TOS|nh2}zSnlKR*xL$mURANvf?C|I zIW%qd=#Jz5VeB-E@l6+hrkCNr7mx5MB>Gmq;p^>g0nI4S|5P61d4VQL?75a8KUncM z4M*$(Qs_x20;ZOKTi)9}-M}wHxApi1vQ&5C&e`^jf@KcD?2y5|ArkHT9CJPMCtK_meFmrgqq=)yFW2Kis!^q4CKScCk3 zu(@f+|2o*;*<8v0%XpY%ukQ0KPUM#$A6Lp()3;Wz*GsjL<@NGS;=3w4tHfRsav?%` zS*Ap_K49&lWmhhwt80&199fZnj_}-_baVXW>b05QHbv-mod0t5njy{q0)Z~t2O#i@ z^#KS1wk4a9Iu*cPLf}YGHM8+d?7_b#STD0|DDPnSOm=3V1NO#RA3+Owk?SYnpAe83?KVPq*E?fEZ?^2ad-@0W*@` zKNppGH30%;>Aiqp0iY9E0C^7XhDkJ}Z$}7|^d8`_4+R8**ajY^C>wAJP&|2`_-<`( z*B&=A;}FuyOWgxO#gZxKWAmEwDV?IBo;{mav)lw*M?05SS!41YbFpfB(O>YabM?4S zgZ*cM((wphWnqqoh|G8Z+;slCxxHzh|L*Os{6ClSFrAx^G8Uu!00+SS1|HWoBqvMq-@Yj7D`Cs@WZ+wK=ZG_m~4W;4FqEhWBOCr30Yl*{}Vxo3gNn;zY7hQ-c_WaCB#n+ z1WTAfKUpcTSW*c3p8l&ti^n;nLr+DXft9{i^h40wylJK?>KjZyOwux?=dmOR=+fDh z6et@}@!?%qB;id8!TYE914uIdFDVi}1W4W-ql4hBM}{GxB1V`NFpTfTsKgQ!pCF1* z5>r8~PW6$fKZ&nS1vz=Gc`1nVlDt|L^SYIQ~C-n>#E1zl?`5 z_e)5|MTWs^bO$kE^6GENU`T)Gs2~`G7$<{_uTH{@8}}u5q^pj;%uzh+hM`}C!Y~>a z3AsP!jJ&7M!>KJs54t~GptxygXy37gZW3TEmyj7>=R_MOgJA$RL6D-m0Bmyeh@r%Y zcpSLA!=_G6%=^~%bzy#8%MNBQTzXFXKvqkzNDUtMdOh>ZjBY8Sm`ax0)w7{B~X8Y>aGUErjwB#z*X0D4Nj+~ zPKOMY{ZFvk0dK}cb|){AQCQr2dt<8Fyxf8iu24CxaTajREB59rq*J&IXQGJDIg*VD zg<4kdO(0MPye-Hz;xaE?9C|%IvUFMM7pAoW^k>IIs-zF3a*vsI9+(Z8H9VNS0P8GQ zm;SCyGVv888Syl04SK4pJ%%x+R{qlhna(2tHpzcG z2af!AaIiZ6Tgt-|%gRlidEd%Wr}E7r1iF?HahtQ*(H?NF@%3XjeSG$s}fN?u$KF&>W~2EiCZDKZ8f%llm4JLND3 zs*`3sCnd2O3P6Tz3`(K(Ii(%PLtntO#26>pfNPgRN>y5>f_{`@MB!(UYiP^^kXbTE zSx{hj+qu4V| z&F?ibdF8rgsMr-4cPG}Q#O55MBhO|R%Dg&N>uDg#QmH4*CM+on1rPzPk_=FJi7f)= zzFABl%Ob2@7SVB30@muV%YItPe=<&41|P0@{h zFgeib&QfJTthYU{JZJ)IBNNI!q)H?-A-0#uB;19Fh6WNdh=)F8Rw81Zh-eP`BZ-Mv z=UopXD#{ibBt=|?Fq_V@UT+n*g+^r^tuyA zx##_$kW^b?dKcbfc@EAvWB>yuO@*|@J4QD@my>s z@ni~|&A98+;9V2feMz{RDWj&Md38#vCEG1 z|3|PONuT+EZ+tBE+Xu4$?r!ewI`-dH{+H!E+^k!UHdtIAs|E98@}WHxF9iBrp;Fy&-td z8v5{@`A`lJ5myP6{^hh^bCEz8|Ax%aS4%@l=%LRhJtb{nMv8lO3Bn|Dg^7HPmZBIk z$HQScmo5BsHF8Kuez>s_@XDQ9LwXzJZItO~P8m@!eV|)h*7j_Q6&qm<4a+zHl@wU7tlbH!rrydr z^VfO&@;?=$Ha@b`F<}TINjkG3sLB4bw`<4$+1lJ+$^T1vs`XiR?_1Yu4Y79!(~;Dj zsbG7otG~aMAA7QpTlW}c%ylmKUpu{j^mYSF2J9U(VgATUb*O}wQIhf0lQI14D;$tw z4B1S^JyZ-fMoIROw)}BoYUSk_Dut-?_Kj!YD9_V-5P|}x;b#~FQCA!sTlbEPj+OZm z|JRGBI544C^IJ;>#&9&D07rRPK(hgT2s(CO%rt=RW^1JhOg=OEiJNKuT~^5#YD=XE zD2h-afr|`%G|sq7Z4bQ72Spe|a9xby+0hlaIzD=R0?x03Hhrl$;5BbVEe1bUG)fad z5K4Qku=_do%sT$hv$oD>`~Uy7@c-Mg{r|T1cQ;q(ze{oWL6Q6WpA6fQWNP7NBUHMPPqN#45TP_nA)D z4WyyhZ}sIk%G|^A;92G`)}8ROsd6Ce`HxFpuT(q^%?wd$?0Ol`#p^5KKX%Qme}fZ$^= zOTUFJ6=Hq;wC<^GaI_~}&l;?)-Bt;Fx#7dJ5@(nfzO{->I|bv1zKi zU^3$Lz?(6a#ukbg#hKY4!VH9IJ`A(*2o_1ir*0HtsJmyJ66Tm9Z61H?{;kKZgVWwI zlOSQCpuy8gSqt|>KNQ+NlDSjin5Bf^25QbQDZWxT2{Df^aC2Xpv3V4`Dd!CPU9mj) z!q-@<_$?*$Ij8(%?_{fImZw(!Lu489-`2swmLvb|tn~k-JZ(4&od%|M-mt|EVaOs; z_NJ*6jWI!^DJ%66B2%|?7ZzEP4X~=_@a_hR$o`d_pPitn#QbdC@IpqC=}p^bxJ_e{ zF13yELi0B!=~>$tFEoE+U9!-a}@3HB%oI3S?Ki81fR0Z&CvZR z;{Q#B^QZW5Z+B;VgJH~i;)EL4U&J8^Z$fM+fEmI#ovy8aVw{dp3}3_v4sTL8bK5y8 z$ZrS}yLqj-z=f)x3RG6EulKL`CbH|%cZXKTEef~ppPHt3!V~`R1qg~eYs1jLp}-^z zN>9YiEh|2ncJggZZG=)-cwRX-z?=rGI9(>b_cXFsK!TUjj{x+V#_f= z0VZ*vRCYD(Rr~y^LBJ-dR<4}1c1byY=o_p@t z%JI`j!839^CFJF~Np=ZVCu0pEk=~64QrcykiD}oUCZ}DpnxIC>8h@##Aopx1;#&`6 z;mT=(|KV`>fNl?gWb_?9w!S$6m7)}Hth7K;47yKo*KJVUUF?__T<7Rvk(M{(*&GSv ziVMV)3Do3SXy;hN({^s-8TbRLJGG-Rp?f0pwT{R*Ou;$@-;sANS^UNf5fNfJzqhVH z>50*}&>%=q**U$Cy*#S}{4#^Dh3j3?M5?!Nw zA&Po((Kc5#stsFJ;R{(*p?_Ew;MqA{B@OkdtkJQVl14?Hnyu(*)V65aNL8cquw_L` zPNSltZ@uxjNj^7thAwZ*9az@^oSqb~=P<>&toA!l~NoNpi8p;g4%X6)~m_;Ru_E!&@b`cj3t~rkY8tgxt+dH=X|6p?f_dp2075{TNPct9l`Hn_m-cu8z zysx%4(R={q@5-%YB6F}&7BW%Cjw*4{ikmF`sayX{o_hmHkwkMH12(Pyo!uQL{_ox@ z{@YTX=Jh`k6M#<#ZRztDXVM!*`?Es!D6fJ)kx_yuS8&ofvt|>tQ9=|#ht)!yqa-7& zQkThchd>~^;v{XK>h*sUMz`a9<0H<)y9^d{Fo34>|E+!J{_p1AD*nS#o)&tD7=Jz= z78v5tJn`k=?Nc7nXm1o|<1qb&|5c@J>v_X?MG;Yq|Dm58w5Y4Hnu^*YM{4W(W|B_< zB(!cbJZZi%#s)!Duf0m$E^uajgFH>J*5n-RR2nrNd(N+(@@eM(4<7$v)5-s^y}7ru zz2g7Nc$)dYhxJU$;yu9xO8)G6{RYQp7q0+k_7y<{C@bfg1HC)M2Y$iXcYwKKM8;FM z{)gywq>C@X%d(Tq={4)8C8?U3plmaPjAc zW8Jen48k;$G-(h9n?_^+g;1vXW;o&-e_bKM@sAYAfa5C8@5_^B19uiTS6Kp7S9;oe zjjmF0e|!1bEUtghM;v03WNhoX2)Tn-S;zjU)e{MC%d%GHTe&OwL0Dy2cL*xN0X&K# zG&Zuax%XAr4#onB{|6eYqj8+WDCysW_fIijHWtVa02S<`h0=!rtn(G|6-40(rcsDt zM&w%#SL}>fr(8=wSJ&s4N3Tvk9vvT_zdgGy!Tb*Irv&l)$$ym9uR?r{Zecbh zjH{!okJsnFpPVgLf}KkK6C2C45@3V;x4pk@o&RlbZ*8vZe@l7hm;aQs@!%4mU)(Tb zC2?dMM2;Y6kT1*vLXZgT2qo~7z%nRcgeI_5I6cjpc1>BqBlA>l8s7SK!V5$Eg^isN z^27(yk=g)o315MZr*6fj?yX+HNuouI@i(jq;sx6swXf}OS&kSsC%lbMvNBuM{NKDW5D@m zYk&f0V0p1ycptC*8D3ux^uaTf^1T!l%r-b&xSG4Y4&&mw-y_=zK z#?dXD*Zd?{Ifu1;yT^bVJv8fv=+%#5ui(_P3>IRE6?~2HYGM^KEW>9_HCofOVu1}9%U(GE#Ott^xotch+o6dh+|DUbR{hihRzl>-8{U7hF z_I|vxI{8^`xeZ$`-g&g`7VkX7cH6bDZLU?>J`7?OaNt@6W*{bqqll@sJtrYe8;^5V zgLisQaW5Q&f1)hBWBHN-qic^Qmf#&run40FV*ES2KaJbU8OO&bS63f@KlzW3r!SuX zz>6J8IMYG7Iyt^Pxn{>7E4Q2P^Qo5q#9p)UQ8<7-od5UkjvfDJb8~h7V>!<>@?U8W zUxcj3;T`JX5qt(;o(`OI7yg@Zo}Lrs3xEO=%KK2p)6Q`Y<+ULj<#=UBq~fgZE=&)_ zHWi^!UO>!munqo9a`7H!QE{IW_WJ1LYI|>=eUO*lW~d6lzt9b?#GiiDHtTJm-2oOt zX_X(n`YwlQ;~DrBl4uCj7baTk@r#uGd;onuoVaXN-}s~?tG3VCBw8l1l<=o^Mh8L6 zU$I^Y!B(E_bhNN>yN_*&f1IZc|3?UuBFr!4dD?>Q|6BV9cK(m;t(E@2oJYjx<|7Ma zZlLFYWfqFT-4JGAgklI14CH}oo0!DL+D3@58PqFJqTB2e-@ZMO6%LgsYDu7)V(v!f z(Y*m!gEFv}!&+6uFIEiQWw3C{l(7)B^MBuY^9Yh5ipvvZvA@XePM4p3)iu}na*xxF zr|X*J-#%i>K`mzlOI2?;y)UO7wZ1VQ5>@~TG_nya^sJR!w37d`Y=95KaH zp+^$gp8U!`@WJOo%ylBBKu^B_Uw@$e5Svpw{!fez;N&xbMHZ&VVtqI52TlC{VAIO~ zvAwsuwaWjol*i=%{Q`{uG=~>2ZCB`7E$h3)g3_!`$3MS)dtwvg@UO>EyN12TWT;-f zNefL`p^lVX)6_?rHIgQsM9oG=Dft1^5+xq#iplG=Qb@2>d&Ql44(HCFRr;lTjbk}M(djVI3PT8=O|%@T6;f7#(tnqco|xmh(7J1P(3 zD@xLpc|3&CEgp|pTs1AS?iWv}N|&pHfcK_4a%D}OhCr4cmmn8dkHhL2U9pfcyZNFu zm@3pZo`DNLjmB>eIQ6`{9d8r1%PJgF(n@VJ103_}9QFu@?fAQVkA>=Hs>v0S7{29i-YfI!CT0q^B`zoK(BGWZ&srlO!e)wcEm5Nz!mQ%sVS z(&o1i`&+X>)@7+}?k~z%2I?{yz1HP_p(F#ra}YQ!)(&xnalkc8fMA&1z#brASm#wy5fYqH(GEBlOf_5U2qz_U8*7bH(QScQc8R>wn z>3Xf|%U%yyP7Jn!GO($4J!ZbDHEl1T=OYx`BhF{o8x%u*jp&BGpnyzLHOszh z>~KhHq{XxmCoBdbDVSN7j%d@yXaTfjmU{SMiXr45 zjq$rnNHnC|1=~1SYX13$j<;hry4X?UKxf)(Bswj7vGCz?4w+^$kJ-eu$4JU&y^b8} zBqNN2lKtHP1pO3+^jF6mmzhS!i=mPrGnSHd0E;RSve$9vhE8Rzi>LtWRQl^FNv{Le z2gZxd?cIm&(hVec5N2SDC0L^^IwE4v5eNM}tD8|(JF<1u!eqCKkVc+JzRKgmBZ_dk zDEFc&U0Z?>8h7n#sA4?Q+0t_13G%_mn-D|g@!eL`vR#8Jc~8Y;@OApV1$1HT#)8`z zQL(M(s+VmyIjwrx@{}_{gJ(^O*`~OiVz+b?YV8lz#{S|!n0ul~K(4{0UUhacnNCW# z38wCPw2jHshFms)7SwX1g1@(+OiL;Uiv{R2GD4TbZz|}jGCS8?f$|Ap+_BiuJGsO` zIbQ+$u;?Bx;>zJR_ve8y6xvOTFILw*UPl-S^s#U_3PPhUN;Ae65>+l5#{`>t_ z_a7hLZ+8Fj;o1B6ZuDV|aT{(qJw|x~W9}F`&M_%qI4Vt^E+sE1@HZiehGs)8?xD>~ zSPLAZFmu!Z3=u)&lD_lcS3%qM!US+VSAVI^05g*-t)~^mZWrdWYs-`^W8qa(pw@#| zlxf|FXQaHC*0~thk+Bxp%jve+CVc7Kaw*|y&P9Ei;D{|2;D)wqzjuLsV0_-QGes-` zkXV-QJ#$Xf^z8r4=|0Iye|xsHXlao;DZxPOBF{k|6@Z~DwM4Px{nOZ|-@q~i**r99 z?E2$%(4!H~tV{i{{sh(M|2*5?67s+8>>k+ne>S(aR`)-b@-(0S%kkIqKT1hzF_&^G z+^9hynrz`dt;#m#{}%};lWb5GXwiRyCTn?4D5_6Q%W6Wtzd-RD{?4(dnuxW8(q2*V zJDqc)mG@8X%HiF32HtUx4+t)JG2I!VK28;f>q}QxaUZ5*xKJFk<5K1baruXAofihp zSZF!yi{#K6O4vgg;!qf zNv_=3rtnY`EzaVo<{`%;`KxhyUJM*JG#)97`{QIdWJ#dxY2u*<{fEM8ea2_kGZ1QV z7~vtMgf)wOTQyvRV;k~LvrEvDP!ny91wLlXpZ{XfPMMYNkX@O6A_L($nc4VFH&&}>XM59w(FW$V9xE}M4#i55 z*9_zLlmGD4rwqEeuFA;ffgqE-Rf73qCr6)Z5Gpofdnnu^-F0?=?;}>n_+}4>XOnF_ zkMd`@JioL{*lkJH$te;uyh|4WW+hgkK@!Zg0D{1K2JC|`<+Bx}xMIS24r)Er`W@bP zeDCFedv}fLNcB6s_mRnJXdzUpmQ&a{wX-NHCixUyMp=5VHpQy$KL^Y1`p>TBRX(lu ze?A)TW>o~6^uNtrJOB6g?)EDF?^2#AwjO&HOrZx#E7CO4X81Y$Z=uS3?~>1E`dLbDgpQ1p_QP2fvNFMjxg%}Ky3CwD2M23nI z_;&@%!>BT8cw5hdYW=Fc2ZD}ytIQw5ZQ&K&EQS#9&dD7n$%Fx>S3)%%S$O$rbAq@@ z)+=tAwWOG=y=a;>geR^fnyNQ7*{Z`9`wW@wVi+qjJ;jEkuf4r zuu=cpxBY*2Hdp??%Xy~Q|9#wcQ5HZy$6dM!u-uL;8=$<}umCGyQ-u1duZUJz0v(#J zOo6M%ep>PW8S{S2r-}b>?^*F5w+?n!{vXSErqTa)=CS?hd1VcYpG+-V<8k4nlQldp z7*2HnX0;OHow+T9C34dn1r@!SL%>WnK)lo5A)*|JnNU^L7mMm@=Xuzt75|^p1-ya( zZys#f^8eQM!Rq{fDbEz_a3&9MQAkAbRf+f|A7w%|XQcdRg|6V$3xwCKoTr)xF?00^ zK!A4w5b%SLdN=b@4mM%diRLUneaQ=->Syka&cCwjj54k#aM^yXU_L*0tX}^(8p3#- z!dTqyp8XYo{R=h=oe?m(9{|iqdDd8?5$k6|lAkGXbK)t%EC5&EWkQ9o z+-%P2?tKaSuz*?Qk6kW{=puB+qrhXB_Jf-E+?99hO1k;bup4f1*{+Vf?|p5wBJd2? z^faW~cX;lYg8INFqY;dgS@JlPNGcffl3oFthTc=9f$$-{P|2_~k#APjg znyp)e^}XS!$lJ#S2*k0emn#vIwf82h5-Vx77Kc4*Hyed{;Iv!oiQq$kH>HIc z!s1@vjV2Yl5o>YfZ}6y375^t;lEGr*V^|FET!;TH`2Wu4fqnkJwY9(E|I2t7gTI7i zTx1x~!RD!x=VShS^7JS;k3p?w3;6c!i73a}GyQ||Wdc7F#ioa0L3;X5!HSAlYm9qx zcEqw65(EmE#VnQ$WAOsFC!&Y-9Ny?idsp^Wtl!LUDG#n#O9A{$itvd3HaRkPyKR%{ zGU)?5@;*y+tg`0zDwF1#zS;^(nnW;A{;*|1(T}iTfh)~M*xTxMY^B5ZW~G)q=+ngi z>Gv>;AJ+fNzW=#(uy?S^|GSjO;QwN<7q|roh(EjRpZmPFIt_dC45gnf3vD_qR^pZx@;G5zULC{Y2{GYHmGn1S`R3HS*(`l1FjQNX|(^&uJRp}c@?h+*F19@CI;lR`skbfT9lNH_ki#ExVweeE!l-7*R zrq|n)!=YK7sd(@dGiV=dJ?Cu_32oWgL}oO5p#*SF z!!^s3(Wn7G=V2C~i5atAy>*UBlJ?5d_WecoX~W*@s%P90@>aj-D2W@?Rpb{X=|0iv zR17NoWb`~B#TW+O(OpXj95K?YaoUq28C{M0{p2$UCwFpxMc|8v7)NgTr3#u!qNl}pii0|)!3APk5BK`xG!<)FEP)C%91d8DcNx!lIHi%+lo86E zs}v<9EcxQl-tO2)PI~e?|8WtLp$B($8rrxKxZpmx`6mrhsDhjxUW_W}lk|=9VV=B$ z1xs$I3YPC2@LKV?jpWnWT3YD;RHl4L`|s}l!M<((-QQZ>|6R)C=>K%I7iI*Yz`3!FSQ1oql;Wh~>F%O$OVcdQRO5)B@WRoWVbqxmV?%9=+# z^E)CsA;}%&{b(-|Yb{{8p=aJ8GMv66V(_RIO9zgPzlp4N$ScQ^7V|2KbliNp+)Szy zqoStGc^mcS<`wf#Dmv_3phi1-P~E6WGwM~>lmZm&Pp1}@N)clcwqi7eTBH%v3N>ex z;PyJlm}WJ``(bbtuOcMc^Q%y$qnkd;6)Kg$>xJem=EF~q1ILgo`P?iRiojpfpm(JO zvaoP#(l`VzGpig@ozUXOmAr=_06!;~1Pa;4Ub(7Mjg{H2(LIK#*}O*0^M-qRT-u^r zo0W8Cv{-$rYA7^Cf}M-9NiD5(rGBO1<#)Mx1hex3nF>+>U{sO_DeXkHZ{u6NRG>a*~|q z?1okE?A__h)1!~aM;BL?Tcf_8DMn%!S6FM!zGz$3gT5qK3}JrqX&j~oWagsqHcLL~ zZ#xb5o;=nfA5I@kqtQ4^K8>MpQmJ!K@F3zFmPibUyeg2U0afou`IyknaZHjlA@>0Y z21S?;lL!YOm?SYoKI35&^5{AmX*`lfd9$CEXBf<45cCskhWqy%0s7B0X@)V3js^cX ze8Iws{~wI9T1`+bdkmv-k&t@%6aU=^?%yJpd#S) ze`--K?Ui}`pE{JcZ;q~huLQ)uR>N}otti54Y7JeyJ$+f(4*NJuGpu4)XM@Uu?Qs;V zYP!<_>+lmDYEn}OY+4MIHD1>vcd`j)uI5Ml>(#3QjdLnH=OL#15S@8!3(8Tfv-q`( zS1tuzKoFXCKiCK9YfZ+N+DF+DXgwi=cyUJ{sMSb>rMi3vbPOe=r=2m07 zCX_bJR%^6?TtmRUVTfN{yq!tO806#Y`X;i|4gTGT&0Blo zE1Wwu-+E~>N{AJN(6Q__)OP*&7((26!|5zo9}wXl#}dkKx|S|)*UQg01q^Rno>kYA z%m|vUk<0hK9jR(+{)l9fO&Ali)zTCj@ypB8cPE#0KR){9^!4fW>B$vet8&w=kxq0^ zqNy8xcY1aD%j=VmFHhc`9?M1pDhLOaBGAS&aM}mOILnf307A?)13F5KC5u?X>ze=- zU{Ju2z@qb}z|}<Wo`&`Ym*>e%?9Gt<@wu-kMo1^Lhx+ibdn)Ne!Zeos(@k4 zJkQTBL5v_~VzHQe&p`?a!26|2iK#eyo1r^Eh9LocEI}}Zz?^xgFej2|=#n;_q!8a@ z0!Qv#J3|>QG6Mmw_CH>p9KHN_e)jr5K3<-mi)}gBs$O!AfszC5KBf_{RAV(OpnF$= zy{)pkRfrW8W;bT_>nzsp_Psn!_P=Bl4&W6`VMNdjp?}%aaQ?G>u)S-?|2f!O-Tz(6 zW7z+wZo&p!3*@pGQ=l=8ehPb_)uToGg)#8w{8ooD*Odkh-YjzfVI_40nE#M2>Kdq; z8;64Q!oJK~CwEF)r0r~vy=|zji2ErGwYk{gTb2W)+uYfti z2|^$sE}|lD-QWMO)pTIME6zZW;N77SvCN{Y5xq7ivnVp zk=o>&v_b-PE2mjCI7;urdrb8RIMKq9dQFx-yj2s^TYNPdmH^vC`d9N?w`7)h`0%VV z11lPT1q3le<~%Y;)Bc|(eHh(Gb7X&S5&!w%z~2A2R_A}qd5ryE4fbL-eFg5P*zmR9 zEPAsaB6O=Wy}W=|gsL7vjxf0*VL=R5$Fh{_72szW1t1s_l8b+E;G}ESMS^mqJ@zt+ z&U5~c*rQosC&xf$vRhhQbY-?nz6z%g;5`M?g171%RkY0hZE=rR?rvo-dq#rk>6~hG z+*!71`;L1x1||h{RQNE@PfVWvdMaXymTi=LbY&|@41akuxisNB-4e6a?p3RZauGjr z<`7z15wv++dUcnpxg)Nfg0CP;vKVFrY}?%w{>qgjC6=Lg{ms@x3gZ>@InO;6Y?!a+Nnf}~7_N{S>{-SwdYm*`qvBqL>BwR&bDej$o34(;lz<0TF{ zXj4)U(>536e9nJr6V@CR&Q+Y_akaSo^VT70!{jwlm*^O?SEpU830wiQZU!5(Saq>_ zE?e`tx)mdhN5xF8p>0L<4bKFroZBtux6x_uEU%jB-f6zrK3R9=yhXLiQ89vIKcR!= zpMWl|p0%qAT~Ii5-8iGqzG&WaS^?I$3)OeG!EDG!F0053u+FYKm~YFAaBj0zSMf-c zUlfR-2&KBcf<$?hxx%QPi@Nes@w!0)`LWu)aFC*#FzxljG`$I<+n2nU+Cn929e;E; zMNvIXEN{~6n3trg>;bYspmkDYG#EBI&s?CajcfNkAycGR|{Y0H;}Q4bmt% zM3|J|?!^SpiI8Mq!7%nyj-a0ba8DsBPFo`Zydh&lgY zg&qjU1dT$HP{sJ3x%?1OJ0UE`B|!at>E2Pm5t=}{{zpA<1qqSuFktX=o+eR3Qs%o% zI}YxWG&O3m-dwZIB`hGogcgWG3^8{MQNR+t#rQesqXNLs;V4hxb2{_x(U^Obhv547 zf}#HQjO)bk8weF z7}W0z$^Ef4r=R0#)c^UW{BE8!P)+_HJ3IS!{^$MuRsN@?JTm{2^k4fW#7VTcG*D7~ zwr9~SwwiJc2KP+9>37MlI;UjMAm~e7}UBXY}gvuxcq%g#U zVeAm(IUkC9dsb+Jqz^lfB~_y8@w6~Vb)+{gn<&XfW$z}sRZ5DF&0W9$r+NQJH*n4a zfTsK3+dGc^e|P2oxtzza|6j1dUeuOPVf`G&f6+4DDo%}C+{7flb>OSW3!;1Yx|rac*VLTlxBc*od8`^ z&|r=cR-QA7m@nN~8X2-E&8v41XpJ7QN!$m)yL3W`pS8M?EGt>ygt?3% z=XDX%+N*G*uCaglCjeWUu9|8bn{vKY?R<62E zMi7m?z7@4-s)ZUD48H=`hTYK8x@6q5bjfOe7a|L^Yx zPTHgP()0&CHAW~7q3qo63|)mvYcbn8cop;4Rg-Mhs3eKJiZ2P*v&X9gw&v-&4Nekb z3!sb>h7}DOrE5c?^2|Pdva7n`DM2gR6V$3@f2LLJ9#~cE&$Nm;!L17BM_SyN{#I$@ z8~DL*QvaAwll`v@lk!mazqYn_x3--7Uk9uFA4_=*x$RO8_F_afHFtgraZT&Zq78ux zv?GXB26w8Ft;{k?m?&TS<)-p`9WdW9(jSb>jJ8?_lME9W#&pC=*v}b0AqICMNMe|# zELuu}K|c)#bmKJr?ov2`Y1@F9)W>{{MX?V)8=NE6wUHkcM)QoWCO7IoO>K`KPtA$6Y?C4V8}eY#u=+y9$U(8 z_569tYui`dnGXexXth{)jPoT*`jqiIXsftq>u8h^58;C-9|s`d=mZ_ruX9?Q(mKpy zfh=?GB13r39NLCq7N;-<;SHL=a&dw+b_I}UH=8%N0pEUv^9IDATrC8FQAna82tgha z0*eKCsm!`&T5eXVmME$E!-sda&B#Di-i!@9!aGDV~V2U6d^uSid^hC&VQwX%A z-hV*m7Zau!fiRA#UQanw0Jx)0pUMe$VMe$J$GugUi>U3HR2~>=a*RY`2K$C~tXZx# z9?!#t>OG$AqD zgL6o$3lplQWm0cD3Kk;oWC{rri{nZ{xfs2Z*(CJz^*rD;-@T-n)0f5GHS1kcUiyYr zlsHl5DiB#G=!#wUu-fnVb4InXa@q65&f`aSwmzcbJ8ia)icv_gKLQT3|M83RJguGN zzXE#;XOD+n-DLvz&2&;m&4!z!*b`lN!IpXvd6<=uzYQzB#e1z-v>*savG&&>ANP`s zz?8j9{;{=Zhe=w~TTxS=HzQk-W$Gdk4f3(aarFUX9`jpL#Lqwn1gv|{EgZ3TjdWDp zUY7;XUOi;YUe_O4r(-X5`puzrsu)k}^f7{yK+FjZIm+=_(|56aV62lH;;*^CLSggtPQydF8eOl<@ zfO*A8B@hX?FGc_m&%tC^UB07qH+0Ojpyk{$SQXJ+7JiFi;V((QsA4SWzP}vLm%_~1 zzM$%EC4cPoZ{MD<NDjiN9eB1{5aHI;wM#v2;V`M0G;(C;agITkqYXk9kL9y1dka_go2;Hw$2a6HH*HfkH>LmNkuBJAsJ|H5sw$)M1kJg^bJ}bINyRQKWI*!i4GWbXWaNW^1 za7rg)8*#xZV>n47==v0|O;9@K{*~*~?XtY$8#K;HFTpZKj9N|>ReW@EaP<+sCYy$j za(;8B=%lh^p7ucq#7makga>9|!68O4%tV9>^ALX+Vi0B^#5fsbFb15YK9i@tNE(7# z`QNm$!!SEZ+iY|O#8evx7lbT=XtMwtN@1?}xd;*IiiG@q9W^wYg?t~Y%nlQPM zhN|BaMJv#&p;39SA3ql^C8K08B(&f-=SZ>eCBncS_6aP&h&JZALvNi}NO3a|znMsB zA6rb!QvwZd?_q`CMR&q&-i!Cpwa2-1)P0|1X6;hE+wj1-0Kx>vTr&TuN6{a78x#qTR zNtk(N>p-TM*94C8b3>mMYKe+E8dOKtRiSw*V%VDD3s6BW87FONr{wwhTnSc0%4D!w z8!F9ycC0nYqS`0~dnvjD>#4j?WW4Wihbl`$DuwF1FeA)o@g~V)5c1f4|MLZ_#eAO5 zPOd-xa(edi?x<3`Aj0OPYS^O@gj@ zuw1cCR~i%(9NwhxYX5k~Ec|u+!Gu1|_TCEJa_4W?yQUZvQ>=-)?V<+ZX_f_>5q83t z`YKl^*DSa0lyzQBTj$sFKh91rr>pbw==kILyOYby)0Y)1eBn#HLZW6>gSbGB=A95Y z@=3#H+s&dePMK+s!CUy6(&S{?AHQFmS{V$5c0Q%7_g>GRbvyWTZzgw9+5l!!VA~Gz z_UgOXbIcfR0@1T>#SrEvpT=RzH?_A}@<|TbtYbHIAIDkpiR$gX9%_Pd%{cl6E=`wP zNJ_t{o+kef0*g_S%^LZYKTYvpx3>1|`=5JTtN3qAdCdI3l#6f!vVYq$uIyxP`;4KRn6-cjwxP;s`DgPu%|({WrT8T*Fl*0teerU8g?(U z$ug0w-fGTYAHMLzc8Z$WVt-9i7=Ykc5u)T8y+#9ko}Cm0DtyO&R^+Y99I?}g1Uknw z`Z}$FrOXhU8%bfk^ldk2V$R5(R*aV4Do}!3{w}q89_ne@|Fxs)nL|J{_DS%|1ut9|JMe4fmz@*s6T}eVDx9vLcj#2e6i6&Yz*|T5sKjzEGDox9b~A0v2!mI zW&LC@3iAL27)Avo0SG1$@!ru~xfuoTxFZW6%&AnrEFD!WtR^GssV)7RDKDxV}ir0W^9?d&`V;uQ%A?2pqcNG!)5hVe_3 z5p@@lt#&nUHZUwANH!)ByK_q?9A*>F6Q18h)tjFzC;?D>OHs?;uZjuoaZOSSrD3+U zbh>&{Kl2{kBTKd4>42~0SxALL7Vmi1b)G7@hiTd?-}|dCz@M8q<~FPP2o_Vdg@Ds3gQKa$2VSJ;{7zBc>4v)!+}(CeF&BXeCmvDoc8pr z&aic%vtq9snu7BoXwc5IAU78U>?fZ=uo3t$s<*XOprj!}`3j5K#}&d5^igpa7BRqS zh=<_)MkA_gc}Y=w2RuU=RRMoPm|P>Jp#>oLC5e*)vKX&n>IMr8^>yNo+q$VL)(o(X zTZ8XbJ-td;(;v^9Sk&O$a$?x-Bodr-V41C-vbJ&N1jEejopK&=8g@HiWz|zvGL>3S z%}1+5x$syq*@jh0zBYs0aN~=^P*@r9hn-Z<&v`9C&Lq=%P`<4P{iP~L$_!$!v483Z z`qrk%BF|dy{KZRYv**5TEkrj6;&sloGJ~Wii<7>kSz*E&Jjbb&W^N+=ahhg=G&MpC zQ)*~A+>SLo<}ZL;aZhpgDV0K0n@(AGX4LF;6|!_|VrXvkG9rfX1IH?S9J_!- zmrRJ&h$MYJ({uV>*$CDnJ5|y|V|^~_Wvn7HE;9F8jmYM!rBgmiQ=ZRP1Zl${ zOjD4f7;k6}CUkP~>ULd~DRdOxLV#h0ATR2!7aRZ9M;z4 zsFji*_vLAXSA|Q}@t!$?X0uHveCB9~sYjZ{ z!0lT#`i)q6a*Mi?O?3wqnu_gZjO%u9#q8>|wn3WY*?0!n?K7@%3E`i4mh!7)H;{2P zy1BDV+c}JqeiGGX3tj6&5)EN|RWZS>4tR0)Ud5cs(#mFr7ZY!yeLv0>C|3*u_zL<- zfr-aj>kHpj?iBu8fa-Gva;>+hHhW3Z2MNJqBezZ7E%$8iG^@bO-oxl{NuqMzL0NOy zkSbS4j7geapL;7Ooteb8l5!psFOP1>it5hp3He*Os-KG+!Hkspd7`PRslhdT2~1r| zqmY0ZW`Hv(riL33*&81)PXvX>K6Cw^o`&;(mbavvCVd#)M=9)z99bJ5;b$1N^#^G1 z|J&Nxwevsh>~HR`&i|M380Y_VPyrv}#T@-Nq*SX3P#{le*Z7a`))~O;;i9|&%WL`*Z324k)Q8^$ zs&)Z(!F0|ofWqMXpZ2MN|LaD0*0>Y4xFFWfWnWWTbCBk5cs^zRd(EYw*nKFDbjzW| z_(3hJu-XZlpIQ08$hF*R3uxf~JDUgF7XRPf*<8hcUCLwde=(>JvISHp=l+Q{0M*Gy zRsuz@?x)r(o{f081D_w3l z&$S#DF&OO}=Vll#_rjQy8A6OoL;t^hdm^U)VHM~h!i4)L(O+z*wm{kteS11!2ixLZ z>0iZ=6k%&Q!e7BS&w0e)Duf8he}iER3oP&|UpSFoGwvg=A~9L6R?3A_=6!KbVHy`6 zt6Pquz~qB{e_s&?0Nu;2bZ(;$gQaM!C5RDmpcKu)SMX_!2&{=u>+>6X?44`%EaI6} z{!b@S)41dwQ9Qs6@w0u=36)_|6e zm;c8wr^_LW5{NfGMrjh=4$&CH)9hc|DP+2fzzzI=cYoj3|F?JdSNwk|j|i`Jt#fuT zfEg@UZh?>rzcKSA#rO^t+$RBMcw9gX5(0#~76xHdAdJB{XW4o;V4U!%cZwS~FjIZb z^~x#Nlebuv{F(HDyost6GaVOgH~&dkB=o!K*w6e*q&L3iHD7{_3K-)6^e$lvLkxTN z4Tkt8FW@9WV}4y1q1$l|g2@&SV9)S2>f$_%px&?-7E0r3zy%Jz2GolXGwkR<9;Nv( zJR6U|-loTgwSX+Sv+5EjJ$?=tzAB7%7K0c@#eGhURIJiNM5Bqp#swzqwq^`J>jir; z-|1C9x^lV&9q<+0?C-`ZOP=A0~1>w^O^)xJbQq4xdi`_tOdU z&GoFX^5rnwjPxMZbBm__u9YWn@C57{(Tq?c^|l!u-*ene{r!DqY+eI zdkE;Q(v|QWUr>_pgIaqs7sP;(BU&w z>~M$7N$&|{cc^*%+B0SWVwYZ?P=>@DFx$=Ttlc3QP7x4ch9Hkmu5$T_T zHuf23ipWv6@8MN$0AkbbSn!wQz1Twjk8l16li4yq@~2+@-`?BYv-3Z0Ztku8KbG>; z8aHB?}N^|Tp}Bz;Cy z8H#TfG;RXgYUKFH335Ex*r9BI7B_Yr+G^~?*l}_^)Yw&8D`p)&U5EV1N3iu6YI5%b z4I@Trv7iB@pnm$HYdLU~77HD+wF2UCN~+Urs&$#=1Do!ii_kjEX_L?Mn^UanoJ&5- z2XoDswI5;1v|sI6K3L48X{U&KMb@sPob#;BJdxLvWE2jdyt{Y^Sf%4Mff+faU!GXe z=c)3prNQ3Y|GRu45?+fp6`8GB`=Wx%x-DK-C$r|Z0|4|))$*O2lv<{xHq%`_0l-fF ztS4R8(*wWAp*h4XBdr1k`2Ji zUjSWExYz6PD4g%#gKh?bHIpg<`0xSz+rLp7pn`D3j$faCJbHWm+Y6`gzdsT5qGey7 zzB_rrD8*mXshfgejlLHpVK%Aot!xwAo8h@ix9gPX-Vz2|Y!GCF=ILV?kG2Q~u z9jY$SnHJce^RkEMm(J%r$p-30NBm0q;5`V|B#Hre@d5-F=Vz}1@Bw`N>iPKk{OINB z*(-2Kkpu|_ljQ7-l6{R~{G9St z+8$-zC6f-bm^(AlPopr&O23PB+))z&u*06|nx@+qFG1Vw^?Kkcg^-yk`=|h0n{;7m zEdYS&cd)f7Ui1?=BQoCf$@#A{?GQ>io^Fp2)mFR2WA74gjxJA+UjDL_eL@U+^G+d= zx;#I>UfPCHi=8xj6bO-W=XmfKu=YhCz;6NQ=Gr@h ze%}JdZxsvvw|`p%NK8U9#{Vv0#z-)l?M1N{X}_70z3^%)_VVcL<^1f``LfsxAM_UN zMIiO^==$iFqpOoc5PbRK7$C*J>PY|Fw3HzsU}wf z=ypkwK>T70bh|iDVpxD+?TbZ?Z^6HpniX&5n0DYd+5yl78B+R|CZ}&x`k^ewnwTz@ zo4MLN5W^^fIqO7(vW!Rk#=%T$k{f7OtMNx#jaTQdFPE~T(#g@hoicQe&o57|%#D;C zBhddHqXJ^Ke~Q8X&2R`WXA$ZrC2;$6ZVv9!gC|aJ;b(UgfqlwT%@4eWfv>D z-7)4o&_nxg!J+vFiyow!JcKXio=4R}pz@oaV2G-|QSoh7Y zN6eA<^4vYJoxOW#p6;D{x>sW5q>-sVcQw}2OO!ztjId%+)vDMo72K;2J+_l+ud%pS z$$l8uXV~lbMt{lk^Y%oXQI7I8#2i;iuy7Ip;y@k0CMjp3_w4%QmoKd5w{IVUC(@8% z)>Xtt8F!_AU;0vipgqqA9}`Tsi+j+0%N?yTi*EqBvGCw#e+*40Y-Ot0d%|`~L1YWl zw5r{Qb3R@@kN&jq{}$H$883e}-~Zg-+1t1Lzqbx{R`)-b^051#-`VX?>7ZP9_0#Xf zJm0-f^Ni~|zw~J$+iiQ}6O`cyew>S;@_e!Sj;7tM7Ql?d$_Kt@x|j~Q@Y?jD{ms>3 ztDCEaPec8+)t#Nq{Xjw1%FDZVdU^aQt-6IO7rXek#r;#OhVSO-xJWaEaaxPRKQT^6 zD26ZM1XD)xz&Lqt!{SdVPb=WN6gwsGH}_Zn_qEdkJLz5obo%+_FD`suZPpg*Fa64z zi@Nb^z*EzG)|<6{XqRG{ONeUO&jM4skUVUCr`89fyp22`oY}4oS3#QX&aeedzwE1+ z&n$o>*ATacIR}{qQ1!jxDFCpAE1~eUJu@iD*4K@t{QcZ$w)ar?IKV5koGutr+P z@A|)i>`$)$i;KC7(f3|FGQS^V^>9}71XU>#f1Atf26_9Jy#0vLQ_lQSA z)`9v=3nsueYJ4jcEW-k~B(Q5V0Y}j+PEu?YCn>gzH|W6vuZ8KsIy^VgwhUc3M*6lGILJ?D`4R&KCL~ zyWKjw_SYQ$cjsW&*8g^QSNh*lp6^lr<6*_>v_D_qvH5gA{X+bbG`|*VT6}ZLlmN{! zk$0W_Ux}VyDN)05N{3j60m-e)f|1nC7dBp$5{Ga>#o3{MFvw5(R|CjN6kMcji zm{=qJdqObIC;e;p4=aU#T4r(LzYcBMqaO`h3*xembPSppTwGyOss(ysp%@sqI~&em zY>G|OTzPWRro~0)`Y3Oa*NgLi|Ht3`Sw0#Pc8rVEIMZ-1_LlT<&oiux$j!n!tFS0p zy#&VTq)X}w=~gnN4rwM)-2pI*q;3Eaq@G^3)}eft;;^xdMAB6`T1|rQ!o^lbt@))^ zW7}Dd&{}fx$C6pS@*m9N93>gq_!!1<0WpSnj`RzpY#CU@) zPy;?s?oT;?dJ38+<)=*ISe5ycbGb!i`V=KGEG9_=xg=U28o<{9%X?<#WS*9>QcI5s zKNGrNr>7SNbK&t8`0SHr%j-_+O)n~J7`Qlao~8GIZuI{jd;i|t zHjXR~!@s}tDNsC49V;i6Enm;N-n{#GoMhH#Cy6W0&eVCb{-t0NvaqH|hM?qlC;9GA z;Y!?ilPD#g5vyimk+?J(K%=|Sml%PIOMnR=vy2{WC<5Uu&rwpu%-5Bzl^EZc3RE-s zXythHQHUh15Pal7UOxvnvjW_v12+W&u=>Hq$ro&R%mGCJAc(EoKjHvPY(6W$B$XG`a?(tQDZ&oqCl2(!yPEz&UM z_FmgDCIy8f3%FP({wbsD|L#O8p`dXl6L``qn_@U+SIhEMNewaq5^GP4P4cm~ae4#e z;TXp84Gix@fEdc(GNj7Ul!t^UK`FPa1Y`%#`Prj>(<6k>MPx_6DDy{a@E0(@MFm}= z+LfnXKu<8O!fd=^vJB8FyOB2B!;m&*rZ_0UdI7fGY}5k_t)46xqB7lSTP~)lPx9xY zj6jq8ceH2Af1|ykCvB`>Zfybnfz&_>H&kCY>DMzIkG{}AG!rt#o$nnR$Nz(Qt_BkZu3eN*}>2F0_*%yQa)nhaa<0ktDoK+0qBjkQyn zpF=XPIM_C2G0J@eHRT5bS2iqVDtB6S!OCn&6Rs#1(n_?dfTdc<)GJR?QfPp=5^gQ@ znwV=e)I!qLfxsD@F4H%yzd)D6;vrjV%&L*P&bMd*ow1B2jI$&KEO2P>lu`+xI0G-h zyul@wTnV;VZE1oib556-v*7-f;sgZGL7@8eLRG)&=yuyqbGIr-!o}seMiUaxz8zj-Y$vD!H#Sz=PpdwqeyFb5Fg`l)T!Z@wN({7$WC|a7v4*9IJ~s@;mL9xoxdM|W zGq}k5u0n=y(Ds0xA?s{o-5gtRi&WtbyDN|}j9Bb$eo(q>bH`C@ja>tr_-4GC@%Dmu z3k!4)AC?DAG}IleKQnXv2p%v0&r+RS&f=I`q3?d;xd-@}-@E_!{?Vc1|9!B3yy5@X z@o>JL5!flrdSd&n^)oD&PZQJ6)q{bhMOi=v_yjN+fmhLWfHrJxgn+v7v=#vx6o;kX z^DQPt{&1yCml?tgv;0{xp=aLB@gYjWG(y}jr=Z6o9pe2Yjg>jLSx&dbhqM{P59ahK z34|_7J0dCeSYizBN}y)OUr@OUl?A^F2)yGoMp$u3MBR$ zv)-d(mh(+y;T96`KSWYR|5p79ij?4Giy4!d;9VH~48 z0Ko;HkN^aCh*B>(k}JMXIfpwK=sHgk7Qu>Tg}!8RIKD)o!bXA;LWCmS97EF_Ygh?* zq*|RS?mh!Q%?dEaIVnImLE#;($E{qE)E4*d{8Tbu>37jKPijCZ~B~9W7FalJ% z!Gx!Ow~u87*$c2;)7@9v2mxQ272s=nJe%@IIgS^u2xPS-yR=%+&Yap)+^Fr`Gn*V^ zg{;Nbm@Z*)5VZwN1ueRA(HBgLpaN$1;FQ*}Z8$z&)ModZ89q5iy^1)WnW!g>4!>}4w3 zOr|g|H!5iief?b4&ZfZEx#Xj9K_v1$=F5ybcPHJp5Rd@t9I|cqThf#*i~05J_ASo@ zRL^y0*W$1 z7cKT)op_RFo9I?J^B9elb!*gu9q0->|Jbw(6`5RvULfp&EW6hmcexzx6LW*BMOC@U zE4Ozusa_1B3WpB0ZiPrD-lOQM{?yC=%ia6Rr(XUa9gPlL{r|@Qe?5;-5c9*Nr`um4_j_)A%d@r94RBlg zF92+J5jisczTE|`2mGE@7H#zbE$(A27mTjLU9}U)6lTl#fK;lZMM1|~wMt77qr}F@ z_HCgzG%`oM*q|BHiN3&)$1Fg!dwuv3V?<@24WpD-(a*uwykVR>w(Q2Zqq!qwbRE=C zXQm;K-W!0eyV@HB|C&=iuyfY|c2Tfuqd08cl`CyNsB@&Pxi9zbG_kkOV@Swb=b8_P ziO(X>sbsOW2IolI2#Ror6ls=GUc0SmXZOO;MCaiKfsbW_*UvdE#suVuGWsY2<22_^ zZV8ORj3B?@S7+~G`(+WIiHQre<%C5#g&A>O+gKa5#w8xS@s71MMcZvfxp;TY79|sV z3%eMSXq*hSM5mq6$0|2@ux!aJt!$Z!4y#t=_5_m49F6f86*WBIEp$IAG!W&|q^wiH zFV#Pa=H1O~_U7Bc9ze;8Atg(Is=Q2t(>_5I&4Q1oT>#S|W3Hu>VFrr{sc<9}Umc>_ z7GhSr{cdx+t2-|{E<)ulVqo$uq){eHlIWMg zz@r-OJ{N2rbjsu*NvyjLDrfz+;9?A50b&G6!RDG<^y36rW zYt5>)M6?guC78CV1>T-)E&-0B+CFwY)Xl3Q=CX%eXH?c@}adsHo$NG+Ydf4+5NOqV;=~ zY5x;LA$uuq$NE*wiaWPoH3jDu>%4<@)YHa}o@7kV#KwZt>5g-ZX7G`nzTlaKbRFsh zl2_#|Zu!|8|4snJ)~2)rk?(eTH|PQ84Y8%g7X8}gJD7kpnDlU_P7V)yY(RdmwE)o% zrV`07Sk5PheLPDdy{ig)Z5d-_0ts_8l{ErUJ{W-QEo;@-q+$0NcujXGmZ|BOiCd0f z^q|={$d(=ZX)5<=ORAaUdnb3hY%+ui-R=_PO5V;SXIh^=6n0|(nHlEi8P1W(v|FQp z&Jq4#&%B`mD5rLtb36)AUv!!hFK2qkvIB`DO0qpjs-$G!`(|tNw0Uape{oWvTM>3= z_Y*zs-oOOjqK=l}P5xi|2X_9~{o}n&{NJ@atqyx_9SpTq(0}j?t#Mln*4LsAgniqi zuTnd}Ei2Q=9#xE1UI?RhKFlTGQO0Y~hNHVBGp2oKD!Rexu3*@Au;Ad0K{*`0$;x-{ zEz9v77HH=VJ?!M7*iM$lIHZioS$q#4NZ?~!9n!z(Lefy%dPViOWY`he9>bN&0%!y< ztLWQpe4*ITU{%$EdmP;&_cFug?MSSr+1Fs^@i9lybj=enHt#&67h z=^RQtl>QO&V&o~=WquN@v+XT$>t5t|THa+h88KZ-iVzJt>MYL!`xf|jBZo&# zJ?qZ)cj;!)SkFz3!N~=wcU+mG0_E*#WNB1ko?XJGMQWkFv!zcveo6)n;K*yj01PXx2bVy2mPR{71zIS< zwF$e<`7J-owViHtCdzUbar;!$#}eTJ;jl`=Uh}Yy_1$T-l5*vgA#)svRmI34tRKn9)K9L z=&ZMK*IwQAssr`PL!DKi-38|-tqGr33(3vEhTZMIyb$UAwzdnaCZ2vZYSUKrjgvcD z`78D{cB9d@?pGBc^@0&?N7u}KW#yIN#z|J>jB|E}rjd}N7L(7*au zG+cX#$uc|sfFGI;RaXqlT1u5FU(~2j{5G?wHedQDrkZTZx&72dtcWI-U8l%t<^fUQhOE79WAuv*l? zZEQ>{T+^f%SB-6ZYt;zGyU)No8Map7ZJWb4aK_Box;PDC?AQfvwMCQ<^^JA?a0?}} z1e?{?VdO7tNR7J>Ys1=8(zt)^3eHNi)(2`2$aX&HX79I?DIjg$p-BzehI&g|pl-E}vG=kP>5O5swV!fbUxr#$350wlFd^ zkP)Uy2n+LVbrb&SmB7vj%8kjaoUZ9o;MKL_hwu%&Lx9Y31nv=t(xl)~0HRsufs%3e z5klFk&ofF?rZZCfBf+1IRWPuAwd3*6)9DRM<}J6czJ8>4L^R7{W*I^}2KIWVP1hCm z7Tt4{pfLb4<5yg&DaAF!$Avwd^Vn-MTN@)b{EHcb|bvI!g@0J17FPtPY_|V-OoPRLu>^=kMEI%25fK1uF6kl8Huwjlah0JqukH9@l3QtIK zcZr%#JMMQgni+R?&@R==fpqtK8mIXb7De-xk<)-9j;&h4`&P$n5cn1|1SOU+0k?RL z5+2l@1?6?uFm1PTX6$ZXR2Q#WlPtcx7pNkC07VMMIEeuEfyVR{M*j|U<8+pI*mw)O z+)dwI0A58fi>Akywi>KgEliQe`?tT=A2KBb+;OY)Wd=9_(^*{LEJh{D$Pm2xLXR9= z#1DWlr~C)-QGLG-N%m6Os!doNJ%nh_C=h&zX(m&}-C&s)Sy+VKCB7nO{kFz3A71kL6b{@yG$ zpdGWAA>(PWL+l0*I2|vknxx+*OiZhlJ_}+(Yq2{frd}e}2@|#IiY9c} zm3zX8-E4QnIDmc6q+c3&_wDwWoAteMuK6P_sNo2^H-4)jB0Q zAx!9400l9BZs)YCR~@Q8xh~)6b_o6m6sURs|H4x4t}g!f-e~{W+W(`I~U(3U` z4WHumY<=F>Lc3m8rF(6H;^~k~c3I@_Q&8Kzo}7aHEjBN0V<$&*OmLd8Hk6I0 z1)pbWfoO5p2$|)XZ{IgpjSl^7NrPq+4rZ(DEk8$j2{v~OI?J+O`P+K1x$k$hbMs(! zCL{atN(&-2=Z*P?(TUp1=^lbja*CBb4fG#<;bEmOk^<#p7@|eE!3O$&xW8w||2Q~4 z*u?)>%Oe7gy%O^b)I>Khg;^S1Whm_BRB#sAWf~c*mM41z?SCS&7_o##<<9{lL*h;s z^Q@MYNh7pO6SOScxh?O?M6E21x*S`LW9!?D4%1F9k_dfq%`J38S6bq^DDKUr z7s435vZ2?6a&g_Oh4(*;V~Rt93IMsjoFa_%f89sj^LVhC_lBcH}G7@^JY$8@MeBtCRaOw z4u%848C~f(ykq^vkQB@$1Eky%gCV%8A3m?Y&^p>Yn$2@#4>3MW0M^<~$NW7aQWHoI zj_3L+^yfmyV<30bHcn*k18Z%$SEc&u@hnRIp%PhM$1vwo$-EO+>e9e-c$$X(Kn4YJ zmz%rVDuOb5_6(ncdyz4?9OrY2U#|3EG(kVeQ+bGi5XLcIjM|ZHg%i|~_wC!0yZAihT8`ERk(nyH8*iljWJ-S6--oPT9fZ+drgggJ<+xg4&_V&(S<=;Dh9XykN z5B|DkTJvwmi2j!tFOLrfbzx|q60ifx`P1!$nZ?}@yqOW1^M%4mhrn8hPQcaq*)OjE zNx?m0Xdrhu`8O$)m4aUFD)XuK~lFAU7k@h40vU3f1J~nQJ&h9^B zo^Sws$Y<#7*%cp2-Ly0r0Gry)R#;~^{|7-ik=E!GIWvMdG&?HoYB@$e4zBB(K&EiR z$t?jm5&9NBBR~J+!qmDpBTnoI=EK<%ed(+qIAR)M4)9r)k&a7y%cM3N2I~*|H1L0! zaa*+_`@aL*{%3#h|E=R`VgJ|XRc~h9es;A2vg_}#tKK*kb~rgqqBF`Jyq!(K zk!}UEpxRmn> zcEAUD1Ic6?oB#-T7!|fEl@BSww+UaHLJYFI|Mu;P5rCDQ3j%`8Ip91E^q(tcmm&Tw z@_+4}?Ai2x|6pVPy_QGl|LH6f0D0PqbZn{rm!kVEbo*OUo6mad^O|tWxEO4g;?(Ix zBl!X^^gt1RY9IAGQ(8j*-9hO|5K4Yg{aAKT?CY7?k!|9~b%zFghUJoqUp%z5C^87k zogJ)L*IcQC;!X!u&fV4>`1Xy_TsIoAV#ZC&9c{d(<&O4Y>#ovbr?nEur(kubXoZ+M zv)1C`=+YN}i!=RepNQL>oqxQi;ry2o=YLN0V&-BO4I!z_%J~%z41djlPrKRT$T48 z_i26?r?8Wmzdg3DVyaB_G}L}Ng_NW^u5JKrGBjG~2k*-|Kihc^S;S->nuJW=vlkclQVdW)tM=z~N7ol;X zOdhocHC8lpO;IV3uoY7rBgnwnDS)~1j=~Vwe8j8RVFkjy?Z&)uJr94>gNY%{JDECBlDUi zRgnU&>tl5<(`eX&_ir9l-*;82H#0=5@&!w9fnkjQjmmVd0XO0bK$?}OdU@$%1j;;JwbKyaCY^vt=u59*u z`NdV!e_=ei^zBb0{XgCt+4n!kCx?3*`oE6Hp#SG`%9kbfYVAB)%C3!|Z!(Uj@D{zh z`4^+&c{=?ck|togMunm_BCC0&@_Tm9Q*1D)TLsFeIN{P>XHc}tivjZO+mjuj6iBwE zJHPf|<7MBqw8<>prNrSdM_Ed6k>(HD%L3kN4P4IR_%e-g$ip3##WMAQmoAD22biLG z&{Cc7LzfjMMT8TlID6}_pe~(S;g`OINo}@@%5B6GeGhoIqM=iDmJPvIkl-XjNdXRB z=j^V4!u+;{F1HCv+R7pz>Wg?dMTF4#hQ&loX!-F?`HhFB>fWrrQrw2i1y$8s>zhVU!7%`8cdJU;Jqtn+2`E5n*d$jI_LD4%CVd{MGN! zLjZzuz`?*u^(a!C$)Q_mY2OlPEciBNW)W)IFNoXC(eLts18n(-`-E%O@3 zV3oOIIE%|M59K|-07gd!i zGXMREQ_Nmd3+sRzHnxYm-D_c>yy0iNKh^wSw6MRo{WS1@M~8d1|K}0?XT$%k;W6%i zUcS8oLd^-22=LgX%d&(~MFj81zy(Ih3S3Szj^Wc6AUKa_q(J#=oRh)~t;A7(`l3_; zEqKlE4OFDv!$%1bQ*Q8d0?5+yrP76_wrR11jHbodYMO3+&+kM@l1JClqw=@8@Niyz z$#~px*1tA_5~OYB0VIA(tPaenAA?Csinl!GF2Do`{!>K!oe>1|CG{IFCV%4i|Dx0G;{YE_>C?o0iTGRU!;HziDd=4Ll1=cisb0?4CgYPmLVL8+8ht2_$2-7 z(1V6zCd#0EPUS5S5CrpZg6N-o3PR=a!nlw5Nn zpd(t0|05mC^)PU{sdJ+v4DA70{#iX__-H{RDhGxYiM=b#`r=)ryXMC}c0Rx~ER;eR0FOBmE|ahEqwa z3Gv`Y;js=e$BQB6*g%ZzsWVn&#dV=XE;Uv`{HW}k_O1*%7z|ux;J~4EG@Mheq5Q;t zo_Yr1afh{s(|QwbWX1BSmj5_wA?z7{!O7ji;$Wly&+)OX|35n1#Q#~#W5|E*lrJm% zxh+0gSzC}aN1gzcE+l67^Q}-J{)>?Xd%CE=1d%=;kYNxl&!+GQBHJ0rWH=#Q!0-FQ%HMeVko$Sp%dA_^3g6Jq!l*0+Q^NR!ThS;hHGfS{i;G9}Y77frQ5pi?1_NRO5&;N_d^B(R1o8-TPlOx;z z>tJtl|F@RMJ^wE*&-*z0FD}m?^|{aB@B7Rb4XFY>jYM z*Qt@n^b(ts%y{bQzqtEbt^7ASJaF%MyP+5?}k&(|?u* zZ`JXCM#nDwKiTB}SJEwIuU~*7pP@G7 zdL^d}17cv`)3m8%-J?_usqUI$MJH0lnCeRRH5jAn3eK;3`k%ll%ly6E5zs{c_xGIp z|AP(vU(e&w|G+8ggZy(J&qqxE`2bcy{-tkk5VUeUQB@p@FI;syB>vv=HrCF`*b~lM zIP%Iy>rx6E9dEesALOZ~|0;Ig6$*1ytSpLFmG zCdIOcfwhnx?U~?=qwk{uPjAcSy_wyFF;v3Cc8KyUT!+P9TddONnM-Ed3iD7G zU92|V#DIh4hRKj%%Ge(UXUv@%3z*-cf(JG|i({6;hw{i)Fay0YyNd0VVt)#zzhUc0_pAxvyMt8Fuettam1kI&}Roc{?f z&U=Xg)^PrxjE?Q|e>B?Ue_hX`ZXS9J0_IyekN4E~4yN~`U+;yxoilWSfIN@_O#^n? zcw<%RPe9vgUzQXwj@uTWWw$wu5HD^-6=NyGbzgZ2vjC^;Ni|~DpQ8L0MdtW@g0O`p zmp-=%Z02<4aS3`1W0!B}P&(9$t!X7RNCwH-sv z7g9`hEVCxE$QeFx8ls_^=h@1lIr%+Z+V&!n`a$cO!u2C}Ffm(47{LiWun>;5kYVDSgZoRc2Rf&XTWdD@QQG zeKkhe%3_w)HuWgt{pmmo8LLQz=h9eTU^h^t4QA`r28{BL7Kg*awpeF+Jpt5)S6h!0 zLMahiUF&fMTi?RzcbGC8?FG5ujE&KZ&5BeGRk1}*Sewr<`&NzzE=np*As|H;9~zW+ZQZSMcq@)-9& zZ_@|?rQ}{x3#6}~N2~oY2hq3IhlrNRIs$#_Losz8B^Vv!0CWliuw?%#TXd6Jh7@Ub z7RS0s%EC(80#)!5qG_63A$l}^`}QPYs)#R`6gasJPKEY^_04Z5T%PCdIoO&rrBXQr zucBdVZcFl_!QX!eTX*2wH|5yBHSZX>jl;)71T1jOR?~kvZ>IRMn)qL%!=rsC|Htv+ z=Kg;zk3s)0(+J2p2V&BfJqDUHay^cdz!^u+hk>LN76G@qrJxvOfU8&O#QBw~p8D67 zk#D;nI$H#Va-p2^d)QL_*m5ZS94}Vu_6eh)a4JVNNeEE;XGquWoBQ(b$VmcY^p5+LP_Q3ug*grJ#y7IzjQN*t?N)vO(p1AJo zCCUjV1xiAs-R$tVpi`K!0KMD{CSXhLCC&p7MCpBU5A*2k@*-fG!GEz8X+%NZVkb+? zm#WVOUYxF334yrI(cWkmIyTFr0lu=UoyMtjK=m~u^xW1!wW}Q;LH1qni0d7#p}vl!hj9vE}XiAdnWrBjz$xazLkDth%1A9r@EeJPqb zW%s~)1Md(ZvmAjWWkIw+P)u-gO9B?&oG}d*vGeJMYB&m(44^--_UZ4I6KP8b{GM2g z_bx)%wCvp<3233-MR0TpgPM#j(+9MEo%~+LRO@a%&>=0F;3>{^{cN`+>o&)vE@--| zWyKBf0GMY2#ikAC5XNzOf0^Ssj?pc8MM4TBQk_hq;~N( z<8+|R9{6~U6HxwMy(&XxRh-z zEf|4gwY3Gl*;f!s^ARf)R#_P z@+p2Z5O)kdrIcIhob3}&j;)ph*6UXf-k*x;EWU>iBmluXcJ{x)WD1LLQlDz6VF;~K zFxe#6HcGGIIdvUQ;T^h2ig)?jG_9EPvN^p|o}s7#bCznZ z{^a}i?TP!=iCC-!D(*6{VND!kao^(U9DKZf;;Z5gM^G)=4FB`AkuC8I%UGX7kBwu~ z4x&}A0Zzb20mgMuLGR42c)aUweX%-Cor&41%l%`e@3GSSaLB3(*UYAv26qZ=(rHGs zS%_x-tqcjW+K>!ueQNIia-1@jEQW-<6@efY>Z8g2@rV^npsYfo|Fef~x`+XgrI#q2rFNyWFNLU!q3!>y1HC_>7;I+=mgj$7Wn31Pg@U8b$f-OBB2xDqv6dHbs`Rn0y&yYB`$ zxYh3o@gbSx2*dT*;)38dn{luFfcHx~*}ctX!N6ju&}RjjW8AU(3`~k5Bd5E&x44+h zZdfa{R07HF6h~2v?qQC0Z{qZ3ckgB#?j4PekHdrUUyg1@@a8athwv}Qqr>CBjK-tG zgS~_3W*_a6Jk%;j#@|^yyTu9Fy_?;jJV6B_pJJTMzU9IF}H?WrT%AhaCm6ze~vc(KkIo6{_jdoc`v-5v49>e z<7bVc?-Ncnzj~FwF%rvERY9>nb$_qm7?n1sQTwNc{-d1Pdxl{;ONwO^R%dddOkP$=bPtIJ;EP+M&_y2y!n zeW8J0QHD?M3jm{NWWL*3RdDK>!7Lb~xkCS{(CKtLH|FLQx4di13u|M%=)qi zLG6-yv91NSvGw9>ITC8OS-HpUbL!Qq_I2| z=|U`Vrk|BAdUUJuS6?tGNB{yB*Tjw?Z(GbOY?f`=k#nj{#r4xhR_57(?iqiDz zg|~Opp!h@%+18J#9o&H4Jv|AxHo5u%nNVZ!88Y3BlrH5^!uaA zOuBj2@zlwGSsJIe4_8@^V04})q{tyo3Ie){gN^n-hqnLE{{G3v{&OvlA^%lR`SRjm zMaz#^IIJ8|-=bouO~hJ6#i~_cNEbR(tIQkHFF0Hr!z{~UrTc7?%WSoCY}xjp4#h%v z<3r-S&J=#RxWp2rMueV|WvzQ)QcdmOR|U2gU_(y!@T=Jj~mKt$Z>} z^V{7VhIhde0AhH9VrkIA!&R|ZX}{3-B7T(^Tjlr-62%j0IBoMD^ za%>J*wABbD1vusmOp-?EY&^yZE*@k+vcIKCnu~8A*le3$mPTahD>KCD?j$7zvugV@ z;?ieM#J6c^?m`jD^4-gKr)9=ZdPF=2Bn9^fgfIaxiU3KcEC4Bv_$3p}(^(P$1jz%X z#8Y^Oz!Z}L-XSsszohppB$27c8G^5%NdFg3WAGIuVw8K2G57wD@Kp1E^E94K(XzV# z|I?iRXaC^n#M1vCA0BV?|7&>+{_j^l<;yaAV&yzq)=t6SGb3jjX#YWznIvWg6S1UL znY2U)&yxh*0lp@wu-=l9RXp+KE+qO4`N%i z3y*wZ#SCXfnxTA(3DMYZU>P!7+44&J+`z0)-1H#!7-)sdvVzB?yP<~1TE77UW)U+H zORZ73Yer8{@f?H`6y8xV1s+wORc7E-bC~8nbQua=C*e&C%XuqAu}(0wP{n3DDi#l= z2(Fr1Y9?y{alHa8thx%%ic~x-gMIt1TFiW{;lF>HZR`KDICf`V8uc$_|KBR7j|DaD zziQcWXA~#JkEr~T6CAqt1<|R@(k?Fz>1#?w%_*U8%S%Up(2U_2#_M4H zrgJwJNE=RK$Y$dGZ|{6(Sf@x1`e9=%I*~}VXPR3+Oa9Im$fE1IE;3Z)dZL9&>GKJ%kRIO}h4N%MMbxVOP8(9^+ zZl1iBu6)0Diq+(vp?!(9e(}pAvl@)WP@5C>ArXGYLtV(?7Y9lFAh<9XhKP_iX@m&l z$h1B%kv12_Bqa#&$e4PFfA;1#TujbXE1K$`9=Mj4zvNl9n3rY)maWy4K~^6XY#t7^ zVN@?HwM;4(m`A{-Yi^vU)BlCj_$<$vW*b;WH4{kQ|Mt#K`)VjBrc4XLN3&xynp7~H zg5W)Z(Qi2}(7VK&B2siy!I|IW2;Nojy_Fk*a=D^eFI4tLj2;2i2Ea1b`dH2h6N{)o zMnxlIl-E2L(~L+L*N>`$>%iH@TDH^byQ0R6rvcc$Ex`7+UNc8oj6+CDR(v$@W~sC2 z9E_sjJx`Y)>Z^v7)f=VdZaV{hH z;>280MGDXtOp2fySl6suTRCoIpSqmLwULGfJ`lXiTHwWIfqyqc0_z$>StYQi!BE`0 z?&eEP!ADtJDe7ql)rxvwzg0;vZB)GQRMQXG_OI63p7yCL6xq_|lu2c4!!D6y>x3rOpe#NUD<$}TDcHU_L)`6-;n<>jM z$lOBpBHl)(>*;Bh|F{}-88fgZ`~Tz7zU}{gGCJJIf9rS*`HxRE*p_#CgMQ_}N`?Ak z69VNxdX@mUB;G#=Rk_Vx>4%U})?hk}FD~a{d~U^h*wTe;VIiSZR^}op$7HoUY7NOJ zjH+)wQB?Bj6G$#|G{#>*up5-^d2_W_FhwQcMGAPHJjNM7$`jqgJOU(!WCA|!wi}xA z?wG**B`d4@BNWAhFFV;*<+Ka^J#CGt@bzXLm3fH{#S896Xuivm>C>764d`Q}Z3g}eBqvW3-z$*}BG zsH6?<~VfG2N{N8s^>fT|7+Q z2Y3EA)hIVNI67oxvIflQ8Ajp1SwCf%SXsYxtHn)vzb%tTMLQgUiU>!L?t4hd_+GbT zxS#%a-Y6^m>ajP9CY?1i`xwuEn0ixG4Y5+^nZxY^fr&^mlwWN#@en@@qfm%&qZ?|X zX;w3z==suYDpp6YIGlfjqLnlmsz^2qSPF$gZ#I3wmYoTsXQQhag;W-y*+1nsM3*0j z88%%x4glX@ue--QfSzH%XXHvHi0I=NBgB8BH)j9|9&OVQ-m-Q50@q4+M)b%FawISJ zkINrd{wtqe&r?_1eQ2UB60C1tHzX^?H&@hKp8+0#;SQ&ptL=J*D4X30f;|`mD%f@@ zzFx#uFFLyGzKM%V@_BLajnyV7LA+a-S8@b8)2d8Zej+g`rvBe5eFp)|unkG+GYiR9eXdN~s>PD}s2hZdYV7P;rrwE!*``tbno=WcJ0K8!}p zvOx9~??NAyg2`m-V=Tk<-kHk6@KGeSRY!jZA%%VqW`_!s@aYvywB1 z`T}fJ2(UOl(P86fZCHXCkOOJR0~s-H4eZjyc^PT6!{JYF(kdFRS=bO4_{PZ@{^)L+ zoKzF#ospx|GULl8qo(fgDyHUkMlZOu?C`t!>!RLH=%890(E7Jq z`s;rnQ{EO|uEjvnHF^V)glFcV0*5<{Z46)d$_Ys~OP=!f2y1smvT5n2RfMzp1>E9s zuJ2lGGHw^wq3AC___Bd_Y$%HalP$%Dx%itv(Q!v*rUHxjqxSOBTeWkm^q4_RN~Aj@ z=Fl(xq1b8J$v$B$Mt&T+hySGM}@7`Mv7vxe{-s!;diYsuFt_1FQxr@ zCyQ22CY5Z9=1L>0^?V2eWE}RGckX?N6q?Zjx5t2BjpbgCOakch{#IdhIzz6$Uq9w= zk5ifY(IE9$kv?BeV+Jmfn`Ce+PcM|I)-1Fn)hyG6f3(ST@nrq3A}sSN&U>Iq?Cn%- zuP{8g#9^5c6Yp_kaWRPDHf&ZbW5MyM9j~u-021O~6(HgRZo?CQZvQ9gRF+>oIx`$RHLLg^j7WiH!%vcVEzWp1|qbK1<2#Br=~ z)LM%Pp)^|Yf$3Ha^_*4*NwRNnKt2~aJ&^`i@UgVn>!_lGy!Cp#;Qo2x-h|Sns1@e8 zuL5UmCp=rwM5-UjXR@DmB#8Eyt(O4(SYXfX>BRfHOPvJTeY9K82{)ed<^gd5nN9o8qhMq1KRFWLOi9qnoyNLHD7&gbdYXm*<_ zv!#t;mv#X#8Oh?3Fh4;Qslu8xm>nYQg&>cGkehvzPnCBsArvipo}GQ|c56#~IaDb) z;j-1@h=(s$TUwv?qa$&z4yggQ231O3$Qn^FQD+MO3PSl-Jy;tnu1_~a7X-!o+M$+v zg|=xuldUvYcP}PVRb99i&Skt)CpY-RSepRsCfM9TM4g#n9(+t@{lSqUiip52e~e?f z;iAbRn<_=^%A8kjQc^uML21S0)~I0j<9+wO!lp?rOIbaT-wp3E2vUQ+%nL8Bam|XvQGiRnIFI*Yz2v{rR3!TiokRgw*VpWr+)KIKU z0J99u#EnSjbiIR2g3-2Lz^aH8j-5oDf7m{qG#8n{+|dYYIfa>I8%kls zB#5*snhUMMa?w0~NZX@hSK#g2J!Cm4sxE(2q+M-jm(Mp9@TK2XVSdASY)If+*n0=Q z6cO}Cn*Fcydqt%?!i#|B^x-<;sYsQGnCJ&0BIevfIIW_HQ) z5&!Qx3+cBBlkiwaQAbd|A^z_M8$H_sRbkCkCX|HY^l-F1>q$u~IyqdcNr}mG73Tgl zL}M!a;S4TOS6@!A7wbes?9XL55jQjMc8-t2!TW=_S6d`(T>J<2xYCF-`QnCWF73pS zKhZ)d>*n$Yz4`yX^5E`oQUc!k0g>IEeN3oQ^(-%?k|XS@w7CgOm?C^y{ujNu3Mj@A zw`~#H9mYXq%#wsq8c7^xaC&96vxIgoQ2O#1WN@P~WUUCV9TMm?>gr-J`gi6^)_qdO zKVh@*M9c9lSNgEjg};?XvHn|Ly;K!>Dx$fmZ*#l#cY8OFe?4sy%7fam`JaeTKQmEj z6lsrn;8L6dpLs0fskZ`{9Kc-%k^YGxdG8sB20iPM4FLD=mhW?zMLOFq$g-#4Nu_3% z$n?R37s@X#2HE(dn-not1-a1nP`?^kB%@$=edtQy^YalgiNOX7g#O(Ye^Q-psn78F2jOD4Z>0kKc9G1)IYGXLKYrv2X;2gRUBM7B;p zYxv$=1~!rOJ3vYi!}})Q4`tr}W_cx=isO7a6p!5RM7uWd-I8isP_&%+*2(uhGj8gKi2<1_wTe0+WNn{ zihe0!U`qnBX8Rf~L@$*r@=_&TW!H^Xc+!`#n_WB;YnvoOyRhvZ2pd;3!Lu>kNZo(E zcqr+*`8lcIDOJ$WZ*B<+&L3}9gnh}o$P;6--%wbDJ|j?Qgt1=f zdo`91AMgI6F^N($xQ#<=7b#*T+cJohT!)7?L6oMF0><;K)$xa z{~Hl}O(2jw>yQ2C4A`RjKMu<;&`b$&_$yqG3ekVIJN!X*qOW?}cch?tCa5itn|sX# zq&qnDlZGu>bj}fA3N2_=;Qk*E}NM}sulEBXD^wBiJ+*|Z@_A8|cWSThrw7gNc)u9e0!c-lvyJkX%x zj@<2uu>|4cFnlvv`6*Kiq;v?l)Hs)=0TMRajjrFb{tOM5S_ zB96kS94iT>#>`Q8AUqsIZ{lI>|T0&@d_;@Kn>tlbOFJ-J&~B0XLO!B z@aj1j-mXibKUTk-0hh?)Rm7#n+s_t^0^Nrp5Wr zGpCzYd4t8qa{rJ^M;Myqab8(;Y;S@SC;-MhNT}Fmy41`9TJGcHw~?4AQ?YOiE0uC? zH%RBAi09>2O}yXtkPW|teL72Dts{TNtZXs+#XQWE;Z^T~M*qaW9_sd%yyp&JuY-if?8_t1bNe`0CT( z6)_`hA*@A;>{&Q#T7&4LYssIy^1rBv^Rvf#D)~S5x3U*!K^C>2iwlw<gEnSNN$y874~tGTrv4BTiXgU?%@)mT}EzfNrUhb%5Q2@D;6 zm7};Um`fdhCSKvb=>uhn&UksOb1RC2250OeKT?UAZ|HWH@$)c^)P~R07RW2Z>J6dt zXk%9~ace_Y`%@J2;WfL7+#>onYrf3ikVaYbYo$7Lv(2QrKd7c*;pO^E@Sj=x&wV+@ zn<(0u!wxpS9_5AWQ864{@~iw3Q*P2o=#Fm*`kfEC@1~FLP@J=%&n`b&;Kc2TwFDT- zQ}>(Y6X=uwLGeS(_c70277fMBX9hi1osMVU<^|j#A_E5Do}2clkbwBrD*ZzpFmGvwV!nSwqxX7$ z(B`jgGHuzNoiRttC1RALgoabeanLZN8XGUAqZRr+yg**ha^}iKy(87YTtgr zUX=GTCx#F`?}Vp+7+H|k6A-{uZ+YM3%P zB&50a)8PNby^rI_TGAs#BG4W7Y>5xwj{q*gtUJrUTA7sTUL+FvKLGOYL-YpZ{1QX> zti8Ga?g(7d%*M-uNupI_5-@~HWe^UeIhzP0l&ZA^v~s#zJkNo zQvJC0x*fvbrjU5VdNVC^)Wy+~zDW^|C#&I2VSZ|DP$mVOGJSK#iz4J2^dF(F3)yH= z)2JoxUrxW!px4cWi~kSyWrk5lALV2K5CiZ+9~Bc^q80vq=I zR*p7}#b{W}4>r43x&Vi)er7s@Le-vxaEc{P$0DcZOJ1R;an+~JsnE`?)33(*Smll! z2Q`xwgV2kL4{TEIazR(>l55lPe}3nzrgNOLE|_||9A%Gal~f)o>`s~)Yz7YN2Gf1E zLoGd-qIIX7Sl&33{|p~~sc|B!*_moS*!4DDOgZSGV!%7-@s)6#0sJ+u)?>wmidj>bC+f{J*ZWmO{(f;CL_&6v zyYdF=n%k8Ig7*vAq^adtr6~f;E91JNqekge+kqFzD?Z#as|@`Y?8@LSFtg2}E(8uS zUfj#S%2u2p$9rr1*Z${fQg0qia)h< zlJZLH{>O9Uqpb8-XVa9E#|xh9wS=&_Y4pIm5xki#E^T@msz@xtyjxVcb^ro#qwbJ( zK;LM=Qgc(@gwq{c7e*ER`y7>dYqE=4cn@R1ztBy%e+{kh#?{Q2%Njmr^zyc%JQ*g? zbw|S-C|vjsa9@#qLi5%zp;da;gKN3^0-jm0%RT0oE1LzXlE3tLaw#`olzx2CM;Ic7*Vt&+5K5>jXR1ykH9Ul)Mc#NK@KD)4_Ht zS#RjL!XRGDQS4#Wb>vk`L1X6^i$$u#ut5fIl?J>Gk9`9_a^trSbtHKKKI`lR)5ydY zB3)DDYH_2oHgxC@RRKYyGvS z)-TVKz*;_q%Gk784%TzL^e}QVcFMG6K4n=?7s7xYd__hg>o6{a9}(*`IV6&wovls# zetak9HZF{mKDU30v8t{{&5k&gW@|Fi3@a+-D#^&V#u(234We^4 zNEJw9OONJ}vREQub7!#UW)H#`o5m_9`iQbmi%Kg;Gmp$G67Wm~E6`@1?q2lpsoXO|^P}M3Mw!t=RFApsr?> z`bNdD4`rqzCI5aCiX~Lt`?VqqrdByAE3U>-6;G(dYH%(5r$jfl_EWJM)A8t(eATxG z`^ENCnwFYJgc}5!x1hr{ljt3dcHOi7k@is{=&d}PbZ%&5Z@o37Yl|^LJLQ%NKbV-* z?dX53=DX%53HM!^KGivTpS3Tk?2pGxu=7`?ap%s$yH#D%t$jeVYx9{Hkgv06>l|2r zslN~rFE2RXr$dqV+s?QYRlsF!gg>Rgu?cw2hpidY*4TRo*D9Wkl+#8oMp`Q_f5s;9 zH+LE8>;pv_?g1nur1pD&s>AxH9_}tb6^QD#5ou_YS)Xp?pQ8aW?%FOQ2PuTOocS?* zwltVgSAYThvOp}(3((wdU>7JhMv41&d+AQ&0) z_@%cyR+ie|O}r|~e~AYLETQeH=j*Wm?G&@=s1%S%t!fFkhtuOQxM>cTqwSgL~%H-k}smu<81)4_y_ zKrt`eP`7@@*Sy`O0^ z>?{Dj{7yye4Q8zdM|v&h;i!pMlU^Vn+QqN^D$cDat7PVwg&Mm*e|I>JOu!CRn%)nI z7hZQEP~)oNpRof6y-x7ui8rc%1XC@SwnP?4%=ebN|Ec(K{V2HfYQ)vmwed%*>2u{J z_{`;j5y3Gc#u|QWU44`I416iSH?M$lHJ1IYN6VterDE1u!Skd;x0CyRDhEQOfGHhY z_56cv(1Z<5d;;p*s#gS|qoecO8ZF=HJb)sVS>o>3;Wt}SCe0|H(OxQ3kgCxXf1)0) z!&&6gSyjHX${`&AZn+gz5;scU=Jn3Mz3C2|j;5XqF$Q$*=i!(vbb;FY zRQ>ec6N~=*w6TUWX@}m{rofo1;qKc@+$pBb9AyA6dc9AQ8OoP#1 ztcTK*2>xX%%1=C9`>KcpD$Nj_(d6DdP_~iWSQ3L!Jk< zI7hxUfVM>hh21Ye%G`I`dO1jM%EumDv=FgM_u(@TLY+!R+Fk6CzemnerzEql3s`C* zexys$avo{Ms_-^#63Cxw)ZR-vskYH-_E-AQ*-y6>Pq)eZn)Fj1dkPaW1)P-bzt++= zo?L#2@DcDGgRJ-e%X#pF9_xHRb3pZ&H`kaspd*MkO_+0Q0MtI1OA`2y$}U{c`nWK? zxi+ttX5lE*%oqEfC_s7-;rH91xKU8@+T`a1b9H66=87T9!R0G~(kbpqE&vB^_r1{u zxsHx>20)nCq0W0!au4dA1F@$VgRzji_0s^{j;`fK5!E?A^4&HgsO{@?7S%4kIFLf* z&eUoL<}{$F^y)(ddB80NN4_-Bx(UQze+iCK7Dj`X^~m-=@UgoyM$-yzg$wYOIUoHf zv@@K&ObI4fl6RT%=~VES=861RAiw?f?-;sHro8)o`}fGIZzq*Id}6py!*wV0IoVJ! z$2kq_05^1q=~k0CLVNEDosjGv9rQ8-qL|ucUi*X@z`(qti9RFkB+e?oij(fD*C)4;#e#8WX&clB%|*?AF+RX8UwUMKgtD^ z?S$4(y&jZHpj-C|E%7x=lYnC0FlQ`w1>xWCLsA@C6e-WSkMHTN`bW|uh<7EP$ofuN zNbpY#u?hk}C06gmX@W3oR_{E_{^`;dtsK#Xl_dL|(JH~q#rtAoXS|eU&-uP`C?lMx zId%cy@z>ftF9})EqsT4Lc-G61-YW?k?xPUJw!uqJt*uLLpN2|CFb-Z|a))kK)l9s6h$gr3;jd`t{Vl z4$JnazKlAZ-++3xF?it@;H_Hg1@ux*3g`6+Bi%gcYtXnOZ@0*e`V5HL?5F>)dYt=Z z8sPir9f$xtdVPp2-LvA(tS@Wte4Lq<%aipn+~Mxez5b)~p?lO7UA+gl6py$j-OF9f z;{1Mn-^K22`quyhA{KT0+SjdQ95X2MMvGf*;}?nXBn~#v4N*_zKbzBFVO62evA_QZ z$mKmSlBdsBGK?_}gn;>qcs9izgM+Q79y?H= z`R+>Y^!Sjg;It$PioJLT$bop?z|hhUAZSY2Zw}CHN+$4Gig2m`I-CW~J^(xv;UPHU zdET}*{rI>2`0@J{@8em^zFB8MLZiumEm;)-Ehk97`53ke*}|ye(PI5?ydV?AAgkNo zJ!jYi!Al-cnw28-=P@8_BrZ26+xk1!mSlN2Lsk2}8-|ig$1JgN#keaJ zsf^RT`f8>Fs-kJ@BF-~4030@!sJjQjv$%R@(wHgG7^g@jQT}=+`~oKXE;z*O6Ks6x zUd#!0$$)-2^ zk9DrZ>5{QE#f~v*c6ik@hEdvauL=>wXci6A7gU#C8JV*NHl3w&GC{I3S+d5ELvSFn z*{r2S_y2_;v-IL0fhk2C&;Hyu7HbT8WO2DpMnu26;B4OXmJa*sXgJ%O-9@b3^GuiR zXhXf2(y-L4yKQ;DbOm`r%NWwON5jb3d=X3Q{fVLM^LoAfJ3Aob0YDoD_BCGjS(|~^ zYo*aJgWU7Zj$W$|CiwcKz;TZ)>u*S*WoK5)O?Wk3(+KT;r^T7X&q54el%Oy=CD|Cp z%?Zi41xo4q)s=~4MktyZQV?Y%GNLPX!2z<1G}{5FJgk4;mSC!;a-FeOOFDYQ3_6wW zmw9O)KByY$7cFRPx_Sslm z08x{Q3@w<0ynJ_F02h~}jwc{~vKo*CUtf{2nx=?wuI_4qi!;KeQFXzLhQ(jacSvJK zASc0KiwPrb9MY_h@O^V+*koS#svwFeD|!?J%mso^1ih5Pum*+sk{P&hlb-&Y2^*rQ z=!y`SND)^YmEO+;Ar^APB;^oyc-lkY(12(|?ND@sP6s{w`Gl^#8bRiu4T(-izK9BB~X2ZNP53YG5 z9;BWb1r}#|z;B+kqtU6Gy>F2KZ{KzNx zEtR3))=nr?_02G|x+7tjQ1N?`Z;@3-6sq#{6%vL&DCXO|!)uRg&~|sX-q`1LU*BAg zAE;v&wDiFGq;%t329Qu8zkl9z2r4;cqTjN>q3fTh=lOD2+a0xf61m98?ir@Nj0B|~ zPwI*Oti^DHNabW?G)H|PV0w7B2I;f_6{nk0%tu|7v8q8_EIz$&Cb{M{ejMK5jPnUM z!}#It5?C@>t+)6@3hp<&`I*|}{>i5oQ!U7nGcB|cw5XLC92+k8=CKe`2Atz5FUf;l6|A;wg~M|g__!U7B}(Tux0 zyy76OLAGTfTXV6cED)Jp*-qOJnSyL4Hd-r=H*dp_O1ZyYtfZd#7T#Ln?B{L>Lnfu_ z-;!n`#TJY7>}|AAz&ZN?I8}(b0$#Qqic2pQ3$cC`<#jBw3#32pF&9-u8EwUNawJ+m zugn#H>Bw$X@)gn~JXY>RS9+h9LW4XWk4hJB03(#|K&z&fmfQa#%Xfe-;vi7lOAqzr zFo^eK8(h6w@gmaJsWlA>%zFq#OX|4w*g=}We4fEQLotDs8P%>i25JO8V#(P52@ix9 zzGL`irZYgu->czTx+!{^E%kX$d7$dYc+zoKMixLu9=jH>D1silmIC6yUD|xVq%z& z>o~oA#L^$)UuzO`P}6_OaCt~_-3N5{)?r|V4&C9DEcxPm9OaTtOY}Nqi3mqmVM|F& z_d--0%NGuvh;Rg)F@n~u-Rvho@FTRDAKP|b{NS>n%)lp;NWwWRUPb;jQ@zD@0<*P{ zUM@6F;_DfP1^brwfj=1c8NY6E}Hc;RpPyXvyB)A$0_6f}(;Z$h!NMC7PxF0Y>Rc6Uq;C3*Rbtf}>yf-fDT8Kk{dKnR* zfGsOOkch0TwU9#4C}?lF}=NuqaABl(VOgl-!rYpbEsh|{Y1e&VVgD10aV*V!lvWl}Uzw0XN+x+Xn$ zZ$b9XArs}&2iBKIYby_S9z4zo^Owwwdk_9-zAt(AUeJ!Ic&?qb&g0`$FY=pX>T@au zjZ5rM`&?aLe`Q%72doNid?qoGJj)BC-fi!0jRj_dBU@nf4p?!D1EptlHPx+KUZ;zLRE zy)0ZE8_d7Jo>Ub%RB5;wi{FHPlF~GEDX-s`MN<6(xiYLwaLjG8KCdD-vH$0N` zRQOi7Sdy?}zZ4f4;>NmoMvI~M_ z;YG6aoU9}-r$0hf|J()pv1e+fa`C%bE}vxmRYh#&zhC{Bd!5TzN~F@K9XldAj(y_1 z2Wdd*(Sv#bg8V;UK#6nz1EKAL@~1#XU<_Uas1~D?e5Om8FZ^4U*P&4C*feu*loHBe2?;jkoqEc9v&kDgSa6a*BUA@iDS z%^r%r_fbVtPRl1T-?m!<^_B)_=)WJ+@tDT-Q9-rD!FnlUM8<7q*j%zDKP@cck+nxg z;HH8jJha&{@(wie?89@mfDxE*ywHLCcJE}Ysusn?;zB9e`wE6#sxIXU5he8*E((t2 zJV7-|SB-**8t&_8?(4QXk#obYGN!|}_L@4DL(IjC!|O(9R%W>wODUv3UeE=BKZS7n zBYm@u?1=)q%}inhzsWPPcI~$x1kvs&F=5BP#UtAvQb2l)di<+qqF`=yK4;%smoH zJo@NIe>Me!QNq0b)BckU>m<^n-`ZVcZ!U`vl*F7dc*)bn*w@C=gnl|Bt;n+@OGsbk zZ0EUT6p}ur&_lUo2wL@=tclJgGDX)6GCRbiEzt5f2*WzfksK;RV1IlmVGN9d0PPBp z^1?a*_-}kHT-+ks;(3N>gkJ?rV9h!Q)KmB)_4l)&2&{O;@E?llL{)evTyDPz7Ar5d zk6DcodS%jFFEsHU9+@4r05FnrgM=R0LkK(j*uJq+l&;ZW2cp!*%$P`{?5w;Locv?0 zScg0Y_&l%cpKney-YZ}G`#l0bhbFX_N|&$wecsQyJZ-`)J|b>$@Zls)xCLO}eSCb> zFTwsw^~lc8-1>eiZ!>OA8AJ+cbzka27P^1y%BAXQy!%KdCS9w{C9793eXVJNNuyG% z{dOl|%m=#7^FOlM1&p8JXgkacx>n=6`aV)lqA(Kqb_V8r#i?=bx<8Ev)-7jU1dw2eBUu?-2X zw{mLV7_Fv8d2$kl4b_g(zx&Q~c~-`7*f9}qlkznB1A|hkRij8AJjqL>)$M9nv z`;!R!){kXbnLUshTa<#wvEq05)wvoLFYn59Xs~O@D0S1Dsq5!!sRxy$>c&-OHtin? zv?p*)B+`>Ssz;X=l2H10jE~pSkFe-pbE2B-WTDL$4zl;JA zP!py8AX^-c^C@`Sbwd3ovE%__+J?`NQ}f=tMcx21;&IeZ-Enb2QD3nb6qwTn}IQtOdjKhbWX)v%ynA71u)F&TpZyl?ZEyLAF3We#q+mtOY zjMy!LwL+R=SGn>@Xg&>yJvO1IE?tq&G>Oz&Ca!}v+6a~4vsL^$NEilaM;Z0kHB5BWP@G%Aq!ajn8xy>cC(EyicVF1Z4dorIBT1ujQV zJv*<=lbo^WyIMq!1YO(7v1xcLKsP78&aAuyB>W;)Ar-mGN->+{cO4kD{=Qz1AJsvg z{+zsm*rK^)IedRtn10%23;gY$_B{$|u0Em0^KNSYovU2D-xcOgHxv*BEqN=T{?V*1pg1zaE4 z;FZjq6(R0?kt_K_`6k@Y_L!duYe>Q`;TB4HAdarnv?*BL7IROkWcCG{7mOOBlAnbs zCiz}uI;g54S%Or%mz;c!Q|f`k)=W!^Nu@ltsnz8X_ZBebq+OBhB5M8Rt{wfJzhMo& z4>hr9o9(QdipQms`k~71VnZY4fE_o{!KT@|gJMAfm!t6$et+**0Hm z)XhEmD;{(B;p+q-krb9>2A2Z7_1EUPf#EWir5`p&DV*NWn2uS@%qy?*Ew>cI9>&!JXaAas?)IZ%*^LreggCEa;Mc!<-wv<#^Ww${uzWNG7RO4HwIf=V$pYi zU|v3_#c@2z1=Yh%?IzI)qUO7Joy^SS8D)Y~(h(#kLPr)->W_#~{ z0pdwuh!Y*0MAp;KFE)j^>VD`IoHG*WHh#n>h{Je^irO}0Aq*i~vyEXhSs2&ob(b6l z5HEHX|0xi#V=45^(tp;XCrayssk=9AYD!i|k{#;(7KPhbhWYhA_KROU2GloEU|A3S zvcXMj#%tTsxX!6+7wO(!38yo;o+w)Ew1AMVF=HtJ7 zF%O@eA@~?;By7Hlv@ee|Dq)uJ6=JK$!>8L9q0Uage~ZFH=k113sEnu5#`=V)ooG_8 zxpA>+X#)^DH&h|E?pFL)Nc>5sYhk(Qtj}vT1UuxSp`)+Rtm3ay3DG9WUs|`i8b_}X z?K9C_tzRPIHgkDND@pI+cMd|;v$ihV8#+7C+5q{;ea;;FdW_W)8TGK{l2PxP5O>4a zNaz}S`NGJk*HjO&cQ}=v1}unwdVV7+P)fe%SF2c4|120ku!+<8Qd1*AJGMwVaM@ov zsn%WfOfl46Z7_+9OyJbyvd)Hn92!?#BIiJG$@sOd05o&$=TRu`0Cj-F3fP{ z#9R&4{m5cYLGn-GI@ZZ3DAzgRJCZ4HWfK8n*L*#`VmUa^r0kL_tX@_! zKr>cyshk!&l;80koas&#(}Z3h3ri)A#fDL5ouXh0<5(bS%;%GZvbbnZjq>!>R)5tRe+iu0N7-6hB^v%=^cQL_IkwYe z=U4pBq{Y>xiG=5yBpQ&LUBAjWRkLV${-CL`BPO7D~ zS`@W~`J<#Ppe5+0Y3W0$?3MGjnO+(HuRXhJt{|tJAg0&1N4+o4Xwj%3-Ck;XDSVC?%6(rLmFUqCredjib0KABMXT?HjzRVyB;g5P5w1n>-Xbs%~$T^_gx_vV1NX4KQ>cZ*^`b!M4JQI_?i?4e7HEiYUV8|@3UttrXe zR8B$iT`m6`=xcEKADTugWa|RZu~qR4K!$exxrdmZ`2^67Dol?TXLe~gMuY%zkYP_XUCKFt$pSFomj5;l6|wV^r`t82lqCg->dItw&$t+uw(fd z=c+gPgVNJ#Qb6T)nl#!13#>0V~X!oZfSo3gBhvVQQyh`#MfPdB5Vlb22v zH3+o3dzzmM0^Rr$gM289aghH-<~Wd;vtS+?<_3Q8N-Xxx>SWJT89oS0`j$CKDv39qiy zXS#nAovcz;U02iaUipN!I%86i#f`Kt65v)}#SN<)*Bk;WWN|nFWNcRJ0$El8(@M<` z0Lo(2PkiD$#!q}78cEO)`XrhiO(6Ve&r6KnEMU$cP7}6O5(G=;aN2YA(-5WC`0Pn* z0#Xt?3|eR54S}S0$aex!ICwq?n0c&-+!!GJ4!Vt}1(B2F=Gy=F?nys++!ioM?msGt z8R@!W>|8`9-sX(zfbx!nAt5n?uy%vVWJIzQ(QbiEgQRlgjIYtRfnpb=bXKAfV;{F#@fGMJVwYX!=d@ z>P!)~$X%lYF~2}qp)bEj@fqT19Fd>|g5yYfz-$ORnnD62d@PtBE@EZ&Zn2|xz?P21 z(BAw^Wpq6`dx^32?~IJVck-zERlEm45bw|&(J5#(Fc)dHW`4!XQonw+~66NFFrr;1MVBV zhi9mo@fIHg9EbIU3BwPr=4X*{BffE@A*1Zm7Oxd;QKp=-YVq4RnVZ|cF&kgEZ8U3t zj(Yt1`xg2`1ksR&c>2>>yC}e%%G0TV>{7z*DXk)`QJTDVtDc!$#-_^EP19~{S9W8(s5-;Dcqmwj805d%D;m`zW<69}EY6zpBN>h4cA|vX~ zAqD9yz)T}OI|x`hzsLK;=qsdOkX8`I)0H)VJFUOZA|hUu^&hY*fvZ-ouu16UkJKt` zh{?;MhsPOOOpAAS?dtx0VnJW_r~g!TQcD2lD=8d>&;(Xfl&k*T03xsI{$MGyOMazw zQ-#cn0Fl1~w`Jgu!}LMmXR?gRsqJ1x=Vlxz+z2exn9=&8p<%$}8is&qSeyY{f*L+d z*PePO1Ei1Lr3)@wacax;NA(x~q7}PDZp^UYDnBl(mWRFEAjJHH4^f-|x#)V9kKu+P zLC+$DwN2P574%lnhubml>1_~b&H|%UC3Udqt7RF!r%HFkaFVDXrM*HpI*1hfb0t8q z%$bddkI`N^IuqN=D{6thVG&*4WkU6vjU(RvSTJHITi58nanmWRNMk`Bt-NOh|r~&MjI-%K*zDap_tnVQ8c=VEr6G1jhUC$;bOHU)4 zWeDCv8;E1bmcA(ri?pJlgHCmFlBxI8Wp?oGZA7AP9lm8)^7;by***#4B*zuv$jRZT z1#brOgasiW@B1hvC3EDG^LNY9ar0cBge$1KNmNXgT?7>-ciY^GdusURTCDd`z@4>G zb!f-vU$4MBZh^k#<8|6m)Z$POhf+fnm9Ec6OYprq=yQ4X^y%~3QVuz>W(_X6#6Tt& zBU%2<@z)V0>N?k|96@oKP~Z33C@K>oWA_2slw=2p!x#yY^V8)WnNaBk$#zz$xUXM?e++x;CKTx=yPWG^|tQ` zXhm84`cdhCp~?egE@_7A9mUVn$xd7`{)LMb)ZEZb@OqaFJiWVgO;*+)=8duLT;J`d zb1oSCq4|<>;frM|KKjY&^Lw9H3_XrvB#8Em@nirciX*Gy;< z-YNA*!6qap>b2hh$<+_vX~zO05C?K{F60t2^69JDi_#|Fn^^ zfkYDN%u|>{hZepfMv2^*oy}lgqZYXJx?w4I_@f7&cI5C`4_NpVOp6qX zBASfz0)8((6xUvX4xc7xcU)3(A|!ICxUtUh>f9|IWpFf{I+`=AG1Ok6W0{@E$J{=p zS!Cnrc=oHoD6aH>Z^s(CS5%)!ct#c5sdOl&`e;am$>|_m3I#DVuz30ENs0nGj`Gd@gmslD!v7& zu^6fbAI5&_F>0;2s@(B5P!_G!ToM?kp`C$#{@VZ}Xq=R)@yfaKEhUogC z@pjR}mH>yflQbpw%AO%)C8|Gxwqbt6K3y@%AYV3af>v19)xg_c5DM|0`0#7&GNopf zUD>!=<>t1wK4H9b4G-@B00lw%zG5z!dT&q)>?wsHZ^gnIY+P3}s!R4*3==m(URpzCKt(n%O)ByStDR=+ zFG^K03tu$LFEqqpSOz0x=?=4E@xPk&Ekw=g?OF<4J}OHElX$3f{SK%9P8>ybI3#;_ z2qoqWB_qH%p(+Et_*L6-Ei1Fj{%06oHV?YMN6lktyoJfwj5Rz)o3!R#ml&ti*UZoE zG&E3HD_rw08mC{abIXaMhABz+WmsnLi>e|>4Y4n1g2cGQQuQR}n@}b?a}h6Jf0Vo) z&D}v82zhFFRbAZm4KW%F1_550BIB83ozhm*Ud(YZ?>Pqg5v03a z2?0rZJd6dS7%2Sy+lF2v8u?aELRN z+e;divmMKcwB~ZFpP!|^wdN*7baB$^KomD%`d_VsihGJfP9Rt)d1^jEHgGLW;xtAd z_P|awsU;$P@qfDmX}Jl>%9GGRS4$hXLiBF3B`;P{yhTT4PU{{~(^>uDtU8{-*1>~W zaWvbUNJqY{Jd?%zl~$GDTJ&yd}?8 z>3l_#ZYQhmbahY$+xXQvYnSgBM*)%(xMy}a=1kEc$dq93tMpn@=S0ZqcHdgI3U`ug zS$Rh)2);5KD8bC{Nh2Q2eD|eVK!f(b8A=c(Pu~w=bU)2*IHB+ky(E$Jn}3&k(6_Y+ zHr)RlA0GMkzvJ`st^fB%iacEJmryX3BQq=>%Y9}iPu`y97 zdddl=R@H1hst(#`ZBB*iECd-PGaMu8P;=!@tkxCig$4P_S_+7zWEeod)~Cw!`;RD! zQOYq)md2m}wJ;8Y(wo=i5Rvc}$EHYdv=U_Q(Yyf{Coe=4A;w-2FB9;N+@IpJz6F(* z+qVeDZ_;GmSO1junu;_?c^>L;Ulx2{D{@7=7Sr%c0ryvJkR+*mr!M5aJusYda7Vb7 z0-yXwa0>c+pzk6PMzmXIBY%`#P^#_s2(T$dAQyaakp<38du}Rt$)xh{omcNLs3-*J&P!UT+~+cAq^4l zZeDt}C>gs$CKOkL>d#oxcbSla?sDb4t8W5TD{-!35*8A=VIMv)AB{q?fDc~GGBy3R zcNYFGfe$R-DO#GBQ2I5U?&`a`pW!6g^)C~0bFV#DFdqX5 zGyvZu8qU^b8uvk84-u26V)p6;2Av)-Fz@WRdfM6X=4YK9H&431eTzxIBEmGCrdtZFegdDrd6CMcIO0ODt9q;w z){VO^l)DKUp{t-Cdb%xE;M|`{Zb9e7=%>LX9UwWJbG)c(506C&qy+zpqmtCY)tsV z7eEd4|LFL{r~fBM$6NZpkz&*TcfsXeEjLhGis?Qc{RSvQlwrmNL0N!3v>42zUi_#9 z1!hIpb@NlUVl33Xg0oQPE1U!m;3{vyx?-}vYp{heS<5}x;@DJPgl+kI%TmYx3pM%a zd-$+;0;mT5e{ghkEL8p0e2-Ys@|jCGs^ClT`{4KA0nZXJD0;vn!lczV_i`> z@A41uk164(eC8{aL;G(|EBY_DfosbYUlcW$|7s@nvYscmiEm2hlR&h%1~Y8Sd8HNu zs{+V1z>t_%L6h{KFvH(dGR>-cQ9m!!hkCPAJ(S}2WqP4HFjYk-`OgdWQKsM$D2qsz z*Oh;C<_cTd{rIJx{?C?k{LrPI{vVzl2lD@(A8+aZCQ2*%UvZ(;%DcBYh@XF7z~@=u z<JL{iKj`!zau$^eezA_{E_7)lB*Y2-rgeq?yn4O<-d}x&2r;aG9|qQF-=_lBsnfBXl&$vYvwDk zm>Ln*aU`bM8Wz=eTVV;7kFEnqcb)%Qtfh;J*cC0OU*Pv<6vnG&c$)F+s=m*Aa5>Df z8H5ArSDMEzF9w%ftsnQTlSRQ#A9b|Vr$`T$|y&1CoP%Gg0qwg>Q&JY`Bqp*3( z#qBn@(&m>>2>KFSIh@4Gr$U~Ayw46Z5f(>7S?Zh>516CckIinpp|w@=bqnnE69Z|9 zDkVN_Jw$~07*X)clqSCdLcuQ@QqA%ySs^ZH*pTq?GHYr3;#RvekypXO-;WjG+Ery7Le^$_);) z%!LRS!FC)bx6ah9Po8ScHJL2HNle>yY|#pW<0BtnnjO$zpB&I`0G2JOJN`xE$3nlb zQgz2ZZ@WR{ccjtFR`xDc2;DyD=YbaEKIng4ilSFCqxmCNu#K!c@Kw#y3>Mm>YN&Aw z#ldR9G(_7PYSdYibV-t>RvIkTKUTt1TnS1Hc1qDTNpMt3ke{iqb(1XX2_O;zc2@gJ zrtRp1{&x^3q3oOP!sy-{Xp2bP&X6{;N-oBFAe}{XcVXnK$mN!$0O797iw`j3eb9gL zk13wP1f{(F;y5rDSsiO!8(A9<;YAn6ez7d=PqyJ|*OCAbPG{OXH@JE&W=I>seg(3l zz#Pdp_P><7l8NZF{;?Wa&Kt93pKCv2Z@<LMinI z)^4tzBpf`!DX*TN!?jMqos3pMRc7>q1*W0J9z;}cWal8iz1#eN7zz7Y%bM@9&X3dk;23lA_@!!ah z{eT%Kbp8@gFjp9+)5#D~F(g$BjBtwC7{%Z>GL&E_;t;1U=tBXPP3808(KKlSUDRv` z{#b(NkaC>fJx4H3aEfvv;7z7-Yl2w+B4(Fqv0+4L-cqj8Z)7MGR?LCm(}?A35=-eq zHh}3IPy`wA@JMko&{D`hNvhY>{H60T+4W6gy4(Nk0q}q74JfmZ^z^Q-6Ly1}cYj6h zuEvl!Winr;=ay$a7g@;s)N(@SZ^&qwC+hdp#d&=PQ|tfvXHQJ*f68h8{de$0@>9p> z)y#W=q@RBK_CI&6&Mn{n;#3;Y!Ek56wt)lq`|o}X7`KLnVqcxozJOG94n1(;Y8K2x zIi#A?=K-v)Y5_f#K&#H24>4TN0(W+Bps;A5MP}H z=xm$~%YYQkFvBFR6NyL?OQ{V<@CI>95|ZJph2#b(Ns=Lq?v*e^AxC#}1tuR{{#~@1 zGNiyrSx_bW6H-t{Vx|<^6g>cvA~xtEj(9Vi_lO|RIg2c0zdqi z!WqN~93}#OyEZpddWZVEyV@RT|NhLq-sy~jd0^>&E-!@*WZ+f?l{YWl&{Ctc5RxC7 zQIXZEkto}WzCdfu>Pr*b?*hsd_{=f9y&%ZSD|C6KhGvEK?D)+ikSZoFoVeyfytCfuiA_-EZb`z(*d{| z$*f1}N@%aRS7IPVGeiq$F^H!MN9DO9ua9`52YNB$h<>LR=^41aeHr=zBw`b(sYvh$ z$!jVy0#Ke4IovU1#bTomD4NRodZHgxU#fkB0HNSJxw&@b803x{VU)xIb%yv}6>82QMG3ycf-7lv+$kp$$Z-V4E{u`rJ05_a#$qFA5LoPgvF-KGdoppF z7+*Ax5(Mt1kiwKB#K03YxEqK*VS@jODBA@OI7viDW0DdoK$iwHP1SI8Zx1B>E3ZK< zG#O$r|3s7&P=+WX6I2?mh63U|%fTYRX z3<(V9G8iMGOf4}=CEFLM+}^%)7iWYZpHk$Kh*u;=&&<;6zvab>I#^@!0Io@F(-Z*3 z;h-?Oms7$)1XD4-zrQBwRT`rYDE>QmqGiBcv6=pEK6g?L)^(X_(X5tIz16}K>}^Ja+e>H1Sb9{k4f-ye@`a$is|pAymZ3}? z-Xa>>WBv2bUL}F_I;o;n*3IbAf$zj=X9^549~tF2%$364hFf#rDoca>pOJX!@Sjcc z|M|&jDgNi#;nx1Qks^hC!IxGh|7Ro)$o@4#|6($~tf~`p%G9+=HkdLLEAyI6Lo3=| zleiPRlmlqb1*qt5nG%FmNM8cTjRW$Q+@rJw zB6ZCdMTt&RAy8i?kg=BY;Wt^dYl|(_NDHDzJb`!UdYU9R-4e^XZZ4eSiR{<|XN746 z1IHEFmpR6S@z;opt=VFptlEoCkpOXh^}JFDbEvSmkC*O!ZS#Kw@KYf6Nc z{@MwY-f##*?G{BsDHHk>y~OD~Yk@(z(ZXjANp;Njl{QFa6cdX1d?~6U5i3Dj9=Vjn`3s9>iIWYhAWSuMsT-=CWF#SX^P7w!7+;c< zaSCzD7u(Dh-j#sYFbF||E)on`{WF|4Xj`DxglM|VW;Fm7ed{HVi0j{U)mnc$Y%Fc_ z!zBHl!U$a>ib-t32rN4OTByq(Tuu@bXKVTWpOj(MlyLp5)oOZ;mO$Ib zP3*NF8KP~NVP1DRc7)x4x*3V(^_I{!AWjiw+T&dR)y5}UV3)VJ$>2kZmZ8b5p2<}V z1E-i@Izw^4v>lGqYC}V6b9!{X-DOXX24l8=>CAjd)}{vg595%d(KK1g1H9?|-@!@A z|Lf>r`~GhuMH+i<^eV5^1Kis>U!n(?H3ge+0V~b;$Kxx$bp%_bBbYJ?#VzasHZ9tz@J_mogg{{M%k z{`I*M5LU z%RjC2tIbdhK;<5pG905lzzBFiK+|&NIVl}3g*HRfN$>LTzw3G4N)jJ&Y0v-jcgUS3 zfF}Nb;KzSFIypQ!+VcNR6z~22iY0)+o>`|1;9Fm`_FCfPuAZp-u$8XGxp{EJOY-x4 zAZ|FHCTon#wDo6~ZNEvMOJC}KS;Mbo+j$=r*m{0lY%wQ_xrWn`QQMv7xOC*u?JO8O z;-?=oe~!xy{Imk5;S(oc)C6XI^HV9#b(;xuIxf;fi4%oM3hBHwZ6?@usneQS+H&kK zrgY%{`2*vw0zfnWKlAzj@#(>q|8JuB@BddV00cJ8=Pm&Rhy2ls0L5edwTl47F5Aig z?PP%PjBSO0ZCO=m&;J**{r^h~{(p3Q;PL;X^W*LNpN*9K{r`#?|JLr`;#KZSZT`-X zJ%hjVTglpAYFTHmcPg7ynC6wL{baR)x0Q|eHe_EI&_MS<(Lp(*nG2#h{U7>AX+XtL zN;mbsN#EWxMP=KvUp+)-#>WuX`40W@7jNRt;D7azs>!HZ`+m9!PpidB@obXIwi3tY zOMCvWy~`H30BF?zPmjy`|Cax6q?G(WS1bouK8at91)yTgAFT;sbGHEYM%&r|TG;@q zrfh2j*p?NP_Wa*`>}~{T;{PW{CqDl_INaX@GWFGTD1s}Q9OZkZnMH2 zNl?1PT9sCxFZl1qK-# zHihXO0y`<3pgpjY*APry=fugsS=>QjJSyN}rlXDJpbPGl&w#1nDSR?@z0J%En{nS^ z9)0Udxi59Te(rnLoV7ehLuSfXoi^qd&PQ%17@lV(<=*4+%;WO9GZ%*zX_D=QwQ?Ti zHJ*MAF4EXp2EEOSWe6;UspAg*>DMySpQy^mh$0nojv^S(0nFk0TgdIg+NU;fTUEE_ z^i7(~SPY@~P;jLzQ_TBd(7Ha%vSgk& z_)-t+8cOx~7c;&Z3ea%=&koM~_}^y-$J_kx8!7Vqza%gg;z|OT3iiNS9(i>tT}k{m z6mbwu87C8&lzD^`#P$GW8dMB$s-^V798Qwv2M8Le0s6oxyv>rn6SCpJ>HkH_rql{M z3^GJ@f^Y_`FdtBeXcAXX1gU=;EZ_==Z19^9pm&_UU%`6>WcNx06nzNsMMyh8U%Yw= z5T%5&=I-?Dm=_y;qfB^mmW*(yQjEWX*%P+gekvo`N}8dn=Ti4z;#WlpWUNy!PRkZO zsqlE6x?nm$UnA_R3A{t#dYUAc|ND?H6XD1!)1EaYEspidNaJ3)Qgg zVYzs$t_APpSK*KR1_uc4?YSZSNQZhk&jHV2{LY(5L+Y(Jwn-(2i zBFgt)!4%%NEreN zW?c0GvrG^^a+y_&3n}&=3CJL04}``{Ui2Xpx3Pib0z#VI^;HzyU_TVam@U>tjKt)l zG{T4tB%Fb=(GXhK;{;L+HJ>OvDlBu4ux(HMYnye|&Eg@$_>YUF4b$0TI~(N;Chy#Z`*fgpmisnxO{ zieK&F`0o03Gj4(n#F$Am`aY(!ELENY`z;ZiWoaACQpDMq5Z-y}OvA1dXWG>wccFMj z3^^P^hQI^F+_p7yq9S{?+D$Ra*g!z&gB`Gbxw}&Sll*KW_dkb6$H&|IpGPW9Qk@oS z8pS#zV!3AWmzcG?=GDzJM42GiX@t5qjgd-|(ybLU*;TqV)Aqow&4wY{Kvy8MpqXPy zC`+}LmfOxVuWb!(!>y5F!=*(3wV40(y^!-aLH`dA56=(E^nV-wb0fvF9;%GTV%hbh z7gh*Y!+C3SfU753M48kOxU>YX~%!CX?QouOH>7DP2yp!F%(-pk8 zNW~9DxcDcW+$b>l;kZl45GI2WR7nd=hWMhn?^(U05y~A+{LP|w%6@jIYr4~sPk(8^ zS0l?&CZlME$&}gmNF&6fu}%)}&4Wr8lMr%0%|L&4D9(~Wun%?yZ&89ELxVhZU*VVj z74!FXXoS1Id%Hpyf*6lRh@zC|E2W=6!!!od?2f`1SuXv1`L~eIw~V@DPocj`1sCXXX_=y)7 ze&ga;>1ST)dF~uMg-r|!_y#T~z&ddLK?tA997-QN*|Cp=ISIQZM6{7M-*;+n6>Txg zarAMRA*wb_14|R4R1SY&VhJSz&C6k}wB=JvVG4!0}<;aJRtA(i_F`%9s zP7sGeLcb-?am3p_+zk*lbt}rAnw!a3e+ay^kVhhv2}ECtdf6xR*U>N8W11Bp0x(r zyrz02f-9P3Qy|-|p7elo)^A~AV2KkNshqzk)d?!UaeSIbwop#IhWbb%*Eh;?w2K3zwPyqqZxaKxVe^VxA#uwR3@9<6EQe}+M z2PO4@zPSPG3l=>*JBd+L^*+u>7+A=;0HsLM5p}DjMBfL~# z^#b8i^RQ9;#4WQuI(%E1l$Gjogq&y1u0eQJBUTNj8SB zrxS2?RCOFJOr>v|fn+etKa4O+$^v19P-=FJGc5sX{`^~U++vh+3=^hL#2$FSNdjQP zh<>sFB8p;pucQvU{Hq&*kB73E?nzU+u<)P^Im&j>%&}@-h;EI$A781l|K|G2vPR%0 z|F6>nFaOiw`N7#X{_{qPk~?zk@g{>0V)+*h{1A9wWW{=DVKgqTEm&^ZD|5p=*eK;#s0ivy$H6nWR0VvssM~ z8BAkSr*T2@+Er`PMnEn%>bw}W3*jzBF+giI9MQ*`r*G=4n^L%K(mvL12)ageMCb$* z8l@6hfJ=cG7{i&^V-xs6+2RwF-tn>6Zbzrb9i$wK8U(c1@-;+Xb<`K#l;WXOcaw9; zuBvhy=wi~9skJrm;6^MjhjVY!c$B+d<#fM~ap;WTI8vFFB5t8^ET9Y*{A3|bxJH`& zJjB^*`LFbJb748KLH;{BIy&;=e;u5jZsUJ!q$vAD>5=cs1i`=q;7$TzpnX}M!xCjn zh?8$2U-(U1c%urUTi*Ch)K~VuYe}rWhv;ka03MKHZRS;f46x~d?E$JDa1~TeEA-w# z(-?i&6aO_svIdPmlt#=H3z$;%#K4tkUHME7%efg3ihD)RFpWVroC0c_y^2d8EKzw^Uw z{O^sFHVjw?-6`0c;YJ)yYzAbi0{1pTUI)m!u6m$?_q`B}WT2pM0%Qa9S0F(2OLpcz z|LpDW@7w*EAj`^us;~QYx)$B3&pXaTXB&3HP`S|))#?wx${648tP5-^8TuX?7P4|Ciho`>%=jdP?|9vAxIe?U6<4OC^ z3d}#Huz8(~Kc&{|zZ1lhyP`wKy5i#UNVkIydR=Y^OG{jPQ|M3peq0kv6Uza_@+e} zc7c;JO>fzU_FD~--lhvg*$8B!&#-ggr+blT;>><-w}>_JpL*lIf+xTY^56O4*@%U5|OUER$9+=|Vr9;#yoV#M%Wsyyi*2)$P;FCPyWAf{#Cca;h_^Dia( znhv`OzN%4Kgt$sEH;gP~div!3=qk2e?dI#`Lnl2SG80?S7G!i-7zwBVLJ=d$3`t=^ zCQ2$lM{s=d3hLGDd}kjRAMIV81<8Kl;AcYu)?*HPuVE$)kcQCd@P?Q(HC|3Yj%34V zK3NaLk4bG>Ql&9FzP*~JDQ%#;h4hx7)L%i?K3Q2m7ep4GDV0|35>bA|*c4Ge@1S+; z?Ng0Yj_xQ7=adgTS+(oSz}+VLcbiJVXRSfxt+a4+uWq>$eT|T~fbQ%#4dTR_UN4$V!Hp zu$1iKUt|q>J59>6ckP7bO{vV~QbOD}X>B?7ms_g&zjpY)mbtr@k^-9iKaY=m{(pXc zcD&{PnJGHd zaWsHKYZuZG{_BztoWAdRu1eYPzmcP5%SA6c^+I&HkT!PftOBSn&| zjKp!i)I+({EAs^irsVA87Z8N7eoxRW9@_jQfQ3VpHs%7F#ltR+pVuS?1>!)@U!C)3 zXuenI02Xlc=-7RjcK_|Etja%HTd?TxA_To8_3Ju?S?l%yBpXxM{0w&v2~La zk}A5)S8?RZQ?tS=;2_WW+x-Z(|LJv)cC7>Mfw>foJ1t)=OY`yEW6fU zl}m{G+Yf}f5D4{Zh#3U^4Dzw}9rCf=a!S2!f27Gzn2$yKi!^qs2d99fjMHhv!_T~e zvU)CV@<`2$5;}cRvsi5XJl(`B3i;;Q@`?RDwvX9!?-@;lbh&t-!j1VJHg?oHSYbZR zUBI_@-pLoSM8<+CDcZ|*Ej(n}M+EdH!9@!HhuTGf%pE&ZhF+5xU0sL#{v5jNonp}6 zNlA>}+0t^B`09zyXj|W z^KDq2#+CUp&AjSYXK#FJ(G!+46}!Z-rHQ!q6mIsZPW}|P^|CnFFZGzordBI77rX50 z6EYOn$bYkFHR->b@_(Nkp8N9O>G{Dn{^v%DqO|WWS7-d4MO|e*(V|)~LzH30QR)V} zwm(0TP*z~jNhB+p)yrd6y;VwM*1UC-#fpYyNvtlE%oFDk-#kNBR<`D>)J3ni^X$rGd$znIo))-d8y4H9HZST3#WXS6nd1xiUz$5vL+-yRaivORh_(Nm_`tn%&TTJ{a z)vG57W?WSYydjWpD#ZT#0Wwh9KMG3VRlE%2fz!Lo1ma1^Xcv-<#8}EEygG@fhO977 zD7-_0rVY|UjR>u>V{WTj_|~^1bwU@YdOyrK+`Y~pTc>3=u>yT8l zbE%~y7k2TJO(49-xE(s1kz_hSP3ifa`SCK*I^$)Np>LD*#o3!z--64Vt1hoL?LEUL z!^@kiRXo*ioEw>dlVKvW+KQnKB8CU||H=lKghp8b$ZVi~O!2G|RC&hSjJ@*NYbl4N z)wQZu|G2tbT=gYi`Zg^SI7ErRL)AxXZwfqi+kk^AG{(*TqtbU1AE06?`YB?Iwj8 z8xtP5Hr9IYj3lCxAO2+KHLuw#uEwVtGTkt=gG`qdnxFo)EP83n!FSUnQM&;c^nmy~ z)RRFY5PwD5pnW;bbY3B~HCl(_Mdnql&?%gHW*E=v@B;VJf zMn`I~hl*qGpb(mdS`pr9ZEH29ozM~lnbN4x!*XSutJ#pMVpvHCvj6HOa_6YaLWS3% z6B%nJWG;HmG_8bRi11dD;;=%c9_3>eF&ub{KLW&yTqPdsr(O) zfBN>~a#dbmV%v1Q08~v@@8hLB+hp9^LK*`jLi0-t(K8#gi~B9lL${#cqKSQJDgWMo zj7P(w=PtLDVn@_oPs%lW{IoCvjYh|?iZIM3#D*nRm@vtospr&MT%a~}IVrbfJ7*_( z&K}pt>1qU`WXd@D3C9TBqdABPQn9$@E#)47j0tUAJr4*+e|a*7?BCJcn-B?>3b_5& z*MoMWU?k$wCS9$Alp^t;kYCi7QflNsGUaF`0$^kOuY=P2-=mYQ|JO!JDgNhMvFs~} z{wX(*Rr>S~AWh0UI?pqTaW5UOoO#2fo)%2e&oAxy? zP5S@I(XmhekI%R9zcx~=6qGA-0cMNjdSx3+@ybfMU0IRR6>M5FXPr~Iw#eVgR-U%C zBA;Wea?V;MYyI@zZB;Em_2h#u_@UOPnctRutZ8kXT((VykZl&$ts$Yl)X9G`{{8y% zf1DhZ-hZ8)o^JL3jTB8fRJy|zT>I$ z0gBSEGk>btU7wMZt~vQuO#kRhqx^pnMP!;TWe0Au{~jHkd-)#@4$cp^^8Y4^Bme8Q zUa=map)RHl=!TR=E2dN{#$yJRbTS=2;~4tJ`z~?f_PQj<{t%OW%K#5MwrKon$T5u0_;W=UM(L-39DP?IvnjEk8ro zf%=tcT9q%^k6@9^3m=6m!IDy_vlrTlpmm4uV-NLeBmWUbdUd(er!NCn%YSabk#*Yt z&QARNuLp-G+x*`fDS;>{D-#0!kQ1H6K)><&1wn5XEK#sB_RdD7K^MO+@}M91rA{LB z#=1(OusVuNvsmc1{rm*O#wBX8JYTYOxNxASk3vN37&~b5UZ-yGvX*ja!+HN?EumdQ zDSgaRU|acb88cv${C9rl-~S#So^12KZlnZ=XOt&_TD=gsh(Rz2VbkJZ$vhZ19v_8V z*x6Xi-$e*bf_jsLchBDeCZDTf@VcR#5mS2rzFsvP20B?#*M z)KU1$TdiN!hDBRUfawjRT4$|i*?o}>V%~E}t zLft3rb7+>iolsOuw;xeDs+%7pR;=Vjjm{`0P~=%sjy1ls>`kybJ1TCu!8pAO1TU|X z?(%keog#akmdOKWr$_l=giva0!HW+Wia3hFFS^mMGKMxMDtdOm z=^QL9>iZf*|2fJMGM}K7cay1OtKDiO{1R$69C9?8CO4=fZcI01i^S4uiQIFDCM4~Q zS}dEb6S2RMVKv9u zgoJPO|MB&|qr>ylgRTCziK19#vAU~L0W*pT#eBYq!;iJuHgWGGy0g_WtNTaN$OHym zv@x-M;FUV7_F~p*XZ9>xA?NG$GfTp(Rk#H3&+ihZ{XAFC@#EjjsJLbjSjefMvbXwp z3nfJB9eV)AzfD;iCx37`$KYED0+@gW zW*A5QUsjML1&g0qmFqp8wQWZA%(aft=Vl zruv}xTqG*5*)q8pm$&O86j&RfY6t9=wtThZr2Dsq_HoGFpqg)eYQFo+iS3n(+)9#e zM^85_SS!M>g?w>Zg>)S=d0C%PGQ%;Vdx8$hiz@xW#O9tr9*u?GibdNb0qh=UN<0q? zt>#6Ak~9qX1u~C-en!y^eBrsBYfm^VB{ke5obq%Xw>buK6?+;Oa9_yZ^t;M>D|T z1D~1-yn5|dZhPh|t$$-BSVLU(`R)%nOS|Eh$rtxoyrl#>28lT7dFdz|8>l0I0aLH|2EDCPe;Jv-m( ze;X+({u`oq`fV{#>kmvKceOwCZ(53BmO^+tMxd{$L*Kk!w)sqghZNHJqB^8PXCQW? zASBI-qSK&I2l1$Q-=l_PKX}Cyp}Gu;8`tKa*jplMcby9>CBZ_8&^D(Sx#HJ0)FFr|t9pO)kQ zoE~lC|7@fLzIiT`uXD3 zOEIv&-Mo3-x8W5;Uqv-abFR$^U}N%N{*(%oV8RNv9(NJp$h-!OkzBP0qCzx?&UVnM70$yU)Ni}Gc z|IhvWAIC?B+x#CJDNUrUasxQDPOJLzMkH``g5wW+U}wlIf@qr5zMc~Ol&tXPPA8`V zLze7|?JDidPdK^ZRGehdYuSt~Nn(M@z-m9shTWht|5kBkEK>uSj!x8FA@V(MR|BsJK{@;gZTl&9|(nSA@4bYw7tG3lN zzku!7G4xHN-C9S>QlEnNZw^OL^*Znar>}LhgbY!J8AoZ<;H+EMaB1>y0W(D3SucA< zWC%02FINzME?WY%l;BO8%)u`T+OI$^olppeD34}{Q&23v(kJc+2fuv9e(eWV-Zhym z7U*DGf~A4};|aV&*V80X5nUEz1Wok+@X(L{b#$-4H6V!B+UdX7Yd0R?H(r_#cmNGA2rt=|?0#;giT*9cj95v^*_WfN~n{O#ha4 zZ%er}(0@xyT$~3q+kZ;=zmHB2xAcD#rHTG~8=yN6umDu^0k0R|9F(E}oQ^gj-M%aP zD0lnCnup3O*~UiHzqTN01Cd<0+(5*}^3u7=JS6X&`&$dpdP)=hCv-uhk5wAz|IyL0 zC;uOwpC24=>Hj85BmLJKppx*Le_KDZSyYhvLGhQxB6j#ByRoZz0YRKL4&8KGO7yC{ zAl*LtvZ_NE%cMkeE>ZPLaW7(fcNTc5j!V2s)_+}MJ%on&j_${czFsi`J=UTN8@Yhz ziNQ!^ow~LVYk0cD5EZmn^=GnH1-$yr%J=hG>AM*3284pgnOgsDN&gBC{I@!KkNJ~U z!-cJ3^z*smbXpa&JjjhLc_Rns3mWbu*rG-doG)fD|0L8r1}oKd#fe~lq2?X8?3RIV zzBKTE6DVRS8KBYr=kx!ggVV$9`;U#3CjOs?1X@h{GtH}2Kc|D{%bvV?S4GanWbIm< z6Z)S0)Q?Ttp}oax zSiG%FEw3LIx>ZO$G&9gyJ1of|W;azUiB(Nn=!)yyZy|-Wf)wP_wG*^aeGy_&1OIo! z16?L?5nqr-|GxuY|2sNAI^XjDO_V17U$FtYYl1rXRyA3#=&4yHoORX(9bDF~3I+z& zO(_fkSXw;{05yuDyHr~}@pCSn=>LLhV59x-)X)F7&Hucq(vALag!F%wWPd4=zjAWF zCH32)N;mqySO9=#`QNAi$0x_z{I44+9qIp40RU!o0RXByS_>=KSO9>k0K1EGgVluq zsEAr^c*8aZz~^5y{U3}`GQoE#p=kAeG|>NpQ$PRP;nDf_{(m#&FW?$-j%X@_N2whE z9>ypI!zoT;K}Rzf-NQS?2ED(iC|_)vDaRf*Mo9wh5;9c5n{ax!2PjG)$1?;n$j8=q zn8v-ofE3*+BJ)H=$VIWD$p6RgK)o9$scb1w0vVzp!6_Q_2G4Ka-*7@v?=Rp|g<*Vm zc>`ihS#NNM`BVA73jN+-_)q#&{;&BkzI!VE$Nb4=>C*y`3WNeiI6?fZ|7ly9dDr-(6dL#9-E=tn4J2pkR$ zd%bH&;RJC+S+A#lAoQ7Y`FJ}<;FeC2jKs#kwK@@d0Q0{xKxFa|73l4+D#{wg!zm|} zX>ce8KM{KWtO8vBQpc730VNY4KlU!-7z+W92ypiT0u%5fL*RP~Q~nJ6Or|o>o5`h@ z81N5--UFP1jFNa7iH3UsGLVq;E_j;?#IKkG%mi^k5l`lT$*Iw41fY$e4iO$#fFh$2 zjxbCBMHyk36FT1m5#%r-cYsh0c#vZc6Gl{mz>MM<HxGD^mHh&hU%RRG%u-%iswk!(iYEeh-i1u0_P^MpR+5f zW(4!`6P)e>m=Zol)a)RR(pc;P6^P!#w{mJt@I{zqkfM}pAb^a(2u3);9LhM4FpZxQ zS^*`aWI|*$w^uNn13tzy1{tIrBL;9<0b+(pq7!9|R5VOI4})Isax4|J=a3`oU>_Zv z9_$|+?jIcHHS~Ekm5%qLM23I-_U5?(*Xw;JgG`PHov8lckW4v%iD2eRCQw!7sHxNq zCn)7AyuX;L8#3Y#Vn6k=1VM&WWX6a;0|~l=$^Xsi6v^<%Y(VH;ulJg89HCxMY|AQ2 z_CyXjCec*%wFh)p|NUS8OV{}C|N7s%CWQb@!J7=FJq^Q56!?KWpc$fjvZ+J6R3uU~ zLn&8LFoy_CV2l8qL7c#0f_hUK&s2l<(38}NamdvXl(@dkm&c5OqYqrB!=d7M9{jZ8S`tSex-(mtF z;1tGa0_nZjDq-M*UT=SurPr%vLAQubm|9@NfxsA1G@OGwLHZe(lc`)4H8q^bdD>Gn zQjlAf=paUtqT(6qi381qoEl@M7!s1wsiM3oN%y^@rX!g<%RUgKFlUOAdduc81tAW# zr^1Hr36XY!xjfJbo(Q7Wb9)=~dM`#J6v^Wv$om)p>y+mEcSNR?j{!_mJVTU0nx{${ zVahnjro#kB$-I~ELy(VG(*g)sh9bd9fB=zG2!DsG{VTR+FW2r*QxRDOD4aqrX7Fkxx}%k= zX9qQ&WXZfB))f6?im4(?y=Y1W;ZEkFPb61G#;-*zqIg(7v3qimlc}738jS@7gFPW) zBP!(pO;3s}!e*}aWU?YS8sP*>T7XiH1zDHt4X1oeDE=pkdlWI0B#5dX^6n@aQHWCo zc*+dJbGK}-C+I>%GQlqNvi>)dTfRrmx?6y-2Q5+!25m_%ZuX{3YGMnlM(!`}_ zN_#ZN8)jL85$iD|R+6J+F4+Kr(YSs)nr&g73VHr!kj{JUKu{#vODwpkS%N{Y_p_PK zh@>pT(UeSCGB;9$GZ=9+Wk2}@3MydcPmrMC1Py@Nnt-ARiMcG}hEp46FNZ19A!!k` z;QVuS=F~Y7GZT?iksl^aej_5Ngx;q;d+z6AecV$5xm;VZQPO$!;lXJ@rZAu-JA_kC zgbWY~j@Zjjrs~cn0&ZI)2IzAq#{-iDNI|TpSCob6vEUIFsQiFSsv)NwrgP0CWQ^#! z&Fv^i$Q=P>RFHI)RjfFZ3_LO7zM87JrE|arV2}xkmLewhlcq7Tmf>=wcf}yyfZHEl zfEWL9`{MO2xPI~W)z$6oi|63mpTWiT^~-gy|NrAZU3^W8RlMrT$CfliIETU*@8*ZQz{ch5za8u$d~nTPGsnQbDAt7{H)hI z9DrM*C6l?ByRv8?KYf4w61>wy{%CL@`D8i=3FL?x>MwOO@k7peRaOHg7XxxE#3H#M zA!q?u4`Qo{87$h1Nt+;;G6kDy6{Z-TA#|ltL{O@1LzGA6my}7gyrWQMEUbhVLRdg^ za2^0hLd_?&kWgKeRLTG{mHzEgK84yGa3og+VX?l?z!SJz084FnirkWsq4N2TgheI^ z0US>nLm|2#Z8*!ur&rsTIEFIAqdUhgk|0k7diFuR**j3%hp+Xwoo!$lO4Y097V0N4lD z>M_GJ@b{hXrb+S|PSD@w4{yX-VD|U@9T$MAyAR%edvUn{Fwx9_(0~_5$pE@0Fc5y1q37aycqEdf_4M|1=u^bGtR zf7su7tCSnnQs%P#d$0FzKtNO6egEIU-`!f$oUOqBo6NE!>q(-GK12w`44fUyBycd| pQu&l(J|9!^kf&Su#3jL{{R30|No + 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: config + label: App Config + 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: 0 + - variable: runAsGroup + label: runAsGroup + description: The groupID this App of the user running the application + schema: + type: int + default: 0 + # 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: 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/frigate/14.3.2/templates/NOTES.txt b/stable/frigate/14.3.2/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/frigate/14.3.2/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/frigate/14.3.2/templates/_configmap.tpl b/stable/frigate/14.3.2/templates/_configmap.tpl new file mode 100644 index 0000000..140aa24 --- /dev/null +++ b/stable/frigate/14.3.2/templates/_configmap.tpl @@ -0,0 +1,43 @@ +{{/* Define the configmap */}} +{{- define "frigate.configmap" -}} +enabled: true +data: + config.yml: | + {{- if .Values.frigateConfig }} + {{- .Values.frigateConfig | toYaml | nindent 4 }} + {{- else }} + mqtt: + enabled: false + cameras: + dummy: + enabled: false + ffmpeg: + inputs: + - path: rtsp://127.0.0.1:554/rtsp + roles: + - detect + {{- end }} +{{- end -}} + +{{- define "frigate.configVolume" -}} +{{- $mountPath := "/dummy-config/config.yml" -}} +{{- if .Values.frigateConfig }} + {{- $mountPath = "/config/config.yaml" -}} +{{- end }} +enabled: true +type: configmap +objectName: frigate-config +items: + - key: config.yml + path: config.yml +targetSelector: + main: + main: + subPath: config.yml + mountPath: {{ $mountPath }} + readOnly: true + init-config: + subPath: config.yml + mountPath: {{ $mountPath }} + readOnly: true +{{- end -}} diff --git a/stable/frigate/14.3.2/templates/common.yaml b/stable/frigate/14.3.2/templates/common.yaml new file mode 100644 index 0000000..2b55474 --- /dev/null +++ b/stable/frigate/14.3.2/templates/common.yaml @@ -0,0 +1,17 @@ +{{/* Make sure all variables are set properly */}} +{{- include "tc.v1.common.loader.init" . }} + +{{/* Render configmap for frigate */}} +{{- $config := include "frigate.configmap" . | fromYaml -}} +{{- if $config -}} + {{- $_ := set .Values.configmap "frigate-config" $config -}} +{{- end -}} + + +{{- $vol := include "frigate.configVolume" . | fromYaml -}} +{{- if $vol -}} + {{- $_ := set .Values.persistence "frigate-config" $vol -}} +{{- end -}} + +{{/* Render the templates */}} +{{ include "tc.v1.common.loader.apply" . }} diff --git a/stable/frigate/14.3.2/values.yaml b/stable/frigate/14.3.2/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/frigate/14.3.3/.helmignore b/stable/frigate/14.3.3/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/frigate/14.3.3/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/frigate/14.3.3/CHANGELOG.md b/stable/frigate/14.3.3/CHANGELOG.md new file mode 100644 index 0000000..a4efc94 --- /dev/null +++ b/stable/frigate/14.3.3/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + +## [frigate-14.3.3](https://github.com/truecharts/charts/compare/frigate-14.2.0...frigate-14.3.3) (2024-03-25) + +### Chore + + + +- 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)) + + +## [frigate-14.3.3](https://github.com/truecharts/charts/compare/frigate-14.2.0...frigate-14.3.3) (2024-03-25) + +### Chore + + + +- 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)) + + +## [frigate-14.3.2](https://github.com/truecharts/charts/compare/frigate-14.2.0...frigate-14.3.2) (2024-03-23) + +### Chore + + + +- 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)) + + +## [frigate-14.3.2](https://github.com/truecharts/charts/compare/frigate-14.2.0...frigate-14.3.2) (2024-03-23) + +### Chore + + + +- 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)) + + +## [frigate-14.3.2](https://github.com/truecharts/charts/compare/frigate-14.2.0...frigate-14.3.2) (2024-03-23) + +### Chore + + + +- 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)) + + +## [frigate-14.3.2](https://github.com/truecharts/charts/compare/frigate-14.2.0...frigate-14.3.2) (2024-03-23) + +### Chore + + + +- 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)) + + +## [frigate-14.3.2](https://github.com/truecharts/charts/compare/frigate-14.2.0...frigate-14.3.2) (2024-03-23) + +### Chore + + + +- update container image common to v20.2.3[@06e462e](https://github.com/06e462e) by renovate ([#19673](https://github.com/truecharts/charts/issues/19673)) diff --git a/stable/frigate/14.3.3/Chart.yaml b/stable/frigate/14.3.3/Chart.yaml new file mode 100644 index 0000000..921d08a --- /dev/null +++ b/stable/frigate/14.3.3/Chart.yaml @@ -0,0 +1,39 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: nvr + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.11" + truecharts.org/train: stable +apiVersion: v2 +appVersion: 0.13.2 +dependencies: + - name: common + version: 20.2.4 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: NVR With Realtime Object Detection for IP Cameras +home: https://truecharts.org/charts/stable/frigate +icon: https://truecharts.org/img/hotlink-ok/chart-icons/frigate.png +keywords: + - encode + - nvr + - media + - frigate +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: frigate +sources: + - https://github.com/blakeblackshear/frigate + - https://github.com/truecharts/charts/tree/master/charts/stable/frigate + - https://ghcr.io/blakeblackshear/frigate +type: application +version: 14.3.3 diff --git a/stable/frigate/14.3.3/README.md b/stable/frigate/14.3.3/README.md new file mode 100644 index 0000000..bb1903d --- /dev/null +++ b/stable/frigate/14.3.3/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/frigate) + +**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/frigate/14.3.3/app-changelog.md b/stable/frigate/14.3.3/app-changelog.md new file mode 100644 index 0000000..80f17fc --- /dev/null +++ b/stable/frigate/14.3.3/app-changelog.md @@ -0,0 +1,15 @@ + + +## [frigate-14.3.3](https://github.com/truecharts/charts/compare/frigate-14.2.0...frigate-14.3.3) (2024-03-25) + +### Chore + + + +- 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)) \ No newline at end of file diff --git a/stable/frigate/14.3.3/app-readme.md b/stable/frigate/14.3.3/app-readme.md new file mode 100644 index 0000000..2f2f6dd --- /dev/null +++ b/stable/frigate/14.3.3/app-readme.md @@ -0,0 +1,8 @@ +NVR With Realtime Object Detection for IP Cameras + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/frigate](https://truecharts.org/charts/stable/frigate) + +--- + +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/frigate/14.3.3/charts/common-20.2.4.tgz b/stable/frigate/14.3.3/charts/common-20.2.4.tgz new file mode 100644 index 0000000000000000000000000000000000000000..e02a4ec419295564ee54731f20fe2563fa9e2f00 GIT binary patch literal 101809 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 literal 0 HcmV?d00001 diff --git a/stable/frigate/14.3.3/ix_values.yaml b/stable/frigate/14.3.3/ix_values.yaml new file mode 100644 index 0000000..7760996 --- /dev/null +++ b/stable/frigate/14.3.3/ix_values.yaml @@ -0,0 +1,101 @@ +image: + repository: ghcr.io/blakeblackshear/frigate + pullPolicy: IfNotPresent + tag: 0.13.2@sha256:2906991ccad85035b176941f9dedfd35088ff710c39d45ef1baa9a49f2b16734 +tensorrtImage: + repository: ghcr.io/blakeblackshear/frigate + pullPolicy: IfNotPresent + tag: 0.13.2-tensorrt@sha256:07cc224cdf2feef0af9c860c044ac7ea0ac4adfca7f68b37dc3958bc3a3ee357 + +# When this is defined, the contents will be mounted +# as configmap into the container at /config/config.yml. +frigateConfig: {} +# -- https://docs.frigate.video/configuration/ +# mqtt: +# enabled: False +# cameras: +# dummy: +# enabled: False +# ffmpeg: +# inputs: +# - path: rtsp://127.0.0.1:554/rtsp +# roles: +# - detect + +workload: + main: + podSpec: + initContainers: + init-config: + enabled: "{{ not .Values.frigateConfig }}" + type: init + imageSelector: alpineImage + command: + - /bin/sh + - -c + - | + mkdir -p /config + if [ ! -f /config/config.yml ]; then + echo "Config file not found, copying dummy..." + cp /dummy-config/config.yml /config/config.yml + echo "Config file copied, you can now edit it at /config/config.yml" + else + echo "Config file found, you can edit it at /config/config.yml" + fi + +securityContext: + container: + readOnlyRootFilesystem: false + runAsNonRoot: false + runAsUser: 0 + runAsGroup: 0 + +service: + main: + ports: + main: + port: 10500 + protocol: http + targetPort: 5000 + rtmp: + enabled: true + ports: + rtmp: + enabled: true + port: 1935 + targetPort: 1935 + rtsp: + enabled: true + ports: + rtsp: + enabled: true + port: 8554 + targetPort: 8554 + webrtc: + enabled: true + ports: + webrtc-tcp: + enabled: true + port: 8555 + targetPort: 8555 + webrtc-udp: + enabled: true + port: 8555 + protocol: udp + targetPort: 8555 + +persistence: + media: + enabled: true + mountPath: /media + config: + enabled: true + mountPath: /config + targetSelector: + main: + main: {} + init-config: {} + +portal: + open: + enabled: true diff --git a/stable/frigate/14.3.3/questions.yaml b/stable/frigate/14.3.3/questions.yaml new file mode 100644 index 0000000..2bbd14f --- /dev/null +++ b/stable/frigate/14.3.3/questions.yaml @@ -0,0 +1,3293 @@ +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: imageSelector + label: Select Image + schema: + type: string + default: image + enum: + - value: image + description: Base Image + - value: tensorrtImage + description: Image with TensorRT libraries for nvidia cards + - 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: 10500 + required: true + - variable: rtmp + label: RTMP Service + description: The service on which nodes connect to. + 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: rtmp + label: RTMP 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: 1935 + required: true + - variable: rtsp + label: RTSP Service + description: The service on which nodes connect to. + 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: rtsp + label: RTSP 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: 8554 + required: true + - variable: webrtc + label: WebRTC Service + description: The service on which nodes connect to. + 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: webrtc-tcp + label: WebRTC (TCP) 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: 8555 + required: true + - variable: webrtc-udp + label: WebRTC (UDP) 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: 8555 + 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: media + label: App Media + description: Stores the Application Media and DB + 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: config + label: App Config + 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: 0 + - variable: runAsGroup + label: runAsGroup + description: The groupID this App of the user running the application + schema: + type: int + default: 0 + # 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: 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/frigate/14.3.3/templates/NOTES.txt b/stable/frigate/14.3.3/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/frigate/14.3.3/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/frigate/14.3.3/templates/_configmap.tpl b/stable/frigate/14.3.3/templates/_configmap.tpl new file mode 100644 index 0000000..140aa24 --- /dev/null +++ b/stable/frigate/14.3.3/templates/_configmap.tpl @@ -0,0 +1,43 @@ +{{/* Define the configmap */}} +{{- define "frigate.configmap" -}} +enabled: true +data: + config.yml: | + {{- if .Values.frigateConfig }} + {{- .Values.frigateConfig | toYaml | nindent 4 }} + {{- else }} + mqtt: + enabled: false + cameras: + dummy: + enabled: false + ffmpeg: + inputs: + - path: rtsp://127.0.0.1:554/rtsp + roles: + - detect + {{- end }} +{{- end -}} + +{{- define "frigate.configVolume" -}} +{{- $mountPath := "/dummy-config/config.yml" -}} +{{- if .Values.frigateConfig }} + {{- $mountPath = "/config/config.yaml" -}} +{{- end }} +enabled: true +type: configmap +objectName: frigate-config +items: + - key: config.yml + path: config.yml +targetSelector: + main: + main: + subPath: config.yml + mountPath: {{ $mountPath }} + readOnly: true + init-config: + subPath: config.yml + mountPath: {{ $mountPath }} + readOnly: true +{{- end -}} diff --git a/stable/frigate/14.3.3/templates/common.yaml b/stable/frigate/14.3.3/templates/common.yaml new file mode 100644 index 0000000..2b55474 --- /dev/null +++ b/stable/frigate/14.3.3/templates/common.yaml @@ -0,0 +1,17 @@ +{{/* Make sure all variables are set properly */}} +{{- include "tc.v1.common.loader.init" . }} + +{{/* Render configmap for frigate */}} +{{- $config := include "frigate.configmap" . | fromYaml -}} +{{- if $config -}} + {{- $_ := set .Values.configmap "frigate-config" $config -}} +{{- end -}} + + +{{- $vol := include "frigate.configVolume" . | fromYaml -}} +{{- if $vol -}} + {{- $_ := set .Values.persistence "frigate-config" $vol -}} +{{- end -}} + +{{/* Render the templates */}} +{{ include "tc.v1.common.loader.apply" . }} diff --git a/stable/frigate/14.3.3/values.yaml b/stable/frigate/14.3.3/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/frigate/app_versions.json b/stable/frigate/app_versions.json new file mode 100644 index 0000000..9a9e948 --- /dev/null +++ b/stable/frigate/app_versions.json @@ -0,0 +1,57538 @@ +{ + "14.3.3": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/frigate/14.3.3", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/timezone", + "definitions/certificate", + "definitions/interface", + "normalize/interfaceConfiguration" + ], + "human_version": "0.13.2_14.3.3", + "version": "14.3.3", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "truecharts.org/category": "nvr", + "truecharts.org/max_helm_version": "3.14", + "truecharts.org/min_helm_version": "3.11", + "truecharts.org/train": "stable" + }, + "apiVersion": "v2", + "appVersion": "0.13.2", + "dependencies": [ + { + "name": "common", + "version": "20.2.4", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "NVR With Realtime Object Detection for IP Cameras", + "home": "https://truecharts.org/charts/stable/frigate", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/frigate.png", + "keywords": [ + "encode", + "nvr", + "media", + "frigate" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "frigate", + "sources": [ + "https://github.com/blakeblackshear/frigate", + "https://github.com/truecharts/charts/tree/master/charts/stable/frigate", + "https://ghcr.io/blakeblackshear/frigate" + ], + "type": "application", + "version": "14.3.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": "imageSelector", + "label": "Select Image", + "schema": { + "type": "string", + "default": "image", + "enum": [ + { + "value": "image", + "description": "Base Image" + }, + { + "value": "tensorrtImage", + "description": "Image with TensorRT libraries for nvidia cards" + } + ] + } + }, + { + "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": 10500, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "rtmp", + "label": "RTMP Service", + "description": "The service on which nodes connect to.", + "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": "rtmp", + "label": "RTMP 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": 1935, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "rtsp", + "label": "RTSP Service", + "description": "The service on which nodes connect to.", + "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": "rtsp", + "label": "RTSP 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": 8554, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "webrtc", + "label": "WebRTC Service", + "description": "The service on which nodes connect to.", + "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": "webrtc-tcp", + "label": "WebRTC (TCP) 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": 8555, + "required": true + } + } + ] + } + }, + { + "variable": "webrtc-udp", + "label": "WebRTC (UDP) 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": 8555, + "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": "media", + "label": "App Media", + "description": "Stores the Application Media and DB", + "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": "config", + "label": "App Config", + "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": 0 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID this App of the user running the application", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "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": "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": "

NVR With Realtime Object Detection for IP Cameras

\n

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

\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

frigate-14.3.3 (2024-03-25)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.4@f245f5c by renovate (#19731)

    \n
  • \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

frigate-14.3.3 (2024-03-25)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.4@f245f5c by renovate (#19731)

    \n
  • \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

frigate-14.3.2 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

frigate-14.3.2 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

frigate-14.3.2 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

frigate-14.3.2 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

frigate-14.3.2 (2024-03-23)

\n

Chore

\n
    \n
  • update container image common to v20.2.3@06e462e by renovate (#19673)
  • \n
" + }, + "14.3.2": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/frigate/14.3.2", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/timezone", + "definitions/certificate", + "definitions/interface", + "normalize/interfaceConfiguration" + ], + "human_version": "0.13.2_14.3.2", + "version": "14.3.2", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "truecharts.org/category": "nvr", + "truecharts.org/max_helm_version": "3.14", + "truecharts.org/min_helm_version": "3.11", + "truecharts.org/train": "stable" + }, + "apiVersion": "v2", + "appVersion": "0.13.2", + "dependencies": [ + { + "name": "common", + "version": "20.2.3", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "NVR With Realtime Object Detection for IP Cameras", + "home": "https://truecharts.org/charts/stable/frigate", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/frigate.png", + "keywords": [ + "encode", + "nvr", + "media", + "frigate" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "frigate", + "sources": [ + "https://github.com/blakeblackshear/frigate", + "https://github.com/truecharts/charts/tree/master/charts/stable/frigate", + "https://ghcr.io/blakeblackshear/frigate" + ], + "type": "application", + "version": "14.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": "imageSelector", + "label": "Select Image", + "schema": { + "type": "string", + "default": "image", + "enum": [ + { + "value": "image", + "description": "Base Image" + }, + { + "value": "tensorrtImage", + "description": "Image with TensorRT libraries for nvidia cards" + } + ] + } + }, + { + "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": 10500, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "rtmp", + "label": "RTMP Service", + "description": "The service on which nodes connect to.", + "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": "rtmp", + "label": "RTMP 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": 1935, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "rtsp", + "label": "RTSP Service", + "description": "The service on which nodes connect to.", + "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": "rtsp", + "label": "RTSP 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": 8554, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "webrtc", + "label": "WebRTC Service", + "description": "The service on which nodes connect to.", + "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": "webrtc-tcp", + "label": "WebRTC (TCP) 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": 8555, + "required": true + } + } + ] + } + }, + { + "variable": "webrtc-udp", + "label": "WebRTC (UDP) 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": 8555, + "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": "media", + "label": "App Media", + "description": "Stores the Application Media and DB", + "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": "config", + "label": "App Config", + "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": 0 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID this App of the user running the application", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "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": "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": "

NVR With Realtime Object Detection for IP Cameras

\n

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

\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

frigate-14.3.2 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

frigate-14.3.2 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

frigate-14.3.2 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

frigate-14.3.2 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

frigate-14.3.2 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

frigate-14.3.2 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

frigate-14.3.2 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
" + }, + "14.3.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/frigate/14.3.1", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/timezone", + "definitions/certificate", + "definitions/interface", + "normalize/interfaceConfiguration" + ], + "human_version": "0.13.2_14.3.1", + "version": "14.3.1", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "truecharts.org/category": "nvr", + "truecharts.org/max_helm_version": "3.14", + "truecharts.org/min_helm_version": "3.11", + "truecharts.org/train": "stable" + }, + "apiVersion": "v2", + "appVersion": "0.13.2", + "dependencies": [ + { + "name": "common", + "version": "20.2.2", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "NVR With Realtime Object Detection for IP Cameras", + "home": "https://truecharts.org/charts/stable/frigate", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/frigate.png", + "keywords": [ + "encode", + "nvr", + "media", + "frigate" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "frigate", + "sources": [ + "https://github.com/blakeblackshear/frigate", + "https://github.com/truecharts/charts/tree/master/charts/stable/frigate", + "https://ghcr.io/blakeblackshear/frigate" + ], + "type": "application", + "version": "14.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": "imageSelector", + "label": "Select Image", + "schema": { + "type": "string", + "default": "image", + "enum": [ + { + "value": "image", + "description": "Base Image" + }, + { + "value": "tensorrtImage", + "description": "Image with TensorRT libraries for nvidia cards" + } + ] + } + }, + { + "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": 10500, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "rtmp", + "label": "RTMP Service", + "description": "The service on which nodes connect to.", + "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": "rtmp", + "label": "RTMP 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": 1935, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "rtsp", + "label": "RTSP Service", + "description": "The service on which nodes connect to.", + "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": "rtsp", + "label": "RTSP 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": 8554, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "webrtc", + "label": "WebRTC Service", + "description": "The service on which nodes connect to.", + "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": "webrtc-tcp", + "label": "WebRTC (TCP) 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": 8555, + "required": true + } + } + ] + } + }, + { + "variable": "webrtc-udp", + "label": "WebRTC (UDP) 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": 8555, + "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": "media", + "label": "App Media", + "description": "Stores the Application Media and DB", + "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": "config", + "label": "App Config", + "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": 0 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID this App of the user running the application", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "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": "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": "

NVR With Realtime Object Detection for IP Cameras

\n

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

\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

frigate-14.3.1 (2024-03-17)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

frigate-14.3.1 (2024-03-17)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

frigate-14.3.1 (2024-03-17)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

frigate-14.3.1 (2024-03-17)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

frigate-14.3.1 (2024-03-17)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

frigate-14.3.1 (2024-03-17)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

frigate-14.3.1 (2024-03-17)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

frigate-14.3.1 (2024-03-17)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

frigate-14.3.1 (2024-03-17)

" + }, + "14.3.0": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/frigate/14.3.0", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/timezone", + "definitions/certificate", + "definitions/interface", + "normalize/interfaceConfiguration" + ], + "human_version": "0.13.2_14.3.0", + "version": "14.3.0", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "truecharts.org/category": "nvr", + "truecharts.org/max_helm_version": "3.14", + "truecharts.org/min_helm_version": "3.11", + "truecharts.org/train": "stable" + }, + "apiVersion": "v2", + "appVersion": "0.13.2", + "dependencies": [ + { + "name": "common", + "version": "20.2.0", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "NVR With Realtime Object Detection for IP Cameras", + "home": "https://truecharts.org/charts/stable/frigate", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/frigate.png", + "keywords": [ + "encode", + "nvr", + "media", + "frigate" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "frigate", + "sources": [ + "https://github.com/blakeblackshear/frigate", + "https://github.com/truecharts/charts/tree/master/charts/stable/frigate", + "https://ghcr.io/blakeblackshear/frigate" + ], + "type": "application", + "version": "14.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": "imageSelector", + "label": "Select Image", + "schema": { + "type": "string", + "default": "image", + "enum": [ + { + "value": "image", + "description": "Base Image" + }, + { + "value": "tensorrtImage", + "description": "Image with TensorRT libraries for nvidia cards" + } + ] + } + }, + { + "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": 10500, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "rtmp", + "label": "RTMP Service", + "description": "The service on which nodes connect to.", + "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": "rtmp", + "label": "RTMP 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": 1935, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "rtsp", + "label": "RTSP Service", + "description": "The service on which nodes connect to.", + "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": "rtsp", + "label": "RTSP 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": 8554, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "webrtc", + "label": "WebRTC Service", + "description": "The service on which nodes connect to.", + "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": "webrtc-tcp", + "label": "WebRTC (TCP) 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": 8555, + "required": true + } + } + ] + } + }, + { + "variable": "webrtc-udp", + "label": "WebRTC (UDP) 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": 8555, + "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": "media", + "label": "App Media", + "description": "Stores the Application Media and DB", + "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": "config", + "label": "App Config", + "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": 0 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID this App of the user running the application", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "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": "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": "

NVR With Realtime Object Detection for IP Cameras

\n

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

\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

frigate-14.3.0 (2024-03-16)

\n

Chore

\n
    \n
  • update container image common to v20.2.0@91ade87 by renovate (#19361)
  • \n
\n

frigate-14.3.0 (2024-03-16)

\n

Chore

\n
    \n
  • update container image common to v20.2.0@91ade87 by renovate (#19361)
  • \n
\n

frigate-14.3.0 (2024-03-16)

\n

Chore

\n
    \n
  • update container image common to v20.2.0@91ade87 by renovate (#19361)
  • \n
\n

frigate-14.3.0 (2024-03-16)

\n

Chore

\n
    \n
  • update container image common to v20.2.0@91ade87 by renovate (#19361)
  • \n
\n

frigate-14.3.0 (2024-03-16)

\n

Chore

\n
    \n
  • update container image common to v20.2.0@91ade87 by renovate (#19361)
  • \n
\n

frigate-14.3.0 (2024-03-16)

\n

Chore

\n
    \n
  • update container image common to v20.2.0@91ade87 by renovate (#19361)
  • \n
\n

frigate-14.3.0 (2024-03-16)

\n

Chore

\n
    \n
  • update container image common to v20.2.0@91ade87 by renovate (#19361)
  • \n
\n

frigate-14.3.0 (2024-03-16)

\n

Chore

\n
    \n
  • update container image common to v20.2.0@91ade87 by renovate (#19361)
  • \n
\n

frigate-14.3.0 (2024-03-16)

\n

Chore

\n
    \n
  • update container image common to v20.2.0@91ade87 by renovate (#19361)
  • \n
\n

frigate-14.3.0 (2024-03-16)

\n

Chore

\n
    \n
  • update container image common to v20.2.0@91ade87 by renovate (#19361)
  • \n
" + }, + "13.4.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/frigate/13.4.1", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/timezone", + "definitions/certificate", + "definitions/interface", + "normalize/interfaceConfiguration" + ], + "human_version": "0.12.1_13.4.1", + "version": "13.4.1", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "truecharts.org/category": "nvr", + "truecharts.org/max_helm_version": "3.14", + "truecharts.org/min_helm_version": "3.11", + "truecharts.org/train": "stable" + }, + "apiVersion": "v2", + "appVersion": "0.12.1", + "dependencies": [ + { + "name": "common", + "version": "19.0.0", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "NVR With Realtime Object Detection for IP Cameras", + "home": "https://truecharts.org/charts/stable/frigate", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/frigate.png", + "keywords": [ + "encode", + "nvr", + "media", + "frigate" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "frigate", + "sources": [ + "https://github.com/blakeblackshear/frigate", + "https://github.com/truecharts/charts/tree/master/charts/stable/frigate", + "https://ghcr.io/blakeblackshear/frigate" + ], + "type": "application", + "version": "13.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": "imageSelector", + "label": "Select Image", + "schema": { + "type": "string", + "default": "image", + "enum": [ + { + "value": "image", + "description": "Base Image" + }, + { + "value": "tensorrtImage", + "description": "Image with TensorRT libraries for nvidia cards" + } + ] + } + }, + { + "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": 10500, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "rtmp", + "label": "RTMP Service", + "description": "The service on which nodes connect to.", + "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": "rtmp", + "label": "RTMP 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": 1935, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "rtsp", + "label": "RTSP Service", + "description": "The service on which nodes connect to.", + "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": "rtsp", + "label": "RTSP 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": 8554, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "webrtc", + "label": "WebRTC Service", + "description": "The service on which nodes connect to.", + "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": "webrtc-tcp", + "label": "WebRTC (TCP) 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": 8555, + "required": true + } + } + ] + } + }, + { + "variable": "webrtc-udp", + "label": "WebRTC (UDP) 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": 8555, + "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": "media", + "label": "App Media", + "description": "Stores the Application Media and DB", + "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": "config", + "label": "App Config", + "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": 0 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID this App of the user running the application", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "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": "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": "

NVR With Realtime Object Detection for IP Cameras

\n

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

\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

frigate-13.4.1 (2024-03-07)

\n

Chore

\n
    \n
  • bump everything to trigger re-release
  • \n
\n

frigate-13.4.0 (2024-03-07)

\n

Chore

\n
    \n
  • update container image common to v19.0.0@eef2062 by renovate (#18956)
  • \n
\n

frigate-13.3.0 (2024-03-06)

\n

Chore

\n
    \n
  • update container image common to v18.2.0@9e8b7d4 by renovate (#18943)
  • \n
\n

frigate-13.2.3 (2024-03-05)

\n

Chore

\n
    \n
  • bump everything to force helm release again
  • \n
\n

frigate-13.2.2 (2024-03-05)

\n

Chore

\n
    \n
  • \n

    force rereleases

    \n
  • \n
  • \n

    update container image common to v18.1.6@904d84b by renovate (#18835)

    \n
  • \n
\n

frigate-12.1.11 (2024-02-03)

\n

Chore

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

frigate-12.1.10 (2024-01-26)

\n

Chore

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

frigate-12.1.9 (2024-01-21)

\n

Chore

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

frigate-12.1.8 (2024-01-21)

\n

Chore

\n
    \n
  • update container image common to v17.2.26@24c98f7 by renovate (#17409)
  • \n
" + }, + "13.4.0": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/frigate/13.4.0", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/timezone", + "definitions/certificate", + "definitions/interface", + "normalize/interfaceConfiguration" + ], + "human_version": "0.12.1_13.4.0", + "version": "13.4.0", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "truecharts.org/category": "nvr", + "truecharts.org/max_helm_version": "3.14", + "truecharts.org/min_helm_version": "3.11", + "truecharts.org/train": "stable" + }, + "apiVersion": "v2", + "appVersion": "0.12.1", + "dependencies": [ + { + "name": "common", + "version": "19.0.0", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "NVR With Realtime Object Detection for IP Cameras", + "home": "https://truecharts.org/charts/stable/frigate", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/frigate.png", + "keywords": [ + "encode", + "nvr", + "media", + "frigate" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "frigate", + "sources": [ + "https://github.com/blakeblackshear/frigate", + "https://github.com/truecharts/charts/tree/master/charts/stable/frigate", + "https://ghcr.io/blakeblackshear/frigate" + ], + "type": "application", + "version": "13.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": "imageSelector", + "label": "Select Image", + "schema": { + "type": "string", + "default": "image", + "enum": [ + { + "value": "image", + "description": "Base Image" + }, + { + "value": "tensorrtImage", + "description": "Image with TensorRT libraries for nvidia cards" + } + ] + } + }, + { + "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": 10500, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "rtmp", + "label": "RTMP Service", + "description": "The service on which nodes connect to.", + "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": "rtmp", + "label": "RTMP 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": 1935, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "rtsp", + "label": "RTSP Service", + "description": "The service on which nodes connect to.", + "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": "rtsp", + "label": "RTSP 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": 8554, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "webrtc", + "label": "WebRTC Service", + "description": "The service on which nodes connect to.", + "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": "webrtc-tcp", + "label": "WebRTC (TCP) 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": 8555, + "required": true + } + } + ] + } + }, + { + "variable": "webrtc-udp", + "label": "WebRTC (UDP) 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": 8555, + "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": "media", + "label": "App Media", + "description": "Stores the Application Media and DB", + "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": "config", + "label": "App Config", + "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": 0 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID this App of the user running the application", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "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": "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": "

NVR With Realtime Object Detection for IP Cameras

\n

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

\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

frigate-13.4.0 (2024-03-07)

\n

Chore

\n
    \n
  • update container image common to v19.0.0@eef2062 by renovate (#18956)
  • \n
\n

frigate-13.3.0 (2024-03-06)

\n

Chore

\n
    \n
  • update container image common to v18.2.0@9e8b7d4 by renovate (#18943)
  • \n
\n

frigate-13.2.3 (2024-03-05)

\n

Chore

\n
    \n
  • bump everything to force helm release again
  • \n
\n

frigate-13.2.2 (2024-03-05)

\n

Chore

\n
    \n
  • \n

    force rereleases

    \n
  • \n
  • \n

    update container image common to v18.1.6@904d84b by renovate (#18835)

    \n
  • \n
\n

frigate-12.1.11 (2024-02-03)

\n

Chore

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

frigate-12.1.10 (2024-01-26)

\n

Chore

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

frigate-12.1.9 (2024-01-21)

\n

Chore

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

frigate-12.1.8 (2024-01-21)

\n

Chore

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

frigate-12.1.7 (2024-01-21)

\n

Chore

\n
    \n
  • update metadata in chart.yaml (#17457)
  • \n
" + }, + "13.3.0": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/frigate/13.3.0", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/timezone", + "definitions/certificate", + "definitions/interface", + "normalize/interfaceConfiguration" + ], + "human_version": "0.12.1_13.3.0", + "version": "13.3.0", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "truecharts.org/category": "nvr", + "truecharts.org/max_helm_version": "3.14", + "truecharts.org/min_helm_version": "3.11", + "truecharts.org/train": "stable" + }, + "apiVersion": "v2", + "appVersion": "0.12.1", + "dependencies": [ + { + "name": "common", + "version": "18.2.0", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "NVR With Realtime Object Detection for IP Cameras", + "home": "https://truecharts.org/charts/stable/frigate", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/frigate.png", + "keywords": [ + "encode", + "nvr", + "media", + "frigate" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "frigate", + "sources": [ + "https://github.com/blakeblackshear/frigate", + "https://github.com/truecharts/charts/tree/master/charts/stable/frigate", + "https://ghcr.io/blakeblackshear/frigate" + ], + "type": "application", + "version": "13.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": "imageSelector", + "label": "Select Image", + "schema": { + "type": "string", + "default": "image", + "enum": [ + { + "value": "image", + "description": "Base Image" + }, + { + "value": "tensorrtImage", + "description": "Image with TensorRT libraries for nvidia cards" + } + ] + } + }, + { + "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": 10500, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "rtmp", + "label": "RTMP Service", + "description": "The service on which nodes connect to.", + "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": "rtmp", + "label": "RTMP 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": 1935, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "rtsp", + "label": "RTSP Service", + "description": "The service on which nodes connect to.", + "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": "rtsp", + "label": "RTSP 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": 8554, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "webrtc", + "label": "WebRTC Service", + "description": "The service on which nodes connect to.", + "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": "webrtc-tcp", + "label": "WebRTC (TCP) 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": 8555, + "required": true + } + } + ] + } + }, + { + "variable": "webrtc-udp", + "label": "WebRTC (UDP) 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": 8555, + "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": "media", + "label": "App Media", + "description": "Stores the Application Media and DB", + "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": "config", + "label": "App Config", + "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": 0 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID this App of the user running the application", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "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": "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": "

NVR With Realtime Object Detection for IP Cameras

\n

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

\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

frigate-13.3.0 (2024-03-06)

\n

Chore

\n
    \n
  • update container image common to v18.2.0@9e8b7d4 by renovate (#18943)
  • \n
\n

frigate-13.2.3 (2024-03-05)

\n

Chore

\n
    \n
  • bump everything to force helm release again
  • \n
\n

frigate-13.2.2 (2024-03-05)

\n

Chore

\n
    \n
  • \n

    force rereleases

    \n
  • \n
  • \n

    update container image common to v18.1.6@904d84b by renovate (#18835)

    \n
  • \n
\n

frigate-12.1.11 (2024-02-03)

\n

Chore

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

frigate-12.1.10 (2024-01-26)

\n

Chore

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

frigate-12.1.9 (2024-01-21)

\n

Chore

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

frigate-12.1.8 (2024-01-21)

\n

Chore

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

frigate-12.1.7 (2024-01-21)

\n

Chore

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

frigate-12.1.6 (2024-01-09)

\n

Chore

" + }, + "13.2.3": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/frigate/13.2.3", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/timezone", + "definitions/certificate", + "definitions/interface", + "normalize/interfaceConfiguration" + ], + "human_version": "0.12.1_13.2.3", + "version": "13.2.3", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "truecharts.org/category": "nvr", + "truecharts.org/max_helm_version": "3.14", + "truecharts.org/min_helm_version": "3.11", + "truecharts.org/train": "stable" + }, + "apiVersion": "v2", + "appVersion": "0.12.1", + "dependencies": [ + { + "name": "common", + "version": "18.1.6", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "NVR With Realtime Object Detection for IP Cameras", + "home": "https://truecharts.org/charts/stable/frigate", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/frigate.png", + "keywords": [ + "encode", + "nvr", + "media", + "frigate" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "frigate", + "sources": [ + "https://github.com/blakeblackshear/frigate", + "https://github.com/truecharts/charts/tree/master/charts/stable/frigate", + "https://ghcr.io/blakeblackshear/frigate" + ], + "type": "application", + "version": "13.2.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": "imageSelector", + "label": "Select Image", + "schema": { + "type": "string", + "default": "image", + "enum": [ + { + "value": "image", + "description": "Base Image" + }, + { + "value": "tensorrtImage", + "description": "Image with TensorRT libraries for nvidia cards" + } + ] + } + }, + { + "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": 10500, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "rtmp", + "label": "RTMP Service", + "description": "The service on which nodes connect to.", + "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": "rtmp", + "label": "RTMP 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": 1935, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "rtsp", + "label": "RTSP Service", + "description": "The service on which nodes connect to.", + "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": "rtsp", + "label": "RTSP 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": 8554, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "webrtc", + "label": "WebRTC Service", + "description": "The service on which nodes connect to.", + "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": "webrtc-tcp", + "label": "WebRTC (TCP) 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": 8555, + "required": true + } + } + ] + } + }, + { + "variable": "webrtc-udp", + "label": "WebRTC (UDP) 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": 8555, + "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": "media", + "label": "App Media", + "description": "Stores the Application Media and DB", + "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": "config", + "label": "App Config", + "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": 0 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID this App of the user running the application", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "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": "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": "

NVR With Realtime Object Detection for IP Cameras

\n

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

\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

frigate-13.2.3 (2024-03-05)

\n

Chore

\n
    \n
  • bump everything to force helm release again
  • \n
\n

frigate-13.2.2 (2024-03-05)

\n

Chore

\n
    \n
  • \n

    force rereleases

    \n
  • \n
  • \n

    update container image common to v18.1.6@904d84b by renovate (#18835)

    \n
  • \n
\n

frigate-12.1.11 (2024-02-03)

\n

Chore

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

frigate-12.1.10 (2024-01-26)

\n

Chore

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

frigate-12.1.9 (2024-01-21)

\n

Chore

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

frigate-12.1.8 (2024-01-21)

\n

Chore

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

frigate-12.1.7 (2024-01-21)

\n

Chore

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

frigate-12.1.6 (2024-01-09)

\n

Chore

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

frigate-12.1.5 (2024-01-02)

\n

Chore

" + }, + "12.3.0": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/frigate/12.3.0", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/interface", + "normalize/interfaceConfiguration", + "definitions/gpuConfiguration", + "definitions/timezone", + "definitions/certificate" + ], + "human_version": "0.12.1_12.3.0", + "version": "12.3.0", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "truecharts.org/category": "nvr", + "truecharts.org/max_helm_version": "3.14", + "truecharts.org/min_helm_version": "3.12", + "truecharts.org/train": "stable" + }, + "apiVersion": "v2", + "appVersion": "0.12.1", + "dependencies": [ + { + "name": "common", + "version": "17.5.0", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "NVR With Realtime Object Detection for IP Cameras", + "home": "https://truecharts.org/charts/stable/frigate", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/frigate.png", + "keywords": [ + "encode", + "nvr", + "media", + "frigate" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "frigate", + "sources": [ + "https://github.com/blakeblackshear/frigate", + "https://github.com/truecharts/charts/tree/master/charts/stable/frigate", + "https://ghcr.io/blakeblackshear/frigate" + ], + "type": "application", + "version": "12.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": "imageSelector", + "label": "Select Image", + "schema": { + "type": "string", + "default": "image", + "enum": [ + { + "value": "image", + "description": "Base Image" + }, + { + "value": "tensorrtImage", + "description": "Image with TensorRT libraries for nvidia cards" + } + ] + } + }, + { + "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": 10500, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "rtmp", + "label": "RTMP Service", + "description": "The service on which nodes connect to.", + "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": "rtmp", + "label": "RTMP 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": 1935, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "rtsp", + "label": "RTSP Service", + "description": "The service on which nodes connect to.", + "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": "rtsp", + "label": "RTSP 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": 8554, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "webrtc", + "label": "WebRTC Service", + "description": "The service on which nodes connect to.", + "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": "webrtc-tcp", + "label": "WebRTC (TCP) 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": 8555, + "required": true + } + } + ] + } + }, + { + "variable": "webrtc-udp", + "label": "WebRTC (UDP) 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": 8555, + "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": "media", + "label": "App Media", + "description": "Stores the Application Media and DB", + "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": "config", + "label": "App Config", + "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": 0 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID this App of the user running the application", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "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": "

NVR With Realtime Object Detection for IP Cameras

\n

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

\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

frigate-12.1.11 (2024-02-03)

\n

Chore

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

frigate-12.1.10 (2024-01-26)

\n

Chore

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

frigate-12.1.9 (2024-01-21)

\n

Chore

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

frigate-12.1.8 (2024-01-21)

\n

Chore

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

frigate-12.1.7 (2024-01-21)

\n

Chore

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

frigate-12.1.6 (2024-01-09)

\n

Chore

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

frigate-12.1.5 (2024-01-02)

\n

Chore

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

frigate-12.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
\n

frigate-12.1.3 (2024-01-01)

\n

Chore

\n
    \n
  • \n

    bump all charts for OCI test push

    \n
  • \n
  • \n

    move everything to consume OCI-hosted common-chart dependency

    \n
  • \n
  • \n

    update container image common to v17.2.19@4ebb688 by renovate (#16733)

    \n
  • \n
" + }, + "12.2.0": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/frigate/12.2.0", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/interface", + "normalize/interfaceConfiguration", + "definitions/gpuConfiguration", + "definitions/timezone", + "definitions/certificate" + ], + "human_version": "0.12.1_12.2.0", + "version": "12.2.0", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "truecharts.org/category": "nvr", + "truecharts.org/max_helm_version": "3.14", + "truecharts.org/min_helm_version": "3.12", + "truecharts.org/train": "stable" + }, + "apiVersion": "v2", + "appVersion": "0.12.1", + "dependencies": [ + { + "name": "common", + "version": "17.4.2", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "NVR With Realtime Object Detection for IP Cameras", + "home": "https://truecharts.org/charts/stable/frigate", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/frigate.png", + "keywords": [ + "encode", + "nvr", + "media", + "frigate" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "frigate", + "sources": [ + "https://github.com/blakeblackshear/frigate", + "https://github.com/truecharts/charts/tree/master/charts/stable/frigate", + "https://ghcr.io/blakeblackshear/frigate" + ], + "type": "application", + "version": "12.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": "imageSelector", + "label": "Select Image", + "schema": { + "type": "string", + "default": "image", + "enum": [ + { + "value": "image", + "description": "Base Image" + }, + { + "value": "tensorrtImage", + "description": "Image with TensorRT libraries for nvidia cards" + } + ] + } + }, + { + "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": 10500, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "rtmp", + "label": "RTMP Service", + "description": "The service on which nodes connect to.", + "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": "rtmp", + "label": "RTMP 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": 1935, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "rtsp", + "label": "RTSP Service", + "description": "The service on which nodes connect to.", + "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": "rtsp", + "label": "RTSP 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": 8554, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "webrtc", + "label": "WebRTC Service", + "description": "The service on which nodes connect to.", + "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": "webrtc-tcp", + "label": "WebRTC (TCP) 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": 8555, + "required": true + } + } + ] + } + }, + { + "variable": "webrtc-udp", + "label": "WebRTC (UDP) 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": 8555, + "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": "media", + "label": "App Media", + "description": "Stores the Application Media and DB", + "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": "config", + "label": "App Config", + "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": 0 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID this App of the user running the application", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "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": "

NVR With Realtime Object Detection for IP Cameras

\n

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

\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

frigate-12.1.11 (2024-02-03)

\n

Chore

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

frigate-12.1.10 (2024-01-26)

\n

Chore

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

frigate-12.1.9 (2024-01-21)

\n

Chore

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

frigate-12.1.8 (2024-01-21)

\n

Chore

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

frigate-12.1.7 (2024-01-21)

\n

Chore

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

frigate-12.1.6 (2024-01-09)

\n

Chore

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

frigate-12.1.5 (2024-01-02)

\n

Chore

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

frigate-12.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
\n

frigate-12.1.3 (2024-01-01)

\n

Chore

\n
    \n
  • \n

    bump all charts for OCI test push

    \n
  • \n
  • \n

    move everything to consume OCI-hosted common-chart dependency

    \n
  • \n
  • \n

    update container image common to v17.2.19@4ebb688 by renovate (#16733)

    \n
  • \n
  • \n

    update container image common to v17.2.18@085ba3c by renovate (#16732)

    \n
  • \n
" + } +} \ No newline at end of file diff --git a/stable/frigate/item.yaml b/stable/frigate/item.yaml new file mode 100644 index 0000000..2502de5 --- /dev/null +++ b/stable/frigate/item.yaml @@ -0,0 +1,4 @@ +icon_url: https://truecharts.org/img/hotlink-ok/chart-icons/frigate.png +categories: + - nvr +screenshots: [] diff --git a/stable/gitea/17.2.0/.helmignore b/stable/gitea/17.2.0/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/gitea/17.2.0/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/gitea/17.2.0/CHANGELOG.md b/stable/gitea/17.2.0/CHANGELOG.md new file mode 100644 index 0000000..e45349f --- /dev/null +++ b/stable/gitea/17.2.0/CHANGELOG.md @@ -0,0 +1,1738 @@ +--- +title: Changelog +--- + +## [gitea-10.0.0](https://github.com/truecharts/charts/compare/gitea-9.0.30...gitea-10.0.0) (2022-11-10) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Major Change to GUI +- update helm general non-major ([#4342](https://github.com/truecharts/charts/issues/4342)) +- update helm general non-major ([#4349](https://github.com/truecharts/charts/issues/4349)) +- update helm general non-major ([#4329](https://github.com/truecharts/charts/issues/4329)) + +## [gitea-9.0.33](https://github.com/truecharts/charts/compare/gitea-9.0.30...gitea-9.0.33) (2022-11-08) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major ([#4342](https://github.com/truecharts/charts/issues/4342)) +- update helm general non-major ([#4349](https://github.com/truecharts/charts/issues/4349)) +- update helm general non-major ([#4329](https://github.com/truecharts/charts/issues/4329)) + +## [gitea-9.0.32](https://github.com/truecharts/charts/compare/gitea-9.0.30...gitea-9.0.32) (2022-11-08) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major ([#4342](https://github.com/truecharts/charts/issues/4342)) +- update helm general non-major ([#4329](https://github.com/truecharts/charts/issues/4329)) + +## [gitea-9.0.32](https://github.com/truecharts/charts/compare/gitea-9.0.30...gitea-9.0.32) (2022-11-08) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major ([#4342](https://github.com/truecharts/charts/issues/4342)) +- update helm general non-major ([#4329](https://github.com/truecharts/charts/issues/4329)) + +## [gitea-9.0.32](https://github.com/truecharts/charts/compare/gitea-9.0.30...gitea-9.0.32) (2022-11-08) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major ([#4342](https://github.com/truecharts/charts/issues/4342)) +- update helm general non-major ([#4329](https://github.com/truecharts/charts/issues/4329)) + +## [gitea-9.0.31](https://github.com/truecharts/charts/compare/gitea-9.0.30...gitea-9.0.31) (2022-11-07) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major ([#4329](https://github.com/truecharts/charts/issues/4329)) + +## [gitea-9.0.31](https://github.com/truecharts/charts/compare/gitea-9.0.30...gitea-9.0.31) (2022-11-06) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major ([#4329](https://github.com/truecharts/charts/issues/4329)) + +## [gitea-9.0.30](https://github.com/truecharts/charts/compare/gitea-9.0.29...gitea-9.0.30) (2022-11-06) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major ([#4317](https://github.com/truecharts/charts/issues/4317)) + +## [gitea-9.0.29](https://github.com/truecharts/charts/compare/gitea-9.0.28...gitea-9.0.29) (2022-11-05) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major ([#4308](https://github.com/truecharts/charts/issues/4308)) + +## [gitea-9.0.28](https://github.com/truecharts/charts/compare/gitea-9.0.27...gitea-9.0.28) (2022-11-02) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major ([#4261](https://github.com/truecharts/charts/issues/4261)) + +## [gitea-9.0.27](https://github.com/truecharts/charts/compare/gitea-9.0.26...gitea-9.0.27) (2022-10-25) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major + +## [gitea-9.0.26](https://github.com/truecharts/charts/compare/gitea-9.0.25...gitea-9.0.26) (2022-10-25) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major ([#4182](https://github.com/truecharts/charts/issues/4182)) + +## [gitea-9.0.25](https://github.com/truecharts/charts/compare/gitea-9.0.24...gitea-9.0.25) (2022-10-19) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major ([#4122](https://github.com/truecharts/charts/issues/4122)) + +## [gitea-9.0.24](https://github.com/truecharts/charts/compare/gitea-9.0.23...gitea-9.0.24) (2022-10-16) + +### Chore + +- Auto-update chart README [skip ci] +- update docker general non-major ([#4108](https://github.com/truecharts/charts/issues/4108)) + +## [gitea-9.0.23](https://github.com/truecharts/charts/compare/gitea-9.0.22...gitea-9.0.23) (2022-10-12) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major ([#4071](https://github.com/truecharts/charts/issues/4071)) + +## [gitea-9.0.22](https://github.com/truecharts/charts/compare/gitea-9.0.21...gitea-9.0.22) (2022-10-07) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major + +## [gitea-9.0.22](https://github.com/truecharts/charts/compare/gitea-9.0.21...gitea-9.0.22) (2022-10-07) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major + +## [gitea-9.0.21](https://github.com/truecharts/charts/compare/gitea-9.0.20...gitea-9.0.21) (2022-10-05) + +### Chore + +- split addons in smaller templates ([#3979](https://github.com/truecharts/charts/issues/3979)) +- update helm general non-major + +## [gitea-9.0.19](https://github.com/truecharts/charts/compare/gitea-9.0.18...gitea-9.0.19) (2022-09-27) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major ([#3918](https://github.com/truecharts/charts/issues/3918)) + +## [gitea-9.0.18](https://github.com/truecharts/charts/compare/gitea-9.0.17...gitea-9.0.18) (2022-09-25) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major ([#3898](https://github.com/truecharts/charts/issues/3898)) + +## [gitea-9.0.17](https://github.com/truecharts/charts/compare/gitea-9.0.16...gitea-9.0.17) (2022-09-22) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- refactor Services SCALE GUI +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [gitea-9.0.17](https://github.com/truecharts/charts/compare/gitea-9.0.16...gitea-9.0.17) (2022-09-21) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- refactor Services SCALE GUI +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [gitea-9.0.17](https://github.com/truecharts/charts/compare/gitea-9.0.16...gitea-9.0.17) (2022-09-21) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- refactor Services SCALE GUI +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [gitea-9.0.17](https://github.com/truecharts/charts/compare/gitea-9.0.16...gitea-9.0.17) (2022-09-20) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- refactor Services SCALE GUI +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [gitea-9.0.17](https://github.com/truecharts/charts/compare/gitea-9.0.16...gitea-9.0.17) (2022-09-20) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- refactor Services SCALE GUI +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [gitea-9.0.17](https://github.com/truecharts/charts/compare/gitea-9.0.16...gitea-9.0.17) (2022-09-19) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- refactor Services SCALE GUI +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [gitea-9.0.17](https://github.com/truecharts/charts/compare/gitea-9.0.16...gitea-9.0.17) (2022-09-19) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- refactor Services SCALE GUI +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [gitea-9.0.17](https://github.com/truecharts/charts/compare/gitea-9.0.16...gitea-9.0.17) (2022-09-19) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- refactor Services SCALE GUI +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [gitea-9.0.17](https://github.com/truecharts/charts/compare/gitea-9.0.16...gitea-9.0.17) (2022-09-17) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- refactor Services SCALE GUI +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [gitea-9.0.17](https://github.com/truecharts/charts/compare/gitea-9.0.16...gitea-9.0.17) (2022-09-18) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [gitea-9.0.17](https://github.com/truecharts/charts/compare/gitea-9.0.16...gitea-9.0.17) (2022-09-16) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [gitea-9.0.17](https://github.com/truecharts/charts/compare/gitea-9.0.16...gitea-9.0.17) (2022-09-16) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [gitea-9.0.17](https://github.com/truecharts/charts/compare/gitea-9.0.16...gitea-9.0.17) (2022-09-15) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [gitea-9.0.17](https://github.com/truecharts/charts/compare/gitea-9.0.16...gitea-9.0.17) (2022-09-15) + +### Chore + +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [gitea-9.0.16](https://github.com/truecharts/charts/compare/gitea-9.0.15...gitea-9.0.16) (2022-09-13) + +### Chore + +- update helm chart memcached to v3.0.75 ([#3759](https://github.com/truecharts/charts/issues/3759)) + +## [gitea-9.0.15](https://github.com/truecharts/charts/compare/gitea-9.0.14...gitea-9.0.15) (2022-09-13) + +### Chore + +- update helm general non-major ([#3756](https://github.com/truecharts/charts/issues/3756)) + +## [gitea-9.0.14](https://github.com/truecharts/charts/compare/gitea-9.0.13...gitea-9.0.14) (2022-09-12) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major ([#3711](https://github.com/truecharts/charts/issues/3711)) + +## [gitea-9.0.14](https://github.com/truecharts/charts/compare/gitea-9.0.13...gitea-9.0.14) (2022-09-12) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major ([#3711](https://github.com/truecharts/charts/issues/3711)) + +## [gitea-9.0.14](https://github.com/truecharts/charts/compare/gitea-9.0.13...gitea-9.0.14) (2022-09-11) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major ([#3711](https://github.com/truecharts/charts/issues/3711)) + +## [gitea-9.0.14](https://github.com/truecharts/charts/compare/gitea-9.0.13...gitea-9.0.14) (2022-09-11) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major ([#3711](https://github.com/truecharts/charts/issues/3711)) + +## [gitea-9.0.14](https://github.com/truecharts/charts/compare/gitea-9.0.13...gitea-9.0.14) (2022-09-11) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major ([#3711](https://github.com/truecharts/charts/issues/3711)) + +## [gitea-9.0.14](https://github.com/truecharts/charts/compare/gitea-9.0.13...gitea-9.0.14) (2022-09-11) + +### Chore + +- update helm general non-major ([#3711](https://github.com/truecharts/charts/issues/3711)) + +## [gitea-9.0.13](https://github.com/truecharts/charts/compare/gitea-9.0.12...gitea-9.0.13) (2022-09-10) + +### Chore + +- update docker general non-major ([#3727](https://github.com/truecharts/charts/issues/3727)) + +## [gitea-9.0.12](https://github.com/truecharts/charts/compare/gitea-9.0.10...gitea-9.0.12) (2022-08-30) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major ([#3639](https://github.com/truecharts/charts/issues/3639)) +- update helm chart common to v10.5.5 ([#3626](https://github.com/truecharts/charts/issues/3626)) + +## [gitea-9.0.11](https://github.com/truecharts/charts/compare/gitea-9.0.10...gitea-9.0.11) (2022-08-30) + +### Chore + +- update helm chart common to v10.5.5 ([#3626](https://github.com/truecharts/charts/issues/3626)) + +## [gitea-9.0.10](https://github.com/truecharts/charts/compare/gitea-9.0.9...gitea-9.0.10) (2022-08-30) + +### Chore + +- update helm general non-major ([#3624](https://github.com/truecharts/charts/issues/3624)) + +## [gitea-9.0.9](https://github.com/truecharts/charts/compare/gitea-9.0.7...gitea-9.0.9) (2022-08-29) + +### Chore + +- update helm general non-major ([#3621](https://github.com/truecharts/charts/issues/3621)) +- update helm general non-major ([#3619](https://github.com/truecharts/charts/issues/3619)) + +## [gitea-9.0.7](https://github.com/truecharts/charts/compare/gitea-9.0.6...gitea-9.0.7) (2022-08-23) + +### Chore + +- update helm general non-major helm releases ([#3545](https://github.com/truecharts/charts/issues/3545)) + +## [gitea-9.0.6](https://github.com/truecharts/charts/compare/gitea-9.0.5...gitea-9.0.6) (2022-08-20) + +### Chore + +- update docker general non-major docker tags ([#3518](https://github.com/truecharts/charts/issues/3518)) + +## [gitea-9.0.5](https://github.com/truecharts/charts/compare/gitea-9.0.4...gitea-9.0.5) (2022-08-17) + +### Chore + +- update helm general non-major helm releases ([#3484](https://github.com/truecharts/charts/issues/3484)) + +## [gitea-9.0.4](https://github.com/truecharts/charts/compare/gitea-9.0.3...gitea-9.0.4) (2022-08-13) + +### Fix + +- Add WebHook config ([#3463](https://github.com/truecharts/charts/issues/3463)) + +## [gitea-9.0.3](https://github.com/truecharts/charts/compare/gitea-9.0.2...gitea-9.0.3) (2022-08-12) + +### Chore + +- add documentation checkbox/section to all SCALE Apps +- update helm general non-major helm releases ([#3456](https://github.com/truecharts/charts/issues/3456)) + +### Fix + +- move extraArgs from .Values.controller to .Values ([#3447](https://github.com/truecharts/charts/issues/3447)) + +## [gitea-9.0.2](https://github.com/truecharts/charts/compare/gitea-9.0.1...gitea-9.0.2) (2022-08-09) + +### Chore + +- update helm general non-major helm releases to v10.4.9 ([#3413](https://github.com/truecharts/charts/issues/3413)) + +## [gitea-9.0.1](https://github.com/truecharts/charts/compare/gitea-8.0.27...gitea-9.0.1) (2022-08-08) + +### Chore + +- update helm general non-major helm releases ([#3376](https://github.com/truecharts/charts/issues/3376)) +- update docker general non-major ([#3356](https://github.com/truecharts/charts/issues/3356)) +- replace questions parts with templates ([#3402](https://github.com/truecharts/charts/issues/3402)) + +## [gitea-8.0.27](https://github.com/truecharts/apps/compare/gitea-8.0.26...gitea-8.0.27) (2022-07-26) + +### Chore + +- update home links ([#3291](https://github.com/truecharts/apps/issues/3291)) +- update helm general non-major helm releases ([#3302](https://github.com/truecharts/apps/issues/3302)) + +## [gitea-8.0.26](https://github.com/truecharts/apps/compare/gitea-8.0.25...gitea-8.0.26) (2022-07-25) + +### Chore + +- Auto-update chart README [skip ci] +- update docker general non-major ([#3295](https://github.com/truecharts/apps/issues/3295)) + +## [gitea-8.0.26](https://github.com/truecharts/apps/compare/gitea-8.0.25...gitea-8.0.26) (2022-07-25) + +### Chore + +- update docker general non-major ([#3295](https://github.com/truecharts/apps/issues/3295)) + +## [gitea-8.0.25](https://github.com/truecharts/apps/compare/gitea-8.0.24...gitea-8.0.25) (2022-07-23) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major helm releases ([#3280](https://github.com/truecharts/apps/issues/3280)) + +## [gitea-8.0.25](https://github.com/truecharts/apps/compare/gitea-8.0.24...gitea-8.0.25) (2022-07-23) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major helm releases ([#3280](https://github.com/truecharts/apps/issues/3280)) + +## [gitea-8.0.25](https://github.com/truecharts/apps/compare/gitea-8.0.24...gitea-8.0.25) (2022-07-23) + +### Chore + +- update helm general non-major helm releases ([#3280](https://github.com/truecharts/apps/issues/3280)) + +## [gitea-8.0.24](https://github.com/truecharts/apps/compare/gitea-8.0.23...gitea-8.0.24) (2022-07-23) + +### Chore + +- update helm general non-major helm releases ([#3274](https://github.com/truecharts/apps/issues/3274)) + +## [gitea-8.0.23](https://github.com/truecharts/apps/compare/gitea-8.0.21...gitea-8.0.23) (2022-07-22) + +### Chore + +- Bump all charts to generate config and container references due to huge increase of repository +- update helm general non-major helm releases ([#3268](https://github.com/truecharts/apps/issues/3268)) + +## [gitea-8.0.21](https://github.com/truecharts/apps/compare/gitea-8.0.20...gitea-8.0.21) (2022-07-19) + +### Chore + +- Update Readme and Description on SCALE + +## [gitea-8.0.20](https://github.com/truecharts/apps/compare/gitea-8.0.19...gitea-8.0.20) (2022-07-14) + +### Fix + +- regenerate catalog and update template + +## [gitea-8.0.19](https://github.com/truecharts/apps/compare/gitea-8.0.17...gitea-8.0.19) (2022-07-14) + +### Fix + +- bump to ensure .helmignore is present on all Charts + +## [gitea-8.0.17](https://github.com/truecharts/apps/compare/gitea-8.0.16...gitea-8.0.17) (2022-07-13) + +### Chore + +- update docker general non-major ([#3157](https://github.com/truecharts/apps/issues/3157)) + +## [gitea-8.0.16](https://github.com/truecharts/apps/compare/gitea-8.0.14...gitea-8.0.16) (2022-07-12) + +### Chore + +- update icons ([#3156](https://github.com/truecharts/apps/issues/3156)) +- bump to cleanup old docs and use correct icon urls + +## [gitea-8.0.14](https://github.com/truecharts/apps/compare/gitea-8.0.13...gitea-8.0.14) (2022-07-12) + +### Chore + +- bump to regenerate documentation + + + +### [gitea-8.0.13](https://github.com/truecharts/apps/compare/gitea-8.0.12...gitea-8.0.13) (2022-07-12) + +#### Chore + +- update helm general non-major helm releases ([#3147](https://github.com/truecharts/apps/issues/3147)) + + + +### [gitea-8.0.12](https://github.com/truecharts/apps/compare/gitea-8.0.11...gitea-8.0.12) (2022-07-11) + +#### Chore + +- move icons into the apps folder ([#3139](https://github.com/truecharts/apps/issues/3139)) + + + +### [gitea-8.0.11](https://github.com/truecharts/apps/compare/gitea-8.0.10...gitea-8.0.11) (2022-07-09) + +#### Chore + +- update helm general non-major helm releases ([#3113](https://github.com/truecharts/apps/issues/3113)) + + + +### [gitea-8.0.10](https://github.com/truecharts/apps/compare/gitea-8.0.9...gitea-8.0.10) (2022-07-05) + +#### Chore + +- update helm general non-major helm releases ([#3075](https://github.com/truecharts/apps/issues/3075)) + + + +### [gitea-8.0.9](https://github.com/truecharts/apps/compare/gitea-8.0.8...gitea-8.0.9) (2022-07-04) + +#### Chore + +- update helm general non-major helm releases ([#3066](https://github.com/truecharts/apps/issues/3066)) + + + +### [gitea-8.0.8](https://github.com/truecharts/apps/compare/gitea-8.0.7...gitea-8.0.8) (2022-06-29) + +#### Chore + +- update helm general non-major Helm releases ([#3003](https://github.com/truecharts/apps/issues/3003)) + + + +### [gitea-8.0.7](https://github.com/truecharts/apps/compare/gitea-8.0.6...gitea-8.0.7) (2022-06-26) + +#### Gitea + +- change questions.yaml admin password to private ([#2991](https://github.com/truecharts/apps/issues/2991)) + + + +### [gitea-8.0.6](https://github.com/truecharts/apps/compare/gitea-8.0.5...gitea-8.0.6) (2022-06-25) + +#### Chore + +- update helm general non-major helm releases ([#2977](https://github.com/truecharts/apps/issues/2977)) + + + +### [gitea-8.0.5](https://github.com/truecharts/apps/compare/gitea-8.0.4...gitea-8.0.5) (2022-06-22) + +#### Chore + +- update helm general non-major helm releases ([#2948](https://github.com/truecharts/apps/issues/2948)) + + + +### [gitea-8.0.4](https://github.com/truecharts/apps/compare/gitea-8.0.3...gitea-8.0.4) (2022-06-21) + +#### Chore + +- update helm general non-major helm releases ([#2943](https://github.com/truecharts/apps/issues/2943)) + + + +### [gitea-8.0.3](https://github.com/truecharts/apps/compare/gitea-8.0.2...gitea-8.0.3) (2022-06-14) + +#### Chore + +- update helm general non-major helm releases ([#2887](https://github.com/truecharts/apps/issues/2887)) + + + +### [gitea-8.0.2](https://github.com/truecharts/apps/compare/gitea-8.0.1...gitea-8.0.2) (2022-06-14) + +#### Chore + +- update helm general non-major helm releases ([#2886](https://github.com/truecharts/apps/issues/2886)) + + + +### [gitea-8.0.1](https://github.com/truecharts/apps/compare/gitea-8.0.0...gitea-8.0.1) (2022-06-11) + +#### Chore + +- update helm general non-major helm releases ([#2854](https://github.com/truecharts/apps/issues/2854)) + + + +### [gitea-8.0.0](https://github.com/truecharts/apps/compare/gitea-7.0.1...gitea-8.0.0) (2022-06-07) + +#### Chore + +- update helm general major helm releases ([#2804](https://github.com/truecharts/apps/issues/2804)) + +#### Fix + +- hotpatch to disable HPA and networkPolicy in SCALE interface, due to incompatible format. + + + +### [gitea-7.0.1](https://github.com/truecharts/apps/compare/gitea-6.0.29...gitea-7.0.1) (2022-06-07) + +#### Chore + +- Auto-update chart README [skip ci] +- sync all apps persistence configuration and always default to PVC +- update helm general non-major helm releases ([#2838](https://github.com/truecharts/apps/issues/2838)) + +#### Fix + +- remove malfunctioning SCALE migration script + +#### Refactor + +- BREAKING CHANGE ([#2836](https://github.com/truecharts/apps/issues/2836)) + + + +### [gitea-7.0.0](https://github.com/truecharts/apps/compare/gitea-6.0.29...gitea-7.0.0) (2022-06-07) + +#### Chore + +- sync all apps persistence configuration and always default to PVC + +#### Refactor + +- BREAKING CHANGE ([#2836](https://github.com/truecharts/apps/issues/2836)) + + + +### [gitea-6.0.29](https://github.com/truecharts/apps/compare/gitea-6.0.28...gitea-6.0.29) (2022-05-31) + +#### Chore + +- update helm general non-major helm releases ([#2803](https://github.com/truecharts/apps/issues/2803)) + + + +### [gitea-6.0.28](https://github.com/truecharts/apps/compare/gitea-6.0.27...gitea-6.0.28) (2022-05-26) + +#### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major helm releases ([#2759](https://github.com/truecharts/apps/issues/2759)) + + + +### [gitea-6.0.28](https://github.com/truecharts/apps/compare/gitea-6.0.27...gitea-6.0.28) (2022-05-26) + +#### Chore + +- update helm general non-major helm releases ([#2759](https://github.com/truecharts/apps/issues/2759)) + + + +### [gitea-6.0.27](https://github.com/truecharts/apps/compare/gitea-6.0.26...gitea-6.0.27) (2022-05-24) + +#### Chore + +- update helm general non-major helm releases + + + +### [gitea-6.0.26](https://github.com/truecharts/apps/compare/gitea-6.0.25...gitea-6.0.26) (2022-05-17) + +#### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major helm releases + + + +### [gitea-6.0.26](https://github.com/truecharts/apps/compare/gitea-6.0.25...gitea-6.0.26) (2022-05-17) + +#### Chore + +- update helm general non-major helm releases + + + +### [gitea-6.0.25](https://github.com/truecharts/apps/compare/gitea-6.0.24...gitea-6.0.25) (2022-05-17) + +#### Chore + +- update docker general non-major ([#2695](https://github.com/truecharts/apps/issues/2695)) +- update helm general non-major helm releases + + + +### [gitea-6.0.24](https://github.com/truecharts/apps/compare/gitea-6.0.23...gitea-6.0.24) (2022-05-10) + +#### Chore + +- update helm general non-major helm releases ([#2649](https://github.com/truecharts/apps/issues/2649)) + + + +### [gitea-6.0.23](https://github.com/truecharts/apps/compare/gitea-6.0.22...gitea-6.0.23) (2022-05-05) + +#### Chore + +- update helm general non-major helm releases ([#2612](https://github.com/truecharts/apps/issues/2612)) + + + +### [gitea-6.0.22](https://github.com/truecharts/apps/compare/gitea-6.0.21...gitea-6.0.22) (2022-05-04) + +#### Chore + +- update docker general non-major ([#2606](https://github.com/truecharts/apps/issues/2606)) + + + +### [gitea-6.0.21](https://github.com/truecharts/apps/compare/gitea-6.0.20...gitea-6.0.21) (2022-05-04) + +#### Chore + +- update helm general non-major helm releases ([#2605](https://github.com/truecharts/apps/issues/2605)) + + + +### [gitea-6.0.20](https://github.com/truecharts/apps/compare/gitea-6.0.19...gitea-6.0.20) (2022-04-26) + +#### Chore + +- update helm general non-major helm releases ([#2573](https://github.com/truecharts/apps/issues/2573)) + + + +### [gitea-6.0.19](https://github.com/truecharts/apps/compare/gitea-6.0.18...gitea-6.0.19) (2022-04-26) + +#### Chore + +- update docker general non-major ([#2571](https://github.com/truecharts/apps/issues/2571)) + + + +### [gitea-6.0.18](https://github.com/truecharts/apps/compare/gitea-6.0.17...gitea-6.0.18) (2022-04-20) + +#### Chore + +- add missing quote on description ([#2515](https://github.com/truecharts/apps/issues/2515)) +- update helm general non-major helm releases ([#2524](https://github.com/truecharts/apps/issues/2524)) + + + +### [gitea-6.0.17](https://github.com/truecharts/apps/compare/gitea-6.0.16...gitea-6.0.17) (2022-04-12) + +#### Chore + +- update helm general non-major helm releases ([#2480](https://github.com/truecharts/apps/issues/2480)) + + + +### [gitea-6.0.16](https://github.com/truecharts/apps/compare/gitea-6.0.15...gitea-6.0.16) (2022-04-03) + +#### Chore + +- update helm general non-major helm releases ([#2410](https://github.com/truecharts/apps/issues/2410)) + + + +### [gitea-6.0.15](https://github.com/truecharts/apps/compare/gitea-6.0.14...gitea-6.0.15) (2022-03-31) + +#### Fix + +- set user and group to 1000 ([#2356](https://github.com/truecharts/apps/issues/2356)) + + + +### [gitea-6.0.14](https://github.com/truecharts/apps/compare/gitea-6.0.13...gitea-6.0.14) (2022-03-31) + +#### Chore + +- update helm general non-major helm releases ([#2362](https://github.com/truecharts/apps/issues/2362)) + + + +### [gitea-6.0.13](https://github.com/truecharts/apps/compare/gitea-6.0.12...gitea-6.0.13) (2022-03-31) + +#### Chore + +- update helm general non-major helm releases ([#2361](https://github.com/truecharts/apps/issues/2361)) + + + +### [gitea-6.0.12](https://github.com/truecharts/apps/compare/gitea-6.0.11...gitea-6.0.12) (2022-03-30) + +#### Chore + +- Use new repo ([#2337](https://github.com/truecharts/apps/issues/2337)) +- update helm general non-major helm releases ([#2354](https://github.com/truecharts/apps/issues/2354)) + + + +### [gitea-6.0.11](https://github.com/truecharts/apps/compare/gitea-6.0.10...gitea-6.0.11) (2022-03-26) + +#### Chore + +- update helm general non-major helm releases ([#2290](https://github.com/truecharts/apps/issues/2290)) + + + +### [gitea-6.0.10](https://github.com/truecharts/apps/compare/gitea-6.0.9...gitea-6.0.10) (2022-03-26) + +#### Chore + +- bump all apps to trigger ci + + + +### [gitea-6.0.8](https://github.com/truecharts/apps/compare/gitea-6.0.7...gitea-6.0.8) (2022-03-24) + +#### Chore + +- update docker general non-major + + + +### [gitea-6.0.5](https://github.com/truecharts/apps/compare/gitea-6.0.4...gitea-6.0.5) (2022-03-17) + +#### Chore + +- update docker general non-major ([#2198](https://github.com/truecharts/apps/issues/2198)) +- update docker general non-major ([#2196](https://github.com/truecharts/apps/issues/2196)) + + + +### [gitea-6.0.3](https://github.com/truecharts/apps/compare/gitea-6.0.2...gitea-6.0.3) (2022-03-08) + +#### Chore + +- update helm general non-major helm releases ([#2116](https://github.com/truecharts/apps/issues/2116)) + + + +### [gitea-6.0.2](https://github.com/truecharts/apps/compare/gitea-6.0.1...gitea-6.0.2) (2022-03-07) + +#### Chore + +- update helm general non-major helm releases ([#2111](https://github.com/truecharts/apps/issues/2111)) + + + +### [gitea-6.0.1](https://github.com/truecharts/apps/compare/gitea-6.0.0...gitea-6.0.1) (2022-03-07) + +#### Chore + +- update docker general non-major ([#2046](https://github.com/truecharts/apps/issues/2046)) +- Remove `-icon` string from icon png's ([#2040](https://github.com/truecharts/apps/issues/2040)) + + + +### [gitea-6.0.0](https://github.com/truecharts/apps/compare/gitea-5.0.45...gitea-6.0.0) (2022-03-03) + +#### Chore + +- remove fixed env from questions.yaml +- remove empty env var declaration from questions.yaml +- update helm general major helm releases ([#2021](https://github.com/truecharts/apps/issues/2021)) + +#### Fix + +- BREAKING CHANGE Move some env-vars outside of env section ([#2010](https://github.com/truecharts/apps/issues/2010)) + + + +### [gitea-5.0.45](https://github.com/truecharts/apps/compare/gitea-5.0.44...gitea-5.0.45) (2022-03-02) + +#### Chore + +- rename `web_portal` to `open` ([#1957](https://github.com/truecharts/apps/issues/1957)) +- update helm general non-major helm releases ([#1999](https://github.com/truecharts/apps/issues/1999)) + + + +### [gitea-5.0.44](https://github.com/truecharts/apps/compare/gitea-5.0.43...gitea-5.0.44) (2022-02-21) + +#### Chore + +- update helm general non-major helm releases ([#1927](https://github.com/truecharts/apps/issues/1927)) + + + +### [gitea-5.0.43](https://github.com/truecharts/apps/compare/gitea-5.0.42...gitea-5.0.43) (2022-02-15) + +#### Chore + +- update helm general non-major helm releases ([#1901](https://github.com/truecharts/apps/issues/1901)) +- remove dups from configmap ([#1878](https://github.com/truecharts/apps/issues/1878)) + + + +### [gitea-5.0.42](https://github.com/truecharts/apps/compare/gitea-5.0.41...gitea-5.0.42) (2022-02-12) + +#### Fix + +- fix ci ([#1883](https://github.com/truecharts/apps/issues/1883)) + + + +### [gitea-5.0.41](https://github.com/truecharts/apps/compare/gitea-5.0.40...gitea-5.0.41) (2022-02-10) + +#### Chore + +- update docker general non-major ([#1876](https://github.com/truecharts/apps/issues/1876)) + + + +### [gitea-5.0.40](https://github.com/truecharts/apps/compare/gitea-5.0.39...gitea-5.0.40) (2022-02-08) + +#### Chore + +- update helm general non-major helm releases ([#1871](https://github.com/truecharts/apps/issues/1871)) + + + +### [gitea-5.0.39](https://github.com/truecharts/apps/compare/gitea-5.0.38...gitea-5.0.39) (2022-02-06) + +#### Chore + +- update helm chart common to v8.15.0 ([#1859](https://github.com/truecharts/apps/issues/1859)) + + + +### [gitea-5.0.38](https://github.com/truecharts/apps/compare/gitea-5.0.37...gitea-5.0.38) (2022-02-05) + +#### Chore + +- update helm general non-major helm releases ([#1852](https://github.com/truecharts/apps/issues/1852)) + + + +### [gitea-5.0.37](https://github.com/truecharts/apps/compare/gitea-5.0.36...gitea-5.0.37) (2022-02-02) + +#### Chore + +- update helm general non-major helm releases ([#1828](https://github.com/truecharts/apps/issues/1828)) + + + +### [gitea-5.0.36](https://github.com/truecharts/apps/compare/gitea-5.0.35...gitea-5.0.36) (2022-01-31) + +#### Chore + +- update docker general non-major docker tags ([#1823](https://github.com/truecharts/apps/issues/1823)) + + + +### [gitea-5.0.35](https://github.com/truecharts/apps/compare/gitea-5.0.34...gitea-5.0.35) (2022-01-25) + +#### Chore + +- update helm general non-major helm releases ([#1791](https://github.com/truecharts/apps/issues/1791)) + + + +### [gitea-5.0.34](https://github.com/truecharts/apps/compare/gitea-5.0.33...gitea-5.0.34) (2022-01-24) + +#### Fix + +- fix include ([#1773](https://github.com/truecharts/apps/issues/1773)) + + + +### [gitea-5.0.33](https://github.com/truecharts/apps/compare/gitea-5.0.32...gitea-5.0.33) (2022-01-22) + +#### Chore + +- update helm general non-major helm releases ([#1766](https://github.com/truecharts/apps/issues/1766)) + + + +### [gitea-5.0.32](https://github.com/truecharts/apps/compare/gitea-5.0.30...gitea-5.0.32) (2022-01-22) + +#### Chore + +- update helm general non-major helm releases ([#1763](https://github.com/truecharts/apps/issues/1763)) +- update helm general non-major helm releases ([#1759](https://github.com/truecharts/apps/issues/1759)) + +#### Fix + +- set additional_attrs: true on all dicts ([#1750](https://github.com/truecharts/apps/issues/1750)) + + + +### [gitea-5.0.31](https://github.com/truecharts/apps/compare/gitea-5.0.30...gitea-5.0.31) (2022-01-21) + +#### Chore + +- update helm general non-major helm releases ([#1759](https://github.com/truecharts/apps/issues/1759)) + +#### Fix + +- set additional_attrs: true on all dicts ([#1750](https://github.com/truecharts/apps/issues/1750)) + + + +### [gitea-5.0.30](https://github.com/truecharts/apps/compare/gitea-5.0.29...gitea-5.0.30) (2022-01-18) + +#### Chore + +- update helm general non-major helm releases ([#1732](https://github.com/truecharts/apps/issues/1732)) + + + +### [gitea-5.0.29](https://github.com/truecharts/apps/compare/gitea-5.0.28...gitea-5.0.29) (2022-01-17) + +#### Chore + +- update docker general non-major ([#1728](https://github.com/truecharts/apps/issues/1728)) + + + +### [gitea-5.0.28](https://github.com/truecharts/apps/compare/gitea-5.0.27...gitea-5.0.28) (2022-01-13) + +#### Chore + +- update helm general non-major helm releases ([#1712](https://github.com/truecharts/apps/issues/1712)) + +#### Feat + +- expose capabilities in GUI ([#1709](https://github.com/truecharts/apps/issues/1709)) + + + +### [gitea-5.0.27](https://github.com/truecharts/apps/compare/gitea-5.0.26...gitea-5.0.27) (2022-01-12) + +#### Chore + +- update helm general non-major helm releases ([#1704](https://github.com/truecharts/apps/issues/1704)) + + + +### [gitea-5.0.26](https://github.com/truecharts/apps/compare/gitea-5.0.25...gitea-5.0.26) (2022-01-11) + +#### Chore + +- update helm general non-major helm releases ([#1693](https://github.com/truecharts/apps/issues/1693)) + + + +### [gitea-5.0.25](https://github.com/truecharts/apps/compare/gitea-5.0.24...gitea-5.0.25) (2022-01-10) + +#### Chore + +- update docker general non-major ([#1677](https://github.com/truecharts/apps/issues/1677)) + + + +### [gitea-5.0.24](https://github.com/truecharts/apps/compare/gitea-5.0.23...gitea-5.0.24) (2022-01-04) + +#### Chore + +- update helm general non-major helm releases + + + +### [gitea-5.0.23](https://github.com/truecharts/apps/compare/gitea-5.0.22...gitea-5.0.23) (2022-01-03) + +#### Chore + +- update docker general non-major ([#1646](https://github.com/truecharts/apps/issues/1646)) + + + +### [gitea-5.0.22](https://github.com/truecharts/apps/compare/gitea-5.0.21...gitea-5.0.22) (2021-12-28) + +#### Chore + +- update helm general non-major helm releases ([#1623](https://github.com/truecharts/apps/issues/1623)) + + + +### [gitea-5.0.21](https://github.com/truecharts/apps/compare/gitea-5.0.20...gitea-5.0.21) (2021-12-24) + +#### Chore + +- update docker general non-major docker tags ([#1609](https://github.com/truecharts/apps/issues/1609)) + + + +### [gitea-5.0.20](https://github.com/truecharts/apps/compare/gitea-5.0.19...gitea-5.0.20) (2021-12-21) + +#### Chore + +- update helm general non-major helm releases ([#1596](https://github.com/truecharts/apps/issues/1596)) + + + +### [gitea-5.0.19](https://github.com/truecharts/apps/compare/gitea-5.0.18...gitea-5.0.19) (2021-12-19) + +#### Chore + +- Last patch bump before RC2 branch-off +- remove `editable: true` as this is the default ([#1576](https://github.com/truecharts/apps/issues/1576)) + + + +### [gitea-5.0.18](https://github.com/truecharts/apps/compare/gitea-5.0.17...gitea-5.0.18) (2021-12-19) + +#### Chore + +- completely remove mountPath reference from GUI ([#1572](https://github.com/truecharts/apps/issues/1572)) +- update helm general non-major helm releases ([#1571](https://github.com/truecharts/apps/issues/1571)) + + + +### [gitea-5.0.17](https://github.com/truecharts/apps/compare/gitea-5.0.16...gitea-5.0.17) (2021-12-18) + +#### Chore + +- cleanup questions by removing hidden dicts ([#1558](https://github.com/truecharts/apps/issues/1558)) +- App-Icon Organization ([#1539](https://github.com/truecharts/apps/issues/1539)) + + + +### [gitea-5.0.16](https://github.com/truecharts/apps/compare/gitea-5.0.15...gitea-5.0.16) (2021-12-14) + +#### Chore + +- update helm general non-major helm releases ([#1535](https://github.com/truecharts/apps/issues/1535)) + + + +### [gitea-5.0.15](https://github.com/truecharts/apps/compare/gitea-5.0.14...gitea-5.0.15) (2021-12-13) + +#### Chore + +- move incubator apps to stable and bump everything + + + +### [gitea-5.0.14](https://github.com/truecharts/apps/compare/gitea-5.0.13...gitea-5.0.14) (2021-12-11) + +#### Chore + +- update general helm non-major helm releases ([#1509](https://github.com/truecharts/apps/issues/1509)) + + + +### [gitea-5.0.13](https://github.com/truecharts/apps/compare/gitea-5.0.12...gitea-5.0.13) (2021-12-11) + +#### Chore + +- update non-major docker ([#1507](https://github.com/truecharts/apps/issues/1507)) + + + +### [gitea-5.0.12](https://github.com/truecharts/apps/compare/gitea-5.0.11...gitea-5.0.12) (2021-12-07) + +#### Chore + +- update non-major deps helm releases ([#1481](https://github.com/truecharts/apps/issues/1481)) + + + +### [gitea-5.0.11](https://github.com/truecharts/apps/compare/gitea-5.0.10...gitea-5.0.11) (2021-12-05) + +#### Chore + +- fix some remaining issues after refactor work + + + +### gitea-5.0.10 (2021-12-05) + +#### Chore + +- bump apps to generate security page +- move all container references to TCCR ([#1448](https://github.com/truecharts/apps/issues/1448)) +- ensure container references are prefixed with v +- update non-major deps helm releases ([#1468](https://github.com/truecharts/apps/issues/1468)) +- update non-major deps helm releases ([#1453](https://github.com/truecharts/apps/issues/1453)) +- update non-major ([#1449](https://github.com/truecharts/apps/issues/1449)) +- update non-major deps helm releases ([#1471](https://github.com/truecharts/apps/issues/1471)) +- update non-major deps helm releases ([#1432](https://github.com/truecharts/apps/issues/1432)) + +#### Fix + +- fix typo in theme selection ([#1428](https://github.com/truecharts/apps/issues/1428)) + + + +### [gitea-5.0.9](https://github.com/truecharts/apps/compare/gitea-5.0.8...gitea-5.0.9) (2021-12-05) + +#### Chore + +- update non-major deps helm releases ([#1468](https://github.com/truecharts/apps/issues/1468)) + + + +### [gitea-5.0.8](https://github.com/truecharts/apps/compare/gitea-5.0.7...gitea-5.0.8) (2021-12-04) + +#### Chore + +- bump apps to generate security page + + + +### [gitea-5.0.7](https://github.com/truecharts/apps/compare/gitea-5.0.6...gitea-5.0.7) (2021-12-04) + +#### Chore + +- update non-major deps helm releases ([#1453](https://github.com/truecharts/apps/issues/1453)) + + + +### [gitea-5.0.6](https://github.com/truecharts/apps/compare/gitea-5.0.5...gitea-5.0.6) (2021-12-03) + +#### Chore + +- ensure container references are prefixed with v +- move all container references to TCCR ([#1448](https://github.com/truecharts/apps/issues/1448)) +- update non-major ([#1449](https://github.com/truecharts/apps/issues/1449)) + + + +### [gitea-5.0.5](https://github.com/truecharts/apps/compare/gitea-5.0.4...gitea-5.0.5) (2021-11-30) + +#### Chore + +- update non-major deps helm releases ([#1432](https://github.com/truecharts/apps/issues/1432)) + +#### Fix + +- correct some ports mistakes ([#1416](https://github.com/truecharts/apps/issues/1416)) +- move conflicting ports to 10xxx range ([#1415](https://github.com/truecharts/apps/issues/1415)) + + + +### [gitea-5.0.4](https://github.com/truecharts/apps/compare/gitea-5.0.3...gitea-5.0.4) (2021-11-23) + +#### Chore + +- update non-major deps helm releases ([#1386](https://github.com/truecharts/apps/issues/1386)) + + + +### [gitea-5.0.3](https://github.com/truecharts/apps/compare/gitea-5.0.2...gitea-5.0.3) (2021-11-22) + +#### Chore + +- update non-major deps helm releases ([#1383](https://github.com/truecharts/apps/issues/1383)) + + + +### [gitea-5.0.2](https://github.com/truecharts/apps/compare/gitea-5.0.1...gitea-5.0.2) (2021-11-16) + +#### Chore + +- update non-major deps helm releases ([#1345](https://github.com/truecharts/apps/issues/1345)) + + + +### [gitea-5.0.1](https://github.com/truecharts/apps/compare/gitea-5.0.0...gitea-5.0.1) (2021-11-16) + +#### Chore + +- bump postgresql again + + + +### [gitea-5.0.0](https://github.com/truecharts/apps/compare/gitea-4.0.15...gitea-5.0.0) (2021-11-16) + +#### Chore + +- bump postgresql on some Apps + + + +### [gitea-4.0.15](https://github.com/truecharts/apps/compare/gitea-4.0.14...gitea-4.0.15) (2021-11-15) + +#### Chore + +- persistence cleanup and small bugfixes ([#1329](https://github.com/truecharts/apps/issues/1329)) +- update non-major deps helm releases ([#1338](https://github.com/truecharts/apps/issues/1338)) + + + +### [gitea-4.0.14](https://github.com/truecharts/apps/compare/gitea-4.0.13...gitea-4.0.14) (2021-11-14) + +#### Chore + +- fixes around the GUI refactor ([#1316](https://github.com/truecharts/apps/issues/1316)) +- move port above advanced in GUI ([#1326](https://github.com/truecharts/apps/issues/1326)) +- clean up Chart.yaml ([#1322](https://github.com/truecharts/apps/issues/1322)) +- update non-major deps helm releases ([#1328](https://github.com/truecharts/apps/issues/1328)) + + + +### [gitea-4.0.13](https://github.com/truecharts/apps/compare/gitea-4.0.12...gitea-4.0.13) (2021-11-12) + +#### Feat + +- move gitea to our own memcached chart ([#1313](https://github.com/truecharts/apps/issues/1313)) + +#### Fix + +- Allow spaces in paths ([#1306](https://github.com/truecharts/apps/issues/1306)) + + + +### [gitea-4.0.12](https://github.com/truecharts/apps/compare/gitea-4.0.11...gitea-4.0.12) (2021-11-09) + +#### Chore + +- update non-major deps helm releases ([#1297](https://github.com/truecharts/apps/issues/1297)) + + + +### [gitea-4.0.11](https://github.com/truecharts/apps/compare/gitea-4.0.10...gitea-4.0.11) (2021-11-08) + + + +### [gitea-4.0.10](https://github.com/truecharts/apps/compare/gitea-4.0.9...gitea-4.0.10) (2021-11-08) + +#### Fix + +- Correctly enable ports by default on some more Apps + + + +### [gitea-4.0.9](https://github.com/truecharts/apps/compare/gitea-4.0.8...gitea-4.0.9) (2021-11-07) + +#### Chore + +- update non-major deps helm releases ([#1295](https://github.com/truecharts/apps/issues/1295)) + + + +### [gitea-4.0.8](https://github.com/truecharts/apps/compare/gitea-4.0.7...gitea-4.0.8) (2021-11-07) + +#### Chore + +- update non-major deps helm releases ([#1291](https://github.com/truecharts/apps/issues/1291)) + +#### Chore + +- Simplify GUI for deployment, persistence and securityContext ([#1289](https://github.com/truecharts/apps/issues/1289)) + +#### Feat + +- Simplify the Services GUI ([#1290](https://github.com/truecharts/apps/issues/1290)) + + + +### [gitea-4.0.7](https://github.com/truecharts/apps/compare/gitea-4.0.6...gitea-4.0.7) (2021-11-02) + +#### Chore + +- update non-major deps helm releases ([#1267](https://github.com/truecharts/apps/issues/1267)) + + + +### [gitea-4.0.6](https://github.com/truecharts/apps/compare/gitea-4.0.5...gitea-4.0.6) (2021-11-01) + +#### Chore + +- update non-major deps helm releases ([#1264](https://github.com/truecharts/apps/issues/1264)) + + + +### [gitea-4.0.5](https://github.com/truecharts/apps/compare/gitea-4.0.4...gitea-4.0.5) (2021-11-01) + +#### Chore + +- update non-major ([#1263](https://github.com/truecharts/apps/issues/1263)) + + + +### [gitea-4.0.4](https://github.com/truecharts/apps/compare/gitea-4.0.3...gitea-4.0.4) (2021-10-26) + +#### Chore + +- update helm chart postgresql to v5.1.4 ([#1249](https://github.com/truecharts/apps/issues/1249)) + + + +### [gitea-4.0.3](https://github.com/truecharts/apps/compare/gitea-4.0.2...gitea-4.0.3) (2021-10-26) + +#### Chore + +- update non-major deps helm releases ([#1247](https://github.com/truecharts/apps/issues/1247)) + + + +### [gitea-4.0.2](https://github.com/truecharts/apps/compare/gitea-4.0.1...gitea-4.0.2) (2021-10-26) + +#### Chore + +- update non-major deps helm releases ([#1245](https://github.com/truecharts/apps/issues/1245)) + + + +### [gitea-4.0.1](https://github.com/truecharts/apps/compare/gitea-4.0.0...gitea-4.0.1) (2021-10-26) + +#### Chore + +- update helm chart common to v8.3.15 ([#1240](https://github.com/truecharts/apps/issues/1240)) + + + +### [gitea-4.0.0](https://github.com/truecharts/apps/compare/gitea-3.0.1...gitea-4.0.0) (2021-10-26) + +#### Chore + +- update helm chart postgresql to v5 ([#1234](https://github.com/truecharts/apps/issues/1234)) +- update non-major ([#1232](https://github.com/truecharts/apps/issues/1232)) +- update helm chart postgresql to v4.1.0 ([#1237](https://github.com/truecharts/apps/issues/1237)) + + + +### [gitea-3.0.1](https://github.com/truecharts/apps/compare/gitea-3.0.0...gitea-3.0.1) (2021-10-26) + +#### Chore + +- update non-major deps helm releases + + + +### [gitea-3.0.0](https://github.com/truecharts/apps/compare/gitea-2.0.3...gitea-3.0.0) (2021-10-25) + +#### Chore + +- Adapt for TrueNAS SCALE RC1 + + + +### [gitea-2.0.3](https://github.com/truecharts/apps/compare/gitea-2.0.2...gitea-2.0.3) (2021-10-20) + +#### Chore + +- bump apps, remove duplicates and move incubator to stable for RC1 + + + +### [gitea-2.0.0](https://github.com/truecharts/apps/compare/gitea-1.0.17...gitea-2.0.0) (2021-10-20) + +#### Chore + +- update helm chart postgresql to v4 ([#1214](https://github.com/truecharts/apps/issues/1214)) + +#### Fix + +- use correct PVC storageClass when using postgresql as a dependency on SCALE ([#1212](https://github.com/truecharts/apps/issues/1212)) + + + +### [gitea-1.0.17](https://github.com/truecharts/apps/compare/gitea-1.0.16...gitea-1.0.17) (2021-10-20) + +#### Chore + +- bump versions to rerelease and fix icons + + + +### [gitea-1.0.16](https://github.com/truecharts/apps/compare/gitea-1.0.15...gitea-1.0.16) (2021-10-19) + +#### Chore + +- update helm chart common to v8.3.13 ([#1184](https://github.com/truecharts/apps/issues/1184)) + + + +### [gitea-1.0.15](https://github.com/truecharts/apps/compare/gitea-1.0.14...gitea-1.0.15) (2021-10-19) + +#### Change + +- Project-Eclipse 3, Automatically generate item.yaml ([#1178](https://github.com/truecharts/apps/issues/1178)) + +#### Chore + +- Project-Eclipse 5, move app-readme to automatic generation script ([#1181](https://github.com/truecharts/apps/issues/1181)) +- update helm chart memcached to v5.15.6 ([#1179](https://github.com/truecharts/apps/issues/1179)) + +#### Feat + +- Project-Eclipse 4, Add App grading annotations to Chart.yaml ([#1180](https://github.com/truecharts/apps/issues/1180)) + +#### Refactor + +- Project Eclipse Part 6, move questions.yaml to root App folder ([#1182](https://github.com/truecharts/apps/issues/1182)) + + + +### [gitea-1.0.14](https://github.com/truecharts/apps/compare/gitea-1.0.13...gitea-1.0.14) (2021-10-19) + +#### Chore + +- Project-Eclipse part 2, adapting and cleaning changelog ([#1173](https://github.com/truecharts/apps/issues/1173)) +- update helm chart postgresql to v3.0.20 ([#1177](https://github.com/truecharts/apps/issues/1177)) + + + +### [gitea-1.0.13](https://github.com/truecharts/apps/compare/gitea-1.0.12...gitea-1.0.13) (2021-10-19) + +#### Fix + +- fix previous SCALE bugfix not correctly being applied + + + +### [gitea-1.0.12](https://github.com/truecharts/apps/compare/gitea-1.0.11...gitea-1.0.12) (2021-10-19) + +#### Fix + +- Solve issues regarding ix_values.yaml not containing the image and tag definitions. ([#1176](https://github.com/truecharts/apps/issues/1176)) + + + +### [gitea-1.0.11](https://github.com/truecharts/apps/compare/gitea-1.0.10...gitea-1.0.11) (2021-10-18) + +#### Refactor + +- Project Eclipse - part 1 - remove ix_values.yaml ([#1168](https://github.com/truecharts/apps/issues/1168)) + + + +### [gitea-1.0.10](https://github.com/truecharts/apps/compare/gitea-1.0.9...gitea-1.0.10) (2021-10-17) + +#### Chore + +- update helm chart common to v8.3.10 ([#1160](https://github.com/truecharts/apps/issues/1160)) + +#### Fix + +- force users using correct / prefix for mounPath ([#1156](https://github.com/truecharts/apps/issues/1156)) + + + +### [gitea-1.0.9](https://github.com/truecharts/apps/compare/gitea-1.0.8...gitea-1.0.9) (2021-10-13) + +#### Chore + +- update non-major deps helm releases ([#1133](https://github.com/truecharts/apps/issues/1133)) + + + +### [gitea-1.0.8](https://github.com/truecharts/apps/compare/gitea-1.0.7...gitea-1.0.8) (2021-10-12) + +#### Chore + +- update helm chart postgresql to v3.0.15 ([#1127](https://github.com/truecharts/apps/issues/1127)) + + + +### [gitea-1.0.7](https://github.com/truecharts/apps/compare/gitea-1.0.6...gitea-1.0.7) (2021-10-12) + +#### Chore + +- update non-major deps helm releases ([#1126](https://github.com/truecharts/apps/issues/1126)) + + + +### [gitea-1.0.6](https://github.com/truecharts/apps/compare/gitea-1.0.5...gitea-1.0.6) (2021-10-12) + +#### Chore + +- update non-major ([#1122](https://github.com/truecharts/apps/issues/1122)) + + + +### [gitea-1.0.5](https://github.com/truecharts/apps/compare/gitea-1.0.4...gitea-1.0.5) (2021-10-12) + +#### Chore + +- update non-major deps helm releases ([#1123](https://github.com/truecharts/apps/issues/1123)) + + + +### [gitea-1.0.4](https://github.com/truecharts/apps/compare/gitea-1.0.3...gitea-1.0.4) (2021-10-09) + + + +### [gitea-1.0.3](https://github.com/truecharts/apps/compare/gitea-1.0.2...gitea-1.0.3) (2021-10-05) + +#### Chore + +- update non-major deps helm releases ([#1099](https://github.com/truecharts/apps/issues/1099)) + + + +### [gitea-1.0.2](https://github.com/truecharts/apps/compare/gitea-1.0.1...gitea-1.0.2) (2021-10-05) + +#### Chore + +- update non-major ([#1098](https://github.com/truecharts/apps/issues/1098)) + + + +### [gitea-1.0.1](https://github.com/truecharts/apps/compare/gitea-1.0.0...gitea-1.0.1) (2021-10-01) + + + +### [gitea-1.0.0](https://github.com/truecharts/apps/compare/gitea-0.0.5...gitea-1.0.0) (2021-10-01) + + + +### [gitea-0.0.5](https://github.com/truecharts/apps/compare/gitea-0.0.4...gitea-0.0.5) (2021-10-01) + + + +### [gitea-0.0.4](https://github.com/truecharts/apps/compare/gitea-0.0.3...gitea-0.0.4) (2021-10-01) + + + +### [gitea-0.0.2](https://github.com/truecharts/apps/compare/gitea-0.0.1...gitea-0.0.2) (2021-10-01) + + + +### gitea-0.0.1 (2021-10-01) diff --git a/stable/gitea/17.2.0/Chart.yaml b/stable/gitea/17.2.0/Chart.yaml new file mode 100644 index 0000000..fbe0a33 --- /dev/null +++ b/stable/gitea/17.2.0/Chart.yaml @@ -0,0 +1,49 @@ +annotations: + max_scale_version: 23.10.2 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: GIT + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.12" + truecharts.org/train: stable +apiVersion: v2 +appVersion: 1.21.5 +dependencies: + - name: common + version: 17.4.2 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] + - name: memcached + version: 11.1.18 + repository: oci://tccr.io/truecharts + condition: memcached.enabled + alias: "" + tags: [] + import-values: [] +deprecated: false +description: Self hosted GIT repositories +home: https://truecharts.org/charts/stable/gitea +icon: https://truecharts.org/img/hotlink-ok/chart-icons/gitea.png +keywords: + - git + - issue tracker + - code review + - wiki + - gitea + - gogs +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: gitea +sources: + - https://gitea.com/gitea/helm-chart + - https://github.com/go-gitea/gitea + - https://github.com/truecharts/charts/tree/master/charts/stable/gitea + - https://hub.docker.com/r/gitea/gitea +type: application +version: 17.2.0 diff --git a/stable/gitea/17.2.0/LICENSE b/stable/gitea/17.2.0/LICENSE new file mode 100644 index 0000000..33a8cbb --- /dev/null +++ b/stable/gitea/17.2.0/LICENSE @@ -0,0 +1,106 @@ +Business Source License 1.1 + +Parameters + +Licensor: The TrueCharts Project, it's owner and it's contributors +Licensed Work: The TrueCharts "Blocky" Helm Chart +Additional Use Grant: You may use the licensed work in production, as long + as it is directly sourced from a TrueCharts provided + official repository, catalog or source. You may also make private + modification to the directly sourced licenced work, + when used in production. + + The following cases are, due to their nature, also + defined as 'production use' and explicitly prohibited: + - Bundling, including or displaying the licensed work + with(in) another work intended for production use, + with the apparent intend of facilitating and/or + promoting production use by third parties in + violation of this license. + +Change Date: 2050-01-01 + +Change License: 3-clause BSD license + +For information about alternative licensing arrangements for the Software, +please contact: legal@truecharts.org + +Notice + +The Business Source License (this document, or the “License”) is not an Open +Source license. However, the Licensed Work will eventually be made available +under an Open Source License, as stated in this License. + +License text copyright (c) 2017 MariaDB Corporation Ab, All Rights Reserved. +“Business Source License” is a trademark of MariaDB Corporation Ab. + +----------------------------------------------------------------------------- + +Business Source License 1.1 + +Terms + +The Licensor hereby grants you the right to copy, modify, create derivative +works, redistribute, and make non-production use of the Licensed Work. The +Licensor may make an Additional Use Grant, above, permitting limited +production use. + +Effective on the Change Date, or the fourth anniversary of the first publicly +available distribution of a specific version of the Licensed Work under this +License, whichever comes first, the Licensor hereby grants you rights under +the terms of the Change License, and the rights granted in the paragraph +above terminate. + +If your use of the Licensed Work does not comply with the requirements +currently in effect as described in this License, you must purchase a +commercial license from the Licensor, its affiliated entities, or authorized +resellers, or you must refrain from using the Licensed Work. + +All copies of the original and modified Licensed Work, and derivative works +of the Licensed Work, are subject to this License. This License applies +separately for each version of the Licensed Work and the Change Date may vary +for each version of the Licensed Work released by Licensor. + +You must conspicuously display this License on each original or modified copy +of the Licensed Work. If you receive the Licensed Work in original or +modified form from a third party, the terms and conditions set forth in this +License apply to your use of that work. + +Any use of the Licensed Work in violation of this License will automatically +terminate your rights under this License for the current and all other +versions of the Licensed Work. + +This License does not grant you any right in any trademark or logo of +Licensor or its affiliates (provided that you may use a trademark or logo of +Licensor as expressly required by this License). + +TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON +AN “AS IS” BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, +EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND +TITLE. + +MariaDB hereby grants you permission to use this License’s text to license +your works, and to refer to it using the trademark “Business Source License”, +as long as you comply with the Covenants of Licensor below. + +Covenants of Licensor + +In consideration of the right to use this License’s text and the “Business +Source License” name and trademark, Licensor covenants to MariaDB, and to all +other recipients of the licensed work to be provided by Licensor: + +1. To specify as the Change License the GPL Version 2.0 or any later version, + or a license that is compatible with GPL Version 2.0 or a later version, + where “compatible” means that software provided under the Change License can + be included in a program with software provided under GPL Version 2.0 or a + later version. Licensor may specify additional Change Licenses without + limitation. + +2. To either: (a) specify an additional grant of rights to use that does not + impose any additional restriction on the right granted in this License, as + the Additional Use Grant; or (b) insert the text “None”. + +3. To specify a Change Date. + +4. Not to modify this License in any other way. diff --git a/stable/gitea/17.2.0/README.md b/stable/gitea/17.2.0/README.md new file mode 100644 index 0000000..1d7e1d4 --- /dev/null +++ b/stable/gitea/17.2.0/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/gitea) + +**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/gitea/17.2.0/app-readme.md b/stable/gitea/17.2.0/app-readme.md new file mode 100644 index 0000000..e8603ad --- /dev/null +++ b/stable/gitea/17.2.0/app-readme.md @@ -0,0 +1,8 @@ +Self hosted GIT repositories + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/gitea](https://truecharts.org/charts/stable/gitea) + +--- + +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/gitea/17.2.0/charts/common-17.4.2.tgz b/stable/gitea/17.2.0/charts/common-17.4.2.tgz new file mode 100644 index 0000000000000000000000000000000000000000..31f3a104561f859f297067776ab86a1503525be4 GIT binary patch literal 100097 zcmV)QK(xOfiwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PMZ(avQnPFuK2a6)0*`vG#}*zbP?s>Xjv}SMSP_9#QrtCvQpt zXFw9sa46i(P#jT?nZaRBeNL^_m8JA zX7vS}1>bG{X*3#*UZ*4eZ8RF$f1AyAnnV$anRo|45(fh?Wh|nD{e2%( zkHmi6BeQ)R&M`y#>;t{J`RSJ%7FS?|KcJXm5)Qz;Re@1teg=>s$|^phUW_9q-u;+_ z9{&pjcof5U0mdW-H*tc*{HK*E;n?V=Cs-iOTV`>BJW*yJMiJd-F+%$@NEwRv)qA;; zD%j%5M!(yw+@ZxiiG4b#)Ii!;rKT~hi5Ha` zP|e&WBV@Yz=fAyf)?1x=qt^IyWd?D`AP!M1fT0=00Uy6H`ClpEI*BJ0pr~&VAVd62 z1zB8Sz!ni2X!I&`jZ3p%@6=nBFFmif&w7vI|8p25h(6N>u$2EdTa9KT$N&4S_Ll#@ z#IplxHSjhdBNzZV2`Urui|+>F;}9_beIIka2?HR%f&h+C!1;yzV*oyVUS7f4X!xdJ zZ9Cbjx(4SqG=d%yUvDl?E(hQ^iDMM9U;!wZAwWj|K^~*PCmVAqs5F+Fwe|L>$IPB99jsiphiGh!){F_Y?7~_w~2Q%#Z0lJ4VFA)M51OSJV z7*VSFu>+1_2u28yIf~;XKt702tP6=ENVM=HhxaZ8=OA$uMFB?CYL55oQLT-$?I;;Q zO9tK);;=S?6np9m2YVUG$+ZVY3*e(MOacb(aS#9&F90J}(P}`*T@qCVmCTF)BS?|Y zX{2A9D%n{hCf^h}wB@~xqF@2=n0K4pACs8BolF7*FjX}4<(TU4OM1z?8i`Qok(ky* zkH1h~#oT>|Lp)1nAS6Dz;>$_!1-^c8c%j}6z+t1&&^6?w6my%A2+Rm&AR;~mF!TWz zc%(Q2aOeezkHZP@!e}CD`vg(3cI7t&D1)J2g8>PVfKdSg=ur?1z!(M;RVrh?ilKLR zB8fo_t2#kr93lXDjTlbQaR4d3fHMTx6e^;P5J)&Vxa7xY?A3>3S}C2XS09cg0tTGj zm>7yECL;v6G*kid$BmGTxD1sos}?u7iU}hg2{>%|O26TAp|skKY(!O&%^U{_mqO33 za(Hoxj4~8@DR${ASvi_}*=pB_kCy6qH236hP5VsYs}ILuh<`(}DF15!nvKR=oGtj_ z_(m6;du&O;s}INfyzr6dAxgnJ;tO5^#ZU2TpfrbT1pQxP%+O`%%Ladbo zqkc;eT!{%0HH#64m|+;4pa3q0$RnXoIg;vYgkntm{Cm}g`OsDG#}EfejBcheqEiz1 z=@*)a&RAcX;!BL6kG~FtTH*_rj93yq3Y~5VHmy=@dW|LYsYpKaF$%DU#r7{Gg_Otf z<;=HzAk-B=!eCKxxmyL#-~{o`#3&*ZGojb2J$nCsO5lvo#wZDbD-vLDF#u=d3&O5q zL{Z3fQwApkFmKkIje7Hc(J5?odxPExjm8HZuW{HMb$!_JJFV8iXnb(k=yuvY)NXsQ z-EYFN*BiG-ez!Gh_6}O3PQ&l_Myjre#8Ny3(C;U5--Glc@^V14$uUhQV#}DYVVo_@ztz8 z`}SLkJdezxtC);&fb_JLdg^r&@~No!gZSjZ2##=o8BRB3==%fk&wr_3eoV~l=Pc*w z{Jf&~+F!Wr#%CcT5`{g0)fNL2MrM#<4+g=)RDiw@j(@uR{GdJmi&9p7GlIK93;J2^G=Y&5~;#rZ#g5E~8kIh84Z6kK0k-e|<7XgKU0!-(1> z5_93|{n<(JsIN8dKmbTbRKR@y?r8Y)lYj~c15j-=S}h}sToJ!~!Yc8g1bRe#xq##d zj~daNn)-w ztn72Fi*oz|Ji~fl@}gt_I*mqSCVtM)OmM0Lv029G*91|gXfso=+jxg771NNEA4P?W z4`(N5N4LjES3|vv!XQwnt8y-Nm(VsMz6DxJyh>0xmo`2gg86^)n-*8c@$tsk)9S@Y#yQjd5kE|c$bV&93qBj9g}?+d(#1^ z!kORen0fx5i=>PI6pl&kaS?Vx_|%U$yA(rmf}(&d_%xJa^^ie^#z`c)7!$F*Xvtc=k0pD} zz80L2Bq7sUt>^JyH{=dk{G6e9hC|Wz+ZcN2$`vJg4K+hw`NX69d>RD=`uo?XMob41qTg|P&$zg1X|lexw?r|XLAmX#H*$AKi7Q_EqhBCqc0J+`Bjo9Mk+QdRcSxI+ zPrh*_C*@F3(iN9Z%)F65ooZx+sNFzbfL+ye+TZG@PoVxm+WeF@QRf|~Ms`YvxqHDuoR301HFQ5Isp5!vMebEN^%Tg z9Z@jmFb>FsKC*#1jQ4qUB~kb|nGL`@Az7?yHBL&0XN^YVBz$O_Y!*GTK{ksX+L({# zbUJ%vdp?@))9LJCZSDYosYmgE|CMcYCv8;}k}rzd6d!Crx;?(eVZi0bdZXT|H@ky& ztJlzFBJq{W0)N&8dZNIe_kelRmv8gxE{aKQglZ#5dtTBB3<$gGY&!dVoc zfwHI7xnNYM3)-xIT>PeM21z&o28}V5mMZj-b->PLwiVv3vyh>9ECfN#ukr;dlLJq zg#KC0!#LCEWq_IY1yHkfa__4){wJ7vT!vqKb3K@QY}E>wdn`Zy6|39@~4ux{}eC+{{YXyKi9P+Wc(mM|OK!QYw<#=WWKn*$ih$+M2 zLME^Q#bJoY(y@|PJ$(T2iY{B0voXQMBIJe`f6fV`O2L`ZA$ll)=6 zCBnRD7>s#ez^80tcnM`>_C@F+n>KjHWRCehV!BbcUZo_6@!XVwFtM#I_@+*-CB zAuaClw^i^;%Nn~CTeeO`av!-OdI4-fo`UzXQtn$(`Lyg#ai3GfH4T<^Qce^@8M~LV zGId!!*Z~pt?f?nRu&3vHHs3cbL~~DU?_66^hprRE01Oz4k-ux8WU!R}YPrFXl7du! z&cgp7k0Bq7V=@E7Ia>$tqK11`fr`r5^4jAC&lDdsEwc>0lXK_M_goU+Fyu`>Gq z^Iy;1hA<>|27>^H6Y%L1 zs7qgL;kNMkGZ-x_|IE6u7fV(l?KzD61I_|t)=_38T|&0^=~E5hu`%M{ze~-J7nbHgsdVajuQ_rnhW zGVqFj5MV!l-mL&ICWKitZwH(ZFA;}X99?;u7a&Lx@TQ1wCkYcHna(-j+cf}DMxGKE zVe#!ULZPIpm^y^>HzC%8d(5VCN=#7@?SV+OO+t!&6l)JYK7&#WmNmFfBN9>)tL2IR zF3*#xG~97%23WqW$`wl4HY#S?sinKKvr`fOZ+CwfA&>I`a7_pUm(t@<7TeiT%}U23 z>4~R+i*dT2Vs8p0#}tl!!gXwfzyyUTh79=?S)6x~ucwTCDLuFq=Wp0Ir`pCYseVrh zW#$`+)!&hj+>{%eEwkyPDWIM4Oey1DWW7=5-EJF={q{k_hYi?obPi#oF>3V>JFw#)G-W)8?d*`>!T7PMyG_Z)kx}+ z2Fpgh*-EkOA_$v@z1GOcCFl zZ#KHE-e}xvF2#~T9Eg2rHJYZV<HbZuZ9q4X-!uH@odIYWri) z^SiClfrokr?QyT&^hRCO9XH{)-RQUB!68CzG+v6QM|`CTu11uXt;xa$)lR+DOr3Aq z-M;U2x(FUL`u_N^b=d5++6RXXzuoK}HelBqx7+>xVW-!Dt!}5;9gRB8mhX+czSkWg z)LM!v3?dw^K~GuEnwrhS6hr8vMx)n7%|qlv*ctZ@8*RVS>mbx`^cvk}vk5x~?ZZyD z-Sg4turqEqN4;LN)$8;doo@GFDTdUGA@ioIQB(yrjxsXFte%6`Xf*1K#|MY4{z0eJ zXpK;R)I}Y1*cl&m+MRK$dw9_AAC6$d>osA&)jw<(FnH4j^idJ=o+W4*DZLaSx&2fbG%vuyN2s zqvce*pP)4sH!o!^m`1v;TVAU-9(Oy)?~IUth&tmYJnT2yt!DFZ1Y50fzuRv%dfl$y zIPf}+#>hkCX4m%`2jfH3@RzUa#jggnC5~w})-!yE#xRD{{l%{u;ZD6{t(wEb1LU`0 z7j^o*QLl~sMz7cP4o05W@4!(9wwi~2V>}u+4i9^ro3>kBc;I!r{y}Rr_C~ErB_fpZ zUE?^wC|rYh{-|~jF{|l%wl7^u$PVhD?&xsb?!&I%@DBXLhTrdWeAH_D&4X^g(LZb) zcE_Vpx9hhKJ00X5HvNNktJ56!8twjaHa>$fhW_ZG7^`Z<2=`hC-Gk9V^N_FER=?Tv z4>|{(#`wTL9JRfJUa#93H~Zb*L9f|8^t!EHA2z*%Uc>Kq$L+%de<{K-^6`TSEGiWv ziw--@*1=)ZI~?`A!``^rY5bdtUbBDL z=rvl0W7rw>#;vZ`Z+c4+Rvu3%{BU&vsFv_N+bmGo0sl*%Ckdekfe{MGeT9oX^C*>C zq)a4WEQAE83II=#!?<#kl0%iR$@1$$utebvg&5 z19&j<(P0}MpneykZfo3aAGTVfCLD1Aso6g`K&ZPm2AsYi5(HjN?O$+=-X<{iA4>0g z9HR-ZSWfX2_DW(KXluZ+Ni3LttI=vU4x1gr0S?-ugHgZZ_d00gH~Qnl!)~|P>37?Q z2knm6;?uD)MyT8LTd>_5!+vjc2uHAYaL9$g@j5s>h{)Qog#;)QjicP7k@Ak7q8QaH zJK!jd(n^bZ(%}#KKJvMk4}B4_0fCQ2>@18I;0`SS#WNhhm@70K@}FlAhkw>^>ZPNp z^$o|N!-^uwhc@Mdll+`Z>pOU-%o9Qdldc@PCU_-u6C5fpsy!eKGkX9ruU@b3))kyH zVZ?|<1dmX)*%XGLsln`l8E=J3>O$#co_-d!V0?#s0I5cyUgDjiI;>z}Y6F47ZBci% zuDqsyO>ms;IQkgD(3dKyG|*-}ePc4mKC;8{WW1izOlNSx$67;|Z8;Hr<$&y{wk6Q= zk$zUJpEbO~8ZPOIX{t=x#L?q)EgPWVXX982{`R_AZyr`Gjn*=+r-58LWQfmNJxi3n zE4(W8I}?q*Q>ZrYi2oTy*($AOwfL`PT(cG>*VNMmX-{tP#d1I20X0Rdp9mE(m4XW3 zClt&8L$ippeZ5{INU5f|L`0YbhoewbVATpLr`S=97@be8o!BnHB2}{`ML)>&;HBQ2-}8qqeIVd}GHe_o132xq0JBXn4PzE@P@D{kmi12h~%qCPH{f^k@VFD(4852CBH?C0<1<`hBc^gHcAsDNIk}Z zj-=GC_6psa)of;-*H}Q!f|LOQd?Jky@W^b0L*5$Zcxyv{TG&g?{t^i*40I{1T*b7K zX~u;m*L%gHeyw!5TKPB33gj)mgCU%txWKtF-3pd>D-*s9N*yE(_vFm;9*sm?2C^!# zco7ldQf|4Q)(VTR2r&jK)|u~*l#jc$jqpi95i{k4!~D(pFpq6aA__))ewr9`9|)4> z!j9$Sv%_|Q9lD#P=1ytcvK-3g(aYeWalPPi(Y>-_KAxFBGn?*a$5D%3VLw~ctaD1c z#DnnH6&{SgtXPEqR5*D|(8_6V=B#26`S53lD!JlT_83#h$tY7?IV4~blO!_VCNlPD zSyR}v+K^dftm60BpCC4HXyXFNkWM*+SBq-!1*`>5&V)e2DkT!YIQ7(NqV+~dKfo|Xd1q{ILPQn1w4-kjbX4Kf1Q1Tu6F7a%4HTSswI<({Us z2_PJ>It%2GWLgIl zEWka9?}U>025~ewAyoJ-4EF^S@kCr6SK7qEa>CmX8!br~2aP>sjt^D(kAxzSgaMz` z3zC3)7>b$Bq;3cqh%vpZ?0|p%Ge+Zo{p*#<^CU@LgAuM%JfZcw0}-iZ1SYyqBjoMx zsDkxS2D9OCqKf{hHJ&$N5KUogw^Z{LM1FwYE6Oj`dbJ8AN($#s_3Z-;u&<-p03XP= z*H_2ayx1Q2>E`B2{dse2{yHD3zuuq7cLJ1jC^a>nRUzD%vg$4<9cO7#3Ni-0smSA@ z6m%G)kX@s($u7W!Q_i!sXM>sx%z)GCjN8S0t zfk($9NgD~TmxgX;!H%GJheBV7dNBebz?btL9Z?JDlq7-Arx-;ctD9{}RZM4xgrDEi z_3$bE&w6hUP9fESqj$;Y9^uK9>Ff|7tF3z^lr3$X>J8HIm)Xu$MsYJv-!8A?;3wo1i;iVvkE5p;2cdNFyfODN_D)oGl zuTsTHzWtfY6!OmxMi9vuZ&I_&42MT^hy#v=ylZRH+~ri2L9XwG>m6yi=< z2UIkIDOi!iC_w1xK1C)9&m}y1mgCy+dJVsem0vSA48^#2zP89b+6nFcfgfF#fXbDU<2tJB6SeaN)wQl>Ij}q?=u|lHDFER<3MP?kW?Q= z@gM7(uy^?5i9gPK+HsbULO~E>w6IB>;RES3vU!0Gj_dkD=T*5XsNH~=wzB&PwO1v_ z(~Ov9WYA=&6(8N#1^*Xb$8bdEDTC&0$VbBCkRzp4w|yPk0>&5xzTCEiS8$du$!4q_ zc871W6DtyT2LRgsk;ES2Qt6N_0_1#p9|zX&yBYl%EzbOb4NfXDGCffG{$`56*@+pN zWMpI#O;bKm#Wywmp^RbJ;}gfnW2JD3s1ISnkw+W<-~aRfQU_ceygK@gZ^$GJ7P}Vi zRv8Cl)t(NSNIyi$D8QcEV_Tbhdwi9icFNkCnVKV^(j{&AC|IaupvmL&v15M`yjmq_ z0az?Qwh%!N2nvl@4!Wi$pSfckp!zG0Zk8r)v`G3vG90n{+~LT!(pfwYkXYuL9P{SI znZ)o8M>prg4`LfpM+<6caM5f}jht|Lq1Z>7>r!cYNf8(aa8d_9l3256Rq2?_X5!od z-yzLN6^*5sJ3@Pz_W_yE)LR_-zBGXaZ~|&Ijd+dsv&I5ilUrblNnzIpm7OwK@q-iZ z^>krzUI_1T(xMx-n2L+VZCLVRRy_Q#&1Yq8puuJZMEzb`&PKvQ$>1Hz2{JjMv|g{5 zpjH?tST5FO^uo1dy=<>m$#}oBjk1`ubpT#zVPyZvpTp3zV;wiLeJ*d}Yu{7FOM6ch zFJOdKw$y=LDz{aN_e-`)xuP;tGp~C+e9t@^Yd=C>8wQkUQc&=3my#tjLl&w#o%**N zR?21e+^#Io@(Xrl@d1ZktkMKpZ)xFD-%;z43+n@}#J^Fyu1dKk)|^x%>lO1-4cQUz zt1(jn9D)E-kri)|nY* z6b0iweKLfs9I|@;DEQ2runjUvO7V!iK@u< zr1Jv^izkB5rsB~!2ooP<(qmjjC5XT z`-AJ9CLO+%-P!3snISes3B69zjI)Kl2ose$^wVd{1%MBrJV$VxHg@ES=G>hxSLd5N z<*;2gtQwqJ>J9`Yq{+jSIfi0I$l&w0@6XIhDw(60>-1ACe&<_E&*QRf?|}2-R%K^F zLN!#=u&SBDRCGyOtQo%yL!Ih3MxBbCa+#+7?#f+4?#)va%p{AVwn9l_MK%(ln2T4m zqW?0k@8Wg|2uvitW_Y?F|IK%FzIEDJv7tD_*QF}J6w0J`7b*irKDb9h#@8}Nic>b< zHW!r5;l7GzN4~P%$Toyu)m$kfdCms(0nj^mC!7bu+L$Dv-R2a=er*hKpwC74-2JHw?LdxW%6M~;KZVKBY)HjNxgvXpR zN$AT!eSP7G@&s80P2U$%0!_Q=tqCpVO=SSn66?bB0+RS4WO$Bh(WDHnTWW3CC}y>p zbZ0DuY?ZP6Xt?|-FEUcoQ7v;W7|c-&13tzz64E*^N{wT(788-L47_4S-=Rf$_yY8O z<$<}PW#fSJ;p##)Uk7Jwjix#1Y~xl8J6}bS?LT4%kMPF$##%3M0nzf^9#G-bdpfFT z516PJ&VTF(Vd()S2o8aT>ReeBh%fMxF?1Pj`3SWF^J+MguPk1Ck|+sV~2o zR0ud6lhi}107}tKZn}NzuTelo`&?9zHi)|ex*sQDoleymvMQIlNN^sUu&GoNi9UAF zY?#x^^#Onhn+ny|cnj=+Bfbha^*k7h-0?~$5>X`~lKG(HB;*2qLQ$-*LINremhy?T zoL+e=w>c8hJ721>lU?ybq=rC$qf;cG`6Rrrj+hf)}PKmSP|5>YIdm=;SBY$YYQnK zZ53!FPX20e*T4`b9CBCJnaboXK_r<>ts%|$qgq+bs#Xt=f&k26jHRcTQDUU+Ri8pi zM?h_ni$YDmOwxV1n8aC^o8@C{`X-~$tjzvnJkeK$$!&aYNwqt`B=-G^5jLu^8D)JD zC7B@<&dqz<7gf2Uru|x|)Hw2(&?uA(iya9|w#?=PEYph~PiaY@&TLx>HHl=E6eIwS z7n0N|6yVC*aD8$g<{|U9%VE2Yd&>O=|Au@qgwE2Fq%fw|)P5!{cw+487L|U)0m{t$ zbsHi9-%&G7ITMV}lkCL0$&8wvuSGasARka91QVo^Bkj0@!Z%2ZlA4K+q@mUyn38om z%@pQuV#J4pi%kl=B82Ep87V@OFjJc+`OHs=qU{xO>Z_tULzn|nD%JAhE{-)0C2@tw zqaFH%2@_P)JRVhf^&3qOD$;Kp7XSR=>Y~US%ed+ZEnR}QvY}a`M(At4E=t|uAQ;|b z=1r}g4tJn1r04TCAFnf(_rW2F>%I!sD%J@+eks z)qh@&?-0vs)iWo1Ap$U-2oz0_>aj^_C6#_qtMM&f_5&i>1Wt1dD{VdV9_Wa;6IqnxpSj|HyKNde$CjN#!hed7ql{_NJ^avm-GRx=uWU zRwR;h!$F>1l(!9*Ttkw%@4)&X?5WLGyVaD$u>$#X#0gD!(F3SsDPfH9aDqealbneRaKbI+`cMJV#7Fh=C~1(5d)Box7Gi_o1A>=r_yxhs=4vSbbZ)U_ zJAp3qEZcwqp5FsRBD~E!6)uH|^Bm81w4qY)jAB&N0vd^Jk2vW%h9VUDDD*I*U}uw9 zRlG2oJnArnOKJ&|r^g(KKG5VNGsS!+OP)U?zO15OW^y@L=f?6BLdZlgqb-ZwkGG=k zMXnUAgL2LJ1W^`~g+f+dv~2KY!q757VxHZb*CJ`HyjVcl>{2EB=*{r*{Qb@8`9HwP z>G0vCTI}|ZqK||H|^C`d*&V?8Vd+%50 z=-LC3;@?ssOSs-dbMMd8D*U6!I;>oD__X0-9-lipz3^4$D&*Jlc4O5$?c}as0MXWZ*bwm-d-@Z<-8rKS!qPfMU*mxOdHk> zeCwi0^X?sDQ>oj_l+S`SMw1x&C>NlIV(rxpK}=+xYsqM2dJtbk55qBEAbbZ?OoW0d zoFgzoC``vnUJX1>0>0@B7{0A>Jsz?cGBjCy6@4B6Z2GKjn?*i&m4q~jxLU%+A;ang1!gczU;tjF1yb|$sT6y~ ziMop`Rh_nkd|)>+uv%AD)XuGmLHP8Bft_>6eeylmMD^1#w3@dYHx6H_clw*wqEXCs zrjn+`!c6Cji?_YFR3y6e9?;ZfL?3QB1kpQa(d^PQXyDXHXV{HMtD_k3pFuz-AV6~z z>=kENm-dYTKyggsJ#Y_Wt_SSNLoq|SJ>a8JGT8$xPLGcQGCAjv2Xdi17-UVUlEWPz zsk8h*jJ4%no$|aPQn%jI!T!E`2CUqBQzOp4k}vmRgl|op{r--9gTircvvjgA*z8DL z#w=`W^1xG`uBg*a$1_6M3S=&O1crPR_(m@6p>jc+SQ;%Aiml%4?`ayVGshRzM2v}a zd_}D~*FtMIF%qKs(r%=uwt0v$b5dbfJb7)$o^%I8;%;hj&R&3ozh^MugUoojQ2@g` zl@UyxSm_nwkY%(mb}1|fc=7)Hyq=DXx))euC$IHaDv~MWjI?e?$=$>MIR_>Q^yVg- zmg1o|DP3&)!EC#H^ z)rf`sN5&Atsl;h9{Gan|@}uMH)1#YHaQgR~(~IHRb;z-+DIUlISE{NxI$YFR38 z%Ku4Fj8W!*U7k^yPmWKTxeO_q+kC`l2%4fc+?zp-`i>l%N zLJ-$qewBz+cb&@oEw4U2JwH9Z(Q5y#)_7j+a*@@CB4fiIpvmmj6v60r6x>mc@-Eot zGDYs~|CK2kBk1o6SfY>M$Lq^?TrCrKW|3RY8g7}eHvPrzzvYRVzT}fZ;gtOVglfj+ zW>7spdUJYSEhylIoZAsnzES_wAKB_P*?}d^zCC*X_H<>V$9&Mi6fDATQ&9y#6L;fzfu#Qw!#xJ28SynOg&Ukp&Z9JrUe=F4cHLw}M zcm_k)D3Ham#jgue~5SNulWvpvDW)aNd z8&N)8036x?RI3~d4j6~v`p4sTyM3ra5-h_*K1N@7stQa*_tFR}PBhsSG2hjI=&_PN z%}w*B1<5GEPz-eOlve|I;riO_WHM)(cqZdVqzz}<)!fNSldhFvJKcn7yZ%=hS@X9# zoWb8n2=8g#BQxVkrC_NWQNRv3M_dgO7YTC;q#o3|`C;4CdNAsdNYYx0Hf;~~_x~zG z*8lcbUifb*oA@n>E%D;7ZVc+*>VH+oVVtagt9v9y^?MxpQdhg`<_2U$ngk;BP|3o(SOD;?z#3t%`WE^Y^Hn1okU+ zfzE#VMjrM5>^SoQr3AQd1qOp9pweswLnb5-2cjF~Tkt7|gM2-N^oHCaw`=A|=pvi) z&>FV^7zJcxzTj|*V$6Pw$xMv?(McwvL5|y!4i*q}a)(aSL#AxHM(frf%js^ZNmcQY zyk%A8pC}H>06XGhGwq?{Ia#8TNLv(w#U7xNh25iH;SPYYjQrs!J?+P5$97lSOCbt4ErIT zOqrt*WTGK;JmkuH61*EMIRF#|W2YF_X`}M#Z~>qRjZo-10r1Jmc;C~o!D_qVTY^;$ zypuLo9af`wq82*E$K@1a#D@z9mE4h)d|mGRp+Sw%n8fJ4v=cuDWZ7+Z0T&t_n7aCL;w!-s%c{;nXh|vKB){h3iXqhZkO-J4)D;uTY%~pc)EWUXEV8#@9)yb2m;_ zdX9)Xsk;t}P5e09eKy35hZJ%%YkpU0;I`swJmjSN!<*WO*scUhaMZtsH zXfzs)UZ?Y&Ods3G{@ZQ$dfzoW-Cn2J?6vxx?;5RUtJnPwG@hl$nJ1wP#@{ub+*Y=8 z-^lan)BXjvS z|M_#})2EtBa0#l+tIwNtIT!1qxw;);R8z&jcS8)o;58RYaF~|BV{;Y0ghT80AyGG{06VV1hJG@=0ldCPW4+}kMerDd_5xmFhX96 z7IkCHa+qZ90|4U*oF7#I&(ZL-K-g@8$ zufeNgG6#56PZ$pL7+1k7AA6||Z$H(T5O&NyR>Ak6Dz{y(j#e#t3r^MC#)KuNB?(S;Bnz?{}O$kutYG&0CC!H?_^Sbu`O3RcE z(rf8i>O#|FoBy2~dA@%9{Nm9=Xswi`%TnJZ;4V*vwfdN!D5Y@9ro0QO>aLUO(uJcU zN(xBm(yqKUH7Zq?;zjgMVPuztyDr@Z9yUTcMrhp;(!oB3BcwjAGeWxEBHB7&iZ={d zh4+clWQNqGl_Pl%o^_QZQF(Dh?5`a-sQOzlTy7_FlS42QcL3}kyM-fKDOh@EiUJw_ z=x|6JP85g4;Up!i;q_T6J`0mv#wHC~Wi=I}R2?Z{l!_F^jB*L9RNZ%2<$BCAWtXN0 zh3v9))N%|nzl4`F(Ip(^tawyQr|4>qQZei095Fy6c+Yq7DU_+)v+^%S*Wj6#xRRC7PJxeCV=_LH_h<4Jl3pN82C7cC2`eeQp>d=;N1e zRK%d@tdB3zq{xtvUV~(DQE{ohDsW|8E^oD-DO^wQpyv&VWaF4Ej!DSSM{#fwC*cu& zF9PHm`lrkpoc_Kb;WZ)Fd2Fn%g5Ym|!~voU%Fs-IN8x->v7{4~(qXxvrwchsEtk!7 z^}5LSY<>y*1W<)Dg+6~CI4@<{|AJo=!c3hSKwO%#wz4tA0jR2L6?MiP4sc%r&?z?5 z$}0-MuCB4M2_x-NLYSh8fOmV~`?(-r+TlCX%emdNqJ}?zuE^XIDai8Xc}ZTQCT3L; zXz{UHtMS=e<$peD@>f+$r2x`w58%JXucf+Q&Gz<7bLZ!O%JzR9@Bie@fA#*~?Dezz zf1}%OZ}NU$eWV?uptfUuMSxz=IJS;Q%wN+9Y4^a>zw(9sr4HSSw!yFU$So!M(gU}xS?zc8l=1(06bjK_UNG=@-v8Zd{@>^} zS}y-@_B-wVmjA!RW8{C85qFFyLh4hQiH+bdv!|}dy62I;TxkZQBAMTZ3=T@|7QDJ@ zzMe!<=t`nGoesc%Ylfw978>Hv=ki}CD;KQ=+b8#-gwFqZ5d7Z{(_6a!)ja{nPqYB6 zSpV%tPXBKC`1 z$G~RkVzSn8G zLzSjmxDkLT#vvPn>YwI&f0|cQSR!kyq9vDSkIzo7OTN;%C%*1x)%yax3Nwk@-hw$S zi;&C}s#}d)y8OfN=q(X%=?voQk@$Bd`)r>T@}Ig4=egy-ez%>M|F-(yi#*RL|EbyYAo)+#`Gd=U*2&Rx z%W<3Be{=h20Z2V5^mSKD3z^h|0`iBei`%33H$RD;_Ejq6{Kb(8pW4?qFTwg9{cFy z9{66$K%9=I6)`y1m+x;*Z$Et!_mIfapqU=YmB?Pj{aq<e%>ZYD5St(ioSJAtkuEAzC4uYMISOBdciIuhu?$P|*r5`5xp4sUWO6+;FJ=XnnXM zX8I5@@bmjOr?-^3ziewyVA`$?LOVH#x^o841h2x;_z17j( zDpj8lgoSTbfS|mT1qMls)IwF~H8;astLG|3-p%lKczOIY|Ghtl@qV0yMK`4TbxOQD zRsQDa=JfXD>{?X`@W`qn`Ya1_UH$g*;`mgG+e@dbxw_ny!*7PS?}w+?!>gmUprn&N z3+3qe`1I=L_T*x?4l?G(^t@J3Dx;^>%Wpe3=$I3gpKflhZm+H{|Nf8L^Rwa2>4glu z$=e{-Ze3pMZdww0+wjRy)!pz0?8)iy=JxFB$#Cr(<_&N@BZu8veWv)tCej<}O#`QY zzqvlTJ-U9Y2~()JK8!%w>+eltH%DjZ!{ej#)05|DmoJ<p+nh#VAMrwZ!Aa_?#u@_J9>i&!Dn zJu34^UA<2$`Ab%$?5QFHWkS|!qu=jWE102Ks*9|2U98FLS%m*$MMvbyUj;`DYj`Uv zfXZdjfYiS&PLscn`%_u0rrc8;_i@eOIIENL^*jo-pe=6KmPxcZ=Q9Jhis7!9YjU7A zKh-4M4bL>83N7+>9!W8(VoFObW7!1dx{sJCx&bR9+`KBE zcKL?wwUZC7Ev{3xuxzCwHk`Wum*)bcA+OQcejKl`8s= zvhGRDxQ6Nk4bP)c#0~4}@*?jlFITO=gpn&0&#*}5>}DQT>aRB?_o4YEua%WPe3R6n z?~5$!l%5+|*I-NnAH|zr-V*K$Y$OkzDgrNCD%{j``07}DItQdV#V9Ch&>uRarhbvV zP!5J@=mf_bCx&UefFyZ~$0`kDz5b@N&vNgyr?KKQwa=er@Y)-$5s8mn2fE~|%uS<) zel6_$B0`{gk7G1RVC+}j18CDAZx1nV-z`|w@-MoC-Mrw+D{xT$M$0g;ixjo}R=F(M zEj#*i3hwt6w6Vcwx&FsT>xs(WYW=U@Z*{ZhzwPEW|L==DW%0k9p?s0JU(M#UY|4x2 zJC~}Z?4*{afi0G2l?akD8#e%W9)iJ4*=I9UtQeoqtic|B-du)5&u$LuSh`^CX5I*+x2V^*9umP^20xDa0?xgzRuyb2k9|`tl}A- zX_XYj^n9IUeEcf0Y#z@-LIeMIN5mEK#6ww7c26m`EUuO@QZFX_5HZ6-b*ZG`fPav% zVQLDescH$RC8RAgJU&4GUuyp`Q}tQ>f7_jW{Aatf_5Xj7=NaQa3mM%??_X2vj~N3h zk9zX?JXSf$!XO~`S23RB08P*-=OXGxLVd2Z+;R5k{mI$Q?Jw77H>XRSX@{pb@6S%` zpKs4zGPrbjdUbStbaQz<0M)-#D*&8b-5k9+KONq_IXeFN^x|Xys^OSDAnOPKKcAhS z4}UqkIsR#&?&>Iw_v>WSk^E&d=}5pc#13}WiyiEg#SW%qxjp^+@%j6c)02zSn_n)k ze;(eRU47^jCjpsvvS~mb6l-Z6-F$PwmMaL>D|I|BCdG=hvfKE{uOoi)TYqx$pBF$% zHqpQ`RD^B;qfmp2xK&ho*{f!FHxby)Ui)# z)O}^8H+ZE#gv(7u6&wIAkn$fw3Pm5q{lvn8$oJ5CC9TI-b12-ycoo5(bWt;bE9nLG zypa66u$XggJuhp$D6AlYSw%_yS78y3lZZ)4QIsJnxx(O;G>5@pSIXGsLUxYQmZtr^ zqN4Cq*MD0ZYf3y(!ut97bEQ_RRbYfaa5a?+kMm~b4u}3gO_6sns>~3BzC(Jx8KhwJ zCgJwIbkYQPRM#Nurb5Bo(OoHzcU{%oS#h0+-X;FS_FY|8n9-&y^2qz`5Hy5T&R zcaML-6iiVpFMaoY06~cELBQF9(ZwGtq?GReF$w=eMw@W|SsDM)Z)fvA_nQ6AcK?5g zNAB`53I8`4ZDjYC^X5hNeo<8Zmiw=?R3#MomM0Uht2zL#KvBO~Uvpp8eb~sZYN=eM z%*$BeRns3}fPKMv3?Y{hFS~1xAoHgC>E11S|4r=N64mX#z1_E8bl;{C@&*rHro#w% zkC^WqU3bgpPs(ETQJuYB(`U^!q0jS**M+MAgB?x`^E@ zB2)#{i1=0g>Ox*qZH*nBl32XnEm~FXRCqD2q#v6**@)N+tl0tusJa(ar|;KgU3y9{ zVPR{I?E2%o4!hfUqv#_;aR`I6kfC@CJ#*WKp-dYMP) zc_(79hlp)L1N2c8ki`sz>?>0OO)u9}1I-fn5{jT{{E4a{j3Sz9f`$a&f-Y!~-D-nd zZSZT>2F+UCm_A6YU}gYjka^Q{N9<# zFRrs@_0{b1KL8o*vTEv=Qc+)AJ^hwc)8|o3zo1H5sE)2RSJf+91AS@jv-cHdw%b1I zJf-@-(c+$N09dL2w|lw#|IO|FPcQOF{of4s@7n;7&gnHR09H@FfC<2~zF8Z90sBoD z0n#DZS^>6JfUnsKU}oyp46ro=Y|Q{$Gr-miur&j0%>diyYktb~e-!!=!JE+j*NFe> z|Fm1%{r^QCXa5(2y-6WJ0Q_A_0;*>lI~6e7f@DfJ zi%8zmZf^zFC+h-|v#WV0n-sL9mXiR*{_t7^t2(c~ce|h}&0&Cj{#|ZbGA*gZfdA90 zg6fa|b8=DL&8A5U36p!=PmpFBN@4D1@~4T6A?79*cb3+`>Bk6p4Ef-n7Px<@;~x@= z2>XBjiT-O3j1mSWgo$5O@ajJVhoHI#s&3mhR=aB?e$L8pKBgX-qj*ujJD_z;_H#m= z!2DYh?0}r+U!!L&6!hH+ihl$_(OS}Snc1A@^XH0^ z)z*{JsE~y=D5|yOMMDbu!_Y9lHi*jBboYmQ%H;nkiSchFWH7iQ{!zk+$V>V>_y2bq zx%{7<=Jx*27kO0vPfNHLQZ%9fQUJjyNRW`fM0U1xQiufh&`b*@LsKbp!x#ZCMvx)D zl2CE2x=3`yXBr6bD2DN3RT@z#ZBHZUnA~KN_zS*&mnQP%tWxR+LKv!#lOT{XK-~t# zUvC7^G=dsV3e@^8FTW8ozsgKEjbJ7<@)Xja(E`*#Ro-|g3%Yk>i4C`Ie>Z?qiCMSy z+RFM|EWx@xI5$$Af}o{1x7d*@i|Dep?BR9{hCXKnZ=^1MxJ){1z1coIIWF_`;E!Ikw%BfsWYjN%M^JgX4|5VH+OGJE)Y=LNRvKFTK z!BQd4e4GSi1cQe4xa< zz7gE_8jV%{-~tyz{$4H(aU;5%wvucAj6>fd=BtvWCwZ+$LKYLQjY^M`IxuJC>3VX& z+iStvCPbwf4zE!ZU=LEKruE*c-c*&~$Kp!qd#h4gRYEMro<(0g&fs}`_5MA>0sc*l z#1)D?6f!tLx_dPsueZELlq9i-6myT&&(tYE(!q-o^F}ssG)FOi|>O zm3L@H;>9L=GZPRW)1ftR`SeH1>$>h!CjaAb!u8}A$p6-C^jf*||5jt0|Mf*4Vc|cM zgS`pMznV8+ndiUi;F>mm(}#^)_vzfzMV4&(X6-pwVm;NTuGn^Jn}4M7ij6~ol2mq$M(|cTP_YklFf+}SsijZHe z0KQBX2r*qi%oed?)QeOO%UmzLWcnry2X)@YQ4myfsF#zW%DkFJZOKJKE0>Kmr|KSx z**h4*$#M&H>H1kGV5g{E7DF_~cTa6oTz{LVRhCkciI2sg%h!9rCn3`;a7tz<;*yZ9 z_BfX$J*;;c-V?i5qLr(w7H~Mp9i%Bf{w*A#DOA78v$O4q*YEelOKa>|rXiO|j+LZ@ z3vr+>H%bCzHK#5ZnP%M)ri3z@>UsR9XhZI1Q}Ny6{?7d%{FyQqrTSk4*_37zsHvvK z<!M6?20<;TtR+{Cpm&EtUnJsIqm&CcC>k}@h$RrS zT-JRe60>}L0K#N8La_^jmvvzj*&b{TA@@26_}-4k*ngv8P6#^IJmlF0r?yX)>@@99lbdBYk)>uGm zfAR}_8eVbGB8re%AteHCIvln27ij_I^-YvuO+Enz%zauKkHt)go7XCGfl#>>WVc@|82E8+xX9yd4#U_ZpmP8LNQ!6nZE2T!OMES{NmtM zHP^XIcomG|>xEa_()tg+gn0SbZbYLlN@?lOFy(*7Xo4wI$Y+m>m-X~p(2^D2 zTTOYZDZi+ud@tu6)!MSMh^yDx(-&RZbrvp{w$!B7T{FK8{CsZkuk0z4 z|CAHX5o6Gs&QQos_!fX4BmS+-|JCbflhkI`j)`M0i$wZ&mQIc@0>JeQcp1u`$hbuaYBj%0RGj?K3q zm@OT)GI8zc@>fPg`F5qT4M|onLXQ_XkR!(3c4wc~VK}61e<3V+$@QR|AY>J@)I2WaI=YxbztE zUb+#X(J24LAXdlGn}B$CS0b2N&?oCdkH>(-h4t#zS{E?NikyCo z_`DEXZ5F(k0@*Ri!EtHHslOZ>JA$ZyBbl9XIh6kbwYjCcShKZ`KhzQgZCd28v_7tj zstxZE_&#F(*rLFCGsmitpEJ3S%VrDbNg=f;myuck$nQwC(n2L8SBCDold7!#lcv*B zGCgP_Erqo4DO50}Qq5T;Pu0+^MEP23&Ee83ll#}*$#iA|QB?gX-piblH6b$QwlfjO zw%yRS8`^e5+iqxI$A-4u&wj`I*~ZU%vQOFhPlRHMDMKOqK!RlUq$^-n#eepjS^wWg zv$ggAc#%hVbX;WydlN1n(frGLc3gc}?!FJEqg83k1wihEt$U@X~2CJmWt_;o?aa_!>#73O)Hbonw>i?-uQ8261>AueFTazZ~|5L4k>K#H+QAWSzFr#_hz0fCRxPEQ4 za2L1DjK5hgAQ(XpvxTfj8HwRUEi=8KrLjM=G_P%LB+I)DO4L&DGWoy?*Dv%uMCm)? z+iAecsTj?@x>ehT0kU`1Lf>z9rdqw2ktAd?ghk2a_M2QnArj@12{{n*x*LgD zT^Ni~<;=;>^g7L4!;9Xbh2_OA-j_^BdHPtN!8>#ovdj2_kf>_4w`;+16%|KQ)M>=B zjf1t6o1$MC3R6D4J=fV^oK{uoY*Z~MTAvX=X81=d7JloXeMowST1GZ{7 zrkg`K9Mk7Q`Pr1iQvHwkCz!^GSO;$se}W!=75EDMuhZ-2^uKOLClC52Z-au!v4Z~$lFC_Ps|fRqZ;IDo5s zOu7Ls6mg;cgMl3zdPQ3m9fNJeorsz)^sd zPn!KIO;*gvki|HhxGI-bG@Gw@eH7rw_aV$8;k;ahhEsSoA~{Q35>62e*mQA4{L?uW zxp8eBy!^YttiGhx=Qs>nBLBZ5A!g)pSAIIrD*3GihpKQHpE77k}}8az)d zPYVBmfjnu&%|!92i`zC4zmuZ2PVi1z`U^$wWQHIgwv#FFoL6n8O_klad1d%giJp+b zwm?nzGNC%TS@DO6(^*f_FJ1%N7##rqLq=l2#SNR8^AJ8YbJG7O*ZYwc#Ksf_@z7-v zJb5#7f#Sc7)Y+^w|CC6bocu1&jfnqF?sBK09}yhd&Pqj-0_kD}v*OtuleW)`Jf-q~ zj7f~yLYRS{HU7WRZa1^}|NEWB*8l589%=tqgDu8>BbI*~;1{;}+o-It_GgQ(W#@M* zt!Hv~$+IzcDpg2|uF8cd8-lR5zmx+d<2L2C@VdO-YQ=zhQ{*Q>(QSWMHV^tHjs+CL zatUqE1GeV@FM1vz#J1eBkj^UB_4aau;uWG8p;?r%Lb`5MZh_4Ga{Svlxks^{_`>Sy zFaQbC_XOX#z;7rXZ2NlcO`@8-;B=N|Z8eEpE}P+8gy zT3)h3Y9bq&bA6_DSG2=W?WXFYkQ3r5O^(vqxbA%}N` zI0f^-FyL=7j#n)0Z^D+I4Fm)N^{r9;cVkrNqHlHyD~z8Z%=p_d;jec`u?{%oLK=Pi z9mTnj!>xGzhkMH8|9Av9rU0yv|GV9G_Wp-%r?ZX!e33^;_SbKYjyECh^GWk%<$W=2 zmkRv4#5xkcF6#veWhnjy`^XZ;RRMshE&%Saj{u25NJRXmw8hAN2|GvzE=@$2v{U#wFpOD`-<70uweRG5)Rirp-^E(i}L)k{H({Kvhtc|2QFFDK$aqr3Y-{k_NSka>F21Uosv5hx4^l>;*+{66(l1#)X z_)CuTw#$9H++TRPlK@?#F)t1y{5B>@v}D~?0C@6ly<&M8iDo?(L{U7)9y;b+42l%2y6hI0f z7&$isa*gnsPYiV&dkt-@47XgSp7$UBJwzQW#kxN@Dzs zL*J$X-DLM!3tW{(Txip0!NECWksW?y@pdFk9})48X)Nsd&`OyKm*sy`FR&^=t}J13n0 z7Z^lS*m8y>ME2UKzP-LWmMdU4_bpu=`ENJJ<)6-nWuM-km|E$ujv)@fD?N-CgaHUd zoDh)QQ!Lt7f1m}AIz=L( z(uISO^-|u5WS9CcFc+&AxE94EuFt+nkw=xnXPI!EuXE1cNa(xOXuD)re8FPxB#%M zMJ{RxDM8-(l2*J&crtaXHbGs!UE)xT$KVzEwRBr|W~9_#M6QW+Ca9mTr*Fa3D9E2z zgjIou?YCmW*gj8q%IrTBdGQlcK0D7U|KD~em;bHNYH#g7FYyTdbtndV6CMC^+I(3b z05x@&dI6+m*6{;KOS46!TI7G_zZa)>PQS0p=&VXUIEk~S`=(P#NVwwW>A`DIy^P?m z394pd4*5Q2odpQWR6P_kJjNbm$PKu(VZH`cH>VW~9Lt@37j~`%JcAQ-l?1`i>ik-* z_{6(Iu}8u&p8SWBu&Bvgd*#qeimv0HD^ah=X~mUX3-H5^HNTY4gChRcEq8nJ`C=!Z zuDd^{+fR_@m*J}bQGtl<|1R=Ty0pAhD7Fm8^^QC31ulXsL|D|Dk6AHj``M=q2 z^mFomv%mHKeUV4W|ME~{BMN}B=)8aiAiZW4?wq6S$@A!Y90Xv5Ktho(W9IlqC4lIj zN+@f3*P1?UJl>7YJuO@3xVLq1u`0MsA$X%@&x&H7XCY=_4r2^Q0irgW{C*1QPd7JL zLw$snO%W#w5X#EG6Ur{6g}U&2r1Ph zxsOD|uUlo;?wdh%H;d~pQxrOgVk)Be)VM{&-veV3i=9Sz6`oz~0ZKFvr{JE146t~S zMn&`C=Ce=o0tJXSk?pp+s$VR>OaQQj(Qf9KTV6`A*&4!5Z}+Oo*JX8gH@|%K%zkbB zD$lN}Yp&o*o{WMGV5;_}Jn;ae_b3S53D0Mf%|4Sqw0 zF+I7z8UxwZ;PeOZRQmk6!a0Fh^6t`6d?B-3mKC;WDo-U05m@xc3E+{zipQWwUwMx>+TI@i`*}*`e+C&ECjs3+5aXMN%@9(sq>)O}SWw7z!%5pA$PvX0PK;Lfu0}QY) zgaSj#-#v$;x_>E;TkNf*XdKdTGwwSBL2FAP&hv}jnDJX zj2s6@hyKO5Cw~HG;p7=W;VqOoKmRp3s-Ce+IO`e%_@K$Vk^^tFLF1VgG8B)YhpveK zG+*6^&hGVbjWVb$+n&;){sNm6e{vfYSa+_fS9;q5E4K%;b&1uy2{)o1Sl^*g-DEXS zFQ>cFs_4`G3yYwxyYK%&Ocdq%e|l@=Qw;zs^#69RmCgU%Z}zwMzrM&Lb$k&|ID^qf zJb&cO5kJ1L-;agK3a_6`$+diboH}b-6Kv9KJenK^0lEJ`g42%?l=-zSKU>>(TD#if zP~`J<#WoEknIQp)Vv@ZvHPg`RmGxJj0qTt)dqd37;zJL;iS4zW^v=!o^`S{f;+P^B0+gdp^4)(2PXZwL z(8F?)5zpz4MFNFF0Vq@z3RNsAYl$4jS3M#FPXWuq6S=qt2V^mwDta>SDIPtKQB?nJ z1;9lq;S^+D>aw&rly3CBO*vAOL>?;#|ImW!Cr{GXFz;n`Od(lL7pp>Z6&{zYBkDTW{v6P zEQ`L6C08j7tL$?h3_kHAh)@>kR+7|8l6oqCqLT5-+;tfrF5JZ{KJv6yHDNjopA3{| z@)ipJ`_Q}zRW961DKo$XCgekLo~nDXR~FDwD|=JawQ2R0^8Uo|oUbfU*XBwzEIsYy zzxj@V8|{Dg`S14T-rh?7Tgu~*|JV#zyb$;u90)rQnnoO)>Uh{$bq3k)u?~wPEW(Go zqIXCAQV?B@N2{vVv2X$MmAgD>aSlA4z_~gX{#TLn-11g=x)@g;Bit4EblE!M6Qh`q zr8CVZarbK$8pA9ai}PiELRnCse=^Q1Ll{HaQpGW>`MKg8wn99sJgrt8DW6ZvvuB3+ zy^bkEO@!+oQ>vgV7J<8CnE8wxtt)|Uu}_8k7r=~kM}FcDV776qB{G^t2yBY~ajHR%6V47Hu9ZSrODu@7cW`+8U(^pD#gdJ z^yw?!5V*9-@gtb`D7xSs?}v{2%Fy?N3xGeWp^slcChhTeepZ&^2x1}t36hHVA z{0x8y;~Zv}u+Kp$ZeYu&8uL13RV>#!nHF9~foEmddy!h+VoYwkrq&A2btvz9$QzXU zyJ7@eFoH_ROJEU8zaJNuu9Z4d$-6AMZJ9+iJ(tNwo>1F!Tu}CyG9_+uy&OoUV&mSF~4a2b#*}3 zmC)Tk?O=+nMA#}C)c})(Y6tYL9k}X9clE#=#M3|9bgAs4LuE`6CW8#(Pci2cy4J`6 zR49zvdU{%2(O6t1MM-u_q!=oR@8bPgi^BzT+Wx3o45 zGT&(uk;spuKVel`@8}L@3BR^=_zHNa-#3OWN-*)0fXC3*^MI|5P{_u?qXj}gMhP@( z@{HRet}+$dT}i*g2-8yHc=iA0FpGForIJC82^wi7SZ3-{dslf1v-cQgj@#^OQF4(X zDuB3~$Y74)#fM{8)ii@K^24{$UFKI|@ZiT+l+sij6O*kn1N%52tgIf$dycwk7LELD z@;(iH0Ao=j&D6 z$C7p3Y2jSWjnt%V*P>Q__C|#g(5^*Uc-H15zoM&``9ZX4wp?lc=INT51p}>K6%vo6 z_X-r;wWR>ft`JUy{YMS4KdvthXLJP z#NFI9t%*ISx-C&)rk2!pWq?<2>!*k&wA2rTDrVeUEcrtAxNLHPLIGJ18|N05UX?2u zjo7Ctjz*obRjFmS1oo<;dMyq-Gm0swS*@8L+hs;k3zy0WA5&H2Sh%#fP{L6% zh~Zg@D`?WLBY|om?Usbyw!9-jA=J7ide$&23#`nkXyL1sn|9vIj@j_F4y!U#Ouq}R z0f0gUsF;SBXL@z>KU0h7*xb)jGTd{pRIEk-bEe!S(Fo$ek70P{HDW+F@S`-PkjtN4 zpei<9Dy!A9Q#GH3XD%*u99=`2ZJ#UTMF(7|xRpUqX~Y&vc(dD6$rAje7VW}zP-)WU z1AoZmmwLmsDZc)+mTR~DHbZeNhCB0<@F-4){#iZ(d$wD$q^l+!@=2nLizUaLIwQG5 zy8cP5JW^5n&o9Ll~a%|+ZcP>M{A zexmjQ#f==?nd7QT)ZE;3fD@#*UG_PE3a5R!)vBOzc33%U6}b0w_nl97?*PC3`=J~q+av}hVU!6_ASWD1$)(3W@vTq&0vni5Ov z)fb?I_)!A0UIzKi*jb_?%jsaPLj|&Zb~dq>^9t!WFg@y8SbC&106e;FdqM^S`P}+3ms)$Amk7}KsK`))8ufV$U z=E7YnE_I*d?sFJ3vaxm-A|&Y zGi?xe2oX#&KI1gnFe{$pG_7g9>qo9V1-z#Nnkg=R!Pm7;#2A|RW-vfwm`&!ywgA(V ztE!CHoK32v6msIvN3QKUb=>9k#d%){X6TFXvs^g7U#fjYYW+V_gyQ+#KN|1PEe|b|S|6knYANYn*=l?6G>?B>J1F(kHlX!z%@DX@a2VmYu zcV$7<>0lU#g~pdhJOt(K)PNCPnH8F&Q!NibP2U>_O2zjAp@N$~!BMAv1iLw(C6!O$ z3PY;4x}M&6s+QUUY^TPgUztu_rqd=fXnBeK3tB;^b`EYbLelNAoUKCJI=QKFaEJ0F zkPXxC&Ljt-qWrEaSQxUX++NY=jTc}@NQw_PHi8)CVd9f$47+@3g(%2JFyR#2*y?TV zZ3HMuU_gH}aWqN>8~>j|tZRf9?;?@*LGZ^4hA_-y82&QXMZgC6e{btxryT!ncP0NX<7p%Rt7-5(Tm)pu{A*ta zyprRwx)`{+82IED1NEu*+Maee$IR8FBF3P@m6)w>KI=tg+ml$reC4j!lizFXc8{hq z6}VM6VM*0Wrhb}@GOD^wn*weXb&3*mDRft+Xz(Lk^mMSzN*!-?<#ToA^U(tXiTPNX zWEv|IMZ`%HBjWi(!s7103?@NcWmj=sH%r)A5NYvJdEp+l3fTrQgILV^{H;H zuAW6b75d*8#xO%N0*vq(c#DD=vi~)o|LpD`*!ll{z#tY!`4Iw3x=FW+ zD!Ga(`4qwj}v=|$D!w(geq_n3WNG{gRG zj1;c9nE6Qv)+;jBk2@W(o}L4wFEPg5!e=G@o$Hf8KeBQ+zTb!u#PLSwy6wz$+Mjv3GfJ4@n80 zQL@Jixq`WuI%-x-GuV$*s8Ie(bgwotd@JCA&!PoOKT`IqI)Bhlsk=1D|55>+%LlAM z{@>r<+_&TZ?C)%?{9&Uzi)W2N4HRBt_2;JxDFIR6F()<_jbTz{R zo>Rr}fafvsz;xhM0DBREBmHvn#tR`2{2C=8PwB)lF9^5JmPUlZ!w_bWW9w&-3RFIU zVMhQsNYYWBZNsj0od~GrspWA!82P^%58IL3X?;{)lx*PbO zk^#3n0<5kxeM;bI4go7_&T3Pr8jd9%1AcHamLK69kYf%c>fr6_C~&3eKAEP=jb_)v z4ps09l^I!`6iNYkb#nL}oE&~1!ks$@q1i!egq=%@+coLH^s?+u63y ze|C3P{$ERZxL`-e7@Q1HVB_w&4 zVDJ__KunnM^jkC-(!W!b5e$5cqd~$~Ct=F%q~MNp)zOzJ3TNFgs8B5?UJt_{&muAr zF|vF5Je=BM@TmL41qz#XhV~s>=q3TyQVE&ybxyQlG#Gkd6L>Lt@W3WFsTdM9mD*o| zH4L+H6gacj$WP|2H)g$trE7lTNdL4CWVHy3h=F0R*E3D_bW0J%R17UG?wo`~_<02e zKET3gUcf0sB7Qc2M4H#_Kz181*x@{#xe*4c8yY+X5q_!!>W*9Ih=ivaumZT-x`M7w z=+xBdkf5Uf5mr0kT~1_oMDSW?Z%n<9ms=3R75a}g&H`@N7&vnl(kaYm9h-=f_?#oz zm{6!i1=j>poub9A5tn)C;?V2yk)_L0Gc@Q0=${=2siHnm0pkfz9b`0Q)^K3*N@Q}^ z-|0Esql7q`wFW@L24!3UE;vCiMh_jZ9uv`J*$RW*5ieCq@!IZdNlq#l4QDGgy`CCj z%CI_Meb549T66}KIZK=tXM3JE&U}}sSzz%M5cGdAN}j?pP%HmkiDgPRx;Z4kCi!pY zpd|kt9IX65m-6tyVscYw-gk1;seH2tfzF&roR7{F)@yaX{Mf5B`oiU@$8(>Mwu5>FV!E2M)s7e*Nj zn41kj+zo?Y5`;s49HBg;Q`=W7fWo750_DWQLCK5jKF0Y7V<%N|Dj)Sl*}l-YJLK zQ=Rn8JS$RSH57mZ*%%Z;>q|;Ij)%U0X^9+1$$)E@LP}LyrhIITZW2VfpK?YO-gLeF*@>WcA>a!fe8lvQU6AZ!<~&m6zBe zVBTZd7_yjlnzOi$qY|*br<0fO<7p-TT}i$7QR2Vt>}_q^@!$4$H&^oCGM+m5PrhEP z3@D)fEOMaLou$fxSZ{k?dC&ybMkbVdNR>!vLToRQNw^CU4Gkn_5D#6*tVF~*5z!p> zClV8}&buB(RFo|=NQ$D^+0>TxdaJlCG%D+8oiVp&fv=UDe^ddodXnfA`#uCo6W5rnM*clKO~`q6hS1ERf7#RI|FgYSzW=?o^8Z=N)8x})%mPEa(L!Ns3rt@w_hx-T~`zgbDDXgm~=#`@0_S1QETCymP!RuQy%r02VxB!|nxQmfAwG*M985$ml01TXrx#=Dq$m`b1$zZN zeIsFNmzjPLWe{Nsjm2}YnZ&axa2DG640sEn?+J0g$j}IqAb|lH0)t=u;)Gw(A1+FEjDoVvn1toM+AYh~}P>c)aS`W+EH zw3bgX&S6$|v-eo=x_5r!4`62WunSH;r`&v*pri{&DVczeC6G5>wI{p-r6Ixu&yNNJ z)1qm0a|_22^R%~7>D1jkXn~W!MELjm;3I43<|Xr?93UdD5-9zv)PBuH0%80c+9^BA zG?auMx@^)@(iSEpo3Kj|CXp*lL;is#SLqgKSjSY`i?$jF6+aPbF zOh<##LsR@eiZ)9lW1--(20F0EPk}z31OGxZKYVn&r7`2<;WXH)7v)==Me|oM$RLp^ z^vh;$b!D?BFBtP*#+_N)9^8JFe5^!;b$;lNA@B)^p^ph*X8u0-$T4}T-_E`9Dh$wi zZx)&TsfLDHf|Du=tXJ0VcvVwxWu5ugdED|p6{9w8+3A=t1d%A7*$~uZ|JmE!wB-M- z&Ha`9zm%t1pJn&Hb*rdD2@p;CxCZ{K(Uj?y%q z03T#9_CLcAh`Qq7*t&OQbgW2P_`hDUtmQiNYJO|Uz!;9k6yPZJGiWxT4?)N7i#$~3 zN!!Yst@*tdeP;9%H`Cm^tdcL(mP!#&6rn-_7a95}Pq<5M54=wYnIA%Mo#pWC=n7mN zAH6*R=T}~vzEm9Wnm3{rgC8pz#1S9}#l2S8{TzE{9slQfFz2)V|Bn{_e_OWy-`4)l z!Rq{XDGxXANDZT(CjsZ4eUyO#Okn1-K+J3^0BJGNt_%|^sutrT4Yq1K(<)D^s&PNT z&6x*?ICo^xa`Geq`#U0V&Q;!LI$hV3hF-VTm*d#a<9J>?B@8oARw8oLw#zD;XpT?? zuU9G_hh|1dGeLfA@fQ>&?<{VM~QrUq7vTY8xEw3D>hmZH?z5W}n2L zUEQ~UnVF0aX1!OmYmE{KQ`1K|CYNvkKfh!Ch2DRE^t*p#>zTW-2{JZ=2&I|c> z=kIGC$Gij9V@Ur?LVW zZs236yJwsd=9nUF9)IcnrN^#=)7~+YAYqYc!SiuZ3-?4n6xuG5m8Zfn3klB+)SO{b ze5G*WV;*1NZc>=Bc}TS>=M4M1VtMd|ud!C~x0KN5obpe-ldYavo?7`2k!8q#TbsLE zw*0rd^8Z-Q(}uIqX<%yS4O{FG`YbGBZ<UZ}pYr=Fmz=TRRw|4-7v#;umR`Elbv zZtv`t;(u+f^#7$i^{gaG2YLo?ZxNmiW5Xa^x)`Dde^i!QFNOm@nAA88tm%oytwVQ1 zPvS;hs0rU9rkMc1h4ZKn{IMU!EZU&yqMblzcPtbgSeZ)r*el~$O(xe>7SRogdj!0*hABHNpClU!3WJ#yRjeGGr!irY8tj5&35`TJT?43ygOFmo%zx69=OzsOAgXyHMp0@U7J_!!$vJ@qkuK$#g% zKIi7Ifp+MQ-TP_I60?e97p+h@gF6IZ*0eypKOe53{%k(<%F_ub~Pj*xgUdd z3ce$+h_i6BREOaa;nRt&4rpoQ_#P)nP}w=XkiF=t$mG#ex$gG6@b*R2D$wK?W$Yku98p;g4%X6)~m_-GO z_E!g*c9Alwb_o+*`>Tnv%V}wfamA*Qd5vvnbmZ6{x_l^PcqX`)$CFG_cnHkImUljm zf-V(D)o@d&MP4x02B($ai2S{5Vr5Kdd}{Q6&N1IXl10H>$AAs`|K`r_PAUHH-YWjv zQl93OJ`xjvPlw{F>KcC`4X!=yXT|C+u7W?4QG)22E@hKt%|>XWfGC!=)k2t}C?Tv; zmvPHOAdp?H{I*Zc`js)$WME6LdXOMx(!c!62W4a zDbIZ6DEzy~NTvVoR!Vv-gS1vs~&JXVMbmJDM{zC$@IT%3G`R~?# z>Hh!bD*y9xo)(h67=Jz=78v5xyeiGX+g5(jXm8{vxgY<+f3-O}<`qRmLHe zQtXP_B4Kaq`ew#i0mQd%Gd*j*GRg))RId%C&@OOpeS_7e+TPXfEQ4~pUYnV-tpPR8^D=;MGz6n%6aBc=MHhh z101;gg;tEncWpLxx|1-~K&;%RS|IWd|j_v=kzrR}lOL(6UWt^IjC`KdkuC2;z0Fs) z=N_xj(~B5&ZImkN+rx`uc4$A>?i-^NY4|(Cx6grm0q>D9R~d~LhPwfA@z^_Nu|iQsonqHwS!mDR zLzIN*fd$#zc#gRnlxxbB$I(Tf^>zL>r41L!QoRkYW8D_q@JgZ5H2eMg%eUN+r?1s- z-=0~0<7Mm)fBW`~QM&L{Wyb*lN)pI!vU95-KUXLY4mH*;$axPZhv4}9?Cj+D`tzn}c0sD9<+Yjh8jDPde4 zUEN-v|9)~-mVT#_{{{#R;^_szCi!o3yA=QD;9z$p|1IO0U;g8hVkH1_I?N#f4({Pe zGPZN5i(N`Z!@NT%mVBGnh)^!C@^| z{uyxLN0V|ykG>bVh113oT*NZX_&Viv#Y$#)_-PtP0fS@JY#|ODU0l39Jw9Uc&GF^Q z>yxwV)1$XnE0fs2@H3VChj(T=0%(%|woB)~Tbp~U^WUXB^UHsDXC?dLot5QpC31Zi zA{X9y5^)RfJODF6%)W-WRVHTDuo{HS;6RTsFf$=J97Ra2?Ky~OPTi8d4)64ycpZw$Y^z}0Uc(Ef1XF4cX zC&!m3*USXAl2IS$sh0o5zQ1uR8~`5A|8IB4KL6d^T>1Ym=b1+S)A!-|Wjzk>P`_{L z+K72NXwDt@-;8tgfXxH}$RMG-3ne`580Rn!kXAWfxg_3lR`uY=hhh^6&?wCy#t}*m z!Qjs*74KmZWRsMz*GDH;+k5-$gY;XTp(+6XM0dCnfBI3|O1FV_%Ss5PReqG}yBwyC z7vNV&f+0{}m}srXFOWhv&jDWsTC}QfO;QL~8{BN#1(PQV_)|M00x#sRST8)fWqV4d z>}Y|{cKJ=Ja+g(D|I8?HvB|>VNc{$dB9$kvHC?k86c&iHe z!HS`W1ZJf&#dT9n&3382BS?lQEL2yq!N~ni7l2*WHQz|5UR>8C|8|Qh3l$AxlxG1v z6nXC$bCm;r%;{65aXDK`Ba&V7OqWXCNN9DGjrYWg6%j!+ix*DgFxc&nO>`HLZ zMfUyGPB8Z~4gbF)eiHgIN~UxHYvBL82m7}DXM2Bld&U2k@yx=nv6=@9zYMw-B@qel z9O3BJQiREA5|OL_%Z|z72s=N^&8nf;QQ=5YQIhhX;~@<0aX!KoURg%)ud?0&Jl>t^ zSYS1E8bX6v;<+3pK|iCpiax)p0nn?cQ&^oeaybU573{VE^&xEqSg+u0z)erv$F8~| zV{TZ3YtEZme9fX2sBOFe7w*9@1JPNc4L>}k3KtIi7}5#VZc+p&34BsnV4adt22nh| zJUO~P0Vn_O`sD2D^!yB*{tC{{uffUxJH5KT0$S_;;nkk)Igw`pJR|%Bh>Mp0!<(-B zEkP-Y(O}ZLVn6@$&j}_Oi-9wJbI|~1w*!a*6vC`b;&0!c@tO90Sx<~!W3~Fm;-YyAgVxp`NH#&j0>@$wXvs+ZVAU`#2yhF zefKf2(mpg`R{}9FmX&Hz3;BQU008y!|JL@-=7D|wd$5ZCzMQAM{69|sfVB*M%A*X1 zzrzWSq0NLbPwpF@h>WanU}9n1^B_?s1c&F3ZSP<;?OehRA0REhfUidwc#dztJ)C$J zoa!Z}$&qD^pvYxnNsElCA_JdJ8Iet-l-QYdb(CZBn~$COLQII$5#XZ$asvngcMzb2 z+7K)+#h2eZT{u!1Jlvb(A|B{5VzNe&-S;LuM> z#Gs9z_bXamKf8aeqe@485EHPjx2uYRuOLcD2W(B(YgJ$NdcYzkXMha-1Z?VE z51AKSP1_6T`3Qyfi1YdO4uw!(FuGB~%ODdwOv7Q@mBb9&S|cr{jWGKfgrs0*SxBNy z8>0o#lG##Sw7j0A1}%%s37)2f8OmgPaxzg@YiCAsQZTcSQ?zMgv;cC7jj>FMT8mJO z25;dQ#-2?FjxPJAj|I#!lzG5=@Uw(PUG$=)k38Uo@Ghr6N#+Nz1g&mFJ4(~wHsB=ZRzOe%&)e2z@klcz8nM;L}w zj!Cqivy6%pol^6250kT*S;kDqsdaxIcM#vP)4YlyY_jQR6^o+G8X-Eqk%>;VRk1XR>kF#I(mq%4NNd9O@_`jDwQ>T@QHu82R+CjyWzf zjf@jRB{?Q6jnn{URib0BQ=S_-m9;LS46IYBucsuu4p<);FE+P#AG=F;kUT(`fGw61 zi?&!24SOXq(A~4T8CA6-TLxn$vsGMnazvj~XW&y%&{gQZ2gibG*ZJ1Fc1iA+XD9`HTcFc3gMFBFnZ|WjmXzvdsMWI3 zR;$gi92N4T33DbLK_XC%YSj*?6E1@T_*vX3ID7@X|Ngku{oBpQ&F~@C&}^v11&4VFYk^}FW(QV)AtGp8(03mE zrdTMIHtp5Z{;9VA^K2VSi2uH`dtm$jZ*Fbwuk8QJc$)41a{TrDFOuOc#woMHiw1b2 z$rj!-s%%q2J&}M$B&l!(T5?+8~pGr3Xxuurr6_vrZ_whrw4U)!5|d#m{GOL>~*KL=-=+Wo_M z%19SI%eHL_V3oE5fk^dvVufZaSX=F3;(P~+8fFzq!)vYLa$}p~lwY(s%VEER98YxS z&*^zFC>`bVND2IGGr>L!tA9I2@a7quJPtabQvY_ zL~V*y-G2#|-SwYc&8vJ`?f-lt<&Dk)`SGkGvomnp>U{NI>1oCPXUzK}pGN+_S-4f zKcTBn?)(-D*P=vMW>TXx*}nqY=~X3xj~m{M;x32jRESobef5Z^75|riUa_TrHLXKX zll^aR(?0*%**(}<@&9E!Q!q`=_@zJ4^wNKWw@^9hhsATXWFRHpdLbDgpQ1p_QP2fv zNFMh*_!tbLF-&S~M23puxpxK2!>BP?MOzJ~tY5YFK+rL775Q1XExe(d#SjACIl03` zi7>$Q3aF+d3ok!yOz3iQj|z|dmK2k<7frKR z%F+2ML-EO^Htb&=BX&_|eFj9N^jJp1YOC=5sC54mOhkHsaL{E35Is@PbF32exLiWS zwA7I6{p8|PtNp*c&Zg1@8}+|^+y8fGbLIcLoM(#t-^FbgWdU?^+@+fUi|xp=0m@52 z3$Ow<#bKTLURISQutd|9DRA}JPb>aEW8O#kH1YrKJuCkA*1_(||6@7NH2UApJhneQ zFPLHRlc~XKJT6M)K}B!o5HOPs5bv~ih$sePCRA1R z#iF{}c^>y^#sBAY0dL^{n+IFA{J*t*usZ)=$}mPm#{(YT@qot+$8_)?e5v@e}85FU(VCK{^hV+^8qjJ0Kg3R z$=VUJMune{jY{+7L1~%iSI_h|*j=;s0N(m{Fvb>$n7wQdG60XEId34Ay=288mt*AS-1wDwwQbVL(JVaVVr@`_UcSDKlkduC%E zt1JvH`cRqH025N2HP&dv z`q_}=XA0b$cuFt}z}0n`P~j^#n{&E*U&21jU=q0Fzse%I2%Ydqx){cNuO`-M<=wi1 zZZ0(JhFe^=t0V76R~xMeJi|3T4e9nBo;%*GKCsbf1jA^SSl9)U3dX#oSAeFW_f(;@ zT}UsKo;b%TOu{*+DIm;CO95sHl#~cB`abFE`LQ0i{Krx`j{JFqKJ95d|Jg0Y|JvSP zo&PW85wQrxc!T0>U#4@VpZz!nWEf!}r^(^7FJJ1EI0 z_?aj+J@hlu({~D1RK!|i+>^7T9K(?QnZYDvv1}NN7q~rZk*(b7NPAcIR;=I5ZzT_| zSW6!KOfvt7{%vw(?snTI(^b?5lG9@r-@xOU|5O^eUS$?J(^p$TiK75|${)5UDEi@N zEO4dS2zy)Ij;(aK-mKJ;M}3<3KmG0};p6&$+4n!U4)*qUSNwk&kHP=NU@veB5Dstiztjd)wiRUL}iPyLYj8w_$1QO1_pu<63PMgeYMqH3fxx zr<^D8gzY$m(TjmJf>j%By`mJh)fLxnYnHNL*g3atfNu4Ly1qdZ7gq&w* z2&JBE*|nQm8@V90*4VEZ8XcNBX^d0dKpOFWhm%X#X9v8(#hm}_M=%cQpALl*Wnevl zU_FKjSYI21uizd|aEB)#GZU|=uiz`_M;Rs^j*24}Sjo!BC$(W^gvt1ZE5AO-V4p7T zp+9bYY|C2K-x&B|l#!!29r~S4n=C)fU#ytM`ZuRa-$3#*L83m8$CYCaOicm#^U$8G z=z|X0lglA&LtXFTHIf>$4QQE%0Sbo~D_qyr{cZ9sx zFFH!%dUX}~MM=6(bUGD-3O^Y=_ehpQ&pEnl5rHE{nl(;)l0~Ddyx)&L15d7(uOLPb z+T}_ML@2gfZWc4|g!2aMNuXDh_1F(K!WHev$!Z+Wm_=I5)hH3nj0z>0bPfr@bIdc& z8&_vMupam$7zaLvvL_mfcJq!^CVJXOc@o{;&awlB%&${a(-@3GSk&#dwarI;Oz|Vp>O`5zZP89H!Rr=g7-K^feQ=ak;mD^-xw z!--J^eWJcm-cO?sFvAf_ih{+v5_qln+(z>0Y%MMHe=1Wxru}z!|6t#?|L$+D?*A_3 zDe3=ov=?Rspum0>Ljdo~f{g){`kAgN=xTztR|}jRHU#$Ca%C*ynad@ufOo79IuZ>Y zjaAwjg`@c?+RB2fovPK=70Hs@@#B*18sT`D^4T%blfdQ{!0Ni*tI*OUSj>`$i_6-p6f z61HMAg<7N$(+V|bl;HNdk}=I{jQ7LfC{9I4wC7f#3P(46lq*y!f!8a|Tg-)@9tVyg zS@5}8Fcg8mra|vY3uIy8)}(O=TxM1|q&lI+jVpK$K>&V^F!2bX&u;mLeXAPxNgV887DeXz5-|Fe|G;QznU!Cssfh@3k= z#STz(W}#ca#tU#XMo|coCB76h{8B zpJHyJDCvWoBvPs)b}&RNbKSYYpvN=ZL2!amjnwTOiw=L zer!NyE(-6H=#&1o({S&}VJ&jubYmKg@+A6{L*b-S=bqp|#5F8|7!Y|?AdWq%-jC9p z(9JO?Q5=zp2fRV%r^6_~9`MFd2$9Qp82CK8jz$`Xq*2`Lr{x(2vls;3#G2v$Jx754 zGfkRd41;6AKMr59u;Tv*qoh_7RLdU2AkQK)5deCD9|t+*g0tl3H{t`YF{)6E;zG`2 zAFlt?76ugoum4kva%r#3>;KfDynlCe^?M~C{Q((?(o1)M`=ot5bwmSy!U{2{hyQrcyvPP9H3ogHq4?v`+G(Z zw^t|EZZI1!!1ej-^Fwgn@52lX(i~u(k(K9C;9@@peUyR3C(#&!A&f_C9{Axub4<8g zB9`$>O4qsf@S z^$QCqL9!fnI<`5uJ(UGdeSLZQ;pCFC)}voe-=1Edo?LOVOa582(Fmsy&CimBX^j$a zb$s;p#M1hTLw;*94`OuZ$H23xY-v=}^ya1BbAgghBDRu62-@{cfHIl)zVnj3%OG2S048HwBxAe?Wg2rSHkn?QCr9`_ zh8bfl)kWB{re!){eE>xvH$!SgGg?(FH4bHZ5bv)}E^p_DGB*Uu5haK>vw?VXdH(+5 zc78BU2o;kIA@b`Lol+U}L$;94FF}YPX3~_HdoMu@3Bdb>CW5IHbf2IHK!!d6eJnvR zIntbYC^ILLXy}qQ9mNn&FoC1;TsuPvEiwZEuJ&&)PmW&So}az_$L;0$x!~sBmRBRJ zT6QfCwEL8{qeA=9j7Mb`clNf*SW~e(R9I`6v8c0HbIrn^Ci_n`@(1t=#xNjghS0C< zX|VrnA8ha1@m~&hSNA`c@)-6XDlM@A*8+Jg#uQ{sqo2YaWc6s#enAZUIrr*U=9)sG z<;^k&09H~*fccN;s)T{6xdSLjuk6d5b@mmv{HH-P+E85)_Y)dw=@RKwCK)M)3SV7y zjxNC0B~%mVDiYIP22+G1f-*-kgw`H41wI)gzj~wmuB#aP#wZc5hho}&xpb5Se8n?0{jdE4|qdD zQt=P=O6fXvk)Rl9oec`DjiU3C|0DKj7TCu$PYRbyaMP)CIi^Zdl*>5r!(rfAtl$wgPTg2eC_ zH&Y9fYN=adw%WaF6;UkUM~)mqOLKrWj|;EfVl{WfwL|a~BvBH=gn(_ko5EkUa-_sE zbgsYIdPrfsfiCB%N9&~Rsa|oY_I=nbR?lLdCiyQ#8JRZ#WK;Z??fo6w|7T}sCI2nu zG2}ls*b9vQ#o+xE!k_5L<9L5!n2nFo7-rPDnVgPtg9N-rE98N!S~^MO)wwO}l6c*M^JkQnADZI|450gjT8oshGW zInkw3h!-JS)PmLpUP>R8<-L5Bz@VSwrh0`42kqY0W3g($i>w5zWU7dYskO-Vsa+f6|!7)K9=XT5aZFJf>%d2L(bDA%< zPu5*2XHji(RE(h5Pv~H|Ctw*@$J$keE+`zjZc3xizG&W4S^?I08LG>--E7E3F005Z zu+H4w&9}uxsB*JaSFuQtUSx=%0L8k!f&^)mxx%QPin{Vr>AFDy`LWu)tnbJ1ogdu4 z=HJ!cDRJt!!+I%F>iI!=TV{`(v{YqZiH^F-WgR?AZpzPz4a$pb*T!J5QnDohp`b^e zrZ5AgX1N(iBjFHXQh<}c7`R@!I^zgd$s~{C=@(huCS+AGPs}%7fa^SCo;(zXGe{m# zb`MbU5<~<9%zXzd^njleH1bJAHR1_#+99HLL|Ae|fcpKyL8EXQ8}+~yBt*8ufWgmc z90d`HnbRumICzNS*r>&NbIo=YKZ5`hS|IQ-#N4$*0gLn&! zcO~}0_3;Hm{r&3;&T`l=vP6w^z9jkR4rV?YY;^Qb- zTpA#$KHIZs7Vmks1x%&1ms@SEp*Lvx%IPnONaV-SpU?_M%FlItEOj?aCzqd3gnDAD zJ`DI91kl*9TfoG;93(Wcgll1iuxj~|Q&ld7K~Hly>>A01Py42%E48MQX+ZbPvlT15 zPnvkH+YL&JkwZt&y=oFDfq_53-GHS#S~zn@5LGP!wK+J>jikH zM6V5HS)41M5uMAZF$LJbPv|}@+oJ*+-Qr^8hwiXs-BQRD4G9-G6YLUx$|EYO z5D-Hj6NYh#ATRk)Ozc^q4U#_WJeE*_s>9R5Ak~rHxNM>z8x_Hu=vFB(J~em!{-5Uk zAKk$@4*=@-|Ep6En9#D63GP$k~RJQLFLJ!M~f0GZK;x# zDSqjaCy^s`$S;4shA=%w>BJphvtq}TFl^Dm9sdQVFaX6R^D)dGvWP&w$;$I%V$2-1 z&8pWN+jlSn?vZxj`d^Yll@(f zc9HP^@9%o0L^ti_=Nmm4f-g>=>}=l*U4=?(!P+`;6%)6t7}?5DK@xe3UJ|Znk5>n5 z&C_)ooFv2+KnW)dE9y1M(}pPJn0@?6S9QZtf>yLAs8!4UOsm*Eu&UUfX%%yVTNTWY zw74<-tQ(SVy)zW{YA)$!bZCs zL99LAq@pJ6qf7R0JlBxmDFAoGY|T85tG(I963sBwoTvLr`7JqH6qq|a&Wlbc zcl_|o@&n<-Y5~TinB^t{K*{{vL^3vrxp0!^DJ~QdO(ZH(vXy)vq&En6lIIyzs_u7m zG`q9YYhLT2)9o0yyi(zQWS zo@S&l{Y%9vYoqbADQEEpYid)FbSCR9I@dsv?!;W{sxg#Rq?u+>`UtvWKJ)C2=X6P* zj$_<_kIXHsdY1Fq@){+7AwYz~#laAUc?`iO-O3#4t)o5|5Mk&Tcfh7RjbZn%d1}G= z(+Fyl(c-E#!{7*F*}|=x@6W*(*DwQ`;v$)p-GnY7QD$>{mlitt zoT7vZ(&F{bF5K^!ejsWZ+3qBqG@=h3hh!G`1P)N9r#zS1mZzof|AWWn^<#{HABMo= z8jJ_HOJ*NDK=9xvgbTLZFOl5|u*IUnHAK@`B@#2(wKcX~tTi6FsSMS*eF{Pl<#1q- zvTJ*_st(ljV$F`WF>iOQ9+ewtu@}_&^4KG<#<%0PLLBR}#->Bb9Y@#FRZZ&*we2Wa zh>rSDipi4$e60ufC}G1~9A zv%|GH-LU70ow1YdY<(2R=z%udN7=|H*d6PPo%`^RC_I6sZi7}exFa1{ofAIKg%gVgZ=+tf7g!xwza!?u(JOz<1s8}1$(#>!wzKPjD?8Z)@1rA zjs;46TIk_`dBsR2knnh@eGed>gU67?zoT>~bj-Bq<6Jqd3QaBxzsE3hm!w}*F%~`F zU5@9=paq@L(aV+GLDau}d*;(!?;?xFQ49z0gzEK711o{3D##ARkLr6OUJo0fuH(! zQ5=y7veT2oyc863swmQoE*7lyV64 zuhuvg)uus`HBrX0Y%MvK3v=mQyOt;X@cdiv-J*|qsc?T$EO^J2P-)7C8ICZ4i3$p( zy{SG1(F&PL7c3n18}qF5qSZ;(n>|i#R9!$sYGtdVnmesMm0h+Kk#=1J;&n=TBResW z1mN~bTkVy;#5UrBRfcdJ1+Z+vT^pk~7uoBl+huvhcPLLtFTyfLj9N|>Ra|r`;p!rM zOqAoCONqhx7-m@%3I|>7NYK%GDZH@NgvpIG zRNbB^T7g~-jf#8ym_;CYfM662hJ+T(Q;rmiVj|2gexJY$jA&zyJM@+vONyJG_?wB8 zwlQmL+Kx25ohB@|!|s?{LKg3@Ymal`w)-(k$c^c<%XVPO?sP*A@1KR~bpE^x%aLVL zzDPNs5#7_(39q!dmd>(TLDATcyN4Cxd|~(=!USj^s0fzj@Fl2J85mn-7I4ccpaS74 zKy8q>*li2)6kYMkN6YhIIOEVZSL5q=vvqmC)>VbJwr`y+($(NfjMjt(te=%#<_U>LP~4O83@zJxp9Co3 zP;1kcG-&Rs-RU!!wCj5NyP^V(28`=7%uH#ka5;E28!1{leKn9s0<>lcK#7>~3eyTV zv9@ztwA9iL3bjP}PkGgmbyaAd3fCnwd;!YHCF7(m?UX#xURi<_ zkun*q)`m*6pB-yWGVd#eU@t}wU_F+%i;VXje#~xZNQF@S;3tH6vfM>U2z(yG?|;5x zwb)7c*~#_oFQ;d(Z?8@+Kb#(0=~mbLFgzB?y6fy=b+V?XH*xym_{5W7?d?FeW_o&w zm!6Gj)g-UkV$G@T`C+JVsTTDa$ae@6BV{I4GqXG?(rQK++`+)lF{H{U)j0_Q!4N$p z3;^fWcd(B#2=GHhf?<>lXc<32WC$~mW0>(Mg>NCjY;ep7l2i>l{_XsaGZ6SGE$K=i zTrKDV+w0D?O;;KeBkbSB@M`~f#w_f0{K14i&Gz03-D2l&*Sn?|6jQ8;y6vI{;c1oy zn-Qfn$F)_iPOe#!+$rn4nYPZa=YO1?TuxW#_0jR|`G=Fs%hT5tD}3Qgyh5U8RlP7n zCCxh`aO9GP&9<9GV;nQn9)q{=HKobPv_Ecd3AHj93hg|NSnu6_MRxG#-b_wJv;oYd zz_uOa?bUa&S2AO?2}IAj6+)Pve9HZpZ))$8=#w0@S;ubbKITdEiR$gH9%_Pd%{aOR zE=`wPNJ_t{o+kef0<%$+%o_QXKTYvpx3>1|`=5K8tN3qAdCdI3#b7Vy=uiXrQydl= z{aN(!piccl>l#6f{Qh~ z33QHW^mSSTOOYWqHIl+Q>DzA5#GH{mtr#u0RiFU3{9S7GJl4~+|7%CpGlzg^@c-O9 z*x9uA|NVoN|L0O3WB=C%dx2TtG^js?5McCY(L%r&#eA{3?n18xD1=uq8^i2$kf02P zrQ13v=|_W+pL)QMpbGnZ%-}uNPOHD}0jpkgg}COVB(P;uY};?C0?nB$i{3 zyl$#)n~vCOSMz2A!z_SgV;r!XSaiZ+HsKuM`At-vH?6$_fTv%}uIN|A1b4V5sfF?b zx?k0}TJbJ*%WhExUoee!#d~-41vpCyZlM!gYqkKh@q$XhbUxVkoGj5)LGsw-(^Lud zsi(eFC>Ks}IKOiO6Yr-1#oNzN>JOy)>O!z6;8Ij{v$LaTbtbC|oyj^K%oLm(uR-sU zOO@qhfc@w*@HRXbM)g*-3Y0WN*zI-V%M?{U=%ehx&q9D>9}mIDjYd@0(t@J)-gbr( zs@(mCFu6ub_ws=EOB6;KWIgiR$n*QM3#G(f0 zmJ`Ev6p`ShYszf>l(mi1Bhm#A z>3fkH&>0q}aTj%M$;?1p{b(Slr?Rq&k<<*Ijs zR6L=8$vhAn!8)XfN}6a)pp3d1QmcG*L}aYhLMt7`G0#~m;=W-(HTV>Tctdldpp%PN zx9h5;m?Qrl0t^!jS&~Ys7&sC@IaY)PkSQzm`iwETL|04ki#A?>D@Z_)V}eG2tr(Or zKaCV-qX=W>on8@KNmsqx3X28E>$s4ng)X$#N`~d;I?l}0H63rg=;XG%!CvBx=i@R* zo8la{G8-~|VG>K97cz>~RFt*^w-w>Ri6EmZ*|vk)4a*Q^wayUCY}5#1Het|;`ljNC zf27;;O_e~{h)b=2%O|eLw_i@b{>6$oUggv1V%Zi|zk+)>DLG}W$x$n0Anvcy2(LP_ zUA@-_A3?L(rcfu3Zgs$kv(pAPl{Jyg3@0YesE%%&D^RW&1n?E~qYM*=1fM#6s!8Bxb@0Nsh^pds+t;HS{0xJ(=fMsBUt2r7Th{sS&i>{q{{K=QyS14+DTcna3rrU>kV<(U1(+L_ z(}s5JhI#yJgJJTXZ{MELQY=J2uUbS&X){YirNzXG-(C46P4mpk{|8yRIR3x4Q{w+y zJ1hRbjK|>rbWk6K|JS9r{E0RJJ%#4uZvs`j0J~r~=N3R=aQ;vG)WH9B12t>h&Vwuw zDt0dWn#x)UY5s<%)#ZP$l_@B8ABrR0a%eGroX0Axc7o<-R{k$i?zY+j8uu-W6Ur3`r5Tlq38V<<&dKs{bV%w@(D%b!sE$e)F=u}ZtVNpiZ}r1zEFh=6nz*hMPog; z4UYq)Xm00*mj82_V73q`=2A1Ss0CtN|?_C;ty&N|!?tL=bP>25}VJ4^fWcY4T6*FfrXl&<6g$ zyT5Pi|J%EJEB?QfM}*h9);T*EzyxM2w!BY;-;nuPV*G$IeqIj~oM#Y&hydZrgn=Jq z2xE|^EQj9)3?m-(OmX7|W~$G*UNPl*@)o0#Kcha7HxadBrcR4gLpYJiu*zA==E?TLrM`eIJ--yY)_RsJx z(2=3P4}&4^1NWfSdm!mAu0LWlg36-}0liha5?%s~fS;xqZzb%r!WSI!XeGFs% z7CyeNj!=-mOJhG`j{IUYg!b&d3(x?D2Q{4+RPp9QPGSa=jm8jbK7}F3dFc zCv2ZZF{EO4fU=D0C_K#`iIPEw&rq?$9Wn>DXOP{rs5_7~Tb2csu zi)q2_XmSq9ProSxoiSvE6s;AAl7VeQI6Srk4#OA&;6i zWKQM7R~5=>lc3Q9U)kNVfB2(VgDWDvQ_#jfQ<@@jly!;Xc}a*UZ`vIT{=A-j?Vc9$ ze|YzYAI+Bek3aSD|Mt$_*1jG8Wpj7s|F@K<*0>SE6!#wd$S`GS@^=QqsC=J>+bWc8 zp>iP_EpS*KSSzo-V*Qo#vFHYRiPZzj?qlSay|J}pncv|AFfacU2EdDwh$v$ScIJK8 z)_GMm{f23kTeurk&x8a#MvN|}d}Xhv&3Gf}Gos2+c(+tD1o7}~(wnD`tUBkCPtw6$GiL2am@@5Gdy)qE3;u zTT;$>)?S{-=~*=L2T-uc!|`0&h*C z=z&+SfOm0z_QnG@;Oke%$G7K4uTRh3fJ=%bh%lfWSXrih;!|!HC13jqp-c8PgyBod<7j)7kroWoPeSfkNI#AIC@Fj()^SHo1i%hn zrfZsRCAVLJyPKO<$-lmd zgWYVQpCee)P+Rm}F^{%sK;G4V-`|3knGkzgs?i((|wYBD7w z;nh}*WQmOA{Ory7vKR>;-WH5RAocp_`skOVtCK_Eefd%{@QHubk@>f8OOW*RrTyFa zyOUQNJT5eo^H}BZu9xM>F-K(mzt}}^Uvl!RClvciq5H zQg%r?4Vt$|hR*T%<;j(~IWp5b{ogUlAZB}_D135u^vl~5W_&m~yFNWWx;{NWtEkK~ zH5}zsvnEj><1Q;$N3Y+Vp54B`I=MVMdUsL*MESs#DlSVms3s*dr7MMC@eEAZJ*o-M zjU5w+Z3_lxeL{GbW>@&i{04*&YMzwT_%j&H~hZ2o-n zHkdBK+#xmgDSLT^;tbTADO?QHWT83}Eyl6j*Y6YMel(jn#ZDroW9TWuWRSs?`Fk0x zeM)V?(iOgZv97(cQ?kQX=Bb%FR^ca4NjgvmXW~;MGx_p`SCnDpYi^XWJ6#kV-0SCY zEP}ObNECn!_iJ`a#C(a>cjK-s$MH2J{07wJA0S02hS^I%AZA#rSHK_pQOrkq;?$cs zuxn8S=xOb$9=C^O%>_M*3bZ{GCI6x zcPWctXRb?-^sg@GyXp%cK<%?&n?(UJD2up8DW|~vcPMRfeNh)Er*MsVn!A%f!_!9p z=dK8krvLBl?e3NI|GnLn{=bapyVU=M4@|B8@4N^%r~Yra@O>x=afuz&2`pD-3;ep+$Cv#E!4E|?vyD3n%@=gI{Uv8J-A}xdwa{{dBypq%nR?i|}7gf98zDY7nP!32op_7sgJMcjg#k}uy zDnCSVEWcpzF^S?EE1zot_7(6v2kOllR=e1sT3ms8{fb=xcZCJDbRY)M)_}DBl$9Md z^E9ATB9L=dLxMqcgVPYJ*IoFyE=qIJpozZEsOa&oY$RbPG3}*)$7x z&*&nju+(Ik9#)>kPW9wTWqOl^RfN(khtVv{?*^s#H$|%%Pns4cobzFrUoZ$UdjK_{ukI-S4FUV}EH=(G%9j)i`jpQztV@;6!aA$4C|SJ##_6O>>I&&rGNcY^ zCQ-cvU=~T;03t{|y=<*R`7Xs_V;PC0i*mG@1mA^=t&CdpORdJXvmBwd;N(vwvpVHJ zn1m^c60&jYhhYXWhIo$f?~VEYcJ~fU`ETps;9!3x|1INTOyoq2H|PR2;Pd4Elk=yi zpgB_h$s}%7ng2MKTSTTmQ4+&!90ia|qV?CDT^+EzXJ$_3XBjKC^myZq3>x@99o@Nj|Nm&_|J%EJJ2wB{+TUC8|7AQj|G%IEz7XEerp}Mb z_XY9`=J{(RNG~!(P=L6<*LoabLh(pFnem?eQ$*MPQp!J0QR70UE4`|zhEs91C|?!S zJQXN0c%pAoj_vz#eCG%EBFY67Y#B9WH;Uasl%OnIRss_8OTOu--*oTbgAf*bgr*!b zOfTyh|z-$wPh-SpL*~AA5Hr|lg&16<J9jxwuEaefLk&ib}0}ei@@t#W#uqRTlm`6$=sNMbR zc6EY)00#jX`b1`}!fdmbZBsTYI>obD>6eYlW2|U%V6RY}JN0-|=%F0za5l%0THJ*?-I?l^oqMT3+ z))QDk8=I=_hgBa^H&!>S8y`#f+<=E6OboJ$!0;b=v4*J$KQ(m5)*hU5xq_0WOgPK@ zt|Er3({_hTUDli?1E0VL ze=?4ZedCr#h39+z!tZ}?@9mcEfA4H>t>ph@JY244 z40hzF3ljUS`O_<=Pm|Ek&4Zq0Oqsz1_zW-|fmhLOfHrPzlz_Vav{nHc42Q+N=Rt%? zHn~!+%PL{Ia?8)jknVYR`@1j+Pzd?G974B6+Qo+W zwnb9vv2+XkDuEgqcR_Vks3`bVVBqYh(Zh;OIxJ{t*M21@ltfT;z=g1v7MBZHnKG{0 zCRu(wIP#-dR%SnR=#-uwCu@yNs!;zOvc5ZssJgf2uq`WJb9=5Z43weWXh{9&=ridV z0PN})9-=%BK?ZRiv;5N-jUX9D$pFOBJ!EU2=bQN=2qc<1R4)L_1kKwpUIT4t4uQ9( ze!SF+sF9&X)DNQwCqDho|1v%@+8+XMUBN$8U^?K=$8dkQ$b=-Nl5fwxiRCX=)+Ho) z#ut%ATOWh}gC$pVFV(MrAXetFefAgmwA=sZvHmstf9&s<;(zY0_W$KPOWFVDF#0_M zAolNIjQLK^|E}E20q~Oq5w0lm8rqARYL6!?%xNyPHSW?@$n`juOAXLwf#60J8m3SD zX`Deue(IIluQLGEBEp+jhDJIQB9!>qM7RBnD~ye-<(iFE9E;xbZB+xaF(GZvLMPGKlfUtvKDCRq+!~lm550Rr3GX zJXqcTU&>R@%lJI#-TA>iO!yV*X}lotI8Yo;{;l)CG0d_kgq#D)AG)k8)BMep7|@|z z3C%)pN~sjGot}18Uwq=XVP%HG^=eFV62-luwAk$m5xK$lr3XBLJN>7q7Wi=tGY@#D zd_X+l-9yT~WKXX6I^_~>r=#0EMOXwYmKFS*%I>VG{uVWas|00)5Qe%}hGsd|sN(TR zwK`YacmaON3Ft=|CLkEX;GWiFUO3}`YNcrwjr?pR1DU})bwcJkxKjJudH0KXp zN7m4!zZ#xV%>&+9MSzC=e}8k^ z_W$49-(C6tFXhq99$5HD##~aBycT7J10N5bSg`F@(t|mP7VkwVF&3L3+dOnu=XsLJ zZFVZ86UzX}+{>!I{r~K}YjfMUvM72!=U1S3oZ8l$SeD;=yRK_pkCV*uUX#QXXJ%^O zET1Wuge)vmBtuYgye9eYx9}uhd`XlN&xlnsu}GlNXaJ2yqaS1*%B?eSqPkdLw5So) zCLg7!vHJt~4S@-qBTyb2xoJz9#E)PP(9;bjJe9S*Ei25o!dwg#D=ip!D2d9Rc%-yt=y{8P>Ubkjby2CD z?XNMvw@_R~wqZe>s#)voo;~J+J6CHyNk%4@%Qa6a6Rbvtg>jU4`^{8 zYq?-_J=|40flOhxj1NeqI$9KTyj82T6fsI{ifrE%I-otX*Nb(U37zOO40+4~M4Q*U zA2C5xw%O22c@_NvY|R_`xnrN*m~=FE4jElLHPnS^$fNfLVC%m22Ejk)lq>Aq^@Cj$ zt=cFKTleKmn-A*zX>0Dwy(>+u?TZ)^^47WL!(rmH$a5-LVyz)LQW!xI?vNtQGAe7g zJ=)o=Ff!3`xJBS&3Gn6x=f#+S98p0ZMPQuf+{rD0F_;nLKls(zd)R(i#AjmSB5gTg zkxpSoT-P=Rqt>{@LpR>AHm4}uR-B7B*KAQTv6rw*AxXx`P)l^$nS88rlLyO|%+kuH zsc5ijMs80axysQPe^yb$0}i44PNAVFrzRDh3Vx~nQGjPrD%InSvQCCVuy;Hgk~GZkmKui&-?jC_Q-Ft=F<_t=(>%v1RNh&lY|8 z;W6WPH+&-6tea^UhpM2x6P6&v($va2%d>Lt-C|Pbm8huuZc3zrS5!y|KyW$DVl+hw zH*UPnP>9Ed|DiclW#|WmmD$!Jo4Yn_s<$0oJ8dKsek~*wR#x#sPVg#XZ)J>t*D)kb zwDpkCM?M>%OF&6`jk!^-MnMcb%H{6#X0+CMn}?~nt<@{7_4|g)F@Ob#5hMj0Pwo?d z6JQx0X#re@!=Zg6AwqTx?MfBo8dh91bmU=na|~>wqoRq43eM6mCKPNZm&ta*oM3c? zbL5EKFhIqSgfK=ID7VEGl||9KTf2+XTNn@V=L>q)z7XecFU!y<^Rb9Y+0qS548pFm zZxNMLBRZEp0=(Nu zv~`HrOSL^9++MzIx$?I{lo#(Z?%Gjq=8D?{AmBcb+!QyU#i@t{3v@}yj9t-%@r)EG zzbHRhz5rWkR*-A%h{@pZxP}R7##ye8k4s>7t6H$qo_J!inKNdVBN8vEx2%cojPb4j z+X@C#r47JdS1!fawI<97Rz*-zC)R1S7#JS}I@Jv9k1DT+XNIo&N?aWFtFso@k-uuX z-!0a72gR`m#*UtUO;1wC;`Zr2g^Yjjo}HfYq)WPbc>>9+@`Ahk>&RF)gQ}o;IbLMcH?9 zwM&pxV!KsFJ1xVH=xzE)*iEu!7OJ0SI7jAb#OnPEPVh&2za&s-? zHE7+@-IAGPx-%8c;B;3=r8`)NsYa(9G1in~_?E+sYHh(R|u2*OsaBUxfzaB&H zt=o6HMgFOu4*UNkouUlhq0XjY4fbDqCyxEs{@&3h{>NIL&TL!Gg8nyu3AvVyt3o@j zY%f2lzx)C~c`3tAWvW{6fTKI)UjO*FR6kY{hVC_1rM`N=k#?3>hoq|0qv{lI0tE6T zJ}CEx+mspqT16!poQ`Q2oK@Cp&@y!rr&JSNBf^walWzJYy6jEq3cjswE{t5uUqA?_ zC=Ma9z11Q_LK7l=lVhg6(i03wxaDfhE1`6ABAJkht139`wpWmY_h9NqSV-WoF zpTGT|z$_J5_V9&7*q%!4gGK-yhyg)lx_1E3_eQ}cw5_QrcPq`qiVe=PIwyM{fQ zXQWf>N?bVe`ofl=rh;+b!Rz=9c6=AwtToT2w$T9XTj?JmZvvi^UFIjj8r$Yzzknjg z)AAy^r9p{KdeNu|(V&yg@+`3LaQ`q;dDPUiZe0J6ZWfL8+zc62nVUtZns<3R%UX#Z zwT&|{GDc-Z%N1dyqE{qg?Lsa@H5R)tkc#Ilaw&W!cte zxeUz805>ILdS+dbSmH)FBSkuO&~xniThuEXnOpDMc3I7|imtQ0<6g$&o$Hy7+%@Nt zqUoJ9CGmFk-tLs>?2uh;uCT+yd-MoIpG9N6^}F_ds#hJT_dL{D1={`K{H!(O^J*cv z-P5qU!IKvwz1`M^P}R)SuSRWJs=j`5XDffjzWQzeZR>tjfl@CN(N=WL*jH9w30>~z z9gM=O5Uby81((AGn$~c3gWc(eBwCNLB%8CeF+jXWGOtD}QnWRZtY%c2{;z}nx5yzH zMQ?Bv#pnU%+zZ07YusY-#V*pEG?wH&dQG9) z25YL@itb*MauCQV<>;p!WZjTY!Yo~q#i?OI)X{AOrWLLM>7`X8Y;UcagYoVU;GGOx zE9kb(@f$dOW@25OhA?)F-?rKk%18Rfx_-Qc5?P|nYU?=i7dEEG-G{Yc?ICGgzjg&@ zrdji%jNiU|VV=}pIgIHH!R^r@!V71d1Hxd+ox7+g(4P zTY|z_?pRPyD|kprvGa&W26NE&O$uYI+#XvLnHt0h(z={`azd-Z8XnaXrVieD1^$(RKL>sLD& z|012`RemWx&uVBEM}G=#A8LSH`=5(jMMafmNjlz8O%xZ4oHWuYS<_%PU1(v z8!RnzVUAQ5bML&ULv&j}lbhiXr@Qk#7-ti>7l5EF&EuKc_Y2(mxx|B>N5~71qa8>H zzT+uv<}k-}=~UP$dk}M94H;xtap%@OYg5~+liU3PT+vZt6y8A*m}PYY6-PIIZgcT) zP*pd`Q}g!6Uy|Jk`HJ%oW}V$1zy-?<1|T3)b|=K=7Gw0xlcJD0MjjA&fJxyA2kuT$ z(<{XNZblO0*7VwiR@ss6PB!B-pTeSOUNUkRaKx!q%k z?ga2EVObN92cxQHJC zVJ_>B;G_C}6O@SBs$1{4IP|mZXllnltC%d!YT{=W@!0VC2*~CQOR@HV;~2o0q#(j1 zi{T^BVk`F$p0$_EvMkLD6oGAY2crCOC!Zw)UyRfaBSHadqr!|sWWR@c1(5~r76G2$ zFyhG@hLwZTLUS%i@R~6Zjfp#(qLY|mT7OqlThmY0NK9tGBzmy4j;^ugbnB?hz; zv|5N-zQzVsue~b9HsY7gl3R&i-uAn1AIg?8Gi70vtVTM-kl$;e7>#ata%=PR)Vm5KVP zO+T!(xe@WyTko=udPRx4Z!j`r;Q@1v7V{-5m7{?-hE?FkTf>NHCb1DE^K*m?7l@u!LOWs70n&ml4=;4xIty9Jq z!i4q(P!#hQc22wc8#vV_*X0|{4#A&+3pTI+pIOS?)y4lF?d>01>woX$_-M2K*YdDs z!-sf1OP{y3(5jbJ=~|nhcseALT^9NK6x24aC#PV4i^WS}?Br;U2~HCRL)i$w7jMBA z@M)G7h!%H^kXfGj_HA?Z?9dNO8Z?`DFk5AB`8mo{>YC1ad5o9 ziT|;dM?}?nCB_-3fo>2AvoyNSP}s|^;7qcsG%`djPxc7f{zPOkVhN4Pp998*goPRA zSuHD*MrfHPXj%SCYDaN$SKil&T3H%(*|r+{*0&iQrj1-C5&GqZ{TufbofU#6;^=OpuLR znk&?jhz=tEDRQ0Gqs#IZic4}ke?u7fNAyt! z$!ga{y%%m4z2#7D(6jN{?6$_bUzS=pYlh;_&h#V~X)?xlGp-{u+UC9vT|sbkc6{~* z3SG7oT|g_kL%C0jy8@acy4ea`iBX?8r*cu-ywkaG zzW+Hm*!X{~<*8c#F;@w9Ui!L@wwF~OOD&+e;Q8y#T3_~QSpTJ^;Og#w_7C?*_WjSv z=y0?C*YUJl+nO!8ri$W0kJ#~7{MolM%QV3E1#&6Pcc0aq^99pz?R~9Qc;Ky}FLAl0 zt?)L}JA6$W(<5wYsKi|C=u!DSx1x z{B6thDA{Vy?I9v=+q!q7e^UV$h!2sDA+W8GYQW+vM(tgCBcWwaBpvEoX+5Kl6ds9MH4@;8~vR~6^uBE@U z_|UNbXU1*CitN7*Z2OP>(aF)#X8&Ku)589%&#S)7y8Y^E1!C9VVOM=|EbK6Hm_+Av zcX&ISf+O7u;;+2M>z?NIzk2(xgA>>O>v$voujQ$?|LS?^FKYXxRc=;kOQLl*1# zGG$m|S%@hcG*4COvlb)7?(@pza~FA<{C9dAfPnsgU|wLBcf~wDqO5PlOW>`Yfk1w* zNf5E6LQ85$yhK@?K2A|m1R%IBV1dT7_!`k)FCm(y$+Z^cyaKl}WMu_%sz7u43Q@^9 z4Fp$mT)__bAa9^#T2Kgh7!5Wnl^-L)cL|@HLJYQ>|N8Zr5rC8J3j%}9KHxkJ{GTi4 zmSO%a^gp8$NB^^bu(AJL%Omu^bd(8zJZ(Wbw$#5%@%13e0=P8OzxGME&EEOvdm8qC89{uhLtx|iZ?x~|fA%)_ziWBC=Rc`lmZRT~ zAYjg=<}@20SU~x$@`wB&Y`)7M10nS@%RXW89gxyIyfob&f)5kKa=1RGGbsWH!$qn0 zen|8CIE9_eyzRbqJ*LW3KSS-OQ%D(`YCk1kmK%~*f6FZP#~)hq5#fuZ7Z>}GQ%fDI zdh&l#1Zj4I@~3XtoZ@EpGyFRXVDhr%G1L9D6%2>EK-AGp+W<@=P+3*?AO&57tUC8%Upt$mqx}%R)q|2dk zp-c|71{GE`YfVuph_LO+THuswzK$>BjPM#|AQ3urI89*wsK*kS-;_7ADyB$vyMFzk z-6bOrNPWNbqkV_YY1NkPp$~&6c4G4K|16Dme}}UoeUr|TLbwH=havs-A-zW(H-jer zf9&ReKOP-#`2RW{!~T;F`Ltrlm)Q`g;9UpXtH-MhXkU7Fa;9DB+d0(t4=(s~_fE#< zHA|Wz1zgw1>RzSMu!Zd3+^N3rs#I%cm{8>ll;8rx82=lU={^H)#1nutD|hws(#Hy# zZW#b&Y4k4Rh97kuwQh(?EM2G4mJn+ko>UNgroYS5=s!rizUhvQ{8n?}PIUxTb9+~U z{Z@Wa)%;%=&nn>Ips=W|3Lsr0p{)} zw^Uj|;XR62F&P$K--CVOxj}%E`O8^`0^YpYzP08RFvCr7UT|7dgm zU(3VK_;RS1GW0Nx&0^9#{qw)-NY843c7h;_!1k+qjoM|W*l~jYsTSVCDSDy(=4x8o zA3`cQ!*ZHfF0D3%p`GYfUT`V})9D$vk9>(xc9CX}4hSbyo=n@;&emi+i(|{)#IfLH zz6lPs9eYXM@)y#Io)`rAh!rAjB!loyE*#^H>zxajruPkB1a z{1*mJF?&uetQ7UHVpYQ|PP@YsaQiUd(b1mCA11w_dTTn;l%;nOn^T*Na{p!_w?NnwUo;iNx3D^&ms zUh{ebm1y^{Q9{I!8yB7e$%zohT`iQ!m{sKg@-@^XhZP z;|{a-wH}lxZ8HxL@l#TDU=IBlOj1(3C%LM*^Xt`&3ZBB<$4%Ypv z(4$6TCb^@0j&c%!fFPKM6GZ>y3!en`nLyI>PKa}K9a5N0IWqOwygMQ`uUg&1=j4Vn z0iDpI{~u{zZia!=Or0B*sUlTC`Q>4zT`QFfMf7HjuBxEnNx~ER;ZE?f4BmL%vhEqYS z0rAjA(Xoy&$BPl>*dUB-sWVk%#dVQHPBm6R{HSc3wyrMp84mn}?BJm_G@MhZq5Q;t zo_adrafh_K(|QqZbl>Gueg5O3g|KJ)87KD(9|s%#KaP)W{qNDiCjQG>9^?Gy4*9Z& zKNsSYJq!A}()ZEOGXQHh^>uNuBx?_nwU)k~^6RnhU9cyuAk`cmDhhv}J5DwKr^l-E z7(;@V)dM!&|Ba3h-1sjW{=b&T;Q#ax3&fZ&%lWnG^JH1R(TCo>IRu@Z051LO__Tgl zZVlq)N_BC|w5~J-&;vjm|A*MVhiN|Trv< z&+0lgCo;XnW+yYAdj2o&{#JYbW69pE^WVn)b4`!S|K;s+4|_oM)$!BW2UH(cu@{I- z`1S7vqE{Y1OHpdv59AzKj~=fT!u9nUHU|phuemwY^Z%>Mm)}bM-{}9=^0@r}>hfhD zy#MO*<&)<74F6T|d`jPM!t<{#UwYUlMW>P9(?V;L|7-EAuG7HcWr@EYi?4m^`Ts8j z<;z=vH}U^tm;aw^^1rO-arr+R^UV$*CjV;o08V3f7vRoRwVo$`SJfRB$zPv=BA=l) z?0O};3`1gI-_x|IWZk1wb*b)}VnsVrMW5I(L+dj6llDa-u3+!oNp|My4E z{r|y+|F7rq=zri8^}+tROXCyf|GWdMVE@vUH3(Wco~SAg#}}Td9TNX;d4aX_sr7_& z7JjP|XicnNv*C>t{+&G4{9naRyGCJ-iq*w`-}l6SA02M;zpmvm`2QsxazMu%@IePZ zV^S=;8CVnP$?geGKlWn?!`xdLWavAuF^Vwzd9tdAu{ zcJyEkyFY+e^mv9%4AYz<2>IYxC?Zk5^l^-Fhyp*}Y3@3z8L2qEff-tXTABzxCmUe}apP zUSdEs?EfbRhj#p@y}kWS{+G2p>gJ)xAW*)U^K^H8Z)bYn`t?@0+c_f_2*@KT&@^DX zjmF;nPe9?cFG~s-$8C$xvb!8ch!;1aO0ksDy05&%S)fz4q=1<9rzpQek=cLWLD-^_ z%b(i>wsIOXc7ZJ^rO={HQLV&=?Zh*vh<+ts^8>s3X`I{jJ@$ND(D|Ch02kmEh3OPg zxq~G`#U$(#_DY*NnhLEn3G%0BU) zbPEL`S~L-6oA;`Ab=OWvRMELtxyL>lKwf-kb zBb94twfFxg2YdGY|KVtJ|G$>Uxc_;ZMhGY+_mWy5ef~UI?T^`szO_DOe*HBB`qaB( z-UpRvbc_SgDGb1p?W=6THD|?Hf#V@5((F8r^)n(1D`}r_f|n3Y)8rb_z3S`NX93d< ze8!}}$z5@xS(t_K%(X566e24gX)qWAOj0Gy-zWff)2&K5zToG7RK9=6m6w(Lqj+lvL=-eDA$ z9LYB*zeBXaha4BkC{VKlZQW(F^C;rC1G=JH+Y^4e`bE2Jut^ZY82xnhi-w)BfS8~h zakB!sl>irwylrf^@^lf{A z57Iq)r1UNU1p~(`VB5WT^MtK-F>khL(g(Em#*Q+Mh6d8SG*M#ntg*b;RH=!lG$P^S zEp58%vX~k^p)N`mp=q0|OC5?c)GQLZO9yrY;Y`GHpQ>}0TDPoBCiy=Qu`p=oJ+Wc`kOhXeLWVo{u5S;4O}Efe{(PC{n9< zo1G_|@;QRhyCi;mpQgoY93y_gFsLj(OU}vLG@-=@CG5BW+ZBcBWB^|PPKp888`Ku% z*M4PLOO#vOX^wJbB?ubxrM%M9Wd4B6vMfeZloT-L0$>2P!!!w@QE=#%6EfT3A=n$8 z3_OnOZM-r$!aCDmEzX9hyD-kHqUF)?e+~wov+;I>Q1f!VVS*BwQb|jvJhZL?$@u+L@9PR<6r%pyAG%D9$hBIyZmjMR*ZQGPH&W_fNG$erTeVk z`M!RA=Du}8LTizryL4<=6DV3-Xn7h3A8(%ds<_<|T#JI?f1WmqC7x~>^KTFs; zw8{;@3HT_`(9DE=M_<_#4=CQPEmo(gF)>qk7pGzq#ee4`&GXH}`PyK{QoeMl)j@mTpjD;NJd3%Z>yE8j-KH~Nl18=bjX_fQoK-v1 z;v;YD28`3(M-jKhW@2RJ+}Z5$ot~Qgf0h(@ik3hAHSPZgCwoWs`EQf|aZQi8|MMa5 z@%U#?qNghcI34L*5)du4J^C#s1X#T=cUy_UHxmSU#g6T86G;AnTvKFzZUzDVd_kv= zWz${W$a|{|&00ekMQ`Ug!tlL@zipf)j9;4UfwjhmciD`-w+*OpL3;%tr}A(()P0|U zZUsvSzDqpTpL#*tlSQ^_m_JH#%zgN9-Lkk^4MqV-b2@=7q`ZiE%=&yf_DZWa9XB0r z1^%YRV?+Eji$GZ#+4f3I`l>d&cAB@GkhF+y0(ePXZYo`E{q3P^xjfp<+QgZ%PVBe( z@u(RSP;HB;8DcuHoQ})VR8CD&PY}L4JV(h30NKD(=I$7euZ~I`r)>4Rj@Fb~FM5!7 ztK~luPEa(9xt-oB^*?(DhljTQ=jdP)|8*^oA^%;=A@4=@GbYfJ75uDT^ey!%@T*t( z8$Gd%XcZRgQ}_3Zj!|i&25A4(@PCvubJQ?QXGyWlCeU>LKiE68&;LgU8~y)U9+Us` zAqQg2``HDYY4mir0#8?Z-w&X={}m^EqYeJ~f{o7U85rqx&EViBvR-FYvxLEc=>SVa z7LCnUO39|Bquy$j6Q^q5jZj{G+tO1`cn%}-XlOOrOB`|wW~1|-7}qlm{faVtaL)jY zqCNB7&Z>fw*K}sV808%xwj)pn64e||zkTTPzUDzi7aPxxcnt0e6Wm^#yBt`6X-a6} zYm;qo#tNnCB~6&Yf5a|xhTz9p0X{yT-+%{{m!+!0Ug~JoUH1qgZsfe>pBnjZ0&{eg zry=4>50b%fF%huo{C|8fvg5z+AM9`BzjZvO{6~izh%pCh(3chgeKYClN`d~~^ezbc znpuD1U@sb$$Dkk8+N8q%DjjqUizjqksz+_%)oost<-f&VR?YtlluvQOT#|pvVTi6! zj#)^sG>N+91a9R2M^^sF{r!`Jjs5pp9)tgXD2E)dF$a9mff)5=H-g$J^<+1MhFUedGBiT)Hyb_#Vea>JK0n2yEI4sNT9vaX=U2`m)qyDOe5?e36 zmMx)%|EDp^p_m3sWq@zs|3{;dbN_d+x8eV5c})Ia4*Aloz6AAj8N1$xzS+12+|Bg3 z0!FSiXKH%24=vetiBFbB)yVi*_mWsBCAS|?$;Y_`niOs8~NSG;IdxkzKVD>6$ZMKgV`bjhPz zmB0FoNkIY-u&^t3P=DKEUQx4zWykcXG8NZ%8(F!V^}N=k`n&mZfSJHE%Pfhz>gsly zi=asN=uyT;Vq-V(_A2mZnbP`oj~;JWgT`Co0nXM;1sMopde)B&vkGVQrcUvJ9LU+& zYE(RZ=z=Y4(uvL>NLb$qG4TyIj`Y=M6wV41(7&arN&teZ9F0+~y>ezL3n3#`&bB#a z#ar2)e`FixE3exzFokST{?&4-GVI-8D& z*I*$kIP66d1cGEXy+yfBjrom<1JLg$Z&7Y78w@~+o3c^TVwbBne@k#%1pa?*74Mx|FSer z?;fwS9Kq-!O-PYLoD>9fJq|Y7{~R9M`oI0-js53Z9^?F1J><(D2P+^y;lp8NkNQ3; zhT1@^<)~OS3yjl+j@2sj#`KF0KaOFR_OjA_w#j9-+Bvp_J*XqGIK1&Laam^yKVRRY zhf}ck46wL_za#_}n2a&JjnS#H%|1^aAK)XC0ytg%L1i8mJ&?_OGEDQk-5iGZ!7~72 zc#C3b(88l>u~2S5)Au60mgrmM`kkTzM$Aw{z~Pmf!yNL|qFhNJUezQ$9k4jC5lRYh z%mtVvjnMgcj1ycu%6MsiPm?qk-#)O>Hoq)Q$ottX$`e!|GQ{cbBqas2YWpkF(q~S@ zmuYCOLJ?{6-OG2UWeQfhMZ5qc1rG>>Faa=%07<9JVGKw7k_qPNEQtVuJa~0UWM~|dKQ!Pfm*6`my%(nIac^tbV?{O~gZvWpZ+mMAdZNF;Tac2}K`H-mm zk~18-_65_aOq(w+4e4vjMa?0hZ_7(Zdz%`=IKGA9{Yw#)MBlf{#QOHkK%YR6&BH)6 z>fsG7#Ec<>&@$qFre{3*0*V|@jYEVpi%O0d;Lm(7TN2$8%o=cJ3435MSrX?G%o=c( z3GbG|SOQrCzFM-rrBK%3tO4sXo8VGNmtfX_b227NqRSwxgIAD{;AI&Fhp`51%LI~3 za^e!s8nBkR^Oizc0$CNlZkE25?t1IeURCOU#36Y1cg2@h761L{U}W3>j}G@X{$Fc( z4E@gq8|pVO6PloY6hXB++c(q*3G6y4h4jAktR0dL^4ck))bkr^5s_2Gf6~)z&&ujI zRN()paKB-~e_c`_t>sf;$?nI?cJ}AWDQ1KzYd7krROuyDROOEv-IQOcp>$Ph`qyZy z%JFwn)GfwQmqu1blsn`eqZDv`0KC?0+uBqa7{B-cv3o`s*V}Pb%%BnrW^pMa zIO4>dQAG;SXH1Hq8d=w@Pn$VzWQV$JowboB20j$L(^}BQmy=tI7O5@JKvr>rLmG-3 z*WGZbA^0e3D@6@$pjuJmYqu&#n@x%{Z}l1?Mriydjr2gJrLKorT58~g!hn@GZ5Ne0 zjlZ;=W3C<9GysZnyrEXKGup4FfMcql_tGG;B$dlT^(w6*nKH^sc%_Bsdvu3Bzkx+K z0m1+MINJHIn?DY}ZUw4nFJxpXE^iTK0pm2ELbm;W{AVyaIXU@fV379Hjn=l+A!g^G zl34k#0RYpe!EQZQ%-nkV=AV<175=x7ig+%EZGnJ@?Yj6 ztI+i_w}A>RZi_vgHODN;UFEw^*DYJkU@=*`Sqh}0UGZv1nc%XxZTDL2U7%`FFl8Br znOn%uwlD$m#(*1+DgR#XceG@Xu8bXKh#g#ma&#goc`*a~8EOaQ9mHCmBQ?mLzYIVtX z7**eVM^P!KPawI<(HMUQ!ER8(^QIE65Q<8~ixluYNlY?;R3>_Wc?3ud$pn1dZPztr z-8+H#OIB95M=gp+Uv`?U%3&AAB@`MnB+Jxd9s514_Z$Jp8Il;u5V@)DjIXpsYl z4yU6Zok&MyptA76LjvLQypmJPA$N`i1_i`dijrAR|N4E2vCZD}9T8QxxIZ)Dil&2>!P#3OX7IQQHs$#k&>})GL6p zrVWtnO{e@jTNaSrAHX&KH#!BAqR7bU?rx6m(C57oBlvE<`}XbCulp}|_e_(2Jt?uN$WI`eFOytE&$`z4^xt{@WMCUj3iJ-?jp)2F z(>P8aC>>;neLJh71}9dXh@u&bim4X7K~pAw_$G~g*O4QV&hikEVT`A^Aj2uE+^ho? zjcq5$X?PLQgM+Yzj(-OK3|;^Z)*=!U?j<9T;=RCR02Y-zL=V$kb&3;?eUz=8>MKH) z6Fug?cr)e~pSY=(rg%sH{+W&g2cUnd7R!FkWcnbpTE$Yev2jBm5~@Yzlr#I=1hLW$0iN&yo(Znubn1 zYln`QrSU9bcZ5C!EIUWXiqXN5K@$Qi{Zmc(FF?fes}Ty}te9LQ?xgK8Rb}5_ViKlv zls{G&v%1~Tp&F>_9}K@#mq?X>OLQF2SEHT=8t1jQN3 zhf{cuE|cP2{x(fBK6_gbh5i3BDNsI!q3VPAwzTW>lG`6h(`|`GG%M0vH}y1LYV9o3 zkl12GLH?^n7sStS0<-gS?eOWVFD9#;S_oyya&4G9VVawew)|^M>e!jPt8%#L-LBq_ zE+w_btl9Tye5&jq%4MwK^mLC$fBL7z`A;~kuT1}YcsR1-e~$K#H~xQXdCc>l80wyn zfYlKXp4=%=b>%Or|D`k~XmOWBt-g@V1w|W$bG>DcB3S=iqYJigp=I-AvEz=ceFJbJ zb56ADl~1{CT7HaKXhe@}FCDf_zYiuGZYZ z(;LpF?A=){%^V&KG=`%@iSm z7G|7XOXP2)tqto8OlPDx&oab(xa4b2YY$<4@@q@SEq!@0V+HA@X-rFU!#c;69ju#_ zu|nqNsZ1Q~Ic&}oO)nxlROd3+-&IUGjhGUjM?BVh*6xC){R-V&&}=Sf{=84K{GW_h zod0d__~^vG|Jgs>#Q$H*W61w+Utjkt`upQ8JvFJH^q9n2@%^ut3zf^sVVEkZ+HwW0Oads#9j_BNJjTNrQ5tJoD?&=rp> z-Kd)Rzl!R$qWDjHC!?c1C;rpH=Kg;zkHP=dQ1`nF)WwB+YI}j!m(}kG!a{yAhQ{l1 zj;63~-W@j4T{h8O7K-koUr)zz`hcQqF@4Lka~RJ^f$|Uej1)i4l87CRRkW7?1X22s zPM|%p!3K0!#34El!*rGuAJTi21cUb5v6}v;{lttBYwOh34Dt824S~Ii)u7)M zU|ZJt0$3dEFCa$A0PJanTP*uDi67aST>xXYEg8yLa2gi4OJe|YLxXLfigg7R_n5X3 z9OGQmi%G+vGNzd*zjZ&b0SbNNy?;FI&@bJ#mZ2A9by!c1WdOG311*B*v2`&oe4Nsp z=OMUPQ*xkQl(ToRWDmmWPIK7e5^oR)z1)3^9tdQO<+U8P2B@CsEJ^C&5=)ZS1F;XB zy{oi>0bgj{z z+K4q~(6H)=y}+t4cwv95!IK({UNwzYipyy#P@gWMUNVGA0d500h!O`L%pC0L~RG6|YJe z$pwF z*irqX1m3#;4g~;^Fis7eIJ+@>05kk6MY6QsW4uhgt+5XDwk+Dda)-b}G_Sp(5RS}I zab{=D=-6e4^0qfO>^QoPlmSJJmfhF_qvjlxYPup{EZhqTpwAAd7dEVN`pGZWoT%=f zZ?YL9&;-dG^s2dQO*97#2qHYkB+U(xT)gAwaDVfnNMnFcQ><>izsUj8#>b9=!Gvvk zh#i6-X9eIUB<`iQzB3H;FWY?Sse>>{^Wr?tCeYSqHD`2KKmhhY3BShBPKV1%7@A=N z`=kRwm@F+sbU;NDCOTtLsyJhweniJ=5y4C#Bc(6~)K0$Z{AUk^aBJA%TJ(@yI1ruy3lR2Tq7s1Ir;Iu$Wy)eU$ zmz45JIb9AzeeK;I^P+Ip$=yW^u@zxdcA+66X!~n=xr-Hi60#<_ z$Q05)m6k)byxF6ceVX|{*E*~)|Hskc-m#Pa<8WjDx0c7?|JQ7&``rR6O&XrsF3?^3 zwy4=(ox*JaMH@$alk?G=^N~;a8qJV2_~}2}BZpkAMA-^aUc7675yBWq|JL%b^W7U%Kz3sKRSofyr@xn& z7_(tdQkP;e3n#!P&od(0c|z3~y0P_>qtQt2ym z)dG!kYOx@=1;QCA(&^7^>MYe=Xj!*!C^Y{TilJhuD z9|GqvZ3JW4HWlE5vVn$UTjOG??oh{AEhR$34$cQ#;wbA2Ld(qHO8QN4az2MRhPTYC zZwf#El0fxBA4FmMaL?g#I6Hn542|V&nbNL~oj3Rt9s?(~FxR12KnG363r&MWw+K1C zDUu(b&u{AHIUP7UeQps?pcL@F)lU83CO0 z7WMSyuPvaj`0>mCIZkt2JYK|*kR=3v@ig84k49Gh_x-)SozmBI~k`?nHr1M~v zGAxg+f8}nD3f-r#4-gU4wO=!95CBSh<4zT@AQMZo(X&o7ic!0r#=3g!e6>G}+ySO72B zQ9GQV@Sf0ZgjVCX8iXBwsid4d3WTPh*}lL_n7%hx6TTVS);y9WaEe~o6?_4OtrEuB zn!skmw)%Tm^Rk!asx{ghqJ$nQoropMQOGQv<#-Bn*KS^7+V2f=QgdokuXxO27{?Ze z1$0f(v#bhB>=kc372VER1ZE`qI7k-5FWqMkiU|jzIv@+>UKSf)@Z1g6|T>XXI407z^V@ipRRdY&)YJ zDcCKx68cn7thIu|ZqGG)Vw|>0Az^VN;Y!D-j-nwr=k%u~X9OpA;G<{#Y~QA7j9@Z& z;mmb*78%^s*iOm#PgX^CQBBvuDKMLRruiX>+hoR3GMPa~@!R)^b`uTX%Fk}-jHQJ6 z8u>4u#c0{kzwBv}{|*nV_>X(X`v;rz|5_eH{(DbHygz}DO`wgOXVYW#2BfT^7EDwR zgP;&>!RKn5l4c?>!$0NeEVJDiJD^g+xN)PK_}Y|F2bO75!D!j$9Obvmw8!dKv?a*C z`vWMc$tK%Q`NH-o)d{TT>c!hP4gtgQ&SsWtqi7tr4emFh%t%ZJjY_FC+ zd-_*Yi`K}0WX9P1@*-f<{m|0kRC|C%1o|LK~!63W7UY=GHX6Z*$rHN$}|wr*Nj z(N+Oa3~%=baLF=4$N1k!CSTM<_bryMhWE*5zBYm6mAFPQK6`IO*k(vsuekqUzcoE4 z*9)_^m;iY_VdNIXV-Ci+ywEhV8a|pmo3432Pa@TXRPDO=1k4^*+Rw4#fhZgd!1k6- zS0h5ZXyi4O$}!v0a>Ug9agJd02%u`y)>N1M(@0+BAR_qlJ83`4fQ2xjTeZZqNe}N1 zu#aNhl+jEKVw;GmTh=@Mg46fW9$?)JR~yD{X?%C3liN#8)CtKv3qIoL zhWVnFX>@Vo!QW}L@#2#u&8344d|v(jK6#{*aSZP?YsnnV(|Z&JB5?wWT(<>o0nb`z zwHG239n0sWhF*a{tvg{%-vF65sB9=;(##wd=pH>*cx7l^w9NZE^-#>#=RCW2&E)XU z31-sYq5sCr_yUUbze$>`{KVOE|6l4X*mVBe-#@bV|D&Ug|L0mBzQJpAyPxBqvv0Qd z|8(3vTkPbm{4#5C>fzQEdos4S*$tz*8`rMhojgs*Vy>MPxK=oHLhx}4v)=qU|6FRd zC-eCEKZ}*on+CAy{5P`s|K7>*-e|-B*YPm+F5|xS!}@u=z$F-dt$)7&-_p6iEbaH~ zm*3lLA8x-E*ffmm8FtFk4vPB5A;v^Rb1sXjD9&V-Wod3@qV?EUnpZ+B7J6_$yG40| z3VPN^cg4Nej=1;QDfF~%re4wB^CB&LXa)YhJ&#svaqe@XKv7aP>~{>KdYRuvjU%Ks zwut*#!~D@s=;n>~WVTq>nQdQWFcz236QaNu^}MMg8jV>TZ{VJiHntC&r+g~*f5s4Y ze}_?oc@(SjlDBr21seAMqm#WuJO0n!@yTZYU&kZ%e{T4&!y*C2KmQ1{;a*M_V1S2H z4pxJ@fGQXSP_MtG{pwvyED(QID`U)Ij^S;LK#s;JM@fiY&@BXVCkhHil2fbIPSmI- zTVF;aqLAJnT1x+|>nq6w<|q=OK$i9E;z0H4=6)QWGGigIcSdPx8ebz z1WadffwNeQsG;w6Lc)}o?-*Wc>UBf-a#NhDQbXUx=`D;wz=kZobv2Xz3PVwT2%|{4 zh*%?_U3mUZiBC{r4x4OqI7{#x z%d47CuHTuI{v=1yA_g%>ceDNrV8OGaib(P6HZ3M?a+c%F@o!XD+kb~i6eFueuuX7s z7o$Og%biur?zWR1%oAnH1mSaAv&B1yh!**@v|+5hHp&V6=V6Ybplw=)&3|Z(y4$&Cj_bm$*9BfNjs3(zUNjXN6 zVnI2^*X8zdOiK}^#pW#VXuUa$@=I;b5(ZB0azx0`t9oISLOCJf1W|!0m=r}us{D`o zv_`Ez|7B^udi(#wgZ+`M|D~Td=f5>P7SFp%l{mc|mt!;Md$9MBC%F#nO5onJdHz-r zW>SEt4@+e z$X7$Xw*}HyEWHO{?Yp9uQoPmx=PT``bt|DlQf6dJ^Fm}?qdn*EL>uD0Z1D@2Wf>Cr-OGXI zrL=+nBGV}-m|9pBt>Oz+u1G7FAo}FF+S~FnUjFaL0Hj|2-y0nq9ys~`j*m9-|2iH+{_o2Ggp1M3 zS%9=X0svqi0wf>i?_1h-xG485{;xSrgO8`LGcm&!nTH=9Gb5Pq1y4zSc@==*XHA8r{(Xh(_Jy!PnV z3tVZ`mT&~GfwA*Ve8J@qXzt+h)sF2EE7u0-IHs3_;Pp+H1Jcz! z-QqTs1FntbG~}Ig&miqx zuMupx{~w)z_DsG4Tg1&+$EN30K==%SV!|@o0Jmp*iCumszdxr=1`ae24-o*c1%Tuxb zjp6N+6BvM>Do?OFv0@p)KPI{_Q^sGNR(LY$rLgZtj@`$FFb)P@m34WYCK_s)-P)(Q z_jYFCRMr9^*TMPg*Js|Aq%l)T!oT>ju`B<_*=sn(aTCioo(BHEe{^KWe>@l+Y~nwy z<+1p`9Ns=yzJ&GExO|ECs>MFpk|#&;))-E&>e#yG$y&hhUgzr9%%Sm`z7ALl#6UpJ6_G!A@ZU&6WFRt>fvs|7Ww?7?a7{w0MtT^mracIU=M! zPhiveZ_m;H9Pe-PzpUr6_W!Ek?d3+c0`^mr532jo??G@&G(;Ql-rDL;F}G$k# zngi=ps5Nrd3P6qVq7Lk-aKOLz)0O`dLcnH<`tJ$=KJ#hyQ9AF6pB~rOO7kKI68GQrwyK|^Wr@-nTpnG; zmw}v%<2Z%IF+CdMMEx5$M*a$XnsXmV*}`Z5w(qpx|9N~k8o9L>oTYqd)gW4fB}{uV4PD%NwUBa@jsVotsDq&sx#_PG;-=H!bbOzx9r_dHQ_X%751x z3W+lRqAQ|5{r}#cWB)Ze-1vX4<+0>H<)R1ZfcGN(Whi{QmS8saeVy=&#|)j8)P7cV z)@Dq8&8n3zpvdvGRG2e)W_$IsB}r5{Hx#}PrI z5}y(1fWdOBVY#-Kx|H)by%7$c@Y8YsFBfJ90ia3$f3kmI@BjOo{2%Lito^_Aw(nN} zDCf|NDo>$BzB~CjQTQo(ld?$9FY5 z0FO@cg!ceFyh>kJy`F4>dULftlfGyndSw=*&KOrcP~FgWpDa(OdYxxFMCG1TiLdUV zu-WI9+UK6sHuo)0w%_d*`&~aB_kTSIe{cK$$-$np|Bp8Qe`|TH{a+8u*6;ow8v);* z;QnuRpkGC>PWERoj?)kpNPj8g_ z?zp9O)wc?}>xH~MpTaJ^0{!#%A|QNwF>L`6rQ`lD<1}{)2i&y(A2|Bo{gaLV|9T#4 z|5qWrd)@mJ72Wj-?)xS3{qFga)SC_YucQdx?7f@A`SUIANjhoqY_I_v?Pd1+Y#t7^iSs=q z0nO%N8}Y)yyf0TjQ7D9QjF>O?Q2ePoPirmP=~?torUSU+8D?9_2?5=A(Vy+<(mEyo3VmxL(bzv-s_1}2Yz_SybTi(jQt8RtwB zYXQ_6T>4-!{-K|q{tteJtyT1(>*9%Bp7yHA4(qHgdzVV zqnT`;u222`k4Z@I#RPT;_U(BZ_Wy&?(TSb^@91c6v;VK-sXuP>c`#(tU>Htd)*)|2 zyL~efwV8-uZaGHSDuw}^6%!euK<8d=lq3{Z)H~F8}^e`3A+t=6N;`(x_ zOCBLA@)_gN`P3+TDEC=F+4Bs5D93Y@^Ga;f6ovWw;WNOr)UpKs8$fO$!M;vlj>Jd$ zCp}@)`jjB-g~;^QN=lYp@5xLgBv|jFW%fx5Sm1ETzm|t}I&?XL1p*Mv68vd~zyu~y zj9!S|@3L$XYH{6wk^3eog`(DuTMcFO0PM z2R2q(Q|CpIrO48u zf~#Md!YZ8=AfydwAg(XYe}1*||GmC0LDBY@K^;>~r3n!CymxVW3*#aFd_hOzf{%_v zz7jTg6%!<&@=oOV4ks{Hozv@b-5RTc$KU}0%EWO3U;@k*UjP_Cz(=A(wvn*OXF@QW zDoxbPL69J@B7k$zt(SjM;)6wJE)!w3q*XUDyev zN&js>hMQdp3X7BX@YW}iMnxA@$-2N!j0D$ zT{knla&x1;M+L-50D_k&Mn#z{!6R+ultg&yN#o}j23FQG@n}f1P}Tj92F#AB7AyoR zQSEY@%wYbAlgPH<{0-vbb(+7%IiZ^(nN3+5+RNz_MHtqTo2!f{RGi#Vz^zH{*0eBO zlKQHyk&0cg7q*Yp1+9sk7BWdC<;=YQQhIXT(*|F7lY`X7`NObV2Qs3)Jl ztb}N6976X~tLQOR8Ew@*0N9Ej4F~aU*vbi@0`;EvyshFfGdN;44+9X)!y*6y+rnOA z$`O+>2|&QChXN2xQc_&OVnSbi{*^I?00e}otOF2)EOW>dW&sEyG-ugLgDg+~#n_b1 zQ!CjdMNJ@Bm(*0BHaat;6+7}j(Uy%wy-$Ljx0S2+eH#C%y-9F}Yi~*sCd{{ul5~2j zh#$^KkxrYkB~`SlwN$^kR8dm{w#cU9*-$iyiyJ#euz);}k@rCFEjjcUHgbWks`FM| zNdP701@%^V_1N5FNBPnk8(Oz3Hhe(-fs;s|bbJ+GCom(ElrCb`dci+kP|>Ty?6Z5Q zHM`ghtmt-^StwesL9^RTw3j|Ng}g>F3X3$i(l#@GSY5g{adRb)GeAg^e5Bi(OASx@ z<_Z-4Shu%qTlw#T;J2@@S91S%aNy+sADx_>Y~;UnJWRY3G9T*S5YQ+5eRG?TX*x@a zcNs;B@N(=8NcpR8Vm7#9^@&x1{{qznMUXha4uHQV%zLlHA z^SMVvuwb>>?HFn-XagGK&mh?K+uzWx`vN-nP-BG|c9j1W++X42ZndUt_XqId-OG2U z;5?4g2aqQ5BOnE8^M&^!9^^bD}k+xhxc4_hGyEX@kr z4O(Bg-r=)${H*9cW?CCJfK3`cf{?kWRd4NCF{r;OQnF}P4DZon!vawV(V{pp@FML6 zPh~;CNKau2M`ndaJAY>+5Z+={j z{CB)(-~WtGPB#7@Yk5rhuXjV>zn1*BgxT<)NB+Bh^JA6#C#ToSsr%kx|>qf2NkYn;h6^|Fdt$f89SB?Qi72bv%q~&W*wC=?a(wC341m zt6N|bjV>3#H62*J{S$Go);Rm+3lXTnGL4^rFn;3IYwezRkq_1_v^f=+SeF!Ug&^g- zm}1{_$w~mekdbgluGGahO&tM?vAYr%C&!kvSsJaKQ6YWLeAh|OhRnKqH5WrQi!V*H;OK=qaXYj5w^KK~ya zpKS6!ujT2$0atDY+J`A-L`&c_>1c~-RqJAmX)^-XIM4*%pH-#_xBHcX0gF2lH}5w- zlUup#a3J1Y=UdCUo5%k&@c(k3{~$|r*8w;1|D*kpo&Ra?~xM^q-UsLA6rD{w3mN{De$o|5I$=(DX*^i}5SSk@a5aNoK>?Jw4x3w!|X(W8C} z2~jX`{Zd)33iPS$cu?dsDl+i53PWz>%Is~OGsQe)Cln?ryhJFwNV7++s*%rvA3~TN zmz^p^D^LdVqp$-qNpo?k+EO-=x|?e+hSl@XIWAQL=4*!qv+w~HgEtS0p+der@F^-_ z#C#c=QEr|a7X5i570Ut;6H4wEAe^A^p3aLbjrdD3Qf`(L);SBzj^!~-&!%3BUr7_N zeUBcA57uB{K(l9#mN`T(U}YSUy-iYohe4VfAI{_0r9nla7t1%;D_&=nxmH^Dq_J-l z%erAw-|QAB(Xa8pk&iz*ey*~t4TJ~oWb@qqY_(Du5nk^f3#u-szZFrYdE3n9;V@|x zG~=yjeO58&fu2fsD~7iy=6edQEq<1XgH>c^gF-cXiCXM@cdf&nHx@`Fj68s}IsW=o zn*e$uz+-<(T+uI>BxwQpJ&f#}{%$=z)LIM-oSeRD-&%K={UjL*Pg}8JeOl34tz)rh zQ^(1_cL=U3F>N;1pJ^Q3l~l!1YU+E1%U)q(R5k;iUQo-l*JGP2iMY+% z3r$Xz3y!i0dj5dP9j&h}#8RSCa$>@C(OF6ezKxNJccnV3%}RULv5Cj2(LEleb9%Kd z64EKeiF?MVK_@W2y1=SpKbg^)ctEVGDIuLvZ3RO$T5}(XLV{c07wD6MHUq|aI^`yn zr4J}UMS+t$Lirv_$SkL&6ZF7h3t|F71|b3u6O;g`*W?FRGi_xHN7LqcQ8gB}dt|k% zYK{A`&T`Kz?r5?I4Gjl>x`<&Eqx@i>%%;_4jmDhOH5z9yDiK$kJsUqdJ{o8}JFc~b zYy|c{>C-I#(}Utl<^TQTk)8kH2I-lWY4WsDwq8EFtES+;`t>64sFe2Es3UIm#BdVP zYGrhAJ{UaUHtVD6vO^Lry7||y&&ppaNyN}fBH>CyP3piNLmgMphAjgdJnO-*7U?!} z6sNK}I~pN6{!p=AxvW$Xo5B)CS<}pdPflq4c2aN9k*-Z-TF|_+hFojG7=+=VE;OsQ zTuM69$wIYGO54WQ@{W3?HwK4`9Dtf zHu2xr^YAS_O$vxbWN$j`J9OMJOPEN&ztUUKyg@Px0ySjg>2OrZJS12GZgk-RoykKvqGg8P;xBxS@#S0UrH|Z=X*hB_JnyTJx-9myW z0!-nx%RE3z+-ZXeE&!AUZj8eeDVU^j#Knpd60d8fGG!osNw6~-Rve*u4JuGyXixMax%dg>+Td5m`Y2JvQu2}P|YiIruN;~{Q;au5g_T5E4M(7 z?qD9_xMa)pm;hYlif+0-Up{3%h3)_NCD&c1^Y3}?s6C*yXejX!grG*I0eB$;Cy68 z$!I5IHp#&$U@yrm3>lw$af`-jj&|5vrW3?z@`C-Ma|1=svNXCD7uq>uj-TAT`4qfG zbCf>=?C=LMoeBIj@V|ZA0%x7=w*`I$FSai+Hu6&4q$htT3}K9Sc*@cTaf6&w0OJfN z=#st^1qcdfIW8WBxAdu+H~B0%CvVf_eVP`h+=9&f_6tGzDHy4jAg-43|;`@7%XTJK(-U;O^=*H`b~U%q^0eR}=wx3{m}i56RwU<*gO)2sAf5M8M>8%N9juJ!+P<$q%&nVR4r_(7+oPLF{ zu-@zz(`X)8|M9k6?glU*{=-t5TMV17sRqF=NIP&i3J za7}S$`C;t6dc=PE4d6c;^Ps4%0kGA%m~6^(4|8VvSf^h-DL-#!M6_ znV(LkQZSP;Ua33hxx`8VP}?M27&F52^8|slscFW8Y0UCPI|XzQXEo)#Tav1Nm#4GL zka{d;GR)FwI3_=_a&<`Fc}p10oYj@A$FmKYa*8>@b6fJ#fSiF~=e-|FMce$oSWQu5 zTecD4f~C`T!!*@b02R6D0l%DFU%y&QfvguY=gJc#n@IsrNAr{Loj|Ldl?3LF=7m-^V$-3m}a zhoOF_SVqG@)8j?gfiC&c;=?>UeSX(G(j~U_DRaJl)uUTP5nvpI<)tdp^lvT^__I4B z`7WV*Kr$wWpQHTu2b{n#20IXN((L@iaO5jpOsyPz0rV`uCLisL-HQP1WWKjm)3Br` zpM)F<4;{5zaBqJ&&T3)ojM?9e7GJ-fIvr`XMr`C*8`Zc8mAP*|m2b!Wo9k8pv#t9}96jkr_wdaqPTA|^;(p$qx=3nV;8^;t)t+X`&Uzh>H|G;T%-Lz9^ zvd2pt3d-|Gq->-9Y~`d@adCT`l6QUN#Ue~;b#|0lcynu0_PU5C{puBx< z!MU6+b-Vm7S)GZ2!;?S|8UfrCj`|3EpgeFK!#jWpkB-Ie!*K#GE_Z)PZ~;CbQV=>K z4+w-X0W6>5KXY7kxesc)kJ3v`zYmlNaHu*e}A<9mCOXkivC?`I9}wg|)Php6P3K}q}DG>rp)d3oLL83&2X zS$)msc|wWq7FMkk`D2!1VfL_H)mB-moB+c9;{n|=HMWZ6pf`ZWz@CCSFju#M$3Wh@ zYmn<|>5`Et80p`oTZRt23)uf0d7&mQO{;z6mzlC5%8NHJfp;jc{!%e1N|94YoWyZG z@lwx=>sG-X&9}FQMcjdhQf`#ytoo4Wy5p`6>~{!bbb<1M|D-*lG8-(=B_T5;Y6*eo zqWtQx`5rpjERG~;DUm!Nzz()WO3z_HNKKZU$>Ma?ZgWB`xaQSciY%hB_9Bb5k&D(U zB?Z|T4|Z0_mbPL`DY!`3u9Ptk8xfL!c-aku;IRg>dwu4XTyXVD`do>#nG=dY4|s9y zble8fb@bD`Xd$+OfXqWq$H2kH4ah0Jd%INGDUJ&*#}^H{djVd3E>NDpnDr`35%&}n zk=g;T;F{kU?aSHVZ_OrMt%F|I=~_-$#y33EN*>7TP-Or3%*7}TJ%Ig0@RjVo2bm*i zaHcC8zUrW|<*w-97r+AMd;uiQi}N^}z$&?LwR2~Y+2ffu9cU=`6DrDY8x8Xr^92;? zb&=!bZeWV`<~S%*Llc7B&7`F*Qx=Jh%_A~uyI%z$t3SSALCzj(Z=wE~gg&_>=Fz!+ zPGR&TjA0U@Jn&70@{qy^<+7(?tbw?^@~tHEDCw`~UuD`^O!Fcs$E|m%&o5xS6S{6g zSLiS*sS$S+0Tm;x52jnDN*1+Gtva2|Zos}t&=rPk!AI);6nk^l4Pj`2plT+r7tVqbop|fOJ_cvTj=%PDMB6&7z0q*4s1w4|h|#o{d=skkf{;Im%+lr9;sT zTjH*w$eH(TYlxLHzGw0no!5_W4SlaKT7hWqJ#XlEU0`_qdP}<^<4WhCR6hqoQyeIr zF)sI90+Fn(ElPL-{+=hxoKU$t4 z_BxU01@4Ke3&C0`?j_6Wi$C>+t|?>nXsmyjxzKd4TdR}CAxFuWIAOtr%=A_sEv%)3 z^^`V67&l(5=_m8th_}uHudos0iI+YKnEyX}Z@L`GjU)`t?|ceuHf3GZl3BdDR-b8X zSu9FoPZh}}snTfl$<)XQBoks}AR35FR<@+Id5tyuzL)DKS;G|pAP`qxtRrAEtzsnL za9n=D;r@$A!Sodyd?m9Nany$h==@@8nq-zF`$0^t9A#Q!wVdr6i7{w#KassbE6Lwf z4AWaaiCM+I?C}| z%+~4uySKl8vggwO$m>M1Ji>0_0ByHZL2)#d1~hD*g-^8fGeAMd;Q zpZ2@_Pn#))kf28NZ0#T`ylYxM13}{IP&pPDq@BZJ);nfi)n~oQYC6=?egH07b8xb{ zBd&{|%RHNMs%G^l)sI1Qd3Q?*V&=o=3Pi2W9DGeDLD{0OCvjU1rkH`n#NitwpHNd_ zU1s-}?JcsO!IUX&B*uRL;bK|JAWcXe;s5AM6Z#(~4{MhH3-+IrqmKS>q%@)bd;_$l z|9sE*=s*8~nX$|Sa1Z(C-%$hl&zp0yDghVhKgXjf{a0PCiveg%?cORm0B>S(0ApI8 zfdkl>cbwoeC=KYpe%`b&3#hgKA3E_r5B3gEy8GXalq&kK>82()`uSHoR#12y*WiAj z6=B8s1G=&YYu-yr4%IN*HZb$+q14~`E}3ezHe$5Gq}b4(Wc5a^pngE`LyDtffD@Hq zRlzo&C=!8FpD0d+$z498fYgj=HzAbQ zhcVc9x9JYRsr34VF~E%3k?>glCL_-f1VZv8k3qyYw0QN-@h}>SOBWNFDipGIMKARd zZte2X7ShLJY_ja5^fK=-X-{=1C4kr-uLffGJHO)$$QJdoigRAWs)$@D@#lgiE~$S`HrY48=e{Y?KUU z(3HcJJY#I`f0R9I6czHnTGMa+k}rptze!t#;vtUU^J^WM2fo#+TICQA=_>UNwSEG+ zNH(0sL0FLjk`V8`$$GR8-q~}i9@ZLtyn07hK916W|5Gwu^yXidI{ojUsQ>L9b@3lJ zQkv+0Vgt0){^X|d^W#x=w#p zw?VRzc^za;^7GvXY2>>Lp--&fYqf+@&l~$%}IU8W@>Xz#7IW;bKc|Iwns{#Gj;qDh^ z0Co1iy@L~%{vRK9`M)<(RvrI6+bli~pkYdTTb4$_BllZ1D<%I7PtFnYX0G_Je`%}% z4jhGgrUD_u;9`+GgiGi$%`DJuKrlwZqmVzcPg&4L z^Z~Qfe9QgvYw#lip?tLd1Y?ntTTo6C1C_Lv?I^K72Pl*bD4$agxuAm>iqpa)@vXrv z;?x%nF4?8R)8Psvx!^dl2BB87S(zb#tgsz9 z?v#kjTO3c3seTxWTZVE$b2AuE7EIt;_af3N^EHbog5g{*90~{ETu21boX=(U8IU-r z97%0V+$;mi%O8>urZUo=%oy_yCQdpKPx_ydd@yB2<%!YDk_NkahIgfQ4S+S88gLG9 z6Wk0@hDn@H&U^X6(!5`OEs|6WTs$PaU2v~W^wwUm&qe`&>Nx|T|5j#xWAQA2?t%aa z@`OAhv?6Z}hh&C~^z~UI;VvM~+z^NXBzCv)vy=2GA~fp zX3P8fynBLNQ!4mBOG$DTMQe}$ws(5$zW+Ko?%w}yrZh0=%56|;%C+cHA32SaA*Xkp zNd9$`fFEK)(Pa%*{l+N=bel$Wuj2emiDhZ&zc&Bl!TzE9{(tZAq_h8Rq_mL#<$iET zflmRD6+N*IUw#d~Bf`!POzEFV<9m#xd@vLe3LfD+r(h;`%LY0$Oj*w`3~`D{45RC; z3+px`dyH9($)t>PQYNJcD4KnE(*c#+XmVQN>CGPhH^LxvmL$Bj{Zl`P z$TW;$if3pyd8o_EVmzQ~Gavp0VwF>Zv;1ER&Pqwrvc?mmvJ%zJNHJZEe{!rmmxVSi zniX5C*w)NsQ?wJ7&2l;Zg(>%0V*Ovlb}T|HtZw5~$WsRHQZ&-(SX-%y_9K!u+tz); z(O}!^CJS#{f1k}KETLqA(lMH{OslKe!o~4h5FJEDC=JFayiT+#y-KTw{D+bDr^KT1 z1f{)aM5b|AV#cr$Ek@l_pud&IplB}IeMll4;53>8$R1Hxyr4CYvCB(F5J%VX1*J}M zmm0GP`vr_4Q|v6)u!Vz^GbdHYQBIRHY<0mR1~1Y`u`!uOq0A=rx4Y{rM;-TGNn~3v zvz|D;$lSw!V~2sNXbd4OaKi7zp*DLY`g{s`=f9a z$c#R=%_qzLD^YOquP`x*q{IdWaj6kwYc!1_VYbNZEL(cZ7xAvLVPxAU10+&B=q=)o zd6DZLi$t^*`C8>T&Iryx{nOM-Ov9-gncLWk&V_F_)ioKng(*oyqhkZzq$K&O+-V$K zM9AYb0sYy2AM~?@&zoh|U_Ka@zyKLBS7-U+e>LkHi0akbHj>Zi&g? z@}npZhmegeLWxs`q7h&zp)!3p|5X{n3=^F#JI^pYuOD=dkDSNCcyoK39;<(hCTY#O zF0fp2ORImjr=fjU+##u1qvtve$S%$I61n;?%c zjpGn~*a2I?q>_mA`TuPXaEc}#DSIoJ_zt>UTF?E9a}6kXu?&ICJ1TNo`-tk!st;$` z@$|O#9?X)X+2ll8@@?sv%;&GLLgmNyTX6=$DVKk_oMSA#LkF3k4wjt6Y`pKhr_PsG zul(RGdA17YE10x9SyiX2g{oX@ly%oG+cA~`Bqnf2?{J(lNrxblg1u`GQ<8d0xSVeG ztz;{ICz+O&btEH*OPiY%%-o(7;@&)A-7VWETfFxF8Hx}kFMl1v;BlJVrG&x<^p*s| zZ~A@aLEZF5pyvMXaR0!4|95!W+5b0F1buif)*HO`EjP&5+j!M~&Ls)qy03T6tKRRw zSD20DmKw+%#bg(e>SB;P8>j6amha}7S->-TAC`Ij+@NM9K0G;SfIXFnYum^zA zPE__{qoWY?q!UD?w%mABEfna=nEK^W=o3n2I7HN9NYb5Dt}9Rr3$m3pbSOhl(tv)c z&W-5yA5avcIK?np8iO3v!Z-{HZyuLJM8I1dn>@kIN|1R(^BP>NyZ}Lf7<)&Y)UR7& zfAY^VC%?=Se2ZXs9Y^!N{HHKEm88MR5)b?PGT^(4oh_v{n1-KoxW6cyDv8BAWiGnz zfZ;R+4kh_=gY<1VuNr^bERHMXF&+-_Fe!EhQpqI9(gDWG1w zI??abES2(~W(9XBplI1iSU!|`4h|8FCuiFl*8!GMW-lKB6fqwAT0;gpRuTKGa(7x=E_-D-*~E);#|fg3?x*;K73*>8o6Wv zpPZOga{4Q;UEEy)pIEk2lr%4(^eZ~uR@aR`!AZ33-iKrsYjY+o>xO>(`~L3j4w&Yb zdilEHbPOO+09>oCKU9eR!hv~OmEl$XeA(B>qIJ3F(f&PrBH?q$}pQlyon9W(38 zTSC1PBQg#9YFxVWZPQ~Ve`Qdd6*Vv3qYy-p6*hi-Km|RQE)Ir6fT7T;C(zlO2ccZ@ zBhK}@vd0R3-MH;S*_)six(w=|rrTfz*5$t`r&r2 zy7-@)DW?7JPA&IpO@4Y4J)4zJBd~yB&x`x|ZFw2SMfKfXD!44MH;KFM@Fs9^IKMRH>x@GZIZF z=q`o{8JBFN&nw_mwUC`KyE3f`grympafBdS;`5@0_>r| zV4n5jM=mJPE4r?mpQ06Gq3$J|g*sp1Bsc(9c?;GSll5JLEsV)p?!gwvrt~7Lzsv*5HMJHR2)wjw@rn%9KLEd52lN9*G{$PiLubA`||5^V1 z3&<^kX3u^Np;Sv83fIn{brD7vOin@4tgIiNGN5rLza|T zUg=|9QaS7L5AcsENm234mvlF!k*qtVQAsDf%EIt zGA7%JR}Kvt%NKnvgx|A>I^Ko}Ovkz^|Mx2oNwucI02o2%zW+R;ss}>TtOr6 z08!!^Ot2~E6z{=7^d^4V4SQ1aiG>4hRjrZhk$ zon${R)JKtm3!p3@Nmf_<(V8oCwEOu>HT|D0=lG#YHT~Z|IV|RXJv}+;=>H~4Bl=%* zq1DK{w@I>lKZ{M*O#8zC4Sm5MeDxqMNN@QC+tc7Gd#j+=F!6`LD!UxTx@5(Qx`Xe%B*E zUKPVrj9*oCecrvxp_fe~>`A{-KX!33xa4XT2Bc1vf~X@4iPLByyX8<8|G28nkj;l$ z0>>SFiwUrXSTh^B%~LFHyTKJUzj#8>7vPE!F;+em;tXVcwwMXOIO@w%X05o#9Mybm zX5$U5t(31DV6UDS2uoBU@m=E~BAkv91wT(|^a~&q{H!2VET5DW!kmT;NjhF;Elpp1 zBe|b7C?|qU*?9HpTgEc8Qqz?;0jz%IOJ<;a4AN$|>_7yR^^azW(`uR$nvYSm+R*td zlO3!PRNqUt9zsjG!D5z~5Md+OjKgHsnX2{4Qf=8LlLa`5Zo7^xT0(GKh#zUJaNAZ(Bi)T5FOvNix(*jivm@N_dJbLGi&(DY_vM4hjj< z6Zy4jl0`iZL_omSYF~=94Smr67UIa4ebHVR)td!v5sBLx(neOv##jxcwP~*>L0E4s-`WOG0;u(xkoHkz^3+5uLV~lGfYvUli=;D|!mWBPvG+b>P5&**S zOnK*eSFgbgDI?e~Ky>7pBk{)m=VDhP5t-6IRwK(fV>aw_%}4C)*Q$nPJ6Tlq?Bpvn z6Wru-bcIle!sh$fg1E>&_RjwLx3h!yYG@6^A-WiiP>>b^@FVfLp4ONkjP)Tgr~mvv z*YO)Vzn#YQOQgCqK`ydDM)S?EY7<>Gh(*Xu_T*3-DEld%ATmwwP(b34`6keloL`UD zZoI%mib%hbrij|7y@ z0ghAjfaofeQfFYz=ITY1f)_YW%jai*tyAzIq7_h?8GCPmX=t#AD@OlNH~Pc9wGKZ* zjLESdZeZ}9$@sl{?z4(gegB`W(o!B^b?<+Vj`rRA|AUj$?*4xhrOExjb?I+hEb8AI zcz^9W&aM92y9`W~7B4DUpGuuYi|$6{TBxXEd{`K$NAMRli{BUS!W2hE730IgKy6Aa z+t}X(=s~HYbLrFX+Gix?VS7rO)ZKe-gFiq@@dW$s&I?-CTO?fuW;!G7WW??D&;eKSQxUL*0} z$Pn;lUM9we-Zukd+cXZ!=7#ua8q~uM1)?J#Iia6$ECvZigic_(0~kVJoTdqT_3|Z( z2T%ABCn&^lKnjrfiE0BStf263WXQh9EG2aQ7Ef?0F^s2^A)fZhOq{@MGD z4DU0V4ggC~kc(0c2>dd{{STl-ucH;lG3d%-rAGb>A)1hwp>!Duu+IK-xPR)(e<%Ch z`@fA8A?Upkt9*yj)k%QX#@Vn8NYM;4OyVk$h(w`~+He5xP-;j*BAhjs+yEs}G=#yU z6ox2F(ZgJV$p)8w=dGp;Niaedl=%v|6qJyVNyRosPk_XT4cdq!&P=XaAkhPGB@+GJ zV5PStig5fOVYr(cS@|ltj8DexzSFbJg}%9ZQJAA>3Pah|y$@#xQ#I;hMwCPXahaX}%gE)f2h{JEz=59(KP=9+{*#phrU)k3?tx?bqEbY(5r7(dE z?8>0@=A|84a+C%_;zK1$~;LP`P$_Yp&xUeHesHx`w_HDz4 zFABM?ZU^(up?u?r80vG`y}}C2Cq~zMMdL}n<2awo>aJ2oVx4r2NOF=AkdMuZ|Tf%H+{PGBak zC#1pGzDhWecR!OPLNa`hV(AQ16nd{#qIrI~B6zvJ{a|AF!NrA zq6qS)9FoY;ltP-`;|T)k7^WFI6F3+Cp`sf-;iCSWrDy`=LU0&}PH@brB2NDYn89d@ zz+}pVS8YNV7VVXf=>S}gMAjpDCA5>@D=`qG8KOC~5QI~Sqx4)6*GFlj26{G15&c#z z(kpO(|JL^di1;RwQxV}264z8@1fV!4Vz^_-^2J6UP%stq^+G+UK9~Cj0YbsIVsmYa zF^C;E!YB$k>I|hjWyk?IlFp?_bgKGdI{>G=DT?p|=3Gg+<4#jDfhi6k--RLKeTM_^ z&Yn13QlawtO-kO?XbS3v=IGC?7RDT?N5zHpjN)d1XE z9l$6V!`%qYP$a}7%m9g_xgHW2&P6arM44P-6brV`QMtc=YcI|S!E{QIO(Ncr5WUh% zul^PnEAn8C$rHFCp-EE!7Rf0Q~;K#S_u71I`H33I>)dvMY0p2}`d~%C}~Nc`|A*Iz=4B&E=bho!wl%S*D}Q zoAZVpUEZ88+7TN=if$<3TKbh0D81$o`r0jugj6QfDSC_JN7ev?Vxxu691`lf;XYS$ z;LQ5#KW*Cok1l$+w@n{Ino*U~rz%a5N+>22r}L$#jzFvcX?f&g5@s(fmL*Omteh}a z(4}^$rX(Q|d6?fN6v6PE#4M!{$LV65*}%IL@EQieY0z1OA*+6d(*$h;)S3{Dm)Wcu zz@l%xI1*v?o32XhZ;OqkY<`%;-%%K#8$>Y)br^v~$6pC``GcF1NXOY)e*Z_s*z(ol z1Vh18P$DT@ziPCaPNOBzc5&l-?FWWv6K0szU5*`LJD_etLUFytwGD`4M49q9SAR9} ziRRd4E$$Nd6r*Kma-(N*CBwimPS35O*k76s$7;2qAvHNYD&Ow1Cr5$N+rMyTz9ef? zjs1tEFh!$jw3G*U-TS}2qk{j}{%QCAZzDw*d+yXKuhawF**agM2beJhn{WXu%=pLS zE8aPRt*t4uLet%!Be z&tKd3RYZ*bwkr_W(NK$BWzehBDCjL~C2VnlH3)-h#yHJ;F5*=hOxW|MCk<8>;=qI= zM&uhwOyXS;S`_@O8~)Pw@M!U;aekEd{Gma^z~1LIM+=k%<4E#55-Ru zCNZS*!nEmN+l5XmW~t-YUrcGi|FZ|iZ3TdO{(s`~|HGrhj{k3>xbOd0EdY2n&F3xw zc!&JaiU9dz{k4k#`7Y~ZfMzm)f5ti?pew5?&H4Xgw*P-?!2b^p_Z=^v5-wM|LLdz<9y;WJK!ql%+%_plhysc=wHzB*ifC9P$ z@(zj_&1?|$>Hp9_3IocAQn;yiP5S1Z$t#aFL0W`7!lucP@1n9~NN^}0NKejgl)banLgCm#!@9lN>{~IZSz5l3| z7QBWG2dfqV5{f5~&P`UhB?wBJm>fkIrUTSvj8iP4m1)l=!>eg)4B3rr&*`_DS%?38 zA)eZY_RkvlcLb0bqCg{K!lp2OKwv9|6SM=ivKpMJtDHF5H-kHHj7K><%v7|o40O(& zvKi1d9EDG$t~Z%^ZZqy%%%g8yDfflW*Ux;<>a&(-XoyVtveVl9!r92p1jF;BpxirL zo;h4zb!OwxAWgElutv_Ktj5c)!C4$y%b>Pdz6_p)&~@y=zx-N6`r}p8F``I@oTCVa za{x2A?iRAUF!rel+*H+#IlYdfxtPKXs0tsaI_npf$C;zz>F~``bM;+K!!7#96jKCX zDzI~hz9S{0xx3{}naNl5yjRu$)ng9W#JY)VFji zzhodQ;~1xXFlbyKCP_5U8hojTbq%Hb{PP)K4F#w<|0f59{O>1w-TR--6mkCF5*TuE zB?3$adteQZygZe*B>o!;QV>j8N+u#H^9V-N$G<*oJ92x5EN1a^dY72 zK8gBP$c8f_SgT&FmJND3M>NGF9KaN{>W2j|LPp~TUCBs%?RrtM0Bd1iPT&IqH`6Fm z-L#vvLh!)`gAotHfr`)At~)#0WP{#rU!R?~>VXbn&;ahmhZNBmM&L3|5goyx-6lY) zdDgl?ms)dZ)sfaKnlH>k3(^2QO9_P!GB9SlE@Z=|=kn%#y9G~XP1ak6;kk=p!p5ZC zQB)CpRMXadwVyD%!>03w;|Gdb_N3Z0fc_m!(G#45vztqBOQtPpCgm-fbn`u-_@A6{ zMj}q|*)%1B-qLpC8Yi$pXDWQDc!@c01wS@hHsNX{e1jRCie%=mr{P0OZs2L(pw}lf z924@`j^4;NP0lGL6O@k8l!13Br8sD}L=)MjA*0@X2V?kPbM1Eh1#LL?%R7{UgiyW@ zGwEd~Gqd9Vyb-@KVL>{(x%uJtZJWj9Z5s^yJ&F(|;Jrmo-jYDrq?=O{0mUIIk%H13 zi`OuCoF;dYmM@CLPykU3p*;?F>V0zCZuPrnZ%>_mzp+xP|Kk{^D>4Aq=>LZ&$8P?w zIRAkjkxoG*12qciPCqhFeF8UA( zo7g}yt{o>2eHjJU+Ydz{W{Y(ZB0l*j4lrT^0cRj>G=x_5IDr(yaJYg#6{KdplK6qF zrdJ86QLjOSgU2zMGPHt@b6}17W+b93=#_&h>+cplV3r~Zt`puTp>2A}&ID172ULM` zdU=m19?dyuDlaQTpqog`U_ue&^2h>R&ID``KhWw^UTA`VglJbL8Urv4clp6L(6BE< zwQvi=ki=}j+sdYyH-PCa;6+e0HCpz4@v9vi-``x-2{UKok^Y%!W0f6L*NPG)U-9HL`L>(w3|YdumOkA2U}qM z!f>hlC-~V$?tk_V4iAg>Kb`!yky0nsDY2$jtkWWvZM%MpS+i?i)jUCzae^HOsBO~_ z$uueLS}~nnrCl>+q-)!3=u_C+0-1Sj4@*K>sLM>$i0WpMaT{SK|qqZ?KJGXEt*VO`UauooLAh+ zX2z*~rB+3|?taB~dDY#oSl?JSiM)-;9g@kv#ZNXOzjBBSrFJ}bH4jF=IX)cTn9x*0 z!*WBCSmhYk?jt15_hOSC83%b~OuyZs8bAg5jWH0sgUZ_5JUPg$-5x&eF>Soc&7NNfS z-m}=u&C_Gu42W%^y2D?^M(Mk+xx8D;kU^e%a~T7z-(KfA z=hMq3K{i`G;qPUw-*Q{*{`$@JD~(jfKA4zdy+I}<#wp>9YapGe|DP$M7%`hC7uo!` zLUdC1Qi6*qCsapZ42L(oLQzumh*;VY)hA!QFm#3~<1^!?BPu*_*L^!uR$pH&^*R3? zo*acJsF7(dFqd5bijm+Y^14WhGf$AqGvQE91D_NW4)o(Ral!kDP$IU3zTgV8%PjyY zna0KEn1sqxWwYq*Y(%>@t+*UzkI@JPs*b`%E{!}0JN#hfTa-EL1BS1X+4e2wf_LaKhAk?Msdgq|Ff9Y+IG;mM^TY0R<@ zBaEWZ9ejywne7;BT0GSJ&1-(#LKLSMMogWE9q@#s2*8LD^%ejG6oul#Mjm$YS33e9 z4n;H7lcIEfE-x)4QYo*?itD*~T1k|K3j1FsUN36|tn>dl-gEN*?4Rx(clN)H6v-Yl z4dyO^Pki|oefaNrUt+xVZ(uac+vSgR*Je1(hHbpp&p$qs1yT3k%8Z!VKq_sC+2qeBoFkb+dwa>zE`RqoZDp4+)GzU8i9(nO9cHfp^X zl?!1nMLs}dH7pKo%+oiP80N9sHVBunX2Ze_q9Z~lAXj`OX9YF|Vqgqse2-1w2Wg9q zQ2daN`F1-vK5W5^4Qk*~wu)xxzU-*ayD7xODDNiYl5I7*CeZn$bJ@5BaPLMeE{A2e zuRY3bP5JHZ@fMxo97pI}LK4db;{|lKoS!VDuvG|MpT}Kwx%^jnPq(lfSR?-(92^`t z@t^jNkGl8|8!1waF1);4nIPzSmDx%l^t3O^b6B8k2yx7Mb*A59A=$tdr{8BJ}vX$ z58^6v=31!Kgl*g7Dw9MSY>l=;g?p9jst2IC2e z(>MIsVr%?ucOFF ziOGO;RbU&ayKDBRgY0T=0NJ>``0LABkp`!--*|7$;B#S9u+6|Bbh^ zWj34qWxWin)&-khF68BS_01-(4`Zo0&j1Db*J3Fpyi8gXOOyB0%qk^?LD|%MHMO#v zsjh6Il+%CbDbEsOVBP)S$^Nlx|Jgt7;(u?XNI!)_z%pU~S%LYd5X-EU@u$#w{da=hw7l}If=jV2dSRwz(H_j_~0$TI_bN}$P@c#4oq_h8Rq^S5$VyRbl z>6gW@Y$xsMR;!otOuv2cmXO5J9PDSwDbNQI0IE@d4t*|4)7tpuN;So%M5#WlN0O|N zA!WaA{SvuREs9%P$%*P$k9?RtQOJZuky)p|4PIyr2HM_JodHenPQyN|r|##kvP`O~ zn*q4zn^itk#tejr;fGi{d_NKTC|6$ixN9J~W#4s`TJ(`t`Q54Pu$|y58x=)}%NVDc zk@-wdpS&Mk$=0jfe64)wgy%z|W6PO>j0y`P0Odd^VkDX&AxwxwIYqB|%O@|VUiHp* z=7Dk1-d0&~OhtXmYsZC3&Gnw8-r|+|OUT+ME9+;1$ig!v(`ua~nqD$CMbynZXB>O;RO2{B4;1=yitFT9 zCG|x#WgU{aNhQyPND1;rS}?Pg`?9ApA-N6F1*I>P!w)-PD~*`uh2}WYhHYQs9dWgsnMg#moMCLqK5jowK=2dkri2R&JEbs0Yk$FuB7DEK4Or|)wr&Dxw zb_edx&)#12y(kqDvSkav*C`VS%8$33_+s#Y(niJ!^)n9pp6T1x@8AE%NWAUETp;L) z8X{oqrV-oyDlEPPqk4YU6^sjOQhTk{Q_Ze8z`HL zUJ&c&k})jHWi)dBsb2weG3U6zUBHWcBlO#%P}qA&S3?)e0l;SIo+naE=OtZhxMF z>Z7#Kwk;kjqnA~jEi13X(g!RKTSy+ozdLV)%2ICsRoOt+ZvWjo*gJCL|DPOp?|(N_ z3i1Cm^{Vv#Y8V1AODI$B0H&&-hW=lwx@kt$pIo0Wy?;ymzSPf#@0SV4_5X5n4FJb( zBQy&Oq~++f4PL}LeqNoCP2-(qE8f~JX4*EiWP2d%au&;$((ccbI2`@Moe6Oz*-uEQ zVwx1+vQ}{uv)z_E6eWF?^{MQ53-#-^_4Zvbzsb-pXJIJQfd`Nk46}YM*}*?g<#aoZ zin@2@gk?>sNU&2t+%;);%<{`E<@{eg__+}Y)s~V1>ioYC4_y9#dU|})@&8Sfg8#R* z?5ptscT)3}3jTID$I!J)AWxexz! z$p=AL@HuIGqx#HBU z&;`WHb3QlU?|-Y2|7Z$V5dEQ6{yRE3I(F^4U^(yrbd{1q1nxJGUW!#V|nHT~m zo;yHsO6SGNk>f9O)95FZq$D6wKO5NqCdrNZD!no6-@YfzhCrxOgU=x7Comm5-(fm7 zTTZFd?GH5i5vOC`{wxly>fR|JF-z$*Nd3<|y|Q{HZl-~p87XwSqGrC>Dm;abS?2T2 zHRTiYduSfBH_kJ<8tHQJK&2b=J+AGjaj?>Cn%jVH?l+SyVu6f#Q=BxH>l!$xG>-`C zOoELR{!h7!Jegp&rVL$?5MAE*{C+LE>zrcH--=0ye#MFFFzUdqamlsO!T)(vLvqB= zraa%zy6PLTvYN>%(>s7`6&>Kk5-L~3*-F5@kUb92X?rRV@@)cb*_4d0?h=>l}q|l%Ku1zW4Lw*+RC-e2LLwSIx#4R>HH^c=>E@ zw!&nHdl+$A1*O0v5kErjJ{a@=pUc2wWCZ%+JiB{~|0?vV7ZGNutmJt-ARbfjjrTod zps;Zy6i+w|5x)n=59blY6Q8xtClc|o6m54^qEOXK?37UWfH*N5#AcTN;woEqwz7q9 zd_7VnZCTT5W$900iUZFlnMGJURw? ziKY`|S^x8Qw4N7+ikg;Gi)+Ezq?#TjE>s55eZ@$ zCL-%HAKD;bc<}gtu>mIj7zJKHdIR-Cif5&uiZfn+*R zH)$EcA&T4`DnA-~ljE`71RRWGl1i@Oz%+hY1h92=Ic10zhphIn{?W>nTdbyktnc0b zf>|u32{$AYh~q-t!k)^PSS5j$4f|l=?ZrP;YWCDWN2T(me-*8WN34!kTzz}D z46TSq?0INKJYuV&6+Tc4Otwsm?j<$N#^gH(`R_}N&;wZhnW#$C_Dx-96{3?}>#JyTlacEBIba+g%J3HYTa(zE~-|GZOJiZrr1p z)4XD@*s7jv$W%k$4$@tgsC??zqUfbe2H#GjNbUxp(F6Q%Ur!nhPs|fxe0JqD-Fb=B zR%;%%2j9wBV>LEnYry3W8!OZ6%%wCGyZ7f{SM9)Tkz6N>3LUAz9?Flsg@SJyDn)p! zwW-wS}evgcb6l;%~xC*&>_P#5qq6_NL9uxZXn zmeYew_+8|s&#aW+|Ir~_(FI_g|JUKZ>;HAKx8M1HZKTNfPp{9;SLOA^w@u3nK-pyV zK3>wZO~k#dR>1 z$WsD0Q=k$boY-D+$R*e*yQ6+cy!>t|2jE5?c%>~q!^rNb)ug-LG1)SBhUPL z#XRMGZc2Fa%d^OJvhP+Rot&vkIZjqtq4ZXg&%aV|lWjh~cl%`vP(Jzg^nY0o^*>QD zS8~6PPq$oJVod2L{GU!)v~9o^Zd?13X>wMyo_+YTa^G$f=93S>>v=l3HJW4K73#j}Rg^IR}&jp@@-ahJ;KYVp&$ki7ofy z^1nY2H?&@~J<$WyF?O$Ar5BGi0_nh`y~I@HNSrb`-jsk0$(qr8vNHWA?LwxHLK`(e zQu-CVx2+J;XoTml`q+kV3EvQAB8Kyl2WL(7n+HnRfq3m5A|;%{}D#|x4F}&F9Vm$e|Frtb=v<< zj@!t7R%+oCo~)r^0$GfGEQ^P|OzmAt4?iDfy8X%ZDv&TK7v6D-e;OkblhjvqWZY^tQY ztesk?z+9(g(gB-U@+6L$D7M3}ij*#epGg!x5`$+~tWqKW6Z#kt7%r~>)X4wGd&ftv z{C|4b$^RQEf-3%~mU>kWfArRAE9+;?p5w7kw%?mQ^2w^Vd)}j)Sqg>z_BSv<#C%7>R1wS&kT{ROzXPUBeqty>K}u*-TWGCOQx7*G;a!3PzzD#pNL>>D zH3cJxBi?O{Bajdrr}$i0DRLgLn_ zg`(Ly5&Ih%wnOPR-e670oKq6FMkt^pUKXiNGwaH~Rq1~LqUr7g#_)kFgTXR+AZq=8 zT>bB0|Mcjv)BiS6y!jtipaLco6N=OMA`U-=IOOZS_u<`{>R8~Udf2>1#xZE4jq&vZ z@8nr+oa-Sdrg;Fh`k5hNRw`T^_~&;C(|n%G=lJ<=W@KD5Xh!dsL1pjN@#ad1(mQql z41b$4f0#TxvLu>vc#RZZqxmjoY>KEH-Iu5KKFd49(!JdrfuK4o$O;3deO^(GEq=GO z+mHQMo%~)Z|IJW@D0%to5C)IaL_K?qNFdgYOZUiPl> z>O8>3P8xVSY3mAJ32ObKqU=~b$$m?$%0&TjRudSAV7rnUfNUQS3UJC$G}-|| zX2mfGAVVTRudtYpD4BpKoQ`p<8yEIYf+$Q0m4qWiAHbGA;Mq@o*|wk&<;d}kqpJ_{ z&wuEovQ=9q6XUXWZG-}2Bb4ocra8xq{*9r19C9}(=Ubne@BVUPd+8!KlBAo_(+vyO zlJF}bpPyDPU589u)+dzAaERy*r$geRN`26=xhF6U#$0d3yloT#_J|WHo_mH?@uEUX z8XEipnMXiBp=g9ZaN5cucR?ET?U%gUKI>SM&QdLjeabIlzpPTL|1o}?rqMEaVCwY0 z{lnuz{Fl?yPXF6Pk?HQ$8n0UA({LBl^77W}SM0JGu<}03Z_gI}PxZfm@^+`Eu1Z_W z#@9kaEAnY4?w_8=b}|1{s|9WhUVfbo@r{zLQvyaXVn_%K8A1{g8)Vh*`JToM3{e25 zjPpUlvT6WQ1g2~Xqq$HWvQ|Qc5DyaNOa~Db$wtO-hT{j5nMw`GX!=B^Q3xjRk!vJi z3@H~|QUYY>h=bDDwQ#DD-CSq$k#79aT3 zR49jGe1uP*v(4D>hNFy(ZdMiREH3RVF8M02&cw17wJjH|I!*1%F17lf9XaIfA{T)5 z_kV8u&%^zL&i`v8#S;N#T^E4SZ|!KbFSt~Q!h%d5YJ1hu>S zTk`I2w$R<5e|0{x%fB)qtkWq!ol?;MW`gOx{1wM|siY4^snP%T_X_#Hj!#ZH{cj^h z#(zWfLA@;oa{Yl$L4EF?|bBs%m*)9@|&!{S(l|aR5s)jQ_}7Qnc!5n27NV2_EVd!37`AWh9K7C zdWPr|#VK;Iv%0iEWlVPf`ttXFA!wS>+x7zP;$8X7N-6zUqQ)|QAG*}h|Kno(pW}lr z{?A5=m8FZ5{kfJ0MfeF7{6UD<0f|$HV=zY11RzSYuoH?AU?y+Oqd5p*48|}?Pz>NG zMHFzlgX0IyU4%joMzM@^uF(dLB?(Bm`&csus^~m%BlJbi5wVgn*uH#=}BdvFJ_egJwr6*bM@2NySIE` zf4jTB>YMO#qA#Nw#TnO531DOLr2iBO6lcN`wib8NL%R!uxOo9^~H^d=jsH9A9ldjkQoF~H>rF*#rr8(;q{$PMg@i} z+U46-*q2|VteGHJ(ddVbkQ}-9#-kInkpZyW*{ULt@qR_ zgIn@mO%B~yt4>GwtV<33577(CA43FSURo{4pA1(5XT^2e5p@7kQDs<75k;{S$W%JwpgHp zu6Rog{l^pdfNrKyBqO>k#t7=@|Nee4{#W<@XEUYNj$YgV?HPdsq?{vodaIZJlW7#m zE84bdfETZ|(|@Pec09msyfhzh0BT;~U$Tzuer~0X{>Kj#F}9onP;39$-*e^v!{d(r zZ=}@Uqh=dm0lF_6SJ3+$daY2e>b9owCJyVT?XtI)G+i}Xo|a2M84b6lzoXqAi|2I+U=)bc8+VcPdKsg_9dU4G`G4jA^X%kZI+p>>hw_mJz zsJN0%Y()JV1ClZjiIvL?L~JZBoy*Ka;?B9>S%B74>gYeA3mSclQbYd_4h|jpfB*F4 z^rWNzn<%yPUu}R=!ms~r{LE%SPU;8wUj~cVN+-#kS`5!1Uf$4hox;8mjjRe|*o>gPMEA1C^H$q3X~^Da!}Jf0^SBbjyT z#z3s*=?+7b(_Y!1&RXU1>enmZ&t|1>W4!GV3Z7?b-Mc0AE7)`2>Zm>DPFe*QHips9 z<|?JrvY6#wZfwXK88}zauqVM3HN4D7;Z@FbV2EO@H!~b=l zh^1tJTKk{N{}1+#_qz8V8!2`CKMM)8nD(cem#cnO2lbadS@pJxoQ=uawKyZVR2v;G zZ??1smj`oF`kS*B9sTV}J^h!m;9Bp04vq@>ANCGU4m$e3iBe1d^9|65`fJhoPPS{S za?~js+eKxK&4Mcx#M4wL3*=CCVe1rYi^!7cMs`F`jbLS57BwIfpoJ5t{jS=!P6 z#R34-%l|I@KRi0@^1p7Rw50z_1pt^;1pp}TXf3Q@V*vol0_-l%4OSNdpd@Ow<_%p8 zfX}}u`ac+>Xo4SNLec8`sG zIUP-4@CY9e8}$AnqkOSxA{~3!7)23yh{#X|Z^H4z4xlK4DV`yaz;tYUhjG~Z3y9H! zBr-2#gj^I#iu`|U59GUX5{s4`C6FKrA{?VZZ}8^s*SnNZ)cXrKmth#+pWlHHQ`Q?i z;Pj>VUx|KiF#IQdDgIY~7(cw^|D*q8v-o8WNCrXyBOD>t`+C5hlHS*YA$;t8JxC|~ z--P0a-q-(c?=Rpzq?k+@xO{WLdV_?L-%ybD1~^3UrL0cLZ@s~c1tdf-KLyID&i~uX z^NXvyi}mzTeg60Nj}H!<^DjaIcISTs<@J=|7%>L!$dn2X{Q$)bf&IaLuXh6}oS+m@ z*6Yb12z_N;Jl>BHxTjMjBC#=WBTvK*!0BHZAR>8)4D|L_8D)*);WQCE+yS z4R-)!AR_UD_a+taUvUaBIgw#E47~m{2@}sXz52023185mwS#O2mi@*or9#)D-NLKoXQ*hbjm;S@st44Pdy+5f6e>lsQgvz81x~D zaDe%M5=zE+h*K24Dgm|&UQgpN5^P4^D{|}z1tDfh1m`-ipS3H>W(23>7dYMqFed33 zQN4pw6o-5d$UyW4zNJ&EgD=7)ffU850s_bgj9`ExoI(-j5ys(5LQ9||luU@IX7>t) zbC8ZP4M75FiV*`iE&(yaBvOeoMlu?vnukHJcRm&h+8dZ6<6s}`9q;Y#?eFgGXEoG$ z)s+r+gGhvbe0}#ugX{Ia6+tFPgid6Ca7d;pfDvcrQYMg9#i*&!4JRm0Wq5x+Rd-~R zKJoq3OCkgrl93sM^c9HE1C0LflunTdf6NAiKJ=t1P`rEHiI}GyNh3MAm5B~QBq%DL zp&mcbjLWGZW|AQxA)QLf8Hl9)OvPrgI@1qG(v$mE}XoN5im|^wtq)tO4Bibag1k(GDx#jNh3^I3XuXj>|`To%rK@KKHJ&8VJSWx^ z{bP!$Bul+uN;%<<=DbfNRz<|GMJ%9rSUj;iVvv)mn0^|JIR%3~E@C4pR_Uh`h;csv<}eo1RJSQ6F!ZBoRie z#}Hr16h(8v1`rI!)!R{T3*%IX^EZQZ-fISeBEeol&PDYS40^qv^mGO!W(f|aWXhts zmLjad@S`dE$tI9f0X=`51bHWD0OZyL6a|RSWf3>pUX2R&k>)Q zfW(sgFk$i=5l$u4KJA%vKj-UXpAwjgwdETno|hjU9D8I64O*~6I86zc0Rqkud)dj9 z-I+wdZmY!rb?(G?U=#r%i1pNpGCw`$Ji-8#9dJQ4#FWE$u9$>~5j{7#9R(42Ab^Z= zk}k7~EAH+4d|Na78{OA3})jhbm zxP5nde}C}?y#5KC-Q2vrJU@H=_5!>;`*BCqQ+oRw@ZJVo!-TN-rQc?-GS>{aQW`$?d8Rr9dLPd{`QAAmsj6`7e8L! ze}DbMJ$QTh?(+VOx7jwKU4PqqcX50E{n^$1+3U-6v`-IZiIC zIVUp|3yjGqXPQG4ktZ&h`+n{9E@MHQaEPdJ{tW4-e5{&o8d&#=a-gvNi>i8mAxV&J-*L zz24CPToG}!q)K74EX7KcsQ}IgpMufXD9ZkOdvW&W-Nj%MuA`6I`~QG!&wlJX`H_50k8{h~lV%fTGmJm4C}>1TaG29MM!-fsq3dQK#y~2VsGWz-62wI)VXjfj{hS z-AX-3wi9V@|K98UJK(USAh7%I;O}-VVfmKe|6L^H5%mOpM;`)&LIzF_MZP!~q(V;> l8bLay74+E3;;+DksJU3 literal 0 HcmV?d00001 diff --git a/stable/gitea/17.2.0/charts/memcached-11.1.18.tgz b/stable/gitea/17.2.0/charts/memcached-11.1.18.tgz new file mode 100644 index 0000000000000000000000000000000000000000..c0ed775d2111ff4ed2a990dfd5e50e20f62d5fbf GIT binary patch literal 102342 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

oJW}D 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 literal 0 HcmV?d00001 diff --git a/stable/gitea/17.2.0/ix_values.yaml b/stable/gitea/17.2.0/ix_values.yaml new file mode 100644 index 0000000..735fe1b --- /dev/null +++ b/stable/gitea/17.2.0/ix_values.yaml @@ -0,0 +1,132 @@ +image: + repository: gitea/gitea + tag: 1.21.5-rootless@sha256:874a8d88bb65f90c33fcafe4efe2de17039de1347c00f284e6f2a883a7caa55f + pullPolicy: IfNotPresent +service: + main: + ports: + main: + port: 10037 + targetPort: 3000 + ssh: + enabled: true + ports: + ssh: + enabled: true + port: 2222 + targetPort: 2222 +persistence: + data: + enabled: true + mountPath: "/data" + targetSelectAll: true + varlib: + enabled: true + mountPath: "/var/lib/gitea" + type: emptyDir +# Configure commit/action signing prerequisites +signing: + enabled: true + gpgHome: /data/git/.gnupg +admin: + username: giteaadmin + password: r8sA8CPHD9!bt6d + email: "gitea@local.domain" +metrics: + main: + enabled: true + type: "servicemonitor" + endpoints: + - port: main + path: /metrics +ldap: + enabled: false + # name: + # securityProtocol: + # host: + # port: + # userSearchBase: + # userFilter: + # adminFilter: + # emailAttribute: + # bindDn: + # bindPassword: + # usernameAttribute: + # sshPublicKeyAttribute: +oauth: + enabled: false + # name: + # provider: + # key: + # secret: + # autoDiscoverUrl: + # useCustomUrls: + # customAuthUrl: + # customTokenUrl: + # customProfileUrl: + # customEmailUrl: +config: + APP_NAME: "Gitea: Git with a cup of tea" + RUN_MODE: dev + ALLOWED_HOST_LIST: "127.0.0.1" + nodeIP: 127.0.0.1 +customConfig: [] +# - name: test +# keys: +# - name: testkey +# value: testvalue + +# Enabled postgres +cnpg: + main: + enabled: true + user: gitea + database: gitea +# -- memcached dependency settings +memcached: + enabled: true +portal: + open: + enabled: true +securityContext: + container: + runAsUser: 1000 + runAsGroup: 1000 + fsGroup: 1000 +workload: + main: + podSpec: + initContainers: + 1-init-directories: + enabled: true + imageSelector: image + type: init + command: + - "/usr/sbin/init_directory_structure.sh" + securityContext: + runAsUser: 0 + runAsNonRoot: false + envFrom: + - configMapRef: + name: gitea-env + 2-configure-gitea: + enabled: true + imageSelector: image + type: init + command: + - "/usr/sbin/configure_gitea.sh" + envFrom: + - configMapRef: + name: gitea-env + containers: + main: + probes: + liveness: + type: tcp + readiness: + type: tcp + startup: + type: tcp + envFrom: + - configMapRef: + name: gitea-env diff --git a/stable/gitea/17.2.0/questions.yaml b/stable/gitea/17.2.0/questions.yaml new file mode 100644 index 0000000..0a12512 --- /dev/null +++ b/stable/gitea/17.2.0/questions.yaml @@ -0,0 +1,3486 @@ +groups: + - name: Container Image + description: Image to be used for container + - name: General Settings + description: General Deployment Settings + - name: Workload Settings + description: Workload Settings + - name: App Configuration + description: App Specific Config Options + - name: Networking and Services + description: Configure Network and Services for Container + - name: Storage and Persistence + description: Persist and Share Data that is Separate from the Container + - name: Ingress + description: Ingress Configuration + - name: Security and Permissions + description: Configure Security Context and Permissions + - name: Resources and Devices + description: "Specify Resources/Devices to be Allocated to Workload" + - name: Middlewares + description: Traefik Middlewares + - name: Metrics + description: Metrics + - name: Addons + description: Addon Configuration + - name: Backup Configuration + description: Configure Velero Backup Schedule + - name: Advanced + description: Advanced Configuration + - name: Postgresql + description: Postgresql + - name: Documentation + description: Documentation + +portals: + open: + protocols: + - "$kubernetes-resource_configmap_tcportal-open_protocol" + host: + - "$kubernetes-resource_configmap_tcportal-open_host" + ports: + - "$kubernetes-resource_configmap_tcportal-open_port" + +questions: + - variable: global + group: General Settings + label: "Global Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: stopAll + label: Stop All + description: "Stops All Running pods and hibernates cnpg" + schema: + type: boolean + default: false + + - variable: workload + group: "Workload Settings" + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "" + schema: + additional_attrs: true + type: dict + attrs: + + - variable: type + label: Type (Advanced) + schema: + type: string + default: Deployment + enum: + - value: Deployment + description: Deployment + - value: DaemonSet + description: DaemonSet + + - variable: replicas + label: Replicas (Advanced) + description: Set the number of Replicas + schema: + type: int + show_if: [["type", "!=", "DaemonSet"]] + default: 1 + + - variable: podSpec + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: containers + label: Containers + schema: + additional_attrs: true + type: dict + attrs: + + - variable: main + label: Main Container + schema: + additional_attrs: true + type: dict + attrs: + + - variable: envList + label: Extra Environment Variables + description: "Please be aware that some variables are set in the background, adding duplicates here might cause issues or prevent the app from starting..." + schema: + type: list + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: extraArgs + label: Extra Args + schema: + type: list + default: [] + items: + - variable: arg + label: Arg + schema: + type: string + + - variable: advanced + label: Show Advanced Settings + description: Advanced settings are not covered by TrueCharts Support + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: command + label: Command + schema: + type: list + default: [] + items: + - variable: param + label: Param + schema: + type: string + + - variable: 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: admin + group: "App Configuration" + label: "Admin Credentials" + schema: + additional_attrs: true + type: dict + attrs: + - variable: username + label: "username" + schema: + type: string + valid_chars: '^(?!^admin$).*$' + required: true + - variable: password + label: "password" + schema: + type: string + required: true + private: true + min_length: 8 + - variable: email + label: "email" + schema: + type: string + required: true + - variable: config + group: "App Configuration" + label: "Admin Configuration" + schema: + additional_attrs: true + type: dict + attrs: + - variable: APP_NAME + label: "APP_NAME" + schema: + type: string + default: "Gitea" + required: true + - variable: RUN_MODE + label: "RUN_MODE" + schema: + type: string + default: "prod" + enum: + - value: "prod" + description: "Production" + - value: "dev" + description: "Development" + - value: "test" + description: "Testing" + - variable: ALLOWED_HOST_LIST + label: "ALLOWED_HOST_LIST" + schema: + type: string + default: "127.0.0.1" + required: true + - variable: nodeIP + label: Node IP + description: Used to generate configuration, when installed without ingress + schema: + type: string + required: true + $ref: + - "definitions/nodeIP" + - variable: customConfig + group: "App Configuration" + label: "Custom Configuration parameters" + schema: + type: list + default: [] + items: + # Do not fix this typo, it will break + # current installations + - variable: catagoryItem + label: "Category" + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: "Config Category Name" + schema: + type: string + required: true + - variable: keys + label: "Configuration Parameters" + schema: + type: list + default: [] + items: + - variable: configItem + label: "parameter" + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: "Parameter Name" + schema: + type: string + required: true + - variable: value + label: "Parameter Value" + schema: + type: string + required: true + - 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: 10037 + required: true + - variable: ssh + label: "SSH Service" + description: "The SSH service" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Service + schema: + type: boolean + default: true + hidden: true + - variable: type + label: Service Type + description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: LoadBalancer + enum: + - value: LoadBalancer + description: LoadBalancer (Expose Ports) + - value: ClusterIP + description: ClusterIP (Do Not Expose Ports) + + - variable: loadBalancerIP + label: LoadBalancer IP + description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: ports + label: "Service's Port(s) Configuration" + schema: + additional_attrs: true + type: dict + attrs: + + - variable: ssh + label: "SSH 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: 2222 + 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: data + label: "App data 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: 1000 + - variable: runAsGroup + label: "runAsGroup" + description: "The groupID of the user running the application" + schema: + type: int + default: 1000 + # 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: 1000 + - 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: cnpg + group: Postgresql + label: "CloudNative-PG (CNPG)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "Main Postgresql Database" + schema: + additional_attrs: true + type: dict + attrs: + - variable: hibernate + label: Hibernate + description: "enable to safely hibernate and shutdown the postgresql cluster" + schema: + type: boolean + default: false + - variable: mode + label: Mode + description: 'Cluster mode of operation. Available modes: standalone - default mode. Creates new or updates an existing CNPG cluster. recovery - Same as standalone but creates a cluster from a backup, object store or via pg_basebackup replica - Creates a replica cluster from an existing CNPG cluster. # TODO.' + schema: + type: string + default: "standalone" + enum: + - value: standalone + description: standalone + - value: replica + description: replica + - value: recovery + description: recovery + - variable: cluster + label: "Cluster Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: instances + label: Instances + schema: + type: int + default: 1 + - variable: singleNode + label: singleNode + schema: + type: boolean + default: true + hidden: true + - variable: storage + label: "Storage" + schema: + additional_attrs: true + type: dict + attrs: + - variable: size + label: Size + schema: + type: string + default: "256Gi" + - variable: walStorage + label: "WAL Storage" + schema: + additional_attrs: true + type: dict + attrs: + - variable: size + label: Size + schema: + type: string + default: "256Gi" + - variable: monitoring + label: "Monitoring Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enablePodMonitor + label: "enablePodMonitor" + schema: + type: boolean + default: true + - variable: disableDefaultQueries + label: "disableDefaultQueries" + schema: + type: boolean + default: false + - variable: pooler + label: "Pooler Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: instances + label: Instances + schema: + type: int + default: 1 + - variable: createRO + label: "Create ReadOnly Instance" + schema: + type: boolean + default: false + - variable: recovery + label: "Recovery Settings (Experimental)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: "enabled" + schema: + type: boolean + default: false + - variable: endpointURL + label: "endpointURL" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: method + label: "method" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "object_store" + - variable: backupName + label: "backupName" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: provider + label: "provider" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "s3" + enum: + - value: s3 + description: S3 + - value: azure + description: Azure + - value: google + description: Google + - variable: s3 + label: "s3" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "s3"]] + attrs: + - variable: region + label: "region" + schema: + type: string + default: "" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: accessKey + label: "accessKey" + schema: + type: string + default: "" + - variable: secretKey + label: "secretKey" + schema: + type: string + default: "" + - variable: azure + label: "azure (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "azure"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: connectionString + label: "connectionString" + schema: + type: string + default: "" + - variable: storageAccount + label: "storageAccount" + schema: + type: string + default: "" + - variable: storageKey + label: "storageKey" + schema: + type: string + default: "" + - variable: storageSasToken + label: "storageSasToken" + schema: + type: string + default: "" + - variable: containerName + label: "containerName" + schema: + type: string + default: "" + - variable: serviceName + label: "serviceName" + schema: + type: string + default: "blob" + - variable: inheritFromAzureAD + label: "inheritFromAzureAD" + schema: + type: boolean + default: false + - variable: google + label: "google (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "google"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: gkeEnvironment + label: "gkeEnvironment" + schema: + type: string + default: "" + - variable: applicationCredentials + label: "applicationCredentials" + schema: + type: string + default: "" + - variable: backups + label: "Backup Settings (Experimental)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: "enabled" + schema: + type: boolean + default: false + - variable: endpointURL + label: "endpointURL" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: destinationPath + label: "destinationPath" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: retentionPolicy + label: "retentionPolicy" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "30d" + - variable: provider + label: "provider" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "s3" + enum: + - value: s3 + description: S3 + - value: azure + description: Azure + - value: google + description: Google + - variable: s3 + label: "s3" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "s3"]] + attrs: + - variable: region + label: "region" + schema: + type: string + default: "" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: accessKey + label: "accessKey" + schema: + type: string + default: "" + - variable: secretKey + label: "secretKey" + schema: + type: string + default: "" + - variable: azure + label: "azure (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "azure"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: connectionString + label: "connectionString" + schema: + type: string + default: "" + - variable: storageAccount + label: "storageAccount" + schema: + type: string + default: "" + - variable: storageKey + label: "storageKey" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: storageSasToken + label: "storageSasToken" + schema: + type: string + default: "" + - variable: containerName + label: "containerName" + schema: + type: string + default: "" + - variable: serviceName + label: "serviceName" + schema: + type: string + default: "blob" + - variable: inheritFromAzureAD + label: "inheritFromAzureAD" + schema: + type: boolean + default: false + - variable: google + label: "google (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "google"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: gkeEnvironment + label: "gkeEnvironment" + schema: + type: string + default: "" + - variable: applicationCredentials + label: "applicationCredentials" + schema: + type: string + default: "" + - variable: scheduledBackups + label: ScheduledBackups + schema: + type: list + default: [] + show_if: [["enabled", "=", true]] + items: + - variable: backupschedule + label: BackupSchedule + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: name + schema: + type: string + default: "daily-backup" + required: true + - variable: schedule + label: schedule + schema: + type: string + required: true + default: "0 0 0 * * *" + - variable: backupOwnerReference + label: backupOwnerReference + schema: + type: string + required: true + default: "self" + - variable: immediate + label: immediate + schema: + type: boolean + default: false + - variable: suspend + label: suspend + schema: + type: boolean + default: false + - variable: manualBackups + label: manualBackups + schema: + type: list + default: [] + show_if: [["enabled", "=", true]] + items: + - variable: backup + label: Backup + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: name + schema: + type: string + default: "" + required: true + +# - variable: 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/gitea/17.2.0/templates/NOTES.txt b/stable/gitea/17.2.0/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/gitea/17.2.0/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/gitea/17.2.0/templates/_configmap.tpl b/stable/gitea/17.2.0/templates/_configmap.tpl new file mode 100644 index 0000000..7605060 --- /dev/null +++ b/stable/gitea/17.2.0/templates/_configmap.tpl @@ -0,0 +1,15 @@ +{{/* Define the configmap */}} +{{- define "gitea.configmap" -}} +enabled: true +data: + GITEA_APP_INI: "/data/gitea/conf/app.ini" + GITEA_CUSTOM: "/data/gitea" + GITEA_WORK_DIR: "/data" + GITEA_TEMP: "/tmp/gitea" + GITEA_ADMIN_USERNAME: {{ .Values.admin.username | quote }} + GITEA_ADMIN_PASSWORD: {{ .Values.admin.password | quote }} + SSH_PORT: {{ .Values.service.ssh.ports.ssh.port | quote }} + SSH_LISTEN_PORT: {{ .Values.service.ssh.ports.ssh.targetPort | quote }} + TMPDIR: "/tmp/gitea" + GNUPGHOME: "/data/git/.gnupg" +{{- end -}} diff --git a/stable/gitea/17.2.0/templates/_secrets.tpl b/stable/gitea/17.2.0/templates/_secrets.tpl new file mode 100644 index 0000000..215287c --- /dev/null +++ b/stable/gitea/17.2.0/templates/_secrets.tpl @@ -0,0 +1,233 @@ +{{/* Define the secrets */}} +{{- define "gitea.secrets" -}} + +{{ $DOMAIN := .Values.config.nodeIP | quote -}} +{{ $URL := (printf "http://%s:%v/" .Values.config.nodeIP .Values.service.main.ports.main.port) }} +{{- $pgHost := printf "%v-cnpg-main-rw" (include "tc.v1.common.lib.chart.names.fullname" $) -}} + +{{- if and (.Values.ingress.main.enabled) (gt (len .Values.ingress.main.hosts) 0) -}} + {{- $DOMAIN = (index .Values.ingress.main.hosts 0).host -}} + {{- $URL = (printf "https://%s/" (index .Values.ingress.main.hosts 0).host) -}} +{{- end -}} + +secret: + enabled: true + data: + app.ini: |- + APP_NAME = {{ .Values.config.APP_NAME }} + RUN_MODE = {{ .Values.config.RUN_MODE }} + + [cache] + ADAPTER = memcache + ENABLED = true + HOST = {{ printf "%v-%v:%v" .Release.Name "memcached" "11211" }} + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "cache" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + [database] + DB_TYPE = postgres + HOST = {{ printf "%v:5432" $pgHost }} + NAME = {{ .Values.cnpg.main.database }} + PASSWD = {{ .Values.cnpg.main.creds.password }} + USER = {{ .Values.cnpg.main.user }} + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "database" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + [metrics] + ENABLED = {{ .Values.metrics.main.enabled }} + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "metrics" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + [repository] + ROOT = /data/git/gitea-repositories + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "repository" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + + [security] + INSTALL_LOCK = true + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "security" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + [webhook] + ALLOWED_HOST_LIST = {{ .Values.config.ALLOWED_HOST_LIST }} + + [server] + APP_DATA_PATH = /data + DOMAIN = {{ $DOMAIN }} + ENABLE_PPROF = false + HTTP_PORT = {{ .Values.service.main.ports.main.targetPort }} + PROTOCOL = http + ROOT_URL = {{ $URL }} + SSH_DOMAIN = {{ $DOMAIN }} + SSH_LISTEN_PORT = {{ .Values.service.ssh.ports.ssh.targetPort }} + SSH_PORT = {{ .Values.service.ssh.ports.ssh.port }} + START_SSH_SERVER = true + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "server" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if not ( or ( eq $catvalue.name "server" ) ( eq $catvalue.name "server" ) ( eq $catvalue.name "security" ) ( eq $catvalue.name "repository" ) ( eq $catvalue.name "metrics" ) ( eq $catvalue.name "database" ) ( eq $catvalue.name "cache" ) ) }} + [{{ $catvalue.name }}] + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + +init: + enabled: true + data: + init_directory_structure.sh: |- + #!/usr/bin/env bash + + set -euo pipefail + + {{- if .Values.initPreScript }} + # BEGIN: initPreScript + {{- with .Values.initPreScript -}} + {{ . | nindent 4}} + {{- end -}} + # END: initPreScript + {{- end }} + + set -x + + mkdir -p /data/git/.ssh + chmod -R 700 /data/git/.ssh + [ ! -d /data/gitea ] && mkdir -p /data/gitea/conf + + # prepare temp directory structure + mkdir -p "${GITEA_TEMP}" + chown -Rf {{ .Values.securityContext.container.runAsUser }}:{{ .Values.securityContext.pod.fsGroup }} "${GITEA_TEMP}" + chmod ug+rwx "${GITEA_TEMP}" + + # Copy config file to writable volume + cp /etc/gitea/conf/app.ini /data/gitea/conf/app.ini + chown -Rf {{ .Values.securityContext.container.runAsUser }}:{{ .Values.securityContext.pod.fsGroup }} "/data" + chmod a+rwx /data/gitea/conf/app.ini + + # Patch dockercontainer for dynamic users + chown -Rf {{ .Values.securityContext.container.runAsUser }}:{{ .Values.securityContext.pod.fsGroup }} "/var/lib/gitea" + + configure_gitea.sh: |- + #!/usr/bin/env bash + + set -euo pipefail + + + # Connection retry inspired by https://gist.github.com/dublx/e99ea94858c07d2ca6de + function test_db_connection() { + local RETRY=0 + local MAX=30 + + echo 'Wait for database to become avialable...' + until [ "${RETRY}" -ge "${MAX}" ]; do + nc -vz -w2 {{ $pgHost }} 5432 && break + RETRY=$[${RETRY}+1] + echo "...not ready yet (${RETRY}/${MAX})" + done + + if [ "${RETRY}" -ge "${MAX}" ]; then + echo "Database not reachable after '${MAX}' attempts!" + exit 1 + fi + } + + test_db_connection + + + echo '==== BEGIN GITEA MIGRATION ====' + + gitea migrate + + echo '==== BEGIN GITEA CONFIGURATION ====' + + {{- if or .Values.admin.existingSecret (and .Values.admin.username .Values.admin.password) }} + function configure_admin_user() { + local ACCOUNT_ID=$(gitea admin user list --admin | grep -e "\s\+${GITEA_ADMIN_USERNAME}\|{{ .Values.admin.email }}\s\+" | awk -F " " "{printf \$1}") + if [[ -z "${ACCOUNT_ID}" ]]; then + echo "No admin user '${GITEA_ADMIN_USERNAME}' found, neither email '{{ .Values.admin.email }}' is assigned to an admin. Creating now..." + gitea admin user create --admin --username "${GITEA_ADMIN_USERNAME}" --password "${GITEA_ADMIN_PASSWORD}" --email {{ .Values.admin.email | quote }} --must-change-password=false + echo '...created.' + else + echo "Admin account '${GITEA_ADMIN_USERNAME}' or email {{ .Values.admin.email }} already exist. Running update to sync password..." + gitea admin user change-password --username "${GITEA_ADMIN_USERNAME}" --password "${GITEA_ADMIN_PASSWORD}" + echo '...password sync done.' + fi + } + + configure_admin_user + {{- end }} + + {{- if .Values.ldap.enabled }} + function configure_ldap() { + local LDAP_NAME={{ (printf "%s" .Values.ldap.name) | squote }} + local GITEA_AUTH_ID=$(gitea admin auth list --vertical-bars | grep -E "\|${LDAP_NAME}\s+\|" | grep -iE '\|LDAP \(via BindDN\)\s+\|' | awk -F " " "{print \$1}") + + if [[ -z "${GITEA_AUTH_ID}" ]]; then + echo "No ldap configuration found with name '${LDAP_NAME}'. Installing it now..." + gitea admin auth add-ldap {{- include "gitea.ldap_settings" . | indent 1 }} + echo '...installed.' + else + echo "Existing ldap configuration with name '${LDAP_NAME}': '${GITEA_AUTH_ID}'. Running update to sync settings..." + gitea admin auth update-ldap --id "${GITEA_AUTH_ID}" {{- include "gitea.ldap_settings" . | indent 1 }} + echo '...sync settings done.' + fi + } + + configure_ldap + {{- end }} + + {{- if .Values.oauth.enabled }} + function configure_oauth() { + local OAUTH_NAME={{ (printf "%s" .Values.oauth.name) | squote }} + local AUTH_ID=$(gitea admin auth list --vertical-bars | grep -E "\|${OAUTH_NAME}\s+\|" | grep -iE '\|OAuth2\s+\|' | awk -F " " "{print \$1}") + + if [[ -z "${AUTH_ID}" ]]; then + echo "No oauth configuration found with name '${OAUTH_NAME}'. Installing it now..." + gitea admin auth add-oauth {{- include "gitea.oauth_settings" . | indent 1 }} + echo '...installed.' + else + echo "Existing oauth configuration with name '${OAUTH_NAME}': '${AUTH_ID}'. Running update to sync settings..." + gitea admin auth update-oauth --id "${AUTH_ID}" {{- include "gitea.oauth_settings" . | indent 1 }} + echo '...sync settings done.' + fi + } + + configure_oauth + {{- end }} + + echo '==== END GITEA CONFIGURATION ====' + +{{- end -}} diff --git a/stable/gitea/17.2.0/templates/common.yaml b/stable/gitea/17.2.0/templates/common.yaml new file mode 100644 index 0000000..ebc9e98 --- /dev/null +++ b/stable/gitea/17.2.0/templates/common.yaml @@ -0,0 +1,52 @@ +{{/* Make sure all variables are set properly */}} +{{- include "tc.v1.common.loader.init" . }} + +{{/* Render secrets for gitea */}} +{{- $secrets := include "gitea.secrets" . | fromYaml -}} +{{- if $secrets -}} + {{- $_ := mustMergeOverwrite .Values.secret $secrets -}} +{{- end -}} + +{{/* Render configmap for gitea */}} +{{- $configmap := include "gitea.configmap" . | fromYaml -}} +{{- if $configmap -}} + {{- $_ := set .Values.configmap "gitea-env" $configmap -}} +{{- end -}} + +{{/* Append the general secret volumes to the volumes */}} +{{- define "gitea.initvolume" -}} +enabled: true +readOnly: true +type: secret +objectName: init +defaultMode: "0777" +targetSelector: + main: + main: + mountPath: /secrets/ini + 1-init-directories: + mountPath: "/usr/sbin" + 2-configure-gitea: + mountPath: "/usr/sbin" +{{- end -}} + +{{/* Append the general secret volumes to the volumes */}} +{{- define "gitea.configvolume" -}} +enabled: true +readOnly: true +type: secret +objectName: secret +targetSelector: + main: + main: + mountPath: /secrets/config + 1-init-directories: + mountPath: /etc/gitea/conf +{{- end -}} + +{{- $_ := set .Values.persistence "init" (include "gitea.initvolume" . | fromYaml) -}} +{{- $_ := set .Values.persistence "config" (include "gitea.configvolume" . | fromYaml) -}} + + +{{/* Render the templates */}} +{{ include "tc.v1.common.loader.apply" . }} diff --git a/stable/gitea/17.2.0/values.yaml b/stable/gitea/17.2.0/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/gitea/17.3.0/.helmignore b/stable/gitea/17.3.0/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/gitea/17.3.0/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/gitea/17.3.0/CHANGELOG.md b/stable/gitea/17.3.0/CHANGELOG.md new file mode 100644 index 0000000..5be9b2d --- /dev/null +++ b/stable/gitea/17.3.0/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + + + + + + +## [gitea-17.1.18](https://github.com/truecharts/charts/compare/gitea-17.1.17...gitea-17.1.18) (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)) + + +## [gitea-17.1.17](https://github.com/truecharts/charts/compare/gitea-17.1.16...gitea-17.1.17) (2024-02-02) + +### Chore + + + +- update container image gitea/gitea to v1.21.5[@874a8d8](https://github.com/874a8d8) by renovate ([#17787](https://github.com/truecharts/charts/issues/17787)) + + +## [gitea-17.1.16](https://github.com/truecharts/charts/compare/gitea-17.1.15...gitea-17.1.16) (2024-01-27) + +### Chore + + + +- update helm general non-major by renovate ([#17525](https://github.com/truecharts/charts/issues/17525)) + + +## [gitea-17.1.15](https://github.com/truecharts/charts/compare/gitea-17.1.14...gitea-17.1.15) (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)) + + +## [gitea-17.1.14](https://github.com/truecharts/charts/compare/gitea-17.1.13...gitea-17.1.14) (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)) + + +## [gitea-17.1.13](https://github.com/truecharts/charts/compare/gitea-17.1.12...gitea-17.1.13) (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)) + + +## [gitea-17.1.12](https://github.com/truecharts/charts/compare/gitea-17.1.11...gitea-17.1.12) (2024-01-21) + +### Chore + + + +- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) + + +## [gitea-17.1.11](https://github.com/truecharts/charts/compare/gitea-17.1.10...gitea-17.1.11) (2024-01-21) + +### Chore + + + +- update container image gitea/gitea to v1.21.4[@600f1f1](https://github.com/600f1f1) by renovate ([#17304](https://github.com/truecharts/charts/issues/17304)) + + + + +## [gitea-17.1.10](https://github.com/truecharts/charts/compare/gitea-17.1.9...gitea-17.1.10) (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)) + + +## [gitea-17.1.9](https://github.com/truecharts/charts/compare/gitea-17.1.8...gitea-17.1.9) (2024-01-02) diff --git a/stable/gitea/17.3.0/Chart.yaml b/stable/gitea/17.3.0/Chart.yaml new file mode 100644 index 0000000..d53ba28 --- /dev/null +++ b/stable/gitea/17.3.0/Chart.yaml @@ -0,0 +1,49 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: GIT + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.12" + truecharts.org/train: stable +apiVersion: v2 +appVersion: 1.21.5 +dependencies: + - name: common + version: 17.4.2 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] + - name: memcached + version: 11.2.1 + repository: oci://tccr.io/truecharts + condition: memcached.enabled + alias: "" + tags: [] + import-values: [] +deprecated: false +description: Self hosted GIT repositories +home: https://truecharts.org/charts/stable/gitea +icon: https://truecharts.org/img/hotlink-ok/chart-icons/gitea.png +keywords: + - git + - issue tracker + - code review + - wiki + - gitea + - gogs +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: gitea +sources: + - https://gitea.com/gitea/helm-chart + - https://github.com/go-gitea/gitea + - https://github.com/truecharts/charts/tree/master/charts/stable/gitea + - https://hub.docker.com/r/gitea/gitea +type: application +version: 17.3.0 diff --git a/stable/gitea/17.3.0/README.md b/stable/gitea/17.3.0/README.md new file mode 100644 index 0000000..1d7e1d4 --- /dev/null +++ b/stable/gitea/17.3.0/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/gitea) + +**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/gitea/17.3.0/app-readme.md b/stable/gitea/17.3.0/app-readme.md new file mode 100644 index 0000000..e8603ad --- /dev/null +++ b/stable/gitea/17.3.0/app-readme.md @@ -0,0 +1,8 @@ +Self hosted GIT repositories + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/gitea](https://truecharts.org/charts/stable/gitea) + +--- + +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/gitea/17.3.0/charts/common-17.4.2.tgz b/stable/gitea/17.3.0/charts/common-17.4.2.tgz new file mode 100644 index 0000000000000000000000000000000000000000..31f3a104561f859f297067776ab86a1503525be4 GIT binary patch literal 100097 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 l8bLay74+E3;;+DksJU3 literal 0 HcmV?d00001 diff --git a/stable/gitea/17.3.0/charts/memcached-11.2.1.tgz b/stable/gitea/17.3.0/charts/memcached-11.2.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..c0a2269f00136b94b59ffd07c0a2569350f4bb2b GIT binary patch literal 104399 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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: 1000 + - variable: runAsGroup + label: "runAsGroup" + description: "The groupID of the user running the application" + schema: + type: int + default: 1000 + # 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: 1000 + - 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: cnpg + group: Postgresql + label: "CloudNative-PG (CNPG)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "Main Postgresql Database" + schema: + additional_attrs: true + type: dict + attrs: + - variable: hibernate + label: Hibernate + description: "enable to safely hibernate and shutdown the postgresql cluster" + schema: + type: boolean + default: false + - variable: mode + label: Mode + description: 'Cluster mode of operation. Available modes: standalone - default mode. Creates new or updates an existing CNPG cluster. recovery - Same as standalone but creates a cluster from a backup, object store or via pg_basebackup replica - Creates a replica cluster from an existing CNPG cluster. # TODO.' + schema: + type: string + default: "standalone" + enum: + - value: standalone + description: standalone + - value: replica + description: replica + - value: recovery + description: recovery + - variable: cluster + label: "Cluster Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: instances + label: Instances + schema: + type: int + default: 1 + - variable: singleNode + label: singleNode + schema: + type: boolean + default: true + hidden: true + - variable: storage + label: "Storage" + schema: + additional_attrs: true + type: dict + attrs: + - variable: size + label: Size + schema: + type: string + default: "256Gi" + - variable: walStorage + label: "WAL Storage" + schema: + additional_attrs: true + type: dict + attrs: + - variable: size + label: Size + schema: + type: string + default: "256Gi" + - variable: monitoring + label: "Monitoring Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enablePodMonitor + label: "enablePodMonitor" + schema: + type: boolean + default: true + - variable: disableDefaultQueries + label: "disableDefaultQueries" + schema: + type: boolean + default: false + - variable: pooler + label: "Pooler Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: instances + label: Instances + schema: + type: int + default: 1 + - variable: createRO + label: "Create ReadOnly Instance" + schema: + type: boolean + default: false + - variable: recovery + label: "Recovery Settings (Experimental)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: "enabled" + schema: + type: boolean + default: false + - variable: endpointURL + label: "endpointURL" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: method + label: "method" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "object_store" + - variable: backupName + label: "backupName" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: provider + label: "provider" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "s3" + enum: + - value: s3 + description: S3 + - value: azure + description: Azure + - value: google + description: Google + - variable: s3 + label: "s3" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "s3"]] + attrs: + - variable: region + label: "region" + schema: + type: string + default: "" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: accessKey + label: "accessKey" + schema: + type: string + default: "" + - variable: secretKey + label: "secretKey" + schema: + type: string + default: "" + - variable: azure + label: "azure (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "azure"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: connectionString + label: "connectionString" + schema: + type: string + default: "" + - variable: storageAccount + label: "storageAccount" + schema: + type: string + default: "" + - variable: storageKey + label: "storageKey" + schema: + type: string + default: "" + - variable: storageSasToken + label: "storageSasToken" + schema: + type: string + default: "" + - variable: containerName + label: "containerName" + schema: + type: string + default: "" + - variable: serviceName + label: "serviceName" + schema: + type: string + default: "blob" + - variable: inheritFromAzureAD + label: "inheritFromAzureAD" + schema: + type: boolean + default: false + - variable: google + label: "google (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "google"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: gkeEnvironment + label: "gkeEnvironment" + schema: + type: string + default: "" + - variable: applicationCredentials + label: "applicationCredentials" + schema: + type: string + default: "" + - variable: backups + label: "Backup Settings (Experimental)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: "enabled" + schema: + type: boolean + default: false + - variable: endpointURL + label: "endpointURL" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: destinationPath + label: "destinationPath" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: retentionPolicy + label: "retentionPolicy" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "30d" + - variable: provider + label: "provider" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "s3" + enum: + - value: s3 + description: S3 + - value: azure + description: Azure + - value: google + description: Google + - variable: s3 + label: "s3" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "s3"]] + attrs: + - variable: region + label: "region" + schema: + type: string + default: "" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: accessKey + label: "accessKey" + schema: + type: string + default: "" + - variable: secretKey + label: "secretKey" + schema: + type: string + default: "" + - variable: azure + label: "azure (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "azure"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: connectionString + label: "connectionString" + schema: + type: string + default: "" + - variable: storageAccount + label: "storageAccount" + schema: + type: string + default: "" + - variable: storageKey + label: "storageKey" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: storageSasToken + label: "storageSasToken" + schema: + type: string + default: "" + - variable: containerName + label: "containerName" + schema: + type: string + default: "" + - variable: serviceName + label: "serviceName" + schema: + type: string + default: "blob" + - variable: inheritFromAzureAD + label: "inheritFromAzureAD" + schema: + type: boolean + default: false + - variable: google + label: "google (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "google"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: gkeEnvironment + label: "gkeEnvironment" + schema: + type: string + default: "" + - variable: applicationCredentials + label: "applicationCredentials" + schema: + type: string + default: "" + - variable: scheduledBackups + label: ScheduledBackups + schema: + type: list + default: [] + show_if: [["enabled", "=", true]] + items: + - variable: backupschedule + label: BackupSchedule + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: name + schema: + type: string + default: "daily-backup" + required: true + - variable: schedule + label: schedule + schema: + type: string + required: true + default: "0 0 0 * * *" + - variable: backupOwnerReference + label: backupOwnerReference + schema: + type: string + required: true + default: "self" + - variable: immediate + label: immediate + schema: + type: boolean + default: false + - variable: suspend + label: suspend + schema: + type: boolean + default: false + - variable: manualBackups + label: manualBackups + schema: + type: list + default: [] + show_if: [["enabled", "=", true]] + items: + - variable: backup + label: Backup + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: name + schema: + type: string + default: "" + required: true + +# - variable: 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/gitea/17.3.0/templates/NOTES.txt b/stable/gitea/17.3.0/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/gitea/17.3.0/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/gitea/17.3.0/templates/_configmap.tpl b/stable/gitea/17.3.0/templates/_configmap.tpl new file mode 100644 index 0000000..7605060 --- /dev/null +++ b/stable/gitea/17.3.0/templates/_configmap.tpl @@ -0,0 +1,15 @@ +{{/* Define the configmap */}} +{{- define "gitea.configmap" -}} +enabled: true +data: + GITEA_APP_INI: "/data/gitea/conf/app.ini" + GITEA_CUSTOM: "/data/gitea" + GITEA_WORK_DIR: "/data" + GITEA_TEMP: "/tmp/gitea" + GITEA_ADMIN_USERNAME: {{ .Values.admin.username | quote }} + GITEA_ADMIN_PASSWORD: {{ .Values.admin.password | quote }} + SSH_PORT: {{ .Values.service.ssh.ports.ssh.port | quote }} + SSH_LISTEN_PORT: {{ .Values.service.ssh.ports.ssh.targetPort | quote }} + TMPDIR: "/tmp/gitea" + GNUPGHOME: "/data/git/.gnupg" +{{- end -}} diff --git a/stable/gitea/17.3.0/templates/_secrets.tpl b/stable/gitea/17.3.0/templates/_secrets.tpl new file mode 100644 index 0000000..215287c --- /dev/null +++ b/stable/gitea/17.3.0/templates/_secrets.tpl @@ -0,0 +1,233 @@ +{{/* Define the secrets */}} +{{- define "gitea.secrets" -}} + +{{ $DOMAIN := .Values.config.nodeIP | quote -}} +{{ $URL := (printf "http://%s:%v/" .Values.config.nodeIP .Values.service.main.ports.main.port) }} +{{- $pgHost := printf "%v-cnpg-main-rw" (include "tc.v1.common.lib.chart.names.fullname" $) -}} + +{{- if and (.Values.ingress.main.enabled) (gt (len .Values.ingress.main.hosts) 0) -}} + {{- $DOMAIN = (index .Values.ingress.main.hosts 0).host -}} + {{- $URL = (printf "https://%s/" (index .Values.ingress.main.hosts 0).host) -}} +{{- end -}} + +secret: + enabled: true + data: + app.ini: |- + APP_NAME = {{ .Values.config.APP_NAME }} + RUN_MODE = {{ .Values.config.RUN_MODE }} + + [cache] + ADAPTER = memcache + ENABLED = true + HOST = {{ printf "%v-%v:%v" .Release.Name "memcached" "11211" }} + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "cache" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + [database] + DB_TYPE = postgres + HOST = {{ printf "%v:5432" $pgHost }} + NAME = {{ .Values.cnpg.main.database }} + PASSWD = {{ .Values.cnpg.main.creds.password }} + USER = {{ .Values.cnpg.main.user }} + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "database" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + [metrics] + ENABLED = {{ .Values.metrics.main.enabled }} + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "metrics" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + [repository] + ROOT = /data/git/gitea-repositories + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "repository" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + + [security] + INSTALL_LOCK = true + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "security" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + [webhook] + ALLOWED_HOST_LIST = {{ .Values.config.ALLOWED_HOST_LIST }} + + [server] + APP_DATA_PATH = /data + DOMAIN = {{ $DOMAIN }} + ENABLE_PPROF = false + HTTP_PORT = {{ .Values.service.main.ports.main.targetPort }} + PROTOCOL = http + ROOT_URL = {{ $URL }} + SSH_DOMAIN = {{ $DOMAIN }} + SSH_LISTEN_PORT = {{ .Values.service.ssh.ports.ssh.targetPort }} + SSH_PORT = {{ .Values.service.ssh.ports.ssh.port }} + START_SSH_SERVER = true + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "server" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if not ( or ( eq $catvalue.name "server" ) ( eq $catvalue.name "server" ) ( eq $catvalue.name "security" ) ( eq $catvalue.name "repository" ) ( eq $catvalue.name "metrics" ) ( eq $catvalue.name "database" ) ( eq $catvalue.name "cache" ) ) }} + [{{ $catvalue.name }}] + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + +init: + enabled: true + data: + init_directory_structure.sh: |- + #!/usr/bin/env bash + + set -euo pipefail + + {{- if .Values.initPreScript }} + # BEGIN: initPreScript + {{- with .Values.initPreScript -}} + {{ . | nindent 4}} + {{- end -}} + # END: initPreScript + {{- end }} + + set -x + + mkdir -p /data/git/.ssh + chmod -R 700 /data/git/.ssh + [ ! -d /data/gitea ] && mkdir -p /data/gitea/conf + + # prepare temp directory structure + mkdir -p "${GITEA_TEMP}" + chown -Rf {{ .Values.securityContext.container.runAsUser }}:{{ .Values.securityContext.pod.fsGroup }} "${GITEA_TEMP}" + chmod ug+rwx "${GITEA_TEMP}" + + # Copy config file to writable volume + cp /etc/gitea/conf/app.ini /data/gitea/conf/app.ini + chown -Rf {{ .Values.securityContext.container.runAsUser }}:{{ .Values.securityContext.pod.fsGroup }} "/data" + chmod a+rwx /data/gitea/conf/app.ini + + # Patch dockercontainer for dynamic users + chown -Rf {{ .Values.securityContext.container.runAsUser }}:{{ .Values.securityContext.pod.fsGroup }} "/var/lib/gitea" + + configure_gitea.sh: |- + #!/usr/bin/env bash + + set -euo pipefail + + + # Connection retry inspired by https://gist.github.com/dublx/e99ea94858c07d2ca6de + function test_db_connection() { + local RETRY=0 + local MAX=30 + + echo 'Wait for database to become avialable...' + until [ "${RETRY}" -ge "${MAX}" ]; do + nc -vz -w2 {{ $pgHost }} 5432 && break + RETRY=$[${RETRY}+1] + echo "...not ready yet (${RETRY}/${MAX})" + done + + if [ "${RETRY}" -ge "${MAX}" ]; then + echo "Database not reachable after '${MAX}' attempts!" + exit 1 + fi + } + + test_db_connection + + + echo '==== BEGIN GITEA MIGRATION ====' + + gitea migrate + + echo '==== BEGIN GITEA CONFIGURATION ====' + + {{- if or .Values.admin.existingSecret (and .Values.admin.username .Values.admin.password) }} + function configure_admin_user() { + local ACCOUNT_ID=$(gitea admin user list --admin | grep -e "\s\+${GITEA_ADMIN_USERNAME}\|{{ .Values.admin.email }}\s\+" | awk -F " " "{printf \$1}") + if [[ -z "${ACCOUNT_ID}" ]]; then + echo "No admin user '${GITEA_ADMIN_USERNAME}' found, neither email '{{ .Values.admin.email }}' is assigned to an admin. Creating now..." + gitea admin user create --admin --username "${GITEA_ADMIN_USERNAME}" --password "${GITEA_ADMIN_PASSWORD}" --email {{ .Values.admin.email | quote }} --must-change-password=false + echo '...created.' + else + echo "Admin account '${GITEA_ADMIN_USERNAME}' or email {{ .Values.admin.email }} already exist. Running update to sync password..." + gitea admin user change-password --username "${GITEA_ADMIN_USERNAME}" --password "${GITEA_ADMIN_PASSWORD}" + echo '...password sync done.' + fi + } + + configure_admin_user + {{- end }} + + {{- if .Values.ldap.enabled }} + function configure_ldap() { + local LDAP_NAME={{ (printf "%s" .Values.ldap.name) | squote }} + local GITEA_AUTH_ID=$(gitea admin auth list --vertical-bars | grep -E "\|${LDAP_NAME}\s+\|" | grep -iE '\|LDAP \(via BindDN\)\s+\|' | awk -F " " "{print \$1}") + + if [[ -z "${GITEA_AUTH_ID}" ]]; then + echo "No ldap configuration found with name '${LDAP_NAME}'. Installing it now..." + gitea admin auth add-ldap {{- include "gitea.ldap_settings" . | indent 1 }} + echo '...installed.' + else + echo "Existing ldap configuration with name '${LDAP_NAME}': '${GITEA_AUTH_ID}'. Running update to sync settings..." + gitea admin auth update-ldap --id "${GITEA_AUTH_ID}" {{- include "gitea.ldap_settings" . | indent 1 }} + echo '...sync settings done.' + fi + } + + configure_ldap + {{- end }} + + {{- if .Values.oauth.enabled }} + function configure_oauth() { + local OAUTH_NAME={{ (printf "%s" .Values.oauth.name) | squote }} + local AUTH_ID=$(gitea admin auth list --vertical-bars | grep -E "\|${OAUTH_NAME}\s+\|" | grep -iE '\|OAuth2\s+\|' | awk -F " " "{print \$1}") + + if [[ -z "${AUTH_ID}" ]]; then + echo "No oauth configuration found with name '${OAUTH_NAME}'. Installing it now..." + gitea admin auth add-oauth {{- include "gitea.oauth_settings" . | indent 1 }} + echo '...installed.' + else + echo "Existing oauth configuration with name '${OAUTH_NAME}': '${AUTH_ID}'. Running update to sync settings..." + gitea admin auth update-oauth --id "${AUTH_ID}" {{- include "gitea.oauth_settings" . | indent 1 }} + echo '...sync settings done.' + fi + } + + configure_oauth + {{- end }} + + echo '==== END GITEA CONFIGURATION ====' + +{{- end -}} diff --git a/stable/gitea/17.3.0/templates/common.yaml b/stable/gitea/17.3.0/templates/common.yaml new file mode 100644 index 0000000..ebc9e98 --- /dev/null +++ b/stable/gitea/17.3.0/templates/common.yaml @@ -0,0 +1,52 @@ +{{/* Make sure all variables are set properly */}} +{{- include "tc.v1.common.loader.init" . }} + +{{/* Render secrets for gitea */}} +{{- $secrets := include "gitea.secrets" . | fromYaml -}} +{{- if $secrets -}} + {{- $_ := mustMergeOverwrite .Values.secret $secrets -}} +{{- end -}} + +{{/* Render configmap for gitea */}} +{{- $configmap := include "gitea.configmap" . | fromYaml -}} +{{- if $configmap -}} + {{- $_ := set .Values.configmap "gitea-env" $configmap -}} +{{- end -}} + +{{/* Append the general secret volumes to the volumes */}} +{{- define "gitea.initvolume" -}} +enabled: true +readOnly: true +type: secret +objectName: init +defaultMode: "0777" +targetSelector: + main: + main: + mountPath: /secrets/ini + 1-init-directories: + mountPath: "/usr/sbin" + 2-configure-gitea: + mountPath: "/usr/sbin" +{{- end -}} + +{{/* Append the general secret volumes to the volumes */}} +{{- define "gitea.configvolume" -}} +enabled: true +readOnly: true +type: secret +objectName: secret +targetSelector: + main: + main: + mountPath: /secrets/config + 1-init-directories: + mountPath: /etc/gitea/conf +{{- end -}} + +{{- $_ := set .Values.persistence "init" (include "gitea.initvolume" . | fromYaml) -}} +{{- $_ := set .Values.persistence "config" (include "gitea.configvolume" . | fromYaml) -}} + + +{{/* Render the templates */}} +{{ include "tc.v1.common.loader.apply" . }} diff --git a/stable/gitea/17.3.0/values.yaml b/stable/gitea/17.3.0/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/gitea/17.4.0/.helmignore b/stable/gitea/17.4.0/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/gitea/17.4.0/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/gitea/17.4.0/CHANGELOG.md b/stable/gitea/17.4.0/CHANGELOG.md new file mode 100644 index 0000000..db9fc20 --- /dev/null +++ b/stable/gitea/17.4.0/CHANGELOG.md @@ -0,0 +1,100 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + + + + + + + +## [gitea-17.1.18](https://github.com/truecharts/charts/compare/gitea-17.1.17...gitea-17.1.18) (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)) + + +## [gitea-17.1.17](https://github.com/truecharts/charts/compare/gitea-17.1.16...gitea-17.1.17) (2024-02-02) + +### Chore + + + +- update container image gitea/gitea to v1.21.5[@874a8d8](https://github.com/874a8d8) by renovate ([#17787](https://github.com/truecharts/charts/issues/17787)) + + +## [gitea-17.1.16](https://github.com/truecharts/charts/compare/gitea-17.1.15...gitea-17.1.16) (2024-01-27) + +### Chore + + + +- update helm general non-major by renovate ([#17525](https://github.com/truecharts/charts/issues/17525)) + + +## [gitea-17.1.15](https://github.com/truecharts/charts/compare/gitea-17.1.14...gitea-17.1.15) (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)) + + +## [gitea-17.1.14](https://github.com/truecharts/charts/compare/gitea-17.1.13...gitea-17.1.14) (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)) + + +## [gitea-17.1.13](https://github.com/truecharts/charts/compare/gitea-17.1.12...gitea-17.1.13) (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)) + + +## [gitea-17.1.12](https://github.com/truecharts/charts/compare/gitea-17.1.11...gitea-17.1.12) (2024-01-21) + +### Chore + + + +- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) + + +## [gitea-17.1.11](https://github.com/truecharts/charts/compare/gitea-17.1.10...gitea-17.1.11) (2024-01-21) + +### Chore + + + +- update container image gitea/gitea to v1.21.4[@600f1f1](https://github.com/600f1f1) by renovate ([#17304](https://github.com/truecharts/charts/issues/17304)) + + + + +## [gitea-17.1.10](https://github.com/truecharts/charts/compare/gitea-17.1.9...gitea-17.1.10) (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)) + + +## [gitea-17.1.9](https://github.com/truecharts/charts/compare/gitea-17.1.8...gitea-17.1.9) (2024-01-02) \ No newline at end of file diff --git a/stable/gitea/17.4.0/Chart.yaml b/stable/gitea/17.4.0/Chart.yaml new file mode 100644 index 0000000..57d5fce --- /dev/null +++ b/stable/gitea/17.4.0/Chart.yaml @@ -0,0 +1,49 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: GIT + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.12" + truecharts.org/train: stable +apiVersion: v2 +appVersion: 1.21.5 +dependencies: + - name: common + version: 17.5.0 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] + - name: memcached + version: 11.2.1 + repository: oci://tccr.io/truecharts + condition: memcached.enabled + alias: "" + tags: [] + import-values: [] +deprecated: false +description: Self hosted GIT repositories +home: https://truecharts.org/charts/stable/gitea +icon: https://truecharts.org/img/hotlink-ok/chart-icons/gitea.png +keywords: + - git + - issue tracker + - code review + - wiki + - gitea + - gogs +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: gitea +sources: + - https://gitea.com/gitea/helm-chart + - https://github.com/go-gitea/gitea + - https://github.com/truecharts/charts/tree/master/charts/stable/gitea + - https://hub.docker.com/r/gitea/gitea +type: application +version: 17.4.0 diff --git a/stable/gitea/17.4.0/README.md b/stable/gitea/17.4.0/README.md new file mode 100644 index 0000000..1d7e1d4 --- /dev/null +++ b/stable/gitea/17.4.0/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/gitea) + +**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/gitea/17.4.0/app-readme.md b/stable/gitea/17.4.0/app-readme.md new file mode 100644 index 0000000..e8603ad --- /dev/null +++ b/stable/gitea/17.4.0/app-readme.md @@ -0,0 +1,8 @@ +Self hosted GIT repositories + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/gitea](https://truecharts.org/charts/stable/gitea) + +--- + +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/gitea/17.4.0/charts/common-17.5.0.tgz b/stable/gitea/17.4.0/charts/common-17.5.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..3a5534883aaac1a331bf10ad166cff7fe5d2dd75 GIT binary patch literal 100452 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 z zJe_B@J7Wh>$~JD@=qA2CRn&o1`YhUL+2;b~cdPWr>sRz8(Z2s9D6z>G+g|y?_9@j6 z&s*H{1T3-A(7Aki|3^^bQVJ!-3#Z2_v?~<(FIZ~ugA$rQ@*9PQiLtDPRvjznvTD3? z1Vi(qfeQYr5*?z#CQ!nA>KQE#lEgxn$l*Vnk^A;SzazGHOP?eCGpa>v zizx*iU=7>`fd4zFps$G@iE5cnSOcsRp+@s}q9mM^I#P|W&eY#k9sY6e&T8oYs@ML- z(?tKz4(;>*+4lUup-0evwr8%TvalZ;V7}L+{_$7MaA1e;n-*5IRSgsbZ~sSd#WO<3 z_}@q+U(`hR9iFd7jLB!dHihJsyhboSdv8QIGi0P!-hc4lnx0eWh51`dfV!SAatq?I zXvVm_&@{3dJeob5u6e#lqM{3>+I8;?SvVMg-5njTMuc|R$!jK+W6siY z#MS(9j$rf%V9}?osV>K-p}fjLMAGMX%6^nL7Q%$FY6WML9^Rc`AI7>Vqq!KwnTV-d z)(8Du;P=sY3XGnC7xIebY)Y?3}s1FB>RRtx|C>XEdT z&Ko3r^_{_W^^%*u(e#GI4(ZC>9Z{R%wWS$!%5}wqy2CHBOX1Kusf7V9khSvAz zOV+D+wVwJys!E%zH&U(oG_Cdgqp%^8c&xY6s{m0)B=;=%h@)HXi(019#fb-gr_;uZ zPo6ZFO*Zg(_4~)j&8!O`rpy~gR zG+FzJvnBsu=`7fE{yRK8vF*Q4PPYD^8+inS*VcAF$3KT}w)g*Z+&x=x@>YJCwJ`N? z>xw-Y+uLx%sP4wKt9PeJ6SACZX9cVk4xJEuoWZO&f6hOaTJ6a^e)`X2W%Q;2Y&!oP z*z|vNc6xBQrT?3FIC)ob-})i_B3|GM1i#k5UpC*;xxXy!_v}~S+prIJTuU$w<9ddl z^0b4Z&N$?p$Y{=G(ISd7nP*v=TbXD*_Lb(95RZi(+|Tb&o*>H38tJ~g_u7;9UVBte z>t^Z|ZJrlt;X^Cn_whVdt;M;|i2}t?)xhsKMD;Si3z`6^U~G}_vxfPjozTr2?aA!1 zZZNyP$Y4A!pC?3tFY0;IKr|flINrcLC2egVwomy~@PAGa_CLWW!Xk>*MM+yb%K{Dj z|Kx0RY{&l@osPEre-n@7|HANLk4FNEfB6Y$)4iH3z#AUUM6+6}OQ?cD0QLGi+OOWV z#1imlwKB#6<`~|^2;^vta+HMVIb$JEI8m@>6gst9?L>`gwDn~)A`9u`VWsrny1tT3 zVU8jh3S?EkE^(VF!^8m5G>@Di?*Uavi45h1Q4U%l_KiLulz`bhrZ|h`j2ilGCnQV> z`JUmWR=jQqUv7$1Rch!-oZi701boWkJ6AL5uP~J5hcJqii-bxz-rHqDx$=%yOd7bo^W>L&V_B0IHP_bDQ6=Sbz0%DBgFOU$&GUYvR7(RGWc+?H&naOQDR?Lg72 zL6q?^0^as=fs(8vkRc0w$RQfz`@Ur%Dw=I63-u)OtSHAQR4ggS_=enGj%g{Pv|!E> zj@HasmS2fEt2S^l$q^w#uj++k3gv`^Q^W+OU`lC5s{D`ov_`Ez|7B^ue*6F9qr(Ho z{{L*N|J}%A(Y))l5T{q8a(v}{5B5IlB-eplN!WWf&)=b8cAcj*4bxZ;aYe&SZunx~ zdx9lOJ5&amG~cm!JO|pLYi0Q=v(rq1Q(F6C)k)F_`DzsJZGrR^PwxSE|E}oi ziu$aeDsMJa9Kzo>KyMVne!6|Lg) zq8v>tw;=k>bGh|aPE_EHE5mPDjJY&%SgF6zu2xiao?l6IS7@sAJWDR-%@r}j$y<#q z@r72QDAG!LhP4~(!_wPb?hsoJQJh|moVfMwCF_M~{S$OKIB67*8s!N>V zwpUjxJoWN_KL#N6^8e`I==jLV|95h>mH#*K81jE#1|UL=Ud;le?GXR~`w*b$uz26n zw!;OvXYqf-X&QVqeUph9cE}?9@R%9Fd@n^x@~i6r1ixt7yg=jGAb9neqCA1INDf&1 zyt=mI{W|Dm+<&(+vM>K!fYlv&+?>J*+FKK|x9F6r3(tk_|1)c2Pmvs>@mw(|Uu9{qf zqqqdEX$@ZsI^nEApJZz&k_T0kq7Sch+0z;v)5}Tl`lhQ1>FSq(1vT#f6FdLg(aC5V|7|0Wwg0v0?Slen%{?_5V1VB9U4TOdbhNvQ+o8Ci zub>I5SqCn=|3Bn#JjS6&IoCi58utI__{iS>CnqP{_`e%@D)zrIy?s&wqv5AY6Rbh3 zSw`^BiSEmkiC56yojP45mKKgu<86aa`Zo^hui!w zn|Un$Up2kG+{jk6{nX@x>T&dY5ZsX+u@1bqwz^ZyU7E%wXQ~2oV4VuJPF}QXpvHJn zZ|td1z(4oXmHrb%2u_oW@fatVwmSwk(Ep=@Q=9%DA0KV~e>d`2^#4XoFHrN_2i>=p z%u^%x4*2Un659(TiCpzBPUj{N(z8|$zmwUz|4mDK@o&wswoji=Tlw!MLm?^5zu1oGPyas} zIrd)%M_d2TjXak8SGec_HsQTUe;Ep&t|gcaeP1Vh`k0~f65G$J&f1*FZ&XLi?b>?8Ue=y$hQ*P3E_2)=*>ClN|0ICS;-E&VupIgUsamGB&Z4iK!i8&>Ok zrAs+~*IVJ>2|peAf4MO`2mnp`|Fgp*oBtnf^M7pSvG{-KZQri|P_CONDFNu<_ay>s zS^l4h<@aa)*fS4alK#JiGt`&;|KaiJsbl}YjsLTmr-J^o`CShO5Yb7VFb~kftMql% z>&YglcUS8(>5CSkSLQ+LjCs`q)eUX;$?|ln*LkM5Shy!u!mE2IZ28&0 z{cc(8cl~ta|9TMq-uVC7(a7=tJ=^;KZRD}|zaEyYU;ZB(0pFe=|2GHFuOe7S`!g8F zX$UFOU#j?c^43q|yS1gYXuHCCY|D@PJ9j$f0s0ELN#}Wp-os=fEUl})RoGoGf1!jG~x0@23B7x!)QWTphciyHTqrxYij*=iyN#)b@6n={VS8W7fg}ZH7&ZqeJ`9Do_I6?cLU>G7o-lS2zgLlKz z#QzVR`~QQ3(=Gqs$ioTF^{T5u`-gYpQ}U)DqsQRWFP+ipxF>bB!^Cg-P) z3lk~QdF(xc(LZub(Yqu>f%wgs`Wu)$2HI!)H!FUfMrE8cO_Zw~+$@bygS(~UI?3xe zBdB+t{DBxAX&OAY03|ekZ1$W~D@^yGbb;W|d3`8FcoPo%lZK^aarLe~6^ATfy%S z{M5^T$(UT;T&*PhwTb^evh+Wr({29e4Lw}N^Y--(xV*Vq>5@l^ieklhbUro89!7nZ zQ1(0nAj2}U%#r-a{$wX?R-Yk+zmS>UT1m-j z=slTFV)R^&exDEPKXMc!NYEb4 zvb{wb&u57HZOF?5@#e3*BJa6WQT#yu;|CJ>K#|z>ec`CpKk&KIy1Jk=$9Hq8>><^x zdHhVQ-YnxtIiWT61T0#$KR0`;r~hPjw*mTpV&DHW`oGoxZ{!j8|8IWki~frh^VI1- zLr7=(uZI4IrvLjJVgTGk-spRO|A)o?4-0v?X=Vw7>VgIj7zj9$G(tBNPS6bsb41^x zv4A8|4v&8DMFEmQ32kxr@m^qf_*Q-XK6y<8{TF{+#*mOsF5kw}K>v?NN5{7P*Y^H* zLyvaJy?+;SWD=;x(;qf*PRjctOKvP7T*7n)0nF<(4hdBNU$T2CVWUH zUu4gZ00esh$Pu0A2?0Uy96U^MI0Z8V69RJd+Z+*!lL>&}`d6;7O6L@WtOKoyo6Cz| zUhVyVuW!nxSbyB0j;p591ju{dNu1unc!)n=vYEIPv*VzzY#Y3a36iafLF9OX6BrkR z)9VV|8n1%K-~j0(~J`s%QgH<2Kv)a{j`{B((yj z2GI(k%a+%Uw@=c~Ja*PtgX)x0mWNDbEbub~1etz4`7^R9p@b+@aSM`|FMy$ zjReeh_;6u)S@dBSSsnf;%hLrWI89LQGf_8=Dt@uif0J?-7MK2|(}? z#fX;45=aN z!}aukMaMt+G}-^1+WB8cXJ@Bd|No6VLjQwuf(b=Qhi`5H&m1y?Spb3vEqJ!lAj{K#aWZAo)JihRK$8I0B{kKTjZO?% z#g6n(_GJT6?~`EXZ58T$pT>V?GYLU(ZKf1q!hPEqN@sTk^20fy>8vSRQbn&?PxZ{D z3Y%JE%PmY!er~Q}OANiC!I6pFKjY+vQeZ#jv}qLfLx_nB7*Q zz4e7Dt)84Xe<-bdU-@d+C z%l+Tck(2-b;OuO)mH#&JaPdyce5ijzK%emU&22(v={%wDG6ob8<@g(ridWynY;eu$ z6&1X}tDI)Cq^_L~mRHeFA$j}yhAkl;m`d6r`y5IbY$QE9GsnQ{XaJHnDSrm zhQNO=`ELcY;XjW2ck||_D)~<>ueHm6ASiucgTmeP8%Txai2Iicb%C%#A`~mvbAMWZ z^%6&XjEI8=K8h-?U|1s=I>1y*r`VXE9jfbs2+fxo{ZXn)jyAn+E)HE zwbb3@z()I@Lp%QK;py4&R{q<>!>Q)NnB1POfJLK3t(b3h3v7bXuCG@QnqJm&- z2f!liuEZtKvEwjHqqi4KNFSN+I_cSvS$9-(F;p`T=ratdj4&&gCtp0$s||>of5x1L z;B`7rm`oU197RLUzyPY}o1*3DKR1BtEC1JMbZVdfk4{gw`JXrPbfAE1Hv{d%6f@kFmH#*L$bj?0u~Y7KKHs32@IJJ`zJ=6TA>4-tu%Nwj zf+F^3j*&TzfIBUWCqZsk&jYcX%)hU&C_p79kxLz_)LFhA51J(cWE4DV1Z zcnYg6f0l`Zi^$9dhH7|8vDpQ8t%F^37APQ$JbmC3EF`mb&8~1u9jEyW zl!pc*gX5}a8GS@XLLi<1N7p}>&VV(VXK55`YOx(yn~O(o>&_1L>o zrfHOavqf0Qzq$Z!hmYjjiNbrFOaM-3TIBmvW^qX*Y~G%0a69V^y)A z%;-!aAXe3qP|m2ff}t9$g%3p`!L9EL^hLqC0pmQK36sjw2b3U6aWWx{?xBRtb5=S* z4?MOYCLrW3MBrhH5&-p@;^1ngt!&|F+Pp5R=E8Q5taeqcaX;2c?hA`Lnj}I4!-1b| zVi?6JKRP7yS#?>XGiP><&UqV^fEUc3&mWr~t!X_wuEj#O0{b8IX_o)lL2<3}|KaI@ zo&VwN=wuuJV+p2$eab;}k<2Uac}#Jxi_G@BFUgRmvMgKn z>M1o1(lag7t*0kDIM}zN5blf!z82Cs_5WiGDN^_KE`6m4obA> z=3l=)D}NP9B8FBH30E3wQU~@J>bL?od>h!!^AQYdfo>y52`m?9MiQow0#mkWK zT4&#>3e?O0=M=~LpWvLP8Omp?r2ghlJ^vq#PEPIoA7`U&{P)c~f~BVkg;+-RX4AgM z<{k5di3I#By#vh*l3NfIOD53R8+*Y$a!_Pj8*AaL+>lo)zSTf(7jZlIn9hYl0SO@_ zgLL|wzn#qqRi7{gbI#(W3DcW&o>0D!0Zr3lG&^^YAO-+ec#*VS*`u%D|0N z7@C4<8b?B`C|eSB%~YnmiJw!DE>LcSBZEl5mU?b^x#0#A zm#XEY52O_wk~#l;`%k!p2mDQnR;!&lJG4D!rJ~6c`f*WCP_wqSBIl zoaTJ~fWB*Cjy!HlJVv?WzT|=@;Z7_okNS~IY~?Z;`!ZwvKWumNn^3irwK46d4++Z2 z6lZ+6Ge|L$mLAohgy2zhUzjtsAIAQV;3A3uNoPX21#&cjd4!V*c$h*8U?{ZE0@qwQ ztr;jdwmy<32os-%jkxUX=`#cQgvl9l;OE>9;~AUDbMQau-81WkIhdk&HYC&iX`0># z=OD|`9!>~_ar~VBm}iq5M#wI@_ki$ZN`rF{90krtZj_AnGH#O`oCE%n%)^k=x#xFi zoaShczvVhXoF>otFSa&N^ejuG8+oCfBkuSq%$v`_TeLv=Gr$jj5VMsaP6PkpV+(?G zwr30C3SP1=IXCK3-NdJOCkg}hq8BCmUg^*fr_USC!pCTC3>0^mp1S7nG ze)vM3XKU@nsk;aE?{KnDrrMi5)f>zwL@)Y9>i~t*6a+U6W}Y9$<}Lq9?}o#nZlg)l zc{nwJa@xBvXm*(9ISP6E8d*;wy(8X<#X>Bb*fi#%KuP>`G?jvxlJQF2xyU6}3V<4u zaNC#@k)J0BET*Oz52i8C7wr_#n|M)E&dZXD>XSU3XNJ^c5tCt-M#C}rnU|{ra^fvv zbn~LFWIdd1(3CUC30~Nem)6J&5bVA8w^Gr!xGyf2sKJ(P0EA%a^xd#b^&P-OE_T2# z7uVOX)|Oz8;C3%|b_sN3uN zcuv?G-i8NIQC&x%0R0?%+!24>HdldT%DB|Wrr}mJ6?B;DcLm94m}qvq=sM9QJz9R6 z=jT66nrFI%wmxOf*ROhXizot|g7CalG)@2FB0)U+bCT~9#siWuIsP2wpB``m!x-#A zAW*aSGlx;^bh)&0@CC550AGA;F!m?{u$TGXRxQI4pJEXTAUt@~Zo$3d5il1UV{gp= z=D7I!_1qaqt36@^$NQ*;O{&a&>#1CmE%#1Y!MAfNR#4~7;~juq{WVT7nWCtg*Vmpu zT55%c|4Q!+Cz*excWoR~G_}&s0DR#F2>%DpV(X@zwWdbA!l9r%4_L=JwMQS){60=$ z1On^85a=*`f4W}ZQ=|Xow`%gHZ6y_OgZ}r_&HsOPy3PN;na8;Q<+(AXhsQtEBA2(Q zEj7UUq6rMUlj|I1Fh`{}RW?jgwgZc6T(#i1`h_(K?$8u27+`Fx#g85{6?MH@`mF`& z0_8c5PyotzrpJu_B@;SmK|}*guG5^tI4Dlyrg@;ceQrUyoFR3){4PnI34ueCKoA-M z+zJ@=8Ti0x;5dd8fQg8X#qYy$0xqxi|DIq9J|IE~n~?_uLYM%aPa>ZII)$`s6B8vZ z#gAZu5|l&DRmYZSgyokm&RnW273M{xOK6L97IJud#lq4(6oW$1r>Q#vfougcf9tb~ z>d4AG^SRfj&u3|CCk;6bi`ShjPiY#8GjA}ZG&8!Nri3rbV03skJQyAfN5A z<0JD!aRFkLk1nrXz85W?9S%pQtkM0^sZok7LbKGFQOa-Ar*@cm4RI0ui?L;)eYJ+K z5Ag*Ec9JwgpKxXd6%!*d?PB?>(k|8NfBgsC##<<+@tBWMm3P`gi4)p*P;8 z+5bB5wwky&t@e>$Wyyvpr*B{aCn&G}Qn4sXkyA>X#Bn|GV$Tcf4i%2(ySqagcc7t+ z8l^d}J`}m`gsTJp9l{u0qMVAKY(z|EgA`p6GDotO6nHMnuMU~-VW7?8NRpNk$pZrX zU`tbW4g*qZvgAx2r>mCDNwMHYRBtJ=$j;h}EEXe|y;VvIYA_z?tdK2j#g-fTswhRmQ&2`~2cm*&eq;2nR)fDc8+Ek~ zdR>=mxnMcn@GL8JAg=?F|Kl?kV>t9Q>_>vHWOp89&Y(e=uI=`V0T#C06$AVNc)*-5 zfTTISh_flIk_*?nc9vN^o@LVkhl-ytQGVCxSge>YfTlMz$H`=1iuUF_6sCq|3yPa5 zOIxlil8ntGGHTqfq9JQMzFaJc76ikPS(c^X6ph|3$_NwQT*e>?vvGjuWI z6-mBsE0_BG0>-tnbz8Q=0-@3t@q!_sWQEPeEY>NLMP04coG1IYQV0&MGLMS=TSFs( zYYg;R3DHW#K{DJPPmoL9!uf%iYYzpOcm?T-Z z{Sl{Qe(28PQ0wMJQ02h3vf*X6K`(;8<}R47WlVzl4L|Hx-b zchix`0P?D)E=5TMrF5u<;Y!?PGxCl1Yh#F|GQMZ?Sc5lJxSFw7S1mzwu%ec&U$o8LsKxc}GhKbCy`RUiNTxDfy8;fLn)&M1 z8KkA;WHKg>MKB>dy_Lrb>)2pDwQUim7%$d-C-apRZ(Rgl5i2GWFa4}w{vuK^eZ>Y} z$?QcO^&tW}znGdPnI*}75K}8hnU+{BXZuEC3|ibzWN*+)@;4R3^p?+}WmW&(36_%q z5zAcx#SYF}FIrz+-(S1}XOX;)qzFn+6)GHNPzWeu(LZV z#v-W9k}RN({-2&4y8d4WhkG6U-$ZFZ|FdoINwI(oYv)Q%8xFi&Ks36}!vz$sAsX-l z2S$-Gbf^!U4W%Zjle#W*FvVNS={@DH^?`o6smlR8+y!tcr)!)0c{v-k=*D?!2T2JL`v-(|q=7!CPbAf|7S`iIfW#^Yiy6 zpHb!$U*DY?_Ew~Nib{L>SY_X?RMLNSIr^*NQn8l&|NHyL`)>ZH{VxC0W=bI>s1ZF| zJID&}nwHN%khnTjjs*s3=dhUdj+s~WS#PqM4z;u&fQ!}~oUHDM>*D7!&!(KJSv^Yi zW6)gQ-BN;>`S7^{QL8ftU(-oYw&?3g+*X4rW?(UK_{PX5)KplP+5KgEi|l7GWl9@~ z@gG3ASe7zK6H-U`Kl;*y{>RC~n&tn3{paMcqyHNzP3S-00Bz|%-!ne?&wpTMEHeSz zL;m@9)PVl;=A5ibzy@BYrdq9y7_BfVHuNW1y-_Qu9}xVI;;0zlL?u{Nu+1kqznA#x)n4GL z7lGymFltCcw}HoxV;rei9ZxulMBvmXic?{7myakQH6z+h2<7!*4EEh^x&v@3y?$W~ zFk^NkJeI%7$TI|ikUYs_5b+HyUcGZXjE3UU#YCnGg{)oCOTC0!yL_~T^syM5Z9xAg zD5W@9BmF#Tu8dR0sUTkg+)6r`^IE+cOwM%h;2 zgpW@X%(4j&WOxyk&WlZxgwPa)gQDBM&jo&k^sqvoksRwqgkpD^x50j?K4s}XdRdG& zDh*Kkcom`s^q()}I_*CP`v-;i|0iAi|IHNXQ6cH73apId2QX0C`NY#=W;`tw5%(F> zncRe^Hk!sVCI@Cfh@2tF(*+s4MN=W+QZIs*g9kiAG0+biC4(6>R-}L=#CvbD z9_@p7_MEDRwMHMW-qDqhqcq_EluQ@B`In_m|2rt^e|v{r{Kt)yCiG`NszEq`^=~~VPSi8EV`g=}|%UzyNO6h7q|8=RSgJRf#EQ)YG8Zj$uM~*us;_?>9Q)H?ihT@i? zT+rMM#*+mTxYoUhw90(VB8p%**9(Wj0XP>DK{V%cnSBN%4k|}d8xuFnfb#N(B!sDq zv?nvhyn~684#boGrz9UtSy6dn^s=PEuAbptsa*qLjiv^i1Kb2RLzH0>=achZey}v} zmtTt{6$2L!32ztNYZJY-7wof90HAu#0O-G!ncrAE3!u9o0D?Rrj|i>ETf-rlAtQZ# z)=0Puh%+}tK!zhgA>XNeD$kb~*se_MBmS8NyK*(`MXt;Xl(pINzCQ1sAlH-%{?Ag9 zoJG;vXN|K~#11NUv<5(}h20t(~nnuEfDS!+y5aCBo<7CL`T_=)%-6Y_Lm{4?CgH^wA z$^qS`5#6ge|59RETKcce|9G%}=)V8oJ3Q{}e;X++V*GYmtVViLpXI_tu^&Bz{O7Gp9gL@+D#tnva%Qt zsM^ejKY>`~l;AA?*MhTBlC-Sx#Hg%9bu&^-7vrBCE6-)2jf-Z*)+)9&GuagFgk`f_ zj(=gweU@1N7qK0S5DTl@cop)Lfx8rqbUM~nYNGv!q|LTL9c zOd=_PF@^wxV<4n@x31#%*Cr64B_`KsPB#zAASb2Nx0YI88u*w%-T+Y~k}} znKhUXh9xjSM$FY&zW86w`UawU^|p;9ciE^6wOHUGbDdja^0)jb%EKXKV~bGYl%Z$@ zSW2i&-_3tjhA_iKXUonr4A1Kao#P|tu`u4;-loUuAEQZHv#tv)SKQL-pY3U=p|D1* z+n*IqzZmB>C6XG(B;J+T=6{w|IH@6~b=ymf3oKPlVzvoIS|}UwqV2fgGNui$O(1A< zv6pWuN-fD#c2P2c{Hwh6=xbs$7z{kTG)CI3!8oOjrahnIeBLt*)C)3uyNWvm@vsNn z2{8u858w&KDR`nJei$@g0XcX*%~y0hxTS#~_Vt-S}c1v@W*BWKrwaa#lr2vTu+|fH6r%ciz$fRKJ+QXEjo)Rvnn|&+U%HK(*Wn~@72;$P_ zCIvIMCxy5-Pgr-$_Q@8n{eOlcM9IrvhcI}YCU+^J@BzIgf$*DtpLtL>y%DIn|2y12 zaNqwOo_6;C%@jc&-i!4HuYJo6^7S@e^`CP|Lb&eho%5>q`|lNIBe|spaz`=QMWnhI zCA z9#snkx-zDIc@+ADk{J#WwHT6gCzb08)WU*nWepw5(33QvU#fE>y8QGfjmVRVkrpge3&^PxH!vvpwdxlnKkj zBLZwn5y%7|oM!>E^IYo+PBNkFyQ9f206Lbthc*3~zjs--xWF$n_+)vynrn2Sa(S->YJW|f@&%4-*Qm%t~M z?Gz==3n=}HPPf%{<4DU`V*%}(*&yX5vKq8G$>Pq=Y^t-86_b0JwX76rC27aZ`tp`g@5G2q!@e4q?tI(y zSjk@*6lX=vi}xr55oCppUms9G&!vll;SgXbwCV|T_U1t-m;8uxy{_!Bf?qdoyHNHf zsD& z-bBx4<+4X*8%w zhdd-CvROkpDBB`bKenICL1}}K%=wF8+=NGW<_c9R>HmyG(+RqZVZz2FUHAg1_Wk#f zOaG4!_B;B&kz&&S_ul1REjN%`02D#%zKW?np8W9vV|klU^D08{_?4>T9Q$_r*3_LZ3;hoJmR zA7xZe)xxK0NUu!M$<|}_t+JA7ZZu<%cUbi#1wOGq*x}$SCVjPKxhu{4EyBg2{hw|ct*O8NKR5j{x8oD|S z#(Vys&~Qx11at_~4*B|C=b4=U?rELCH3- zh(JjlK^Dq>tG`DqY5B?~9A)qY_+9Y(?;uSgFvxr9>;bw|pZ_4jC{Cqs|N7#8A0FrQD@(h0A!Fnk>yM$}M$yb{6$*R4u=)M2&d`w)wa$#&wELxaZh zMV|}d_bj50w_yU)v98Mh{mMg9t!eN-kErT_&@}6T(A3vMXVhIosiyyQ8lfc;zp7G4 z{|{XM|NWEGF8}LhN+bF&wt;QS8_z&iD8a;FILm%`f(^UR*+tv^4*EABg0JOcTX()d$BLiS~rp07s4$U@>YTF7oWl*K=;YBOZ>p_agLN8e%stRdFSMsD*I zi`#B+h0QOX5cCDOVnmFUPlY%GS)VOt!Y_{cvXogX?lDI-ADh{DLu)JL>jv1XCkDb2 zRY-i-c!&t6V?@EvQyTpO2n9bYNEOQ`WrZ-OVMCIRmsv~G7vD(kXAR1UAX7G8z5151 z%&gROm*sriA8W6s+rw#j4xPNLhcV~ds$92a>H(`~6r!;CKDHn( zvX8y9zy9s);Jq4J!*GZ$Mk5rYg#i3We6FW8CJ1AFNX+R!|Ic;&hR$!Nas3jhE=`b& zERfNBGpyP~R}EqjGLtoN9IAp#F^d#rkqqQ3^Fp(nCucRsBHTTap z#LWxC*-k0wZthssF2phCb~sK?j{2ZKiU{QY+FoQ+H5)ruNMnHG6g?oi3Z>K;ShKl$ z5vAY-j??n_*aBr={j}T*W?1vi|yk|0g@1Fat zqEz4iXREZ72Uy+v-=m{__x}IjWWT%r-$ZG0|8HIT8yAcE_XgfyyN+|K|Mo5eQ>Dd= zO4g@RXVId&QMnc>su&*@2I>*~Ma|;(g}X4tQBlSCurN@Y63aIBHvxK3>gZhh^t<*M zNqN|w(k6BHp4;FLkWxGWe}EXrA&OIQ&T99g_LjjCQ#ed&SQIXe3{5LWLe3_St@uBz4z}Pm8 zgR;3HKAHygutS09$VX1-Cmf4Gf)Sw;nC<|E5E!Rv!d|_6iQ>T%e#8k1F&q&3@RI-a zl2;$}0Pi%IQi|eWuDSME6p^PL@GYT39PR)@!7WN67@z@oBj5Up#DAjNKnW`-{2Ljv z?=edWoxjBsoJtJi>12o~ACjyEMmWZ7j6(1m8455Ir4Yw9=zR{BO~v!z(KM<9o!4vz z{!oBVAx&}o@CLy!!ZFH(fa^r&)&-&Zh0iWiV#A2gtfg3`-^h?FtT+XnPa~GCNhqWX z(E!GCKoMlb!6U}eKuID0B(Yjk{g+B9W!BfZ_3rekJvRJ8+|3Zi+BxWdGMgpv}{~Ye0y7J%2UibcQBSi>$Z^SC!p>%Z; zptW%}ECW(B!wi$SN+cptD5N$Vz&n&0l8^{z%_TQLNfZrX@F;~L3RCnjmteBNW#4(L zDMJ#BkOgJFLM{a*BxF*tjnNYzF=B%@;)pYos}@M~09=Vge>Yg^Er}u=Kgbx#f}{Fp z+F@3{N-pD*al7yIEOVi6u3i-8D4N1hc6IN=*}>EfyH3sD3<*hyScLk5qB?E*6ZqkW z7|tM$;4tFwo3*){(g)Pv-d6TN^Y>Tw^-gOP^aD%#b8#t5AOpKHD7|@Uhn5_rfspu6 zkBX>PjzrN`^aWaLR$uD)KT0AppP+ad0icfmpB}sRpZ&f4F8=(MnalO{_rXS_gnU*vAtpHU{hV?Fk_j&Ch!JY)Ie>lJu;GhBuB+R@ymKhuI3kAn zTz0Rp0`rN{^eE{=f9y&%f34|D%J`6W9OaXz!@w z|C=a+%dhnA=XvgZI147Dk(Y~8lv0cs7@`rO2uvV-l(!R@iR%ez@U^cJPUPLsB#Dp= z-=kPM!xV+ytCeV;U#{%25Cvp{3d2=U0G>=xh+&GNxtcGWW>Yl)_f`imO2%+ELNgQz@dz_O z;%Kgi1cq}Fj1f^Lml(x@?Q>M_@88;sGeR((Qe=~ecO*ow^wO)p#l?y|SYz@8Zb)d- z6ae|*pfGq8Q<8!J#(aE#zasHv9HI{>{5yD|WWa5{nf|Unw^9w(b(v|6g`l~satJXN zp-e5_!W)`n{qxUWDS>o4DWg@!&FI0N>%?hh3iL4_5#`y>mHgg@ow;w7rAGcwNVs(P z&pP@4^ys({|MO(8v;S?R2w|V|rIpG52?;&2e}&M$n9MJ#s>GZkb*+>QrVNGBye87n z^0qf5Y{f3c0Ge~ba!&f^pFI_TgVMmuY=Zkj4#*m^L zO1PGOWd%yFIfTA;iy|SF33ZCz;`os@z@XS@;WLMXx^B47)f_mp{`yaw_Wz@c9`0?^ z$B<@JrSz#v6QmM~3B~DrDXJq7D?nNvxtN663yWomlL;#)Ocivg9jYlwNJJjycL_x> zJSQTQ818SpBA}()!zC zV=0>-Ch>O^2IvM+OhO$-VA1hcLS6pgrXeMPLImByX?tPVD$DcoS84l+EiozVJS?}Xc{f$0bck1 zZ||t!|FwV8z5m-t5yqZ7waP2?0C%>|m*@dzOu;5xzzQ?|@%V~&j$o^F1d}F#OqDd- zi+~y*heQ4DntjF+NK-75l6=-qWBD-i6nyGS4Ki81&a1vFC8b*a%M<@(p&;J3PYG4$ z|G$6izW+Ns+3)=SHd3tk5Bb`zG77|dBYTvR0oNe#xn35$vEy2yn#*=x|31@=qENfw zqG!5MIJMh{8+gA+jxE1Ap!go%l3$8HJMx^rz2PcT3{@*)UG($U_I(u*qrdG61a>sk zVpkdT>NE;^%UTIrTwo2tpqepG^PY=%l?D^`{OL)9m4!Gkp@iGYj8~^d(X#e1}xDqV|nbMJ_k z~KDH))<>?r9Ssw=2YJQz>F)NC>g42>wo1JF3wB*pu zEErq-rymk`j*AW4v;w-}3oBpL1SWm`Qz6cElL@mr&eKEj6NO0(>AWy)I@orh(~4Q@ zIQAD)TJZnufpJ>_pq~GqxcvX{@VMjun<(!4|5XbBo=x+)O90*>f3zY%{#bwQB0#>& zIvJpu4B(%!P6+7As!DVIznJa+-x~1$gTpH!Y7K8I8t+ZWt}vj0?tr|5Vn#C?M1A@{^pC=T z@}U%N>Rpq*xo7gqre(i;h)j=Hbpk&M+tqEXrw*clw>udmx zYyf3b))@i1vVzi_|Lc$KjR1B0|LEYz_5V9P?e70KQUrVdQ7tWa4H*trEdnGIPavI} ztZ+*Zlr}LriZDzEsLL3qSVSw+o=t{V)7BWW8`+-IZ#T0J|M@~ZwGZu|HSq5UATvaP zM#h9qVf=u=RtzU-2W(|EI8#?Sak6g)cic%bPNj zv2a3eGH~4Xcu-oCf-=C_ykv1D?TP7Z4_^LHV2J3;Uttt2ANfm`8veg`xaa17K0Z3= z-hXbSh$H(B;uxSfrSpW~I2AehWc1S^&B$RnqZT`60HdgH=~jNpKvu>vPWxccxIRph zXr49rQV;7IO8NQcGrk%MP;>rI4hs3-PxiX^KbtAy{J$kIK`B|qz33iO5uGH^{tQ%dshD!F`H5& z>@Y|WRSCiwFv5I5E}{us9TBAZZ7_$+A+o`5T!7xP`hEu=5fI%=5s>%6#TPE^{B-v2 zEkKkK%IdpQv!h>Z^tCeK$XO!7p-eIU4kjqA`rXWt<{9fCWb%QRo=FqAmtyeT( zn1vRk0eF@Y3Lj)(%ywPKhE31q&HHu>p3Iu8w+zE`7sG^&NxP${BKWALt@~;}VRna2 z=MBdX6t(P0wP^tTJD8#;I0t7pm*AF6ThdI*TQuqBdqVL)Ipd5(oZz!*N(8;7?Z!1u zV1v$7_)_r_bKVMmY_@E|)kydTGddN?%wJE#hnC#H)4oBkPiQzM>}g%T8uy#s7IDeq+Ld zbar#|!|mHPi^Axgk|i=4bAfv`z8rzQf5LsTLKr8yR_VemLj?j$W=6p5h# zq8LJZ9PZTnj!)bad{d6ZJR=exTK-ywC&z3DK@hGzMT8?(&0gpkZHzYT*`!A&J?5x0OvZZvfL< zz>A=0YP9V8;#WI3zQ4Ju$Bnar5Ho>B-^Fy6#L`n>w;_VFByNIPj8ZlxByBx)x?$Ui z)9oseJCi&kgee?ChQJfVscCCYiHz*oXg7r@VFM1K54OPih2c{9Pw=yi-2dz!93B?# ze-1kNZzH8ns#9W3tyrf;EZcVd7PDs8ysCMEDB}b>4p7^sA(ClQ+O=XjyGpxe%1GC? z+0du3w*@lu+8&mKvQ%qfPHjE&$^c+D>@@!kmjeA)V*bltxtzZV`oF(-dQiOoKj`9r zY@`?_J(=;CFS~m5!gAqiIB#qYu=PZP9BhrIQ6%D1zxt*^0FtkIcs(}IEv%b%*Xveb z{OTL9rDZ{yfLAvgofpYB(cgduH8pSobSaZ zJu(jR%9wt;Lp6XPnhM3U@jz4ql^U#KKXW>2SFV2i<}UX4Fb*RGC<@37(K%o##qooK zqyAMK0gi9K5HMd>_zxt!;QRXTT?wwFcII8;?hv&-W%MKesM z%)HeZp)?q)tnk)2WtNzTkjH5P`m=q0gfxnMur;_v5rPa2vW$HtLvh{5o%s_~B19j+ zK%^Emhf?{hT#ju-Xn?|e!LTHxh@~hT3{TdJy1#+Egc!W4pdJF>%Qg3CQX+(X#Q=gr# z`^KvFoi+Xgj3}A>1Se7XATxH8&1K24F-BFfL|I4z&8zw;ouYo>g?}~onxGVNiTa+r z!9m*Wp{@BMLJ=Ezwa8xT>%CBY@Vtx=i6eZOJJijhlPyAh^}T1YnVYA_x)~7LLdzez z`&PM#OR=e%h*oGZ2hfV}lg??vb6XBvI0vEDXeN}*aF}_!X|&s53Hs?gL4Cae3Xh8l zPj&KbcSA^osNqD=a&i;Ve&H!KQ8`!gfQ87*ul3`&k_xq$DnVc{Yxx-7bLO06EfW#H zL{p&tcAY_vSJNTED%{bIzxiO@eH;dcxn!TEFGC z*!}gJ>sK17jD0XM#d?EGNQ_g$8P`BMQ~y6xL@{DEPcE|gZ-wZj?xh45Q%*=n=8BBdSlndSU1cQ^se;O-EFC;I8|2q^!QaTIzHDJ3KiGQBWh(TwpG{02Cv^ zOXPKt6lb0wmuJGEoCZEAC>-d=Y2t$S5urqE34Os8W|vz4QZkK;&oK#=r^;s0+u4YA zZCY_T${wQ;3RE41i(DFc5O(;%%C{(U)(e<#GK*cQ&VFEAmKF!h7zm+Y1Z93QK4vvk zu0O=+DX&&I$@v=Dv4m9pJR{W$O9(wVC_9b@roxj;L(-UKA4V8Op*#2z*)rQP*0gx2 z`J31LxP>TAF^rfx5j)@sM-hM#BkC;x2q+50g^fJy;;(iDJ{*c>swYM1{9ImINTgC; zmlfA@^R$vE4HfpkOuSy!2w3O;bG+x||Jgs?JL>Fz8!3`KW*W?00-yNuFZ%G`^S;D* z>)*g=n77Lx>8{Oim<`)_ub+Q>CJUnOzm*v=vw>9F60^y*ZA^_c&w|xadx&N8<&tdM z5c$HfMCxV*@zya(Iz~sm8XpoEhq_Mff@HPJ)})CXS8UXJF)A0rUW$Bx#%fp`+L)(r zEHTVuwQUeCVaUvZeM$p+nVy*+v6=d!#R%7 zxr8K^3&soRY&kz!NMWlGx;~G)>T>z7@SbjAIj~0lJ2*HvaNNYv<&@s(3^WeWhaLW3JtSk$_(NgDOtOF}l`iJCL~F}uVp!JAs8`&} zdxmicl4%NX3UCbU^pPX%-cOd?p^B<~S2)Z%+4iEGiG5n;!5_p`}E?`r}x_P(mGD6-dCQbDGbIF6sK?avBlQ-+wj)UkClFs zrIP=PXdBD>fYtE-z2nn8*Z=EuuZ#b@k8ijsnhUG7sB5bS zGI-ksZzKZ6_!Ho2puYePqF*qF{`qHbcX!w9PY2o6-T<<1t83n!{JdqoJ~d%S3>6!_ zkgfgzDftObqV0*0m!^>d2EyIIDsa`DcPg8pg$7L zEQb@rMlnvH3a<3(8wuYvM=&L{=^HPO%JmFUibKSOD*hX9XUl9h`OA74Sgi{-ypRTpz|#bDjYT^smKIN_d&HCYC1erGxs#bT1Nh z@Xycf7O_J9lW&|?@C3Bx{pbGSY2p3n@o{JW+elIIpTttH?9wlbVcAaF)2&u7<(Yo_ z;w>SGqdC~ml2f1$A^=pQ03G^Vl%}=u%av-1O^H%{T8|`IAw$Z3-TEbRqgoWVwvrRo zuO9g@d!mpDi6XO3e;d5e7!0(%r#b_g-kpYhSWn&0UuBt8RW}20&o`@lsEip15yKC$ zbohQE^ii(7@Nw5bbj!Z$Dz)e%t@685*M@;Y>KFxcg{HW=BdVUiXJHR=M>k;u}bQTXv#VybCXJ*3y~7! zjkI89E%#+lWkPZrq6g*2Oou9qE=zCErBxK7L zfUi>~5R@NpH}S>b0i}(M6Y6Ii_C3?Lt>3@@jgffUi@8A16E#G@*i9q0`&C$c3CKmi z@B{b*;5gl`82R<^w`}k}(bkW4X1g%sikC>a8Ttjn;xrqfxCbg`9|osMWL`ETcF~dP5be#vMLGjT^N(~F|lNqYBbx~bE@#m+(b+wWNbbU zv8y{jYd$#(8~_0NV&2HpNV1=UAsp>10{Rz@$YI9pa; zhoui#9JY`=ihp*cd&Ql#{WM#?%w}yrWE4;Y3fz!{nao8V3ts( z+yP8gK@I)CRCUvgsz13tUwZ$R_N9 z8(l*zuzzrc1AB9qhzM3CLr^G!ZtE^?546g0+=D}77jhr|>yi(wzWUz2+c=mzTc&e0 zUsoxo|DFVw3vz*a|L=YG{ma7#KXS#XS)mJvm*;$LzTf{=BmdD9 zt|0nDt^9X%a&+w4|Bv>%_kSBHlAy}8>Z=p^WH$AdQl4yNSO>1-Xb$K!mI#noy3#m_ z9vk}ec;q`dXftt;`c#k`Rw~(5%60;QvSwwHgP6FoMp|GHmC9v=QbDd-loRt+<~Uj= zzlm0rcN!+e$4red_d>Iq>14_cmd8w%JP2FA;>xpv_%bmBPCR#j;*`#dlOxAp=BCk4 zC`m~`qJB2A0Zft`^;LRf*uQ;Gm<@qYrv{%v&`)4GcD}=OY_^puZK95dDf1*J0FwTjP>zql5qRriSE*pG|qbpLNwYy8SH3lrbT~ zoUfilWI{mxqdjpI>}sHm>si~r*@?q)KPq3P3i+R6LUB45*&ybDS%+ z_gXXC&eCf({S0lsHLFv*GGC^dSN>}4jZZCl%5tV+n>aQ!5m%nV%|6x3p5ixN77P2O z9y6NMYK7)vn_YcEhT;nOZx*a3{d-;fkE8t)C;sRD@yTfy|6?OXQrh?Dt26%2g0`|A zZ&5CoA<8gIQEUghH$OjWy;VwM#=NzY#qx$lNvtZA)C=no?>s?9 z^1w{#);S8_C_j61eedVVvxRJv`4XeWu9}T8tb}K+@$%W+Y=y}X_b}qL3QB=TB7TJ4 zeK6+#KbL{W$O!bsd3N^}|5fN!FCxrRS;_NwKs=`48}EC_Kw;xZD4uW_B7P5!AI>9) zCq8SPPbA`FDcbI;M4_se*eRj#0dZnBh|Mhj#Z|WKY-J1I__06bGJ9 zGK;WytWxq@Kg3K@P4_Kh6_Rpx&Xss%!_I#)DTDI>wnb+%5=|$_vi|4qXgx0s6*Vmz zFPjW~ulG$k_U_$laDI2$=B1>$XV_$Tes{Tw7#+29BND_iOhndYKD0r=@Zj~#a>@`b4q5GC{iBsDw^&X8Sl_$<1+!R66K+T*5XXhOg*}xo zu}T6h8}`A#+mHJi7&Lmw)$FN%j!NZA|0-G$k60b8xcc^P8CnsK*z?eec*IskD}109 zm~5FA-AihkjmdWo^52&jp$D-1$vf0y5E%D;{>^)LyVM#aW=re~a{SMa@`WzV-DD9x*WPsm*=pf2EJDkAUIVAGtDET;#V@Vm%MpIIrt|D!{= zq6@$}|F6S+*Z=EeZ?E(J+DMV{pI)DxugdF-Z=04EfU?QzeY~V+n}~az3uRzLXm)qO zduD@XasS16XczRKH!&|Q#oxQn@o1R$+~$^&?}*ClNwH?npB9RvQR^615{6xe*f4|( z9VY!V^_*IZ3)H6WD8-g+=IkWS+4K51U5-EyO<9V5#32HYXbwVxWGsGhS-ArsV_Yeh z&jb9?UtWwM`wujCCPaXx9B#kyEuq=S8;QKINmuJ2B}x1z3@Qyoch%BPlT$bU^WjlP|2I;kpl8H?UzH!QyM0>P1d7eq z{|3wqgKsby7nSGH;0@&3DDrn4d2@j)wfe%WuTsM|X0VlxZ#3)@KR^4^rPdiNHI9k>O?Ho4G>VKkQuH=3npKz--U$cv_l2hBs zW}k#?wuw?D|B3uZ>(BpobZ}bm|2gjLf14?abjWn~D{=u+JEye(s9HUTBaq(g&0K+W z?RMTks+BEx%1_TEd5X^4iJo$es%1}E=lPw36edMhc^TtWbD!9geCJst)Vk%WkW&|5 zv&vO#CAGf%8eE7f9w9_-atXE z)0YCy$yrEC&`VKN7W6OAsWT`X7Em4Z9&4gP=&B!$CZQ1O9vpm0(qgt_+eveZW_)&1 zT}F^Q;qG%N74n}Eon<*AaGm^ja_HXwpB^7}_x~Fyc2b+wxd6z`vq$Lx!9J%@b_x2C>I{9xC#S<)V zWkR4Ed90Nf=r&%zAn443Aqtj;VBDxQXyeyL9(3dXRY`=-SXU_&mIo887YpsSpPyh@ zyF?9^=S!9j7moM&QHY2wLr8Ak>(q{6+fWXzIq#pWCA4is&5v0MY%2dPV+O2~|4s|< zzxVeKy8QneDIVe(WJy3*F9a@P5cERWv^ZEW4|lgSYRkL77ehQ^$ zlJ=^wY$Num_LYL3p8ORGca@XeO3JH(^!bTZR9~i0_euL4>Sb;w6jjpgXOxbr z=0}SaD|u0)63cQF(?!@abFi?e?`jbJHzIyev|kX4aK|tJ41hMAO{~jNt=U27_htK-BvGxccA0{^{Xyr~hrDc=JE3 zKm|-FCKRXhMI3$#amd$u@58$@)v>@y^{{!3jAPJ78{_K--pRAtIM+i^O!EM0^)o}l ztW>x-@XzlOrujUV&++r$%*eQA(2U+MgUa5kx6oiy-v($*Ec64d%d zMcJ`>lKqxg$-Uj*)%m5T!6tR^rJ!FDAz0NFku6yTJhXtV=_%!*?WK!!wsUSTmGQ8EEf zI343yH!kd*1W}k0DhWr3K7cKKz_XwFvTZ>l%8}z6M^_)@pa0NFWvjMKCdOs$+6V>4 zMkw0>O>>SJ{ToC3IOJ|n&bK}_-~Hvp_R>XeBuO`;ryCZmCE-^>K0mEox(=DRtWPMJ z;SkXsPKU%rmHMD#b5CFzjJe*5dD|!g>=7qYJogN(;zfm&G&J}HGLL|MLeU6+;Ix%R z?t(Pv+b?;yeb%uiouyh5`;=eAep#hf|6}|(O`~Pjr{uh?ZXVC8+5-<~b{pXz@BAs!^knGPZ>l8ubv495>9GnE>W(e#N-qYzBsBiBg47*Z~_qy)&$5eKEQYvEKQ zySdKh$>Uv9B8e4Rg1(ryTIZTiLjf*71C{&#%X~BgEI#n5sZb8X_z0gqXPdF%4M!On z-K;9sSzOv#T=G?3orz^FYFjQ^b(-3jU263|J95a|MJ@pA@BiHRpNISVo&VQHiYEff zx-J0yy)331mcd%TrZ^)JKMc<0pZ}CRlj4}8xPa>D25D(@@#i1@`hr3&cJ-If%jf5s z)_V1tuUvQU_i0I?rF-D>x%l%_gHKIuU2Qb2mRElb32Jxux8&X5Y@xe9|LS~Xmw#nK zSf^8dI;Eih%>>hX`74g`Qb`|-QltOv?-lZY9iJR``rk&1jQ@t{gL+#Gd@D(mrXts;UR@|zNii<(HZdF$O%ckqG&b9)j>SU-}lHNnGasJ zr?(pcueWiYVZ82geVZy9k9G#u?3* zp)PPJ`k^T1LVZ9eML}e8jR)XNFd`Heo8<;B|pJQ)L)X*=zZS@gN)nMF`K-N zVSj{ClvDK=5;-u~HU(Tf(v!+SU(6`~dxmJr=jx}kcW?Q?{&shL)i>egL|;ZViZiaA z62QjfN&hJnD9(f>Y&GsY!jXOr7$UK1Pe}PFJi$1Xu{Kf)gVX>);%L4DhSM~2o4{$l z>e*Oc^>;Fx&}9l9P|838DPJkbfKU&(fPquKQ}~KMpbuJo<6p(5d4e=lJ1paIB2Y+X zQ#uz?$u3ayqBkgv6}DnqP2ikw6bL9{(5RG4f{~77PD5WL9P6M>gNAA+&}H|e{7`Gk+#we zV9`3I>Wdo@&(#SIKkR_5Au|Y~Zc_PriuY5n!s|Poj0y}{w9B`vurI$z$z4kMN#?y4 z&Deq@=BNyu*TrTZdMp*z>7r|vJ*?7aHB~-Z%|J*hTJNb<2DjwBnjE^ZR-KOUS(h66 zAEFr!P+NlUlsfua)BGH^WyerAjb>{VElYm#-oIHK zLDp-*53Ih{%@Pts8D=SpgBoYus)kFGe*>5%`qp}xDV&s9-(k7(Zw`Cv2ZogRbP;n)j*ogW!1|(%55-XP( zh}c+MI+vM;#GP}$vjDB9)X{%J7c}}9rH1|=92`3G|NiO8>0U?wH&JTozuEw$gkS&L z_?gXuoYW8UzYG?!l}?g7vzikS#A;*FO{=9qugnY5?xQcNT74)lqxQowN!rYz(8H%~eXLWiiXW+}MyeGH|Y- zVNZf7YIwo9Vg_?hLd9dSLS0*&@b>3x-g3)!41DvYhX3n85lhJcwe~-k{~zofop$d( zHd5;Ne-;vGG3`$`FIWAn4(cy^vg&OWIUAF;YjH+!sWv)X-fU?NE)V9U^fzZMI{Mp{ zdipPA!L{E192^z$KkOYIA9eJ96Q!2^=Nq6A_1B{Foov@u<)~9Owu{Odn*~=Yh^MJg z7RaIO!qzF)7Lg^>jqHe?8o|oAENVbzTrp!2s=~0SF)k3#v+TWh!3xk!3uLwmSZ%i} zET_~Do2+J0OVpER$qci=D=o;bN+wJGSf?SH+q{C!n+nzPI%2M0`BX$b1Fbd0f-ItU zQ@Ns8)}(>HxX%6NQ%Xz7K{j1mUOUxiFB;YGe>*(Tc?1{n1*!G_+jI55gVX(v|8Jz! z@&A$y&|VW%!MDmudPz_9D&efPE@+(Nus}t_KuOeU%^SKH0H1$R^nWl$(F8xlgre2= zQA7Xtj@|rk`v)i8{r_glU%(AaQ$%ACJWB2W@H9p-7*25%aypv8;1NC`Ht79DM)_jX zL^}4cF^VGa5Rst_-h|_a9Y9e8Q#?Z;f$7-z4&$)*7Z9TdNn~Eg2)QVf6#4(y9>{m& zBo-|>N+3ZLL^wu+-r&vMuXib-sP`9eF2gXsKfePZrmQ!3!0AizzY_i4VE9k^Qv9#} zFn)N+|40AHX7S4$kPL(ZMmR#O_w|51CB3f)L-^SHdXP@|zX`<;y|4e@-e16bNHLi* zaQWtf^#%zgzo8)Q4RDCyOIe+g-+F@?3rL7wehQRPo&UF&=NDIZ7whSx`uy+jA0Hez z=YRkBsC)mhk@9-VaEurOcVtS1hkk%!hQR({zt_8g6i!fzDC_m)4}`w5E*|g42;9>t z5|P*#xREDf2jKLt3=ok#La1#HC>1ZoO)N+1bJFLESUb2R9c)aMH{B2h%1IA;hT zLn2k;4hW}6VS*`$VLIg>`FKhI>8Bo$fxqVca#a2*b`1KEL^!~FKnW#dJj5vqUzGsc z1+S-Z7zs8b?-e$?k#VpO_Kx><_x5-9_Olx5yy{AayFnzvKfbLn3^49UohLHY_r z=mAFmcS@&7gg<5jLLYj)E0W>>^?H0;mQk`7V#py0ro68mpt}0kfB!F4<6r;%zqfS? z0T_ep1jRiCLr)a=o;;x$qC29gMZ07qQZz$xDx+Wy5tzUb0XTy=g2M>)rXrrH0_~tD zs1ZwHDvzMR^=-C1dJHN0kcxCT6hDkp@FLg-2YdUc;2oqGzIhGK2~7xl`%|$=q7@0VjnSQxw!&G>0+pai|>`Hgt!Jv=f|)10CTBCu%*rw?VIWF&d#j z92ZXB#|RjwG~2%;GNtJlz&OS;L>Z)6s-zL7ECtDQ7~vqA_p*HmvhgZf00B!-z&Q!v zATkQ!?r^z(`PS@ZyY^{}gE2o6ARrUOWT)ow@U9b;dr|=G@wzErUfrurYId?1^s1GB zqmKz!5-5D2Fd6q`L{<(8$1vqHcsb(T(bCm3gBnkgXr2>mivBUhRFb7$Fr}PuM|0jM z600KO*CG~BJS?8r9WltsR7^h&#+-t|9v86@6>@;0CwUfOJy$y-SrHtKaD)XdKyivW zSr_XKr|Fnb{7)42C}Jpz5S2e<-BC265XTbmlxc=%Z`odt(}jQ}oL#7C;kpgxTU8tY zAy=T#ZYLKaKR|*bvYu~VcSPP~HdPU%iA~R>_Nb3HOp*vA)?U;_vS+I`1_DL6KlDA?Koc2?o91PkK5760-ycQ!-`ITuTwwVEEA#{bUo!seqn8 zPJ+A>GyrmI0*V5}=dy?!j!l@o45mnjq(so1^Uvj(ljn%fOh95uewZ-%jR>a_YM=JZ zxu5g(u}=w1#oF?X63@#I4~{)Dg$6CyA)Ka!%K!oAh`sD&%I-`eV7Jv`fI4?#JTQuY z5X5?FMVX%-a~@%U$_}`o8e+;}JXcIY#E71o+>U~XJP<%eIZ2mU#qu-BzyZAjLi`IY z?#ro~8#)K90R|bDXenZRKPeg$Dj60WSXY{^IH$++5tgyS%@@cmrPl z1kP@5-d>)cy?%QE-k$xqBkC!={SEl>`u0D-?(%M+nq1$4?=NmIUjGE%T;83(J-d8&2hQHU1wWqM-kx3EUtZjSv#U4Y{QBz6 z<^ARL)!k0-;y-V0FYfNZ^)0x3ck}l0;>`}YygGmT!<);i@4$;6FYmv<{^1_Hy?l3h zf5zKvo6xSm?Y+CWJ^%jf>i+EY<=e~qpLW2vm-km3;-EIuXZo5zP-J?`tIW0#nt@|$EtUKdH?oe(CcXlrO0Rmn`KPtM^Y=yC;DIi z{r@p3Q>7%6Ud7&2vVkBmgi}?SqFn?z*F-g6=}L)er>FExzW5v`m(`q;8HxqQWRx?_ zA&STom&|>?_Ij7GAWk?$)Hr{J^iw`oO*aj!dqp`=*#1RTJ(gWq;a9!h{s7z)C7I0m+!aLw@#(vpx8S`Z@&|)G!6)N6 zh+vASrv5@V<3D7aS7tR}VliNfxmY9?#0Sj->xpkQK7)CCK4}vKV;_5~`GimFz1wwk7+S0v8m% z^t_@^?EW8oT3!sd0gf4>sbZBMQoe#$B<5>3==Bcm9cKy_gI@1w0IrBQT2iI3S(aiY z%2WX7gHOTeYZPVwy}dYl^X_6W3D?m_?fw7BseAvkchLF&Zlq+lAa7-!u3qmie*sr; z!kOJ&Fh >+J&d%;78u$TUu0^#IrfH}WCFEAaQNZ>Ldo1t;k5;)iQ~7MS^ccgqGK z>+XWv*JtMo0OQRx2nBd?lr*3l60!xL+>lU1IG0&ORF&*6y2eH3AqRaE@pyt-#2Eh^SNb;)AfjMc^_{5goyRx4<8Ew{E2#B-@F!w}0>T{vB{w zQV`hvckp++mau$F@c%9n@`!qZzM~HTLLmbuhaz7b3{s(|3XLEgQ}UE$X8FX3WLLV< Wm9Bh-<^K-=0RR7ge;?HVjtl_2wPFzf literal 0 HcmV?d00001 diff --git a/stable/gitea/17.4.0/charts/memcached-11.2.1.tgz b/stable/gitea/17.4.0/charts/memcached-11.2.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..0f4af63d3551026f99fff000e1570063f63b2dcc GIT binary patch literal 104392 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 z + 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: 1000 + - variable: runAsGroup + label: "runAsGroup" + description: "The groupID of the user running the application" + schema: + type: int + default: 1000 + # 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: 1000 + - 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: cnpg + group: Postgresql + label: "CloudNative-PG (CNPG)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "Main Postgresql Database" + schema: + additional_attrs: true + type: dict + attrs: + - variable: hibernate + label: Hibernate + description: "enable to safely hibernate and shutdown the postgresql cluster" + schema: + type: boolean + default: false + - variable: mode + label: Mode + description: 'Cluster mode of operation. Available modes: standalone - default mode. Creates new or updates an existing CNPG cluster. recovery - Same as standalone but creates a cluster from a backup, object store or via pg_basebackup replica - Creates a replica cluster from an existing CNPG cluster. # TODO.' + schema: + type: string + default: "standalone" + enum: + - value: standalone + description: standalone + - value: replica + description: replica + - value: recovery + description: recovery + - variable: cluster + label: "Cluster Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: instances + label: Instances + schema: + type: int + default: 1 + - variable: singleNode + label: singleNode + schema: + type: boolean + default: true + hidden: true + - variable: storage + label: "Storage" + schema: + additional_attrs: true + type: dict + attrs: + - variable: size + label: Size + schema: + type: string + default: "256Gi" + - variable: walStorage + label: "WAL Storage" + schema: + additional_attrs: true + type: dict + attrs: + - variable: size + label: Size + schema: + type: string + default: "256Gi" + - variable: monitoring + label: "Monitoring Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enablePodMonitor + label: "enablePodMonitor" + schema: + type: boolean + default: true + - variable: disableDefaultQueries + label: "disableDefaultQueries" + schema: + type: boolean + default: false + - variable: pooler + label: "Pooler Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: instances + label: Instances + schema: + type: int + default: 1 + - variable: createRO + label: "Create ReadOnly Instance" + schema: + type: boolean + default: false + - variable: recovery + label: "Recovery Settings (Experimental)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: "enabled" + schema: + type: boolean + default: false + - variable: endpointURL + label: "endpointURL" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: method + label: "method" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "object_store" + - variable: backupName + label: "backupName" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: provider + label: "provider" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "s3" + enum: + - value: s3 + description: S3 + - value: azure + description: Azure + - value: google + description: Google + - variable: s3 + label: "s3" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "s3"]] + attrs: + - variable: region + label: "region" + schema: + type: string + default: "" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: accessKey + label: "accessKey" + schema: + type: string + default: "" + - variable: secretKey + label: "secretKey" + schema: + type: string + default: "" + - variable: azure + label: "azure (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "azure"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: connectionString + label: "connectionString" + schema: + type: string + default: "" + - variable: storageAccount + label: "storageAccount" + schema: + type: string + default: "" + - variable: storageKey + label: "storageKey" + schema: + type: string + default: "" + - variable: storageSasToken + label: "storageSasToken" + schema: + type: string + default: "" + - variable: containerName + label: "containerName" + schema: + type: string + default: "" + - variable: serviceName + label: "serviceName" + schema: + type: string + default: "blob" + - variable: inheritFromAzureAD + label: "inheritFromAzureAD" + schema: + type: boolean + default: false + - variable: google + label: "google (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "google"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: gkeEnvironment + label: "gkeEnvironment" + schema: + type: string + default: "" + - variable: applicationCredentials + label: "applicationCredentials" + schema: + type: string + default: "" + - variable: backups + label: "Backup Settings (Experimental)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: "enabled" + schema: + type: boolean + default: false + - variable: endpointURL + label: "endpointURL" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: destinationPath + label: "destinationPath" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: retentionPolicy + label: "retentionPolicy" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "30d" + - variable: provider + label: "provider" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "s3" + enum: + - value: s3 + description: S3 + - value: azure + description: Azure + - value: google + description: Google + - variable: s3 + label: "s3" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "s3"]] + attrs: + - variable: region + label: "region" + schema: + type: string + default: "" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: accessKey + label: "accessKey" + schema: + type: string + default: "" + - variable: secretKey + label: "secretKey" + schema: + type: string + default: "" + - variable: azure + label: "azure (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "azure"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: connectionString + label: "connectionString" + schema: + type: string + default: "" + - variable: storageAccount + label: "storageAccount" + schema: + type: string + default: "" + - variable: storageKey + label: "storageKey" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: storageSasToken + label: "storageSasToken" + schema: + type: string + default: "" + - variable: containerName + label: "containerName" + schema: + type: string + default: "" + - variable: serviceName + label: "serviceName" + schema: + type: string + default: "blob" + - variable: inheritFromAzureAD + label: "inheritFromAzureAD" + schema: + type: boolean + default: false + - variable: google + label: "google (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "google"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: gkeEnvironment + label: "gkeEnvironment" + schema: + type: string + default: "" + - variable: applicationCredentials + label: "applicationCredentials" + schema: + type: string + default: "" + - variable: scheduledBackups + label: ScheduledBackups + schema: + type: list + default: [] + show_if: [["enabled", "=", true]] + items: + - variable: backupschedule + label: BackupSchedule + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: name + schema: + type: string + default: "daily-backup" + required: true + - variable: schedule + label: schedule + schema: + type: string + required: true + default: "0 0 0 * * *" + - variable: backupOwnerReference + label: backupOwnerReference + schema: + type: string + required: true + default: "self" + - variable: immediate + label: immediate + schema: + type: boolean + default: false + - variable: suspend + label: suspend + schema: + type: boolean + default: false + - variable: manualBackups + label: manualBackups + schema: + type: list + default: [] + show_if: [["enabled", "=", true]] + items: + - variable: backup + label: Backup + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: name + schema: + type: string + default: "" + required: true + +# - variable: 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/gitea/17.4.0/templates/NOTES.txt b/stable/gitea/17.4.0/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/gitea/17.4.0/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/gitea/17.4.0/templates/_configmap.tpl b/stable/gitea/17.4.0/templates/_configmap.tpl new file mode 100644 index 0000000..7605060 --- /dev/null +++ b/stable/gitea/17.4.0/templates/_configmap.tpl @@ -0,0 +1,15 @@ +{{/* Define the configmap */}} +{{- define "gitea.configmap" -}} +enabled: true +data: + GITEA_APP_INI: "/data/gitea/conf/app.ini" + GITEA_CUSTOM: "/data/gitea" + GITEA_WORK_DIR: "/data" + GITEA_TEMP: "/tmp/gitea" + GITEA_ADMIN_USERNAME: {{ .Values.admin.username | quote }} + GITEA_ADMIN_PASSWORD: {{ .Values.admin.password | quote }} + SSH_PORT: {{ .Values.service.ssh.ports.ssh.port | quote }} + SSH_LISTEN_PORT: {{ .Values.service.ssh.ports.ssh.targetPort | quote }} + TMPDIR: "/tmp/gitea" + GNUPGHOME: "/data/git/.gnupg" +{{- end -}} diff --git a/stable/gitea/17.4.0/templates/_secrets.tpl b/stable/gitea/17.4.0/templates/_secrets.tpl new file mode 100644 index 0000000..215287c --- /dev/null +++ b/stable/gitea/17.4.0/templates/_secrets.tpl @@ -0,0 +1,233 @@ +{{/* Define the secrets */}} +{{- define "gitea.secrets" -}} + +{{ $DOMAIN := .Values.config.nodeIP | quote -}} +{{ $URL := (printf "http://%s:%v/" .Values.config.nodeIP .Values.service.main.ports.main.port) }} +{{- $pgHost := printf "%v-cnpg-main-rw" (include "tc.v1.common.lib.chart.names.fullname" $) -}} + +{{- if and (.Values.ingress.main.enabled) (gt (len .Values.ingress.main.hosts) 0) -}} + {{- $DOMAIN = (index .Values.ingress.main.hosts 0).host -}} + {{- $URL = (printf "https://%s/" (index .Values.ingress.main.hosts 0).host) -}} +{{- end -}} + +secret: + enabled: true + data: + app.ini: |- + APP_NAME = {{ .Values.config.APP_NAME }} + RUN_MODE = {{ .Values.config.RUN_MODE }} + + [cache] + ADAPTER = memcache + ENABLED = true + HOST = {{ printf "%v-%v:%v" .Release.Name "memcached" "11211" }} + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "cache" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + [database] + DB_TYPE = postgres + HOST = {{ printf "%v:5432" $pgHost }} + NAME = {{ .Values.cnpg.main.database }} + PASSWD = {{ .Values.cnpg.main.creds.password }} + USER = {{ .Values.cnpg.main.user }} + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "database" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + [metrics] + ENABLED = {{ .Values.metrics.main.enabled }} + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "metrics" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + [repository] + ROOT = /data/git/gitea-repositories + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "repository" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + + [security] + INSTALL_LOCK = true + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "security" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + [webhook] + ALLOWED_HOST_LIST = {{ .Values.config.ALLOWED_HOST_LIST }} + + [server] + APP_DATA_PATH = /data + DOMAIN = {{ $DOMAIN }} + ENABLE_PPROF = false + HTTP_PORT = {{ .Values.service.main.ports.main.targetPort }} + PROTOCOL = http + ROOT_URL = {{ $URL }} + SSH_DOMAIN = {{ $DOMAIN }} + SSH_LISTEN_PORT = {{ .Values.service.ssh.ports.ssh.targetPort }} + SSH_PORT = {{ .Values.service.ssh.ports.ssh.port }} + START_SSH_SERVER = true + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "server" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if not ( or ( eq $catvalue.name "server" ) ( eq $catvalue.name "server" ) ( eq $catvalue.name "security" ) ( eq $catvalue.name "repository" ) ( eq $catvalue.name "metrics" ) ( eq $catvalue.name "database" ) ( eq $catvalue.name "cache" ) ) }} + [{{ $catvalue.name }}] + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + +init: + enabled: true + data: + init_directory_structure.sh: |- + #!/usr/bin/env bash + + set -euo pipefail + + {{- if .Values.initPreScript }} + # BEGIN: initPreScript + {{- with .Values.initPreScript -}} + {{ . | nindent 4}} + {{- end -}} + # END: initPreScript + {{- end }} + + set -x + + mkdir -p /data/git/.ssh + chmod -R 700 /data/git/.ssh + [ ! -d /data/gitea ] && mkdir -p /data/gitea/conf + + # prepare temp directory structure + mkdir -p "${GITEA_TEMP}" + chown -Rf {{ .Values.securityContext.container.runAsUser }}:{{ .Values.securityContext.pod.fsGroup }} "${GITEA_TEMP}" + chmod ug+rwx "${GITEA_TEMP}" + + # Copy config file to writable volume + cp /etc/gitea/conf/app.ini /data/gitea/conf/app.ini + chown -Rf {{ .Values.securityContext.container.runAsUser }}:{{ .Values.securityContext.pod.fsGroup }} "/data" + chmod a+rwx /data/gitea/conf/app.ini + + # Patch dockercontainer for dynamic users + chown -Rf {{ .Values.securityContext.container.runAsUser }}:{{ .Values.securityContext.pod.fsGroup }} "/var/lib/gitea" + + configure_gitea.sh: |- + #!/usr/bin/env bash + + set -euo pipefail + + + # Connection retry inspired by https://gist.github.com/dublx/e99ea94858c07d2ca6de + function test_db_connection() { + local RETRY=0 + local MAX=30 + + echo 'Wait for database to become avialable...' + until [ "${RETRY}" -ge "${MAX}" ]; do + nc -vz -w2 {{ $pgHost }} 5432 && break + RETRY=$[${RETRY}+1] + echo "...not ready yet (${RETRY}/${MAX})" + done + + if [ "${RETRY}" -ge "${MAX}" ]; then + echo "Database not reachable after '${MAX}' attempts!" + exit 1 + fi + } + + test_db_connection + + + echo '==== BEGIN GITEA MIGRATION ====' + + gitea migrate + + echo '==== BEGIN GITEA CONFIGURATION ====' + + {{- if or .Values.admin.existingSecret (and .Values.admin.username .Values.admin.password) }} + function configure_admin_user() { + local ACCOUNT_ID=$(gitea admin user list --admin | grep -e "\s\+${GITEA_ADMIN_USERNAME}\|{{ .Values.admin.email }}\s\+" | awk -F " " "{printf \$1}") + if [[ -z "${ACCOUNT_ID}" ]]; then + echo "No admin user '${GITEA_ADMIN_USERNAME}' found, neither email '{{ .Values.admin.email }}' is assigned to an admin. Creating now..." + gitea admin user create --admin --username "${GITEA_ADMIN_USERNAME}" --password "${GITEA_ADMIN_PASSWORD}" --email {{ .Values.admin.email | quote }} --must-change-password=false + echo '...created.' + else + echo "Admin account '${GITEA_ADMIN_USERNAME}' or email {{ .Values.admin.email }} already exist. Running update to sync password..." + gitea admin user change-password --username "${GITEA_ADMIN_USERNAME}" --password "${GITEA_ADMIN_PASSWORD}" + echo '...password sync done.' + fi + } + + configure_admin_user + {{- end }} + + {{- if .Values.ldap.enabled }} + function configure_ldap() { + local LDAP_NAME={{ (printf "%s" .Values.ldap.name) | squote }} + local GITEA_AUTH_ID=$(gitea admin auth list --vertical-bars | grep -E "\|${LDAP_NAME}\s+\|" | grep -iE '\|LDAP \(via BindDN\)\s+\|' | awk -F " " "{print \$1}") + + if [[ -z "${GITEA_AUTH_ID}" ]]; then + echo "No ldap configuration found with name '${LDAP_NAME}'. Installing it now..." + gitea admin auth add-ldap {{- include "gitea.ldap_settings" . | indent 1 }} + echo '...installed.' + else + echo "Existing ldap configuration with name '${LDAP_NAME}': '${GITEA_AUTH_ID}'. Running update to sync settings..." + gitea admin auth update-ldap --id "${GITEA_AUTH_ID}" {{- include "gitea.ldap_settings" . | indent 1 }} + echo '...sync settings done.' + fi + } + + configure_ldap + {{- end }} + + {{- if .Values.oauth.enabled }} + function configure_oauth() { + local OAUTH_NAME={{ (printf "%s" .Values.oauth.name) | squote }} + local AUTH_ID=$(gitea admin auth list --vertical-bars | grep -E "\|${OAUTH_NAME}\s+\|" | grep -iE '\|OAuth2\s+\|' | awk -F " " "{print \$1}") + + if [[ -z "${AUTH_ID}" ]]; then + echo "No oauth configuration found with name '${OAUTH_NAME}'. Installing it now..." + gitea admin auth add-oauth {{- include "gitea.oauth_settings" . | indent 1 }} + echo '...installed.' + else + echo "Existing oauth configuration with name '${OAUTH_NAME}': '${AUTH_ID}'. Running update to sync settings..." + gitea admin auth update-oauth --id "${AUTH_ID}" {{- include "gitea.oauth_settings" . | indent 1 }} + echo '...sync settings done.' + fi + } + + configure_oauth + {{- end }} + + echo '==== END GITEA CONFIGURATION ====' + +{{- end -}} diff --git a/stable/gitea/17.4.0/templates/common.yaml b/stable/gitea/17.4.0/templates/common.yaml new file mode 100644 index 0000000..ebc9e98 --- /dev/null +++ b/stable/gitea/17.4.0/templates/common.yaml @@ -0,0 +1,52 @@ +{{/* Make sure all variables are set properly */}} +{{- include "tc.v1.common.loader.init" . }} + +{{/* Render secrets for gitea */}} +{{- $secrets := include "gitea.secrets" . | fromYaml -}} +{{- if $secrets -}} + {{- $_ := mustMergeOverwrite .Values.secret $secrets -}} +{{- end -}} + +{{/* Render configmap for gitea */}} +{{- $configmap := include "gitea.configmap" . | fromYaml -}} +{{- if $configmap -}} + {{- $_ := set .Values.configmap "gitea-env" $configmap -}} +{{- end -}} + +{{/* Append the general secret volumes to the volumes */}} +{{- define "gitea.initvolume" -}} +enabled: true +readOnly: true +type: secret +objectName: init +defaultMode: "0777" +targetSelector: + main: + main: + mountPath: /secrets/ini + 1-init-directories: + mountPath: "/usr/sbin" + 2-configure-gitea: + mountPath: "/usr/sbin" +{{- end -}} + +{{/* Append the general secret volumes to the volumes */}} +{{- define "gitea.configvolume" -}} +enabled: true +readOnly: true +type: secret +objectName: secret +targetSelector: + main: + main: + mountPath: /secrets/config + 1-init-directories: + mountPath: /etc/gitea/conf +{{- end -}} + +{{- $_ := set .Values.persistence "init" (include "gitea.initvolume" . | fromYaml) -}} +{{- $_ := set .Values.persistence "config" (include "gitea.configvolume" . | fromYaml) -}} + + +{{/* Render the templates */}} +{{ include "tc.v1.common.loader.apply" . }} diff --git a/stable/gitea/17.4.0/values.yaml b/stable/gitea/17.4.0/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/gitea/18.14.4/.helmignore b/stable/gitea/18.14.4/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/gitea/18.14.4/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/gitea/18.14.4/CHANGELOG.md b/stable/gitea/18.14.4/CHANGELOG.md new file mode 100644 index 0000000..90b9870 --- /dev/null +++ b/stable/gitea/18.14.4/CHANGELOG.md @@ -0,0 +1,100 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + +## [gitea-18.14.4](https://github.com/truecharts/charts/compare/gitea-18.11.0...gitea-18.14.4) (2024-03-23) + +### Chore + + + +- update container image gitea/gitea to v1.21.9[@5f9b30b](https://github.com/5f9b30b) by renovate ([#19627](https://github.com/truecharts/charts/issues/19627)) + +- update container image memcached to v12.8.2[@498f00f](https://github.com/498f00f) by renovate ([#19535](https://github.com/truecharts/charts/issues/19535)) + +- update container image memcached to v12.8.1[@18f10eb](https://github.com/18f10eb) by renovate ([#19442](https://github.com/truecharts/charts/issues/19442)) + +- 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 ([#19390](https://github.com/truecharts/charts/issues/19390)) + +- update container image memcached to v12.8.0[@ac16683](https://github.com/ac16683) by renovate ([#19394](https://github.com/truecharts/charts/issues/19394)) + +- update container image memcached to v12.7.0[@e63a46e](https://github.com/e63a46e) by renovate ([#19363](https://github.com/truecharts/charts/issues/19363)) + +- 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 gitea/gitea to v1.21.8[@e7ee046](https://github.com/e7ee046) by renovate ([#19311](https://github.com/truecharts/charts/issues/19311)) + +- update container image memcached to v12.6.4[@23b2892](https://github.com/23b2892) by renovate ([#19319](https://github.com/truecharts/charts/issues/19319)) + + +## [gitea-18.14.4](https://github.com/truecharts/charts/compare/gitea-18.11.0...gitea-18.14.4) (2024-03-23) + +### Chore + + + +- update container image gitea/gitea to v1.21.9[@5f9b30b](https://github.com/5f9b30b) by renovate ([#19627](https://github.com/truecharts/charts/issues/19627)) + +- update container image memcached to v12.8.2[@498f00f](https://github.com/498f00f) by renovate ([#19535](https://github.com/truecharts/charts/issues/19535)) + +- update container image memcached to v12.8.1[@18f10eb](https://github.com/18f10eb) by renovate ([#19442](https://github.com/truecharts/charts/issues/19442)) + +- 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 ([#19390](https://github.com/truecharts/charts/issues/19390)) + +- update container image memcached to v12.8.0[@ac16683](https://github.com/ac16683) by renovate ([#19394](https://github.com/truecharts/charts/issues/19394)) + +- update container image memcached to v12.7.0[@e63a46e](https://github.com/e63a46e) by renovate ([#19363](https://github.com/truecharts/charts/issues/19363)) + +- 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 gitea/gitea to v1.21.8[@e7ee046](https://github.com/e7ee046) by renovate ([#19311](https://github.com/truecharts/charts/issues/19311)) + +- update container image memcached to v12.6.4[@23b2892](https://github.com/23b2892) by renovate ([#19319](https://github.com/truecharts/charts/issues/19319)) + + +## [gitea-18.14.4](https://github.com/truecharts/charts/compare/gitea-18.11.0...gitea-18.14.4) (2024-03-23) + +### Chore + + + +- update container image gitea/gitea to v1.21.9[@5f9b30b](https://github.com/5f9b30b) by renovate ([#19627](https://github.com/truecharts/charts/issues/19627)) + +- update container image memcached to v12.8.2[@498f00f](https://github.com/498f00f) by renovate ([#19535](https://github.com/truecharts/charts/issues/19535)) + +- update container image memcached to v12.8.1[@18f10eb](https://github.com/18f10eb) by renovate ([#19442](https://github.com/truecharts/charts/issues/19442)) + +- 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 ([#19390](https://github.com/truecharts/charts/issues/19390)) + +- update container image memcached to v12.8.0[@ac16683](https://github.com/ac16683) by renovate ([#19394](https://github.com/truecharts/charts/issues/19394)) + +- update container image memcached to v12.7.0[@e63a46e](https://github.com/e63a46e) by renovate ([#19363](https://github.com/truecharts/charts/issues/19363)) + +- 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 gitea/gitea to v1.21.8[@e7ee046](https://github.com/e7ee046) by renovate ([#19311](https://github.com/truecharts/charts/issues/19311)) + +- update container image memcached to v12.6.4[@23b2892](https://github.com/23b2892) by renovate ([#19319](https://github.com/truecharts/charts/issues/19319)) + + +## [gitea-18.14.4](https://github.com/truecharts/charts/compare/gitea-18.11.0...gitea-18.14.4) (2024-03-23) + +### Chore + + + +- update container image gitea/gitea to v1.21.9[@5f9b30b](https://github.com/5f9b30b) by renovate ([#19627](https://github.com/truecharts/charts/issues/19627)) + +- update container image memcached to v12.8.2[@498f00f](https://github.com/498f00f) by renovate ([#19535](https://github.com/truecharts/charts/issues/19535)) \ No newline at end of file diff --git a/stable/gitea/18.14.4/Chart.yaml b/stable/gitea/18.14.4/Chart.yaml new file mode 100644 index 0000000..2e9180f --- /dev/null +++ b/stable/gitea/18.14.4/Chart.yaml @@ -0,0 +1,49 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: GIT + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.11" + truecharts.org/train: stable +apiVersion: v2 +appVersion: 1.21.9 +dependencies: + - name: common + version: 20.2.2 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] + - name: memcached + version: 12.8.2 + repository: oci://tccr.io/truecharts + condition: memcached.enabled + alias: "" + tags: [] + import-values: [] +deprecated: false +description: Self hosted GIT repositories +home: https://truecharts.org/charts/stable/gitea +icon: https://truecharts.org/img/hotlink-ok/chart-icons/gitea.png +keywords: + - git + - issue tracker + - code review + - wiki + - gitea + - gogs +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: gitea +sources: + - https://gitea.com/gitea/helm-chart + - https://github.com/go-gitea/gitea + - https://github.com/truecharts/charts/tree/master/charts/stable/gitea + - https://hub.docker.com/r/gitea/gitea +type: application +version: 18.14.4 diff --git a/stable/gitea/18.14.4/README.md b/stable/gitea/18.14.4/README.md new file mode 100644 index 0000000..1d7e1d4 --- /dev/null +++ b/stable/gitea/18.14.4/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/gitea) + +**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/gitea/18.14.4/app-changelog.md b/stable/gitea/18.14.4/app-changelog.md new file mode 100644 index 0000000..b828eee --- /dev/null +++ b/stable/gitea/18.14.4/app-changelog.md @@ -0,0 +1,27 @@ + + +## [gitea-18.14.4](https://github.com/truecharts/charts/compare/gitea-18.11.0...gitea-18.14.4) (2024-03-23) + +### Chore + + + +- update container image gitea/gitea to v1.21.9[@5f9b30b](https://github.com/5f9b30b) by renovate ([#19627](https://github.com/truecharts/charts/issues/19627)) + +- update container image memcached to v12.8.2[@498f00f](https://github.com/498f00f) by renovate ([#19535](https://github.com/truecharts/charts/issues/19535)) + +- update container image memcached to v12.8.1[@18f10eb](https://github.com/18f10eb) by renovate ([#19442](https://github.com/truecharts/charts/issues/19442)) + +- 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 ([#19390](https://github.com/truecharts/charts/issues/19390)) + +- update container image memcached to v12.8.0[@ac16683](https://github.com/ac16683) by renovate ([#19394](https://github.com/truecharts/charts/issues/19394)) + +- update container image memcached to v12.7.0[@e63a46e](https://github.com/e63a46e) by renovate ([#19363](https://github.com/truecharts/charts/issues/19363)) + +- 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 gitea/gitea to v1.21.8[@e7ee046](https://github.com/e7ee046) by renovate ([#19311](https://github.com/truecharts/charts/issues/19311)) + +- update container image memcached to v12.6.4[@23b2892](https://github.com/23b2892) by renovate ([#19319](https://github.com/truecharts/charts/issues/19319)) \ No newline at end of file diff --git a/stable/gitea/18.14.4/app-readme.md b/stable/gitea/18.14.4/app-readme.md new file mode 100644 index 0000000..e8603ad --- /dev/null +++ b/stable/gitea/18.14.4/app-readme.md @@ -0,0 +1,8 @@ +Self hosted GIT repositories + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/gitea](https://truecharts.org/charts/stable/gitea) + +--- + +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/gitea/18.14.4/charts/common-20.2.2.tgz b/stable/gitea/18.14.4/charts/common-20.2.2.tgz new file mode 100644 index 0000000000000000000000000000000000000000..a03705c84630d53af93b6d6ffdf44b22f1a2597f GIT binary patch literal 101828 zcmV)HK)t^oiwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PMZ%avM3aFxbEO6bPy(#_AO*-X(F4Cq7wHck63e))8g*%+5EV z0jod~N5w*Q0i?|KIAUL8UvHme1BpwaZX_j9vfaZvXWC*FkVqteL}ns0;j!tIh5IKH z9Ee;bWP_TOf+-T1EA=^h-ky4{0j>$^s?)j4Q?hZ@g-OYWI* zf#dHQPi`yQxo_mbVaNm)l!d%sK?ui!j<6>tvtgaGeGdyVX7QqrXeh`yhJrPp1awZ~ zMZSDMJrZ)#M{nK_E^5tsv#3aT$NT8t6@(C~p%70=AMsffu~@)6gl2KjM-w3;-rwK% zDfd|H*F84fr{SCmvM)aHtDB#Hy%BK*NAv@UIb~rV&07^5MfPWa1>vIN6Yj+{67cTF zS?I~XP(X(k8D2lh|XSAfW)Lv;Bi!r_ng*b}M&eanE9(_bWA&G*+n@Ol$C> zQbW3#yV;P~uKxM2ubcH&r{1VF{#==28VXE95(6+Y#WaxPH)8)Q0bFPCxPmnG9Rg&C zpQ)gVYYfC9B7K8iWo~e3HR`Q;tMaAi_4Zls(fogogBjt^v;i#T|IJpb+3aTd|3Rm* z<^M17?4Vi={S>ev4v?Azl`;I1y8(P05P`7oQ^_}RfYetM;2{Ylzfgbl(WlSLD>xgC z+!UN`CtKCjklcnx*dy@u=H2PLK02AjF$qPmK%7kpV#EI-p5Vx5C}hHHBS=gr*W3*N z^ij21L1=`7V2HiDQ!>J{K){Bl8$Kl?8WMyN7c9nOauQ(9FY%NhF~I`e(;z@Yf@Ylf zuxH>PKvy45xQ1|oL;0D_NgU4t;-iSf@;iKXL8hCOSfD6oLxLnXg>Ufl26(IF!uj$8 z63?ke&{fO?^H`wTP%q89J`&!NsyC)FT}?H263pa&c79cWqvY;fkkE56Oz(;p8SMJom)X!V>ba=Mm1) zTjmorco<&5@4l8lYUr9^|JRrb@-FlWP?W9a0L?vd{0LZj`013enc&V8&~FSNDRPB` z+usP$kP3=}Qxf3CfOstQx$L_A9+8+bzvzo@&3@|IFC$EYSxjywG2s&y`0h78gYG%s zn)+Kzuus1>6T_Z5#wSU6aHI(v@8XT=H&9~CtbRb z3CZt<4K8CwxpL9iijU1+1)(Vsl07;M>e%oUOT)%}EoC?v!u{_YyhNZ4l~9tMOX79*c>^|zQ1G@>7gkEYc319FdJ zSt11L(NL0{lcl87g`fz57JiiQ-X`EuNE}B|KnZu6ll^*BYolyCmZ@k-e1d6M8)8m9 zJKJ{9yGZT4duX^ozGgEpc|^QGf;mO20b_Tws0viF+a(%eImK9LU)w6#Efsd=2}#jb z_BM)w1)?L_ZFYacV)=GF4hW)L)6iFAYQ8V&rSNJjBB94(UV|Qgp}xZ0eM>_+olQ~5 zd~zja4G@~-`k~>ae%D7wjYh-NP?HkowqOyOGA>ZWe2#GFBdHB4T@BID3uZnI$H)t# zG1T@M;UL(kZ$$F4(68Zug#=(!K)Q&IgTQR36=?Hk#_nW`dKI7vo=d=3>uxolL?rY{ z=q=1>)GIsaDyCB$(_o=kj9`d_d=?XQPms^TKPPx7Flagp1dRfbJ+E9$M3XShr`j~QKQ>w_ei_#;r2ljkG$TfJ@mV+VY7GG8g?4~L2uY<`=n9< zgioZN|4~Tnj<2rXUtj216fytg{PbG?;&adbs%R0|o5fTtkOolU`h^1!3Z9s$gG>pS zP2{7nn?o|YDy96!mZ_lRZ?y#DS$NFfa}xJaw|AJl`YC3!$azPw|1Jy`*NllDX+Zdb z3o>QO!*7Ot2{y)Wbor zuobZHqm!TC{d&2F24^?#&rjjspX9$kzWep^?0OHK9-rL4`*3!BeSUgo>$zy6cb6A` zN3hpf>PsqfggLr?_wL3Zu2%A(cY-6Hlbx^LpPv?w`dZ_T06;RL0Q3FZT9$!cF~5AmYMxdCJz~CEKxza>*@>uMoJ?>yCT7LI3+23gOZgNFZ=z<^EQ$g$ zC859p)Zli8@CElopnj|McuhE)#ZuH++2`04mG}j8N{#gHMYBHYG#ZU5{G5_0aH>O4 zQeyJkjPO*^W~N}b@s?I9wjs6YL50f?=cnh#wvC!8E}?D2dxiUrQGc5V@xPRz8B zd;Nd}#1l+&#=F^ !c*D2e_u{Y_XDxUhij-BW4?G`#>u_q<`F_Tk2lI#+OL ze-@DV5{RJoqnI+-UW~;ap9#u z{1sE-)?@x4BA%HS342R+hoo8c2w3^vDLqGb1P#B+7X&M=U|N=uh&7LnI<-a@5Q~XF!J;okw`RUFo{7nTa4>(GcS!QK zSc!*K&ZflttR^KQ%=tZweOpZ}Uw?jYnZLOi8jEt-3)AVqU;8Kfmk)oG;WV}S>t+&y1=2<2Kq=#GYRtgg(C zBR;TT24Xp#+5yl*PCimDXgI$5Z~~vq@0uq|uZ_5=25snp^qlq{+%W?%nm_M=Av6c# zTqY~v>H{Fn1s2q+g(Lpl7^s%)@J*R7wapPXFQl|VU7~YHvHvJ;>P)%DrV>YL9AF;s2}#*4mtsl=wxs%_dD3xScs&2ZOX{K9)0?(RugQwH8t0Hh$B8>D;et3SJgnb z#4SCHF{L_P7&M$cAzjP0BP7K=`L>E)8Cheu;>y;ENbZxgh+Y62$W!oMRmy!UDxZ|y zDeiNExS_$aPO6DwDdYB1Rpx0{k9JT*y*tE0JM4*%h0FJC3(?$z?Okds`lM(~1j2zJ zG4XdTlnj>212H!kN>Whj&w2Pi#1q6vqnJ(6;NR{fAa6R2@A) zXo@4KVSnWs-~d8v#)T;Gl%>tpq4ld=jd+MXC@25O!}D-Jauif>3qP5@UB0_H8`Q-| zQ3;t)rmG3TzT|8Fwr9aOyh95%gK?uF7dQxLI7Xj7p}KN12d}EnpV4sPIG)zQY^qj_ zGHVF-cRUTObwgWIObONAr%yFRN7j}>|E3fmSyHAWQsIDp=@Xp4vl;Sm zD0d)r&Ip)Dv{*z!S%HNFv61p1U_rp{S_=iLfIBgTX? z_jb@J^JZ|WBhgjIS^>eFAa6n>U!4gU%VgFe->rd|wsw?wKf||o5eXGlVe&A^qCmb? zr{6FsCM1aVP^8;tA*VixjdP-$LkR}U8r0G7J_0sJGxorucX{+G;kQU`w8_X zNU=Ha+5tb1Awgpjk{Ao(S5$G?W4XXGc9-Np6V9cmZ%=!zy-xq0FfQyj7VEzwkZ80| ziYv=7yEwIHjV)!}ADuVatePCg14F1vgsZy0dx--U_@HVFs5)w+q2V$0igWB=83!{W zX5o3E!-D6ZE;y#vzdG_lwA{6pU-_^@|4IwHQ;Y~s$y8x9YN z-x(5eh{>qa?GW7Tb`Cm+OY!uWuQjCAh|01xRoJ51skd5*Q;Od^Y#(-p!`7(N8+Ay> zYmA83_B*3yvo}2K93AAdodQ?WHpMqputha0NL?wkt4s|>0#Vx;9k2mYLns6?{!9Pj7Lq*co-&tx;n*^bdNigQY0mkI5Q~Tb6Pb zOv70(UaL16bvv*a{3FsCHSy6wv)yVokA}F_8Xa^GnvGt!>o*R)PNOmO$f()%y@p&& z4S)H%Ui@ZJTjH?gVm+mIWQ1cp*?Nka1G-5!`eNjqGsy3 zK4u9aJETLp!=q9A0C)X{cjzBA{DV%%C#|;MJnSAc4vrc}-O+H^?fR{wPKS6$P5-dn z>NH2aM*Cnn8=vBsVt@EhjCHkQgnO;S?&0vTc_i0t>!8{54?BmQ#^}&L8n(T|Ua#93 zH4nPI!(Ov{n8Fp0<1(BM9H({}#X?!m0*JGX<$J!hY`yPhD@-9CF zgI>M076#gjjf5YrE)h4{iRYSnDm&q7};UPX8`sAoh4#`0m zlWuF&Z6CE-!zLa|;l6orct}WhZ44xRQ3M2DP3>Q4On#c-*ncR!?`cfNvSK;K6WA+> zZK16J$0accEUiYX**I!;?Cy2g9v%)4I)1N1hJNEXFVG!XAWo+=z_C=uCFDO(F%AE0;M7Y;)9A`6Cmko8As=It zkCO3oZpv@*owl`s`9Qhnn40Jn=+!jTo^g8!tc-hz2(MnR@76V(bFj$85K018BQe1t zY8o(mXewLbin>?@4kVwU7LMD}Pu!qc6;-RPDpS0WV{M?Two-Ao<$&DqswL3!@wiSzt~0!F!lCF& zd1450iDSm;S~bAYFVtdD|)%G)Q)#1%J zWU*YX$^`7BqdGM6gy?==ibaU0rKsfKz{%)Cpo7EZy3iB5XJ$XSxfo<;Z5_Q~VuIA+ z5*XCw8d4Knj(((^?-5SV3^NygB7!5TM_a|I=s0oCX9P$+qJfF$GqDpI;hNKIW}4ST zz>|J?BoXQOU%zqEg3G%fciF zyC*}4cOgzC5icSJuKJE!Z>_NCig;6`17GDH#U=S2RxZbe6Jg6iAi~YXAdhX#B94Y~ zn%Ha&J_3^FVo=o_aAP=;8^@WY=1yr4t6`qYLRry6gFMmWLOplvnoS3{%4h1*-3F4S zv7at#&dK%Hg#QGbXU1gZw6}9suhV=iY>Fzm;!d6=TPT%#skm~;&^TtZ$bK8En670_ zQO{{ZSXv$LN=PckU&_Qv4wgI^5gZ3n&=y$v5XgO!U@?oyUit*uIPT1Fj6*@Rrhz>% z!$Gh>_bk2xMePldXi7rpuxK3a0~7He-cc$};HfYZ5VB3hgw2EmO+8{yqjjR387F8K z269#}*bLp{5N5hi`WY4|ru?q5gZ}Z4n2i4U&sR1hnj(1(N3_oAnAh(PAp*|IEqtFx z#M|G|1?!;-5~Sf+7yVOfG;iV{n&8%MsrCs(et_-?<(F!nMvZ}z;8d%>eZT?rO_U&# z1NqbS)ycIiwugScxw+DR-kjLKE(ZFq_owO|fKraSw#Kt6WgAl%(+kSPuR4^%LSSzK zNgcG3jAIgtYcg^|Dt8b>(HdVFJsE_BSI;u{(%Iqg{9kD3uK`h!{U-&`sSbi}S@ra` zmZ_!o+O?{x&9UM`_4tlqAtUL+jmEFplvo(7aF%prmX{ zop$XmCiF|0E@VA-NK;UU*t;X455iwe5QI`oZe(JY5udPG;LAzJNhp$z>5A@rQ4Qp` z`D8S;a+dm%9;uQ6Kq=M8Joki-CnCvKl+ma?7OGX`*fVSgY3Q-3+tYgDm1x&`5=ad7 zNT#cxMW-+_GKbX29bGti^uE4dsYJ{_r97SigL*SFqD?{MT!!OmpJHPYK^G=rTjFS^ zUL|Ukdi#r%IMkmXteBFquOya}DGiV3m79^FFPUS=L z$rOivC6%pC5hb0#ZnHFraEzx!Ku!QF1;#4g#1JHggmL;CXqw6y`s`zbLzTkHr80bb zLqjRny#<&3^XZiM6bn-XeBe#01MO0`gRU$pR+fB&y}Ma7Q2oDP%FF8&->p0R!zRH= zWJx9_Bt}H#n0Uo^4d)#efkQk1E-X=yB9M`_<|H67lhPG}wX9rWj%O zjFi0M@7X4CIdGljOwChYxm8-ss#;#G)~&WtFYdISPQ~8<54EKjj5LmMiV$WVlp$*> z)!l{Qlh}Y&3DtqiOPgQIHDt@Rx~J}_c0Yj(U$VE>6LGHCoy-k zB(dZk{0VZ2Ih65du^h}PHI`7Y=*0v`%MG{$(|!WYXzwxcNhl}|+<`s*b+FId&PU_s z8_fiwAtdmVsy=!pHxmqlPDjb&di@&Vd%n-xNpK3jcdQBsQMrlxWA2Z}6Zntw4U8fF zXzY(NpLSA9NTUFR7%p5AXZS!eja**fg1aLNr4Z``A>3^MrmgD!jJvB+;%P_Bu|OCy z)QZp6>%jlP!yOOVJYmq14fzDzStU|NuiG~PMQB7x;Hzy5JkYazNj2l_usd>-9XsLA zI|%Xik1Y0x6iNqT5s=iU_i^C-zMJx2$l~1ZyWo^kqjEAO?{6jqouAsFnGLN>VrVKS zDtyz^AFHUAJvniFI?@Ul1POtCM;$->fB(<_%TwU$=+*J>azkceu-J8QcgmzN*6o=f zn&d+?8wS)%_t@3!emc2I&LdTA!%Xe5P3e+$oCq9LGSJld_9$hX0bZ@M;vfpkPb?tB zhG5W?)u0<{%9%T&0ja-|=w@k>jvq=sD24;O&mE0i6Q0BK5Q|k-!jWtq4lD+DG`hJM ze1L64pF8NKAw{!2J#yfc!l_RT*X7DClOQk(@VJhCWU*n-y3z@oPT^33-Vwt{HI0>+ zJ0yFV_W>L8BoqPrzOs)6c#LW_gLqB$vnB#wQ(ItyNnzLem7OwK@k1)e?&-qfyb#{w zq{VcsXd*5ax8cZ(S@H1SE}vDkkpY_(5Y2mKRvUu(Qs6t16J&BiX}w-AL9H-4vs|nz zGe+I?o-fIi*O}EB2)xvSZm-Yo$UoL;>ZH zigJoYKPm2T!?Uq$Hvy!B!qt9bW~V-x$S@skeYewjx**}ak4DTGM^YE@l$J7W_ffTh z8t4c4eu<;ki^&aFy=f|1j+Ef9dxb|^7@Gpb zj_KbxM>&RIZtc1HP>6(n+ApQ1BO<46+HDAOoa3O6x{2wVdohm8tp%wst``}CGmOw+ zktPD05-}k&emzTa{T6yFjCIo1PbT7c2eK(li8@tqUdsQ%vX(4fuG!Q#b?A{eb);%Y zlIi#8R=J7#Td@Vsc`aZ~LOSRn=KE;|8j2Sl3Ko zYPuxn95w5?VX0G1IgJ!kM}5m;n5wa1>L}Pn)Twweq}H2j`8&UuD{eY$p7^b6mkYIp zPe?FToQ%7ACyO;t-y+;0ItzRgf)| zOlE)&ngu03x+kCt7*Qm_DVqyj%G1_CKqpxszBciwHo!NloMy-z6TQWE;D8X;Mr;lKr^m>YeGx7R~f*h#JVukVKilM z)1}siO=3}-DwoJo$W9r@7e|Vz`T_to9W^76^240OIFMspVSwNH0?Wo4FfjZmjZ<{Roor&{dgAE`9z;I>vG99E_v`w zOq4ds%;|(-!;)5Mj{!Ur6VQOIcfk%ima9Ng&%-g~_1CHsM2Cb#pX}?OxaaOi+%fjqi&m)nz^}~!Ota3hcQ1S^Ex72lk;LN-0-r5{%<~4BCTO5y5 zwXqcSZVSJ$nHb7Nd@IM}Hj3HD#ccpdq*4@-RCWB2M($KJlro*l`s7&%D}wV@%`Uwn zQbT=`Hkp)cAV6~*Q{`=D zbsc4*HHVeTna~*SqR`MUb0LCSOmHNYPCPTReN)k7&aDe0IyM*cscn4jxNsqxbNMUA z*DBD+1O@0zU)hw9aBkgC9A{ST%W6Bd(7Bq_Nut#`7Y-`|W4Fo=h8*jR8B1ks;HjCm z6zVKeRT7X0r976DU#|vSSsSj;?!!D}`F1(%wBw(4(4oH*AI2}W>=Y@iH8wG^DI*^Y zT-~A4k2D~eS-);WEReftrm58Il9MDmt8Ox*=H?3m-wfg-PCzIjI$PIHdQjx%=upxy z@S(Eh`h8on&L^3|@=Z+SkVuh9gV%(B?v#-tw24fO1yfG@geb2R&Yack=5wVn*m2 zo(`q%Xb=qUsqiMwE=N8p>yf?zgx{WD%{z957k%w1RW2{anR}S?f}E2RM+@Oq;$74Xz#+jbj1Zzs)N41*V-63Uj&8MKA zV<(Yjid#joY9vK{14ud6>pKqPv11gg)ui-ie}*h1$p(-`!1+?uX(9LPb1qw~x_t(o zfStMJoLZ(hLvgTcMmN!p)d(oy-eD_cE*r|{_FCv0z>x~FhM)vGC!spL#Zja{WURx$ zuOmFMnG$Ktg)=Xef%dH|rF<|IUZ)iD2%Fv64aZC`Kx_}k6V)Tj8R}VMp(Busg1c>D z%Da2Axr>#>0@R#%ik(2F)Ws8dc2V9oT5>x~<{Ap;0~lPJt#+%ah~vcK=ZF*9=%fcw z$JI-UVhq&!Oy6;2f=NB)7aERfXq=Wafd#2(O|?FBlr!^5y)0@|_dN+-PHJcE#|Fi< zLy*((b0Nq{)M^DGliF_CPGHJB%Qj$v=l6h}jXf19gTaB1=X&CBC3Z$JsTuK%#jeYo z@-1_&c0@ay#H!+j(fCoPB~nhC33a?IftV9dIWQ9{C$eJsQ|7BG=4B=ugLAN~PAEVk z!WlgoHb2>ld!cS-8IGWis*nEAxuFZ{QA2 zsl59`=j~i2@A;QwCbGH7bSblF*a%%Emk=wDqdl_;T7rfc;vu*JPL4M&cIY*N`C;Ve2Kz%;o+8vw$+r*Q4*zfjGxYgwv}PT-)BqmbN#IY08@ zrz@@lp>+r93DlTC=1vLH0KrJVwEcxM^ip8@VtN;*x|Bl#9YC->M+x?5I1~D06OI&8 zZD_xxJ=gn`$S%z(M$!0I&JtBb^+BiSx4;dBPxXv4?hWwTOtU_!;z%C?>D>GFcaa6e z0yDVg4LtfwvOlf2h}>mbwv!YtBH6^{Y&s;doIh~<5qkC{$^P!6R#INOqe+f|Sco_c z#{sE@at>+~xW1*C-NVKHTAREhk&qP(RC6Jr2CU#*!a%sYsy@Ru-hZ6_o`^5t_7cs# zKXa$>kC0zlyT{0BBLyfqcT67XtIQ4jug!(}&^zN`p6uQnF2b+2y1k!hbq%cUaj;>e z?r|_!7q41P<(W|YOVYj}w{@3uQ|?MoJ4$CUh}fGqRrHpzR$KVa&7Ah#TOuY(X;#U- zf#XHv82cm_CP!l9QH@c|R7P{fXjJ+PAHsU^NG=e$IcO%r(FD&48WIvFW2J6`AI$=} zp8^cu)nqwn+meT%SDMl7BFLp)ivsKs^h!^`T_e|NMBf7})vLY(Ch74{B=;;ZO$ zA5q(9eZ4O6(W_a=XOR^6rKDk5Jy2kZ!x;|HtE50;^F31nB^+d@apk(xj`)n+M*2?c zx{BVO4KbLU-Z%)HS)6|IJvT)4lQDFfcN@3PR=RiQo6%26EVYr6reR?w^CgY9ySQ|S zxH_~q)OGF$Pf=a(phdIG%%Fa%Ml!>0AnlB1z<)*o8>4{CNw8O(OJ7+I`iR6ai}y^H z^F4LaWGT0Yd@`Jk_mGH_Gns&mFC^r?TIeYZvNlS^;ZBbA0eJvp?YK54Ja0fq-yUP7 z4_38nZDJnT_hxZSLa~n{dTRsV_jgVlz$dxQGL;s=Wk+!PG+3?FDWY>z{$ASM0JLy* zYXLz6ISO(kSB6HlpluwB5%plJxBGkDHhP}&1GUjwkgKk!)zm%M#zl*Tq`tHp$x&z? zqRK2(*cDIRQ?jRAu?Sqo4TskSNceje13Ab-mKz2*yweG@^f8cGAt|y97uMoKfq<9q zFD~lI$molZ4R*)C%Z%@dDU=#%(~cIW2mgJ6YO*A8{7frGxsj4%@-Y_O4JB-dl zDo)=R?`N+F^`R+i^FsmcX-I`XG+{yB+=f1_lvU=^-bER;VoCJsp@NsGaMU!~e7a?h>8yPU?cq~2t>91 zCDCoQ_^M{2>uaJt47EN0zJE3*+9=Og%zvvsrHoK|Rcc4Z|DKVUlFXsCI{UGoQhsvw z@~3Eg>tSy~ZYNaS!X&DuI-O5{=*n^MUv*fo@ASGOi>hV*AcvbTzbQnjyQ#|Zt*kyc zyEr?!L3&o)8inW8u9R4P3~3Yg5T8w7O$d%|hru0}DDR?uDN^L#{$H7*F~R;Wz=A%a zAFtoNm0B6x5yoyMXSfw$#`#OS|Be%=yNA~dPT3C#G&3nSqw2-+o3o2*L4kC%w;P<~ zTkTK(k*!`+9az%rPsi_nI$PQ3i5zq^p#nLBzJso{0-U(tQGJXsVVo!njN~7QrfhO& zn%gXO!#fGzQeNE_vXXHVb<>&+3=B#03G*GA|A79bRA;G|Yd}&1ca?dghQm7@L-gwE z{N~!6P7!|>T{=gVIujSDMvlG7zO&BNbr%n%-QR+CzXmo#98YnWwh3ghO2JQA3YIl6 zrx;7|m|&gZ!ZI#voUWtyoQ!5cCKfF_H&mEuGUb3kCz5?%0{g!DX%CS(300riOh5=& zk{2{(MnQV?`pBhJqW4K&h*3-uAsI&z3GH#0+G$})0Lz5ztvd1*gaZ>c#$;bqMix6{ z;GOEIjj9nyVPRgH6q0U3G)(3m8{QGm8VI0_^)yL(am8pTV7AbyGjSC@Nt9rb*laJq zp(4J4@`=SMRp^^Yg*cKb*NHaI4fe55}(vH~VBQc0Ya9Dg+`uypm@GSg1| zyv%k|-ynnrK>6a;tLNfn+7)LflOxkcMOil^V*)e|>!~a^$+91`6LEsK>;I+VbN*V# zQ~Wy%@jb75Y-$~?G%S5-586Q&L@IP}2ehO>;(~3OAGB?)2csTAI@VIOdAq;A|6eNb z{jdKe3;#9Yc)!nLM^O5&bR_Fv>;I*X%p_U=TK8B?>i0DC**&j^MC|{UL-j1^pBNhl zq>skDta+bsL6uSF%Dr^SiHt+M4SrZKzj%8O;orenFb3deX|$7RtK+8JbU-?@f%{6| z@wA`3QSJc0q$(PcKP zqBCxNGz{3#exc!n#8mtkvnh=J@o6R`LXF#!4i*q}d`HfbgQ#pqNatcJ$0u*8aai+_ zyp33Au_%t}Ks#_5pK;>xQfa4Vk+F>gi#^1ded#*cI#ElG;`R+Pkw4Zp_aDp)ZR}Ow zSkU%#q_?(hr1X#6p5X2CeQz#y$ivsP$}QYN&AiE)7*StTO#@ z!g*pTe8k~f>WI}qabjN`qD}F~Tb04%Rx*k{sx}*qhHH}0Z1Ps(cWX}vO^NkRgw+{` z@nLauF362=76)7^ozV=UoArgHIvh6QA9LV}!&w1xqFsIE^V{Ae2KKC8Rg9?@r2@o9ZlFkZUPUO>IO37dhJ z$OF5b)O}LV6EH8`dCr3P;oX+C9@1f1{)EA;0Zsi=c@iGa#6+$|llY(-g7Gv*AX($3 zNpq17<5li$a8gX7fGv`2j4^?P;uR=(69uqcf46pkK-zFZ< zbrA&*Zllp?G~s$fTHWqJv-Mr0)odNKzC(>?>2c z>+a-DSC^F#Dgylaflwq268bJ0<@NOjVw>Op0Uc}8PR4&f6$)a4Is%4$j(~(3`J`C? zwH==2G_Bh@Ra8g+26O-4@icH~B1xG*R_}F#HVt9_H5wC<5X*kZ5;Rr)R@URPo+)3C zm_LY!m!QSdk#9LnT#6eyOfbJvwiXj1+<&btj7g;!JfXhlbMF!kgymlfds*6a#KfGW z@HPY2e~n%hlR2Qn`b^NkjBypc@~P+Q-N{pp851YsV-J`&bhQ`+oUvE)Q&V@ly1Q!#Yv%&_Eg?WvDuY!^oMgUO%#JZ)zT@tnxj(>RYoNMcy)-#3c$?f*CA;^+W#o~m8f_#MY zhIkep^Y;*4*f2j;vg73UB@3?^a}G~qeTRj7`y&kqUvNRD<~s@J{fZ-<=u8vK1wB(J zrPNB<%v7&KqH6mK>=Q^A&J_Cmxu1He%KjVuHe^EL&(Ds9@2mcYLX#f-%pYdU7p?C9-qEFzf8Tk zKK^ytW|_5X+d=w9_DY)`(pZ<9ItHmv=S#MNzsl*l9_yY*=2oaFj*4V{9}CtEko zaPmY8z>4+XZshd;W@D@WzszITzaHxi>Hcz^X^6|!|BR}w>wuzdb^Q{@F4=}L0$j~4y`Ssba#}^lN5Y3C*ckgfBynBCndOLXk z=JM=jpp83Os9AG`U0W_>GbMDh zb$t<*M)OXvOzbF>F3o=Jwo@qH=9+nJ5`!eK)`H+{=cSDrsrm7ZW*```FC`SdyR23+ zuE#$4xQD)1GLWRBZ3PDB`rZ4Rv)fOf;Cd8Q8a0z6xf0o{xW6mq?WN*&|23*s^U);_ zR4UdL=l@bD&d+;RpilL51xX)903dnq2{bQ|9=Edkv&!mg87h~`e=38((~SRX*#Fy& zjQrQ^9rU*6zc2Dw`On7*ZJ{#Vt@ZU1nqE*ui1jqdrmukl%8jQ`Rk{HC9! z>)+l7`!o%3#rp4b53>Fr&33E3UH>of*!6#tz590q8las&57Ggvwwm_0`{U_>X{W~- zkN4pwG;n{kq#80NiZsS0WJm~Z@2u9yCR%2*(a0*A?yI%W9(1%qntTuPgVYdK9d4wk z{%C!;0yBL;1p4Luo3q=&*~#_U4Wv$l%#0k8*QuLPVvjhtvYYHFaJQks4um}}z-KDP z-W?6c^~$dlLO|`+u<7sSTHrqmgoAs$;FY_O-J9&#IEqvp=?u~*!{uyh9s1yQRgpND z+jvcMx6Z2vf-v}I1q7=bZE!G)iC(Dsyyj+b>-1dbv%4AG4&I&oB7g7Cal9YT!lFCd z{W@pfoi2ZKd~dA23JMS%UIU@(%TXUxP#3qtE z@@)fWf4jLpzCFJF$q=ScaeWwpvKR8(#%_+!F9s*a7iXu>(XL!LcVv-Fbh+q$Is1DN z*|sY8`YN|^1Wy@J9^eXI-0s(>xh$3c)!n_%t^ar1y@Ra(U!%2+|9z3i%KvJt(JOP4 zj+9vB($d~?yBQ?_(NJAaW-b6+Un|hFN&|NMyN8&QD=a2Ua!2H#m^xKd2g`k0vrreF zT3^Hpb8exTN1;ZclE0!x$(}kgP^C?+HVzIBsue28G|@#?x-Qn#5ISTPZ~>Q})L z!y4X-8lZMrv>?rIhtuS*3I9|UtEu*sl>4}0aFW$2`Fb9OM$m>!zg5O-$@%QStzx(< z=9(I)%}+H2cf&Ic09iu7F6z=DGZXayvv`S(tI#6vCWVAig(OL@2Oao3t zxP4VV?eYz~YbPIETU@7XVYy0UW=$$u6x6h2OwBC~Br_PVo%2E1%b>f}WQ2ATQcf6$ zN)_`*S@#rXQbSDz4bP(x;)YFib-#F3maA6qOt32wPbs8aPG<<#>aRCp_o4lz?&MWI zeB;ES?~5$!gq|B&*J#87pTwJA-U{vuY$OkzDu9e%ee08innFGq4VigoU=noxI zTffL&s0ITXI;HW(iDBC=AW7chu}Z^OufNIcbKE=KX{`B7?ek|9y!J+FMDS7SK=0%# zOQ%sIzZG_V5fN0qr!g7NaO_vp2hg@b*&Y$ze!5^$%fFfuZu7vESKy%ijh12H7Ab1` zC+)K2ww%(R6L5d5pp6Ya%k@7wT2EB|R_lLK@5`S5wp-i$zc2EX#s5l%@(J7PDO^g< z1n4S?CMBzhIiOku;n9S3w1%f>errrzO>0MzE+lreI%K^-bzXzu5s6n4+(j-mkMkgk zDPDWIxty89<#g2rA4XU^*_LyL1oT5mo6P0{AnOo!m0q)qc1r4BO*&QXVU#oK-crIP zfFDXX1HJ&n3aah@fX>uCeEPmUt7N#hSx+$yQN(<8BQ71GSt!wQb4%nCU4ZYalkK9^ z3t&~Y`{EWJn(w~2^Le(EPNd;vns9on&sLV_y(Ygo8bjfUn2`dUp@8B*(j;eSj7^vB4&jz>yuv(NK{$Yb#=!o=n4zD{%j~Qeg z&+tsEq#&l}>m=jjSBYcucoq^`_V>un4C#2qOTV;=Ss^RXOG{Xp5NU5dVPL#w#1osaCYsVmk!RZj<1hz-d*=m^)J;5Lg!aE$8Rpq2DfjHPkuSOJnf@uI1&%YI)czI z=NA`)U(at&e(vkLI!fdHI@xq2f7whr67&qQgPrwa2Rmi4g9%w~&;E9D@&5Ge^z!WH z*LT;y3~tY_K6HwcfXqADG$0R(wRDbdzPVt_6$I;*Ivy93VntfnZT#fd5kL8@KRNl& z3oz#!OZ^DX3i+>f&}wAQ|GJIs`QM8?pk$rc3A?8y|h6S$IG zBQFc7zYB|{E|-^Oofm}_Aea?O%D)PWNSq)hB|%YzsN@QxSIQiQgIy(KmkZfBN;{hN z_nL~}r*8gsHr9lAP{R57`E#XKt5tABKS(uI3Xk(<<&K7aUr&*@II2vEzvUz;32VRPB(-{|UNjxU#m5aG9k$Cq> z9Cnx8V`nkPL2v=J9ZVCW!R~H0s$(6P>HwoaT)!xO87TtOr21o5?rAZd>R#(vU!Kym z&}YV-^Gj&u7JDSYjuQ|sN;RBn*ZGy9pUV!`A>!xHHo6^@&L}{yw20wS&If+y^fx7a zXuH>qv|7OFD?EY%ryvW`UMb&S$|0+w>j1%ASWRi7t2kUF@tELYd*;O5t ztCV?JE4*&{0}iMUoW~M!8S%2a_7DqivY+hTs`uZ-&aF`0?%Uga`$hL{9ucqq;AJ|9 zi1F40YI`SM9vtU0Q4*K6{uxhBkcUh&#UK`ehZu!1(&Qp9}I(xYhp95``(aIr38 zH;af=Q8i+I)x5e?*Hk-W$0sa?*SkflDm@imj4PSP#{C0 zrI)ak&o_Wq|Ad6fQd2m6n007&Nanic@3Cttt>U|Zj;4Zwo^ zCX4{d5NxdgTPwiVYz440b!!ILngOJlYLSXpcY&D@QTTspovRl=BtD3*8YCaosBJ?c>*!N??IayOHwmX}xw?W}YHXpHAJQNqG z^Cg6^Rr~)Spx#q&09vvCcN*$(n2QG9``fmnT8UWyP5oHkTJyG-Z?o8b%WKr*^tB`5d^5OnL#bg*(ZU%TS4(ZK~Qv-v|45^=lT4( zqGh%9q%;n)&;~`dmbz$2Lw^_=_SXhc*_!VDzs9AS~!lYtp(>cZ8w)nvy8GP%N+f2} z+G{84bFl=Q?!kqX>NEr+#iffKr)3dS)|EZd9mAoIUg_Q$+^Uj@@8%?qsV`+q1I2xv z);bJ{Upwg;YmlDNd|3j+kp{97d$|_tBukZ4t|zsm_WJp=7VLj6=8`2MzCpG?w6|Fc zll)+b5NAJ*12)7#NttT`nHB4o_UlTaJsJ3?3hU1&CBD2+otftw5vHG$KF=jS*Bl=x znAbPJeXq$#=MOG$F_iDs(tsP$)wESy`xhGe4l!SqEIq|*Jr;_XNo`bloYav$BTv>- z3cR}(oNWRsO=);dqJVmsr)oOyo$5_p34biEl)QH;wRI&TV(K~crK1d#$)0%Qb4U$SY#bw z3cK=_Oj*3xWN)Sb@i84*1D8+#NqJq@eahs28jhu&`~vyknvH{Y?)<;i+}i(NyBr>^-|IfD{kABAYhfMDa#smMWD6XP036p%^G6q;ef?qG`;GQ z6PH~16h67HuhAIy4O!S*3m>5n4l_DuWBa-Jy!BvRRYN6t1Ai# zNf8LHuy#?+Hy@Jw!Gk2gA@=S_=tIhIJ)d%+5k>P$%WaMXS7pZFioTEP=7*N_c3nX+ z)j+BjHJ~^QGUPV@K7!7=&M5m;C$o8m1hT9>h;;#EJzB0}GNK=sK+NQ}Y)iDVxv{^{^o4oXiWJi9l{snSpoGw?yY7B>SlV&daUK1 z*F?Z;fAR}_GG0m05CtimkQjiQj7V*LCR0FpbJHi5J(D=f{=0-%BsTYQ%oKsFTpSaZ z^ahyQ5eaq$HQbpyEI{2VX+Gd~7$OQ5U7O^rw`|KVvecTxjI8$HmKf`YmY58t<*9yw#LnR8ziJ z^Nt&BSzEI8>+I=;DV=r}E|<3Sq&8i%zb*WHZwo}Mf}#H=1g@{_DU<)S6V9;^*qcmA zC{E=TKp!Lit<3+`JIKcWwOYOH{m(D*fJk?#1{)=#jgsNsgaEi?Hho$7Z)wk$3xF%D zt|I}i1fq_iReklhsY;E-VLdr*=@2}Zm?i}>FQj!Z^hPPk?6Mr2Z$U6yI&5X)+SBE) zjEM5>N@E+6tX_m3FK{AZ7I|i#>-GL`#H~lb#zmYJ`~MXSsJD35{9ny>ubYkkIp{PG zw)_7}JP`l?CKcuH>`Q9+^;!E`5&L@HL{PE%ECKhasrkUr`&8Y{1mWjFCN}3sh2y74 zxK3bxs=^lv(a#S`K3G3rX8o}Jl-QskJR+1oMX7vHf3f6|N4r4w_%Z?fMN?%P%3ngC zZBTz&>WG*>a4s16ln(KBz9taBYg;hcL4c0i8Hgai?ZdELT<>Sh~wfSS5nhKk*-oOg+rfT{J27rm@@U&vtV__7>k z#`DFo&7fMXmLR9|GZsu~$p%d7H~X3VR#c*Dqky4o@`d-&KWuc@KQj}&1QuBW>dZh| z50pl$whW}fZVx5UmkAzuQYq*PxcWO|3oa;ELxN>J-s^&8(!mL4lv4!oPCVsynwAX3m&FG zc1&_`(zKM+Uyh9%fm6Vd?9R9x%D<7`+>%|a*;>aRY6*faEpk{oAJ;|Ih4%=2A2EMi zQDD89L0~>S*m0WM8@29261594Q;!jZ8x;- zhW2%AXxshl54@jk{Jbaol%4-XB<7S05{eHjm`$H_1cEIq-OH>Pt_ zRsEf<<#Ad;C?*2au#bM75HV4O)GLh(!XrUq@eN4On)2TlB>%T@23KTC;RiOsg*9Sz9s%^oo9?iXh z9G-{u8meT@8d5Q5$@feTK*=ymZi*^S`8ZA zB%P9rQT6{+CnT8G`DEYZ`K>7f_5Z0>QT2|Hs3^bRa+uM)p1$5EVZVNDxJa*Ymo6z;EV#;QrPysDkN_XGn((|w=mzpO9A+O1?NYuf6l&ET{ zTt}~y{4=uX9a%U&?eM;2LaMXK`V`-h^H98tFByxfPJ6o!oV41K(i?TAtz6@1Emf!J zSBAn|PH!*m`VVJURX!b73yRjK%+Hy_N@tUvr*%FZo(#@6b=6U-ugP&+H5~EHp&X9* zbD_LJRk2k6WBw`S@eF4Eo0&f*kG~3hh5py+9c1G_8{N(}|Idp&px#By_w8U0VX!x% z0_Nw?m(>Z2CiPM!v82K}T4PDo;*idg!mA=Vi>f_1fU|Ivo+}_g$$?26z*WBSZ^8fn ziuowP8)>R-!!-XW3eUHpDwsvWQzrvC!+wF(=FPZZ(+k&=7(HVynv#|avVP>d-CH55 z<_}kkeE<>8v6nwZCYFqC)4x-6EP7ivL9yFidH9JjXP^!+>a?H1}1K z@>j5dh-o-ZD_Ks_Y}ViPQNSPHhd7Hw>g6glQiWF|lC!SI(Th`UO z%fDO9>PuREj>Di*`9G#CreXnN;Pc-9-)=Xv`9BXj&29Yei#$sH*MkjXzY)pb1^9(! zeixM$(tft+T5^86(t09ynmijjPSJ(b>482p$hsh{eNd8uk~uF)xA3~W-s&?3?oEh4 z3yN<0xN>>WH=!12gw+z->H}MS;6?QTFbwCGg)&b&*ITL$N>+$sLZ(qh3P~TNqzhzj zX^`J8*gc8O#0RM>#Q+q@G*6JK3*lZ&qvSG2r%~sd+ukKZ?iaZBqxvi{(f>(Lsr)zh zUMl~4r_pWY^S^K7zhC4j^#3^tFr9A338*N4@{4)_ovd;LI$7Tj2#S_C*L*n1`O_dY z2XbB(qNctUhXWDAslZ@}9vD zDDmofx+{>CZikEoYxn>qU>@iO^bPy*z(W5fB?|~2L2oBCRNoh`DYd` zpFx+5SgwDiORXi1E5bjQ(*_`dXJW!)`g?Jv?N6T)=l2sujB6HTx5h54P`edEN+f%yrH2_!?ETb z_SctWB383slBI3C+_%g9g_k=E$Tbk0JL@+0w+xQ&UEG1!1D>W8JNrdy_u>6F-oGa}P? zZf2yvm(Gxa_VaV4pwLSAx!IEja>Zg{DVBkyGPA5b&a!lFwE5gK+$2Y;)J%}{&8k0R zEXX}xn4Hro2R9r<6WmG-Nl4taQT^%q>O`%8-Q2fib>zR@oRojM7?gc_e`;$b!#ct= zK(EX&UNV6&0zW~dxF;;ySAXKWRR`8?YTQ15P82<-y;6nE&e$Ri?2BaBcA5M(vv!6q z&zw=aNGsYDz1F{qcKu_z2*)H8*JMezLMHT54ydJSiiEzCX*f z;q5s~*G(|S2?SJJrZ93|s*H$ksedDTu}V6^sMw@a!m5|BT!*ikNibntKqnMj`!hAU zOA4zJI;Yt3Ihpy9vJ0kXr8=2_QZ+Qh-W>^jGl$*sb?4jC`D>@CChwBjs&~`!*=l)r zf%LF+?k!{bMUzMh0LxmGq6SC_D(72L@t)A}Bwe+M>gsJajOueLNy01gTj{o*56M%R z?vk0Hf2Pw)7EFzT__-pioFC4gUs^leKF|G>*?&0k;wPkhNIk3kf7_i-#{Sc5w72>H zUgQD&bpV6C2@e1@ZN97zfS$Tby#SIj>-YgArNtuBEy}<0-;2{bB;QwMbkHRqoW#M< zebb?23NG9{(SMDq?;`x$jHH^;H&r-i0YI6mM`A%o)WgPzlphH4B1))A_Yp@tJo=Vs*XV|8R2wX1d8-d*#qeimv03t5C0~X(g3h2k^s= zHNTY4gC_pg5qEp?`C=!ZX+M8Sx1TZ3FT+;>7v?tfqVJK(qGWG#bo#Fik&#Y8w5R^e zQbV2OWipIH$vO#Tm$ElEsO?Z?S5@VrmN!K#LB!VZqpmv%?#G^QX`vF1JRD#jjNALm*^mU5n z=lPX$47mRTGVc*sUH6mU=U2#Qgo7((Oo9bsAslW;%s0p2&RjD|N36JJCVvV&Hz-q| ztY0x7={YpSa!IpL>&p5HmsdK0J|1!sDqWh2UDI}MB7W(NV8-aJrS8nEHdwmj?GVCU zZ%Trj#UME+-7Q#|%e+V;=GUFFYxm8fx|_xI*9i$zh*A#WdwSd==I@~qi($h7=fd-= zJ;a$|<%x$dzb8SEp73%uxojkxBX22+D_Dv_ zZXj5Mj)OoCa1mn2#ms1ItDG_fi;jb!>hR~Z@ns3_1$uT8KI$$<0qOB9tQA%on3&&& zIYu*=uf!hX+})Ia)`9=Xw1-w^OQ$|`1MJ<*hg4idYf5}joc)8I6BXP$(Om8bo;!_v*P?mM`k|l7-)t6SL>jeJ^wlA zHhbIipO<)2=RbP1H+T+I9@+b%4q>UeyuvXoTXsDMv0Sa0U~lD*8+J$1DIDQSIrlWm zkX^{4Hhs)Pj;1V`pDP7S))b~2{Dv%IW^#Wuma(m+=|8|z>GS7`IEr|Z zcgZ2dH?f5$=x(>~?e_f@=HM+_v4h9w;!QiluDIXt3m6g0j!`p)BprL0Y#e~U!*3ib z-s-g+F@FFjCWUKy=|S`Q$IVYU&R)Nji23UdLgD<_G(OKiGjbdt8TuFFp7IG&3n$M2 z4p9a>*H6bz)-^e*nXyYa>ly?2pvk+E18=lJdn6SK5|6M)u9*L{L;8o#?)7nvGN>)v zo|2*d0-Kb4avK#|cdqJJX4^t5w+Fj*!D`;b`9Tk@f0C$k*UyvdC~k}@`t*avBB<-` z`~M*)9Oe3da%;>}4FD_j|8}pH&Hs1MJlNj<^dgVa@xhUJildEK{?*L+3a$@$+C)kK|X)3#FDqsX~}J(sjqG*mb&x_!jp@*hXRygI%V{P(-W0F11ReL z&LqHMkx&$bF4fEx?C^f|E$p8^SCo9I^V7d&e!=Cd*%EHI&!`y6|f5v1?xrmFe8_CV{6jS>a zPQo4Gm?!B6KSqVzN&PME;(rZRJ=;F3(_P2$f?`@&a`qoYP!B46D2ZHM$ z#1Wsc=k@<>cN#hWpKfn!|9g=K1Ufa?{Qqa~-@oF&HX&XCxhil7j8xDcZs)y4KL8kRqp-w<$0sYu1dEhS(TATw1E3;4;Oa35^$ z?6SWK(QPT&9;Wx<1AYcTg7Fv@7qHJkDQ;j(%Nmb5VO1A3@ zQg;+(*(nj}-cjGg`_mRjUFIVCQLPB`u^o8U#L`M2=a{KX*UYx10`P-Awer6h7@lhI`jjUUcW%&%Z?Pa^UQ1EeMM zpJWM1!Zi64R^{_dZeWq|Yn%HAAVB@TF>FbONti`E4Wym`WMzb6p5vbuh{F_R(5T5% zZN5cWLQp}~Hea^SIKi}(aIg5kV^}1-DW_yK#srPD5-cU9)86Gchs8S#3r{qQl_Wba z5Ec3SO%!m9;raU`U)8*TDGK8^$xRVfVQ?R&mz2^}92b+VDFf?WL|7FK3Z5NAUL>Qi zczBn`A%T~q2nifKu(29vm=fqN!7vUgtGtC|h+;mt_X&xH=+0WrDH^*`2B3`8rl- z0MWYWc)v+x%3aj-e^sx`uq?jmpwgzAyayHL;i}lm;mr9`b)kUD1eq^cszmNJ%wQ23 zxOrl%#AaG0EUW)@GP|uVtt=7zscKoFJ zq{mDe9aCx4N@!f|D=%k*CeBg-T!^vOsV(yQIiVL)4brD{X}%4UjKGX?C-6s-#pvF{ zeEc$4^7)8rPe;NF&xaCDvOx+@9j>4W=#B{9mOW%Bh8p$)`G$#CHf+u|3ni`Gq*Gfe z7dCvQbR3jrCYWL8TrUBoVp1{FFi$+^XK|)()3F(xrTX}%nNzGr#`0zWB*_TkC`@5| z6EtE#_vphsr;y#xK2YuPxMPv6@vJxqFg=Xwc26M@)-r9iYQ&WVT&jDz&N$s}T1urJ zxKg8?4z$EKbd)-eo;Wl1m91FHV{Jn#$tWB^d7SJO(yv`ac+Db)v8u13spgBBXuWGdWSps;fHJv7EJ5`ixwxZ-%P^-hYk* z9sgbdbA+k*^kBRu;Xoe&W3nEY@GIx{9G$oMdYI}cc9N4=Vb^T--FA*MpY&L^G{;t+ z%kmv#pXpcir>~}Z{nH-5`VS!sl%`_1i!h51(|j17jz?g}zUd|Ds%fu$lIZHJ<6T^L z((BRwf0Co#He(^rb`_Tqmmw9?VHLdE1utooll zUE8;nIRRIyT>GXn)_QH0LPP<1D3WQ?P{`?Etx^TDtvd#gVbOVo{4O#t4YaUROQ{_M zR2>L}ZehuZ?Eq*Jd0-0rN{nfeN~8*r-$gw3Gr7|%C`AQ&)f>Mi`gorvA zla7`;^CYA!v8&JKlJq@xLiV*ZL~_#FmP369vFifhHT3Z+ejA{v4p}xmDL?2hd7#&~ zVea8-pO|jwg`oyldMT`Y;x5Nsy8vWS$)%>*WU((xi(ym1?5A-!KUG&1ZVdwE3W>J5 z`Yn72^pi!?t{QYY`eZe9Q;iq_DaJ4`=%thN0IZgpQ{^0yX9tV z(vl$2EvZy4GA(=*eQu!;R6g}?p%DjxceMLS^mM9i>;@r%Nx^5FMjLig;&HNQTJO3i zPEP^v>42t6msIXPS|?HrO?(R&p*vVS%!q9XrYVJ~i`a}!s$6Aq;?G8|%{n`z&l#Na zz8Fl=7jgY!?)ZLLI&J>tpIZOV9HDe}_s_=oAL~1I{NLTZy`}%>LY^-z{6G0LSjhb^ z-js9y3wQYkE*aF_|B_SoA)n_3Fb%CI@diETBk-sfz<3}1l?7ENgJF2y7+)UIqlmXt z14eXZT4DtYoen3 zuIu#}vK&DH(2w(ngyeXCZ7rf)CF5L$FRd6w;}Og_#nv`@8#`+e$}$+yznO5HWP`Q; zze22QBs=ONk%Z1TEq5a-3UrOYilFh}06x5AY5Dm1xP5#8AIt*;R&KgOgr$=BQ$Mx( zAC87F9;Yz=Wu`zNP5R%q6aR62XJ>b*|1IKaqyMRC@I3?qVaWWo!+~7N@mK~1Sq29A zegcE6y#TN5X@|#{In-9fnD^YvV(XjFdQsWFmL*{x`0MrL_ZkEJqp8d#ZWZqC%GFP# z{+*68s=7^^5^fcB$`T7u=&haO@iqHPQ)2lMBEERId8M+yjQz5V{qpD$V#R!PCYi=z zMG+6rx^mNL=Ej{yq zMZ#B?bQEl@7&Blo?kz7TmK6=jr4NMQ)C0j8TkgDk;5x+i^zS_};ccfr(QvzKqE4SQ zO@{-LDw4OfE$NFYVMP$WKD&9O1Vw=<(^1dvU{NG7l@28o{k3%y&Kv?m*=G8+RiFmq zTxH2#c`78^$35K}4HXb!3egZD&kHnyWC+K&dzQl@q*K=~M^y3RG6?7qIalPgF7rl|JK~CUA=h8#0;Vv;uy?AyHVA^N?nIq6c=+Q9 zKy%C}&_*y^tyq?G2?YL_R9b+1_%C$B27Dicd2Z#~qEnLvxaarh_6;vx!8hbbU65xf zpa`NQamsZV#VouuKSiCFndU}L9ugJ1g)0K=Px@i~v0Bu5LZ*08f7OmkS^ zo`T7$%iU*!EI6GiRMZZsz0(|GMXgatqTw4Sa(;_xB?&H{y~IgqcoE3=I) zope<}HTPZu!IYo!kuHJ(Z*aEHXB7r2EMryD5c zz(C?j6a)iRX@H~(6Y02}a zpkoqys8}{X1wE<4ruRjVm)7yW7P=U-#>e87PNbiGM1D~1qe=e9u((SiIMW$Gll;HE zwc*JB8%zJMg**-NzZm{UJp(Y?m{9&VD}Q(LzlmNO`QNPZMDo99NL=~fQ)uC5111hn zA^w{fREhtW1{=5}@<;5p|9;{8*e zA&6yDb&jB6-guS(mnR5QJQec)9ZX??WCmCf9Ow;-*z%uL3uu!6_tvfaubZ1&n;T2{ ze-RIJ+ZNure3Vl$%HW931n$kvN*#r13dk_QfT%E9)iM%OANVxtdErmQ*qDGO3hsle zAq4af7IznZCIIyT8A8C7jb~-OQof>9n6W|>^`g`(B?DGL$U;q3^o^0#(*=d5%9?N| zapWRdZAGwpmUBZ!=NTKJXAO#6{YdEdA?A_UYwj6BO@vi}`cOud3K-K`rjq z9GW(Ja>sH1Fm{^7_@;|Llgsemi%0kb5`8P*@YQy=fTon^e=3jhyg+wJ?75a8KUncM z4M*$(Qs_x20;ZOKTi)9}-M}wHxApif)~j{4|DHBu2sW!3Ua8I2HBMnK$Jp{bIlc4C6nFgvi?gyn+$p^JW~~LgK(PO7?gm zo7UcrnicZ`_LI-*em?t4bk76KABDFPcoZJNf=B@TFP(NK(79E`&$jMx3Y)dvHbt-_pgus!WYG&<)*n@vfvY3q}Z$=yARkkz|4DN@pfE?SffK-SH35+`e zz+o1HF@_)^AjAw(38Ie*W1awlP>O@PO=zF_GOBcEmc&t8=;21;m&MZF3IHMEDRu^z^s4nV}(}@-{|BIF#OV3;- zibzRS43dbne4)}Fu%HNfiCCRLs)L5^Vl64oZY294&M@RzkA|P;bc84Sh^0iY9E0C@@ShewAJP&|2`_-<`( z*B&=A;}FuyOWgxO#gZxKWAmEwDV?IBo;{nFv)lw*M?05SS!41YbFpfB(O>YabNRSW zgZ<|YrQ;F2%)%TG5t;G;xas_NeRJJD|J~VM`hPCuVLCS-Wh_Sd5e|U;4Lq%F$d6OK zrKq}28@o|;?ItTyMa^k#N>#)0{T>7RF`k#b;k}p3{Rjua9CIL12XB^V!ArZxli5AE z1@}rAMN7s7Oy?0&eCCzzY8% zvQnXtZyy({~{j7 z+%F&*7a0a`&^^S2$*aF5gCYH$qk>=%Vw?;zzB&mrZakFSk*+%WGDq>W8-{)n3d3kz zB;?_UGxDB34=1)5J?j2&j^d`Bp?$~Zx=DbQTta4iofB=C42A(%2SJMN1F+7`BZd+q z;&I^e4x2hPG4EU3*M<3YEjyUKaOpYe16eJ>A~ks2>-EetGrFaSVk%i~SI>sdArXFH zh(V~X43=lV?FDnrp))tZKy^cdry#;ll|cOos=FEtn@&c009RepH8`D` zIvp}p_CLXD2fP^**`2&dMq%;b?Tx8w^Kx@SxI*Q$##z8Muh^TjkWS$;oQWbn=SVgt z6lz()H-SJI@U|dVh|9cmap?8<$kJu0UzpYk(4QR-sggdB$~|V|7zlM{u=B~_3 zbQ6X6;SMVxewu6}E;mIh%aiMy23sjQqp%-juMf`rmv8IMo~0pdEWn&#zAHj@-WM9q1CYbK?}K0QeR>N=`Pj$+R= zHNV%$IC5 zgUNwbcNQuOV!iEI#vlJ2QL_~AgpGZu^ zI`4WEQBk(gASvQ9gxO@4^?IwgEi@|YXq_>)W`VD`%|EIDSv^T~ihUn~q>1a#B}`V! zf1~ggo@C^#I7Mjc)c@>h^8eY~*mdGRY%cwO7V3C%5O3HL;tr460#o;&PBOyQ z*KaT#F(z>X0Zhn{ofngr^nbhC02QF0qLA!v_f$=>&X|t}9UQ{tm_K2Gj*L05D(@Gb^Pn}sdH`0%m{AVKT}V4+ zdC?8b`rwuXUqOoQVZkaGa-%F+9#A>wmRh-`_v!cbIQ&0NZq}|zbZrE=p2_{Ek^k@7 z`F}U|wlJQKD-UVZ|8>-bYqx@^~i?;dXf#+?lxVt7q{vSk}&d69O_^g2*?D12ek7vNY z)XeuE9dBvO_^>|-w(5m@akgy!5=I3iS29|ZW9C-3WP9>XH~-7Hrfl1T+pm%jm8h`J z55qeMLIP44Vgi_%zYjieOkV02qP0a;=>y&3vbJYatk?)^XjsMpsHDJZW$jK-HT9O( znZM5Cm;b34wRX);$Alq>BDHsHN@T_Oh;08 zrh@H}uKxa3e(cFYZrvl4G1s}^e{J>t(c2Cz8L)T6g!w}&)u9qzMoGp~PsZ@GuW&$$ zF=R6t_fRod8ztE_ZTb4n)XK{h&?Q1W#&C2;0gm#pfMx^w5OnOmm}vmr&DKg2n0#jR6F1ZRyR4Eg)RsyS zP!yp;0v8$jXq<7E+8%h94~j5`;HntI)5A+}d35;Z7@S=OZTeDiz-!)!nh$=gXp|;^ zAe8o6VfS zLKcXfO$8t=Cfb!@VntPBe5AovZRZ8%Ie|6qC%8HD01@YoEI`pXi@@%dh*fks?lYaP z8%RU1-|EY8l(~mz!L!U?tUKXl6XihG^B>IiVFto9ABNd@1dAl%Q#T4R)ZH^q2y;x4Hjlq`|JGyI!D;W9 zNszEm(BS!9Sqt|>KNQ+NlDSjih^2(!25QbQDZWxT2{Df^aPv@_v3V4`3Fi#^U9mj) z!q-@<_$?*$8K?YH?_|qonx|I&Lu3*1-^SkFh9m!NE%pC}JZ(4&od%|M-mt|EVaOs; z_9m$mjWI!^2`lvxA``cC9~N1X4X~=_@a_hR$o`d_pPitn#QbdC@IpqC>2=#@xJ_e{ zF13yELbEp}=~>$tFEo2&&GJDnzR@D>vM5$`CIs!B9OPBDEFbWT zZ1hKq)usXz-kgUR+b8LHi19rt%m~h7uKtuV?>;lVnyHTp1+uGM40(mdHz@?c^8gS8 zAdbSEUo%QF0*f4_+$Sa!x!hR(7kLiH-XrGQE}GVJ)?pG~jq+4SEJv6O3Wz_Y`)g~@ z@&Bg6`E$I#v%R&s#xQ0*aYBvjFXE7dHz76@zzkuWPS(~xF-}J)h6izi!-{UfiR^mx-M-avi^8q@r>5z>@Pyw#06}qYZ5aAD6qtlT z>9M%EWyMF+PQHz)jZg{;&nxE!nA3n2r^`hAfKCPqr(2?LcR(wHYJ7B7C`-U9wj2W# zU=jyPWmnT)wa>2_1ZD_1`rCqj}n0Ae7a@r-U32KzA@t0}}a?f@mzV$E` zuACzgA`DN6CiN(&Ulp!*zm-3Ha&#g2Kwb%q`mX?ZiA&5=N^ zxIj#qKuw;xc8)bXY3J5nfIpzRQ#%?Hx+gMU>xhiQ6s%J49eL-H#c#|I5h0fI2kQ!y zo*0b_4T1!fozn~1%dh}9~pu)mrs(KX5! zqNpbqZF5zl+OSm>zK}%~`iEr!o}SZH(omnu8XcP{X;jpy*@~VGQp#=i=C%&8Y`IMd3DSyZBEfAyeg7jaRwOPJ`|Urm&K zZUGaFD>m&hD{OzGBgcN|f~L@tm}=yXCwa)>J}`4P-h?=bx>Vp-!%d-<$&OeXoK}KG z^7pcdn(+vr!Tz(pxn&(#S+faRD zsmo-!eISrsa+0=B_4>aFquX)5c8&A!K7+*!44~=!e`D9V|GU1kjQ_BZr-dFO#-GoJ zIfghiPkcFe`;K<^Imkza839bhgQk@3{6 z|6&woXKctW2`b>)b@=DFm?8>z!}{Oa-P^PMe|Gnl`rksH7WSWXj0uzftod-n3`0FO zDdrydx-yMvEbGN~T2yt#r}br=@)F332TyK*m-?+19=a=!OJ$OB`kRrVD-UZGF86*Q z(N!w$?=Ie$#q|&Rh(k=0jBP#VA$Ra9>)0Q)dLrR%S=P#YD|aP72&)Y14najYfQM0p z#zr&r^CH)8R;W_5Z#sc{fpn`q0Q2H2vRlXv=f+!rpGzu~7 zh$OcvHE&G}5v>p2;L0;}poF&o>{ZUux#4d>e4HLQ6HH?!GBymmyv73X_3o1_M)xcf z-r94_oz;BP&mB)6jaFCr+nhFBrZf!Jf{t~kXDx678fjLxcNcHC5l&yE-@ZMw`o_!H z9sc(1S;-3aRZQ*DmdD1T^fqQDy$EF)WVcbd4-vNwW*P*=o&~XQ;ln;SIy*f*KDs(N zJH5WVx;Qy~&CZB*%C!V^d3APi`1<(z@aX95-RV^c=6CooA&B3P|D&va8R9E+3$qDf zTpnItU!DDad^%qVb|U#tY%G&XfDQ8B=I*9-{1o!qYsv~9nWu8o@Yb&rUKrvBHg-nH z6CX%NY6HL}d<8n5x)qzcw|W8Z5-nPczhO-fFWBy=eQgKT;~2;;&KqMY?VkqCYKBxA zBBmTsS-s7G8m9OvqDp{M3};Q%7NaR^&vh^>fqrQUrK2=P-BVpPVzkIVY6BP;1I|BN z0~9y|%ZuH@hky;3<4ex)`3eY9dejrzq$b<{5gMeE8-SYj|Gf?S{BLu8V`=|g$TNri zpG}IT0f^IK1`E*O79MAJ6?cSGG~646QmGO08VSlqFtb8)N@xeZqILIrmS(8$-3)az zj&9+s<|o0*IjqIoJqFz9p;I66AMyuAMX_&=^sUOfYV z7dw=2CWCT$d~|Vq#g0FgZa3fOQ!W3Ay=LuNIDkE#|M&Km9sg&2eR=<5G0!COUuh4Y zhpflp?d#zYdrJ5D0Tx1O zl^?zOE{AFD1^5+`Xb997CR*$9izd@>t}*4HmNSB-syCe8m)lFdd&PHkp3eh zBZ+KJe&rwd;Bz77DiKqlr(b}tKhS=R&8Z##C&mVF{F%Ta3)3U9zMJ-gCjP&-Zsq^j z+}Yk(=Kom8WAgugfkptD!;2TTEA*_E^<834X;vrWpWnVcvx%|)*JG$%!`@>uRIlEo zg{G`fM@p_~>Lbk>Ns~^ZW}~B&`~Yf+5|4DnWcN{bf=T%QB?+@QOi?zW3s3|9-`QSw z{C{@0m;8Sr&oulRt9dZ@U;rygmXP?y6K8cLN0^*s3Ay~g?C>Z}u=lgvtQv|PmWS~b zCF#mM8p7xnk4G%7nig62izig2%hf@^ds7{`vZhW$AWM%+kPEEGVfBozSjd>&JZKH3 z3bnNt;M`ARGt8&86LX(iDmmjQOd%zJfo8?H9e@aBQAjEatkPkXacYk)jt{Sn!SVmQ zIzGKTIXeX>zk<`VD{%b(PA;!5f!6xJ2epS?UgTN4=>$Ik;-ck$4<;*rO;CQZMJVnXV7kg`qx$s>lG>xFoud(|Gw-=24fXxzXq>W-Eb4En^b{W zgyJL{@EY)_ao*dt=2FHr+4?Lz~0 z4v1N?{L3BmR6H&8znKF7)$4y7yE~gs{I|WGW&WRqJni+rSpop96!6nHDPa6NeBfC_ z*ajWQZ88vv9P}Mq@B!(|XF%}ymf4md%h9XS%S?+e6zUO%p5u=|-QjAJ^;>E`zb9E7 zf@G8Z7HH8@-7Z8wPNB|io7$g{kqG^U*Lg*`&i!{kVG71L}$XK1cnivOF z%{0u_6ZnI|?<4K<4b&RH851x-gb_aAy*%qzbgo7QUt!Z!6x65M#!di&ja_4kNs?09 z{1#$=YZl15EVa%3MH$OLT_&T~y8JJcWFUA60;k2=A+9hExMm3u43isJWFdi;MZ%t1 zu0cW7oNPsXQ1!|Ir@&#DwHfiU)z%BJy7NhfNti{@P9&1_K}x`?-mWSNzJeqp9k4N3 zuT_27>jBG&!B$WP*7dH(%vZIh?K$*(gkpQd`3!rDVyLeX-LMxFkV&ehS=u*ie5;2Y z4rz_Fm^R{s#ULaFGtJTwZQ2;kftJit@1y0_LvGMgW*-YQ!;op;Qr3+2WMx{C*4~t4 zrC_EZt7y~4Xbxl*LWWC$r16r?S>XRDe|~{q>Zj*8!^o zs_G5SH29kRSGqAxDtkD)75wYipgZ`e?&8Vs!**a=rvRg$+BTpn><#FK=ML1oQ zdr_6HEkOv4yLL5HF&^n`X}RzO`QZ8{#87#Bw-vQ)*Pu$?Q!yEQo&I0}og2Hc;5J57 zZ0ot|W!p_ot6sJ|;Y`rrS(9SADQ>6OE!~7#`$M&{zc>(Po+uKKYcQ!-on1^OlhSR1 zskTZKCUos!!4&rC{JL_9b?BiCIt*frODH!HfuCFr99Fm$DsD3-i`8vFDcScV{*g(i(% zf4UBOG{UKMsUOy#p!)ouXWLsq{^{HuDP007>D1OV|IrdZ&v6fKUD=L1c zb56AK{>gngylXGOd+zZ8!8tFcJ0sM`sp4>b>FO%(!*mQ6iX(Ph${Zms{*bNn!k`%o zEr*?)6jSD~(|p;q;ZeH5)!D1Feef%r+%~tw@_|U0X6z>b8jYW#?WM{U{Tm z21aNyI)3`_W_0UwVt08KQty43jviPPZGgh^&Pua7IDZ8*qJI87Jy-nOHrY@Rn>eeySA63e$ewyXKN6-JbvA1o< z|5)GIUB>@j$kQzUc{t;wGM?W zJfxJcrm=6UhHG$aL*7YtsT%$-Znxv9^M1;wf&XuAZ`=8w);IT-{C^=&3;r+WflBxn z6_5mKqOGvN$Bg;&Uo6@wv(oLeE7Q+pAUr2C8^7tsYW3`FZ+bA=z`WLDC1%s1SSj+F zVf=plAD;S@K{wY`8QDA#WRkZ^FkkHC=o1Y>#b#^|g?psC$`0^-#OfH|?BVcivW@3a z{tTCA7j_A|Ey+4LMPi0`=_0_a#40pMf|(XT5ct4=ee|V#wt^H_OgPU$t%q8_!-tOV zy&Q1wt}z*@euob}GFc7Hg-X?O3OlEE7DdG*pPEKz>H5$m|W=Ye*%3 z5ia=GeOmGVDf9lxr;-1!JNn=D`reZNFXEYi|BG2Ly#iQ~!%A15{5i7bu0@HiOr=I? zvVR4(ldDPsA3wY)#a#~5s}LqOX?xe*w<~ zOp`Ny=?^ry^xxnuRGIHx@?0$$oWonsB?IJB6o@$ry5JPaP<|x>afK=LuR`e#)?eOu_5WWaf>U61p=AWko~J;#4eYv zPJxJ&9$h4?wo2cRO7}m(M5G4@2kkn5=!qJiW0k1U=Mo~OrG{MZCl{Yu?f>pNn@AUI z)c~PxJbh!*0z7Jih|~GvGICry&-Ig-Y|~L1~%iSI_h| z*j=;s0N#W*FvS*#l)Y>Z$^_=@2%~n{I`&&1^=&EjFVmj^h6N! z1P-+H&P&CPTn$tU9hkA`If>>1X>SuB0nA8w)>xwv>t{ofpDA!N;wiz*0axE;LWQr~ zY|iNJeF6KhfLY{^T`r60B6P;1z+;&9gPQoic;=Xb`oJcm5sZ^*@;H=8Dj2hpUIChf-V>#P@F6`{dg3w8VHVFoO#xw6S_&`= zprk~2-uFqD&yV%^dKAtg^l4Ay`Omf!|7&w^dH%nUM+7+);|@$dLLX3q4+IT-?D{g0BA}xFRN?Oz6$J6ij`!V zty_fkz2T_H+s8Qw#IdQDD-n~m_cp8&D`~YBhdpXH8-;n`v|Hl)SPbw?hyN}3|JM4Reg40(vAg8|i+C7=zkp<1 zWEjxF=BblsWBz>d^e8xwL9J#B`1b9YD970|{e$vl0zVVQriWocdiqYmii%ikjC*o+ z#IhI?1PYkNES3#p@dCGJqKEYy-snhsSN2w{-^_0*53X2C0sKsg@R0sCIWl*t3RK1+10vgY-V48H35?q{<# ztlS4g=emNiH=t6zk1RR&5AZbcf0*6PD*iX||J}VE%l~6zcW-wo|1ab*`2TTsHy^eS zv%8;y<+FY~lHC6itlZfSE-<@maS?I|)12)`8k(=hIXoJ|=yr;@(ICKRT+l5cU>y!b z-un(`^jSE9+~NAx$Kw5lr8{53&@nWw)mA}BGGS(ZMq9j7#UF_1>EYNM?K zN?}`F@$I%|DGLVMZ|_Pf+5r9P3wyypFw)fyqT=41(1ZW?*&Y4txc-@Bw#t z(o8d1sQL=Nf__q9(&4Ch@>e=mMn0(xDoRJPgZpEFWMwe*2YV@Q(7}N zn_h1d4u@uSrsBbK%%FV?9799}8GZP;7|(#tEqrLeM!md+51hA2B(!B`6PeNMKndWS zhAWmQqfrBX&ciG|6*FeFdg~mMB<+=@?fZ-F(}um*RnNF1`((tV=S zsTfrF$>@1NiZKklqq~w2IAWw(;j|}3GP)f1`^jez$o29Sr08C|Txo%b#dgchV&eMLTk`8pktckrs0`$pkZ_LP;T=Lt^k8Gqz=3oe98d6pmmTg&4}7 zXeipvdsdm~X&;TV*v@xjmT{z#*g1>xj`MBx^0k^jU>CwFpxMc|8v7)NgTtQtc+mc^ z0ZFo|u~Ge=(;x}%qNl}pj)OX;!3APk5BK`xG!<)FEP)C%91d8DcNx!lIH8f&lo86E zs}v<9Ecs&J-tO2)-u2{n{^L9(Ll5riG_-LeaKU|a^G_P2Pz5ySuTx|GSXK(f{da&&>!xf&DCo z0N$558v`o!GhI{A)dX#?7C3oq2<)}x%2>uTmrGg!?^qvnBpN&#tF$!=NApv(l{Jrg z=66JNLXtbk`_Y~!)>^=FL(jZHWH@<8#NbgamJS>ne-l~lkXMc+E#_4e>A3lHxv5kq zMnz4V^ET?u%`4`gRCL(6K#g|vsJc;;X4I>$DFrClpG++(l_JI@Y{h5-wMZkT6>82X z!R>X9G0kd>_ru^QUPVZ>=U1UhM>lz?OozUXOmAr=_06!;~1Pa;4Ub(7Mjg{H2(LIH!*}O*0^M-qRT-u^r zo0W8CG+%wHYA7^Cf}M-9NiD5(rGBO1<#)Mx0=JhI^8cFzlSlRc*xOonMpQmJ!K@F3zFmPibUyeg2U0afou`IyknaZHjlArAov z21S?;lL!YOxJzP)e8$5l%6aU=)qmQ;pd#Sa ze`--K?Ui};pE{IxZx1hjuLQ)uR>N}otti54Y7L#gJ9$;v4*NJwGpu4)XM@Uu?Qs;V zYP!<_tMC&YYEn}OtXm9}HD1>vcd`j)uI5Ml>*ebLjdLnH=OL#15S@8!3(8Tfv-p+s z*DeKJKrN)XqV$5$>GbE~mk z6G|Iqt2J6ct|8#wFvPFV-%X`t4D#{SLrxhf$B8zzHps_8r(>IHb<7Q~2LEov=B+*P z70#WSZ@n}bCBzCs=vej|YP)`X3?c5k;dB*eR00*1FO&#LQ5 zW&};w$mM(Aj#M=@e?&6LCX9*MYH5m%_|?V9`{N6`A0Pg5^5*2~N-FL z7!)uhu;{#G?+VBmDS+9XEnBleMuoOZl+r@47-xt09fk!P;OZibKhrXFUO-XEzq7O= z60ItDCWkUPharW-~dUh~g2%asRPBMhZua|U66)=pM z=lR(Mh!Mn0EEaR`B}gFwc(+t3F%@TTGjtEgFeIRlB?zVvm@^L*=0p+=UC^eJ6ygU= z;K-e8rzoRErXaxO?)Am-;j8Pj(>MQdeQ|asw&h@>ddWEkN)EL9lt#c(jn%Ax?p+1; zw#w>OAy!nF-I&#{Ghe&g_wqE^|B_KSfR`|Z5kXUg{$)?Y`OoIw=C&RGXK!bD|92se zVgIAL2^(-Nkjs2bfyOlYDeQq(kLK+c#=xKPTOG<=R~j^Uv&;d6mDCYn{zJN`YoKaw z917BbeVMmT?v%Dj+u0s_+fZE*_fr~bd4m+J9P)9Ro})C09;(dEYN&&b!`FH< z@6CRQ(5=q&@&aBGs(J)D!sL>K1uH$(uD7HOUzcgSFIw-Mf}K_ zLuhG5(B^UJ)m^UUj<|LTzJe^tVwe%IX?IijD_4$`Sccy9H(d`YjMvcTJojjwv~Ma@ zSf77rbI0I?_6vChA$(#j0 znehr1cS!_K!x4O`{wgIe*JpwiFm>=8#oWRJJs17uv4*UfU?8%z_If?br?+om&=Vz1 z>4n21Ls&3qAy7)L7L3OakA%el62ly&?UHLRz+o0M4+(alC%WW>_z|*2EofcfrSwr* z{=3dq5`%sfC$=6D4%*=qBxN#GQY69Zt`8NsMAz~n87cFs)iVq6b5V4DXjfkyFLBU8 zo05WdH&Ss|E$+$7=V&L5gm|wAT;Q^d^jMU-4pU3zevK{L$SM zMfEhXyh*cTUXrS^2co}zs#(X@lBx1jW@7+E(sN@>SSi_(fKZZUoae9rPP5z^q)~E+ zFe$;wzZkflTb(fmt7JA#)5+J`1U^sZdHdQ6a5XNN9}vai6q0*X+ya!n1PK8VbN;~! zJrIrw8igdGitz(;`5~fqLRgMVfcpK?y`z95bO-7BAN9Z`Bt*8ufWgmsnnVdnneQ^~ zIJi&J)TqUJbHz57uz&y)S|AEB#N07N0Za52CAgTWA0HNf~%u* zhWfi#=bZDfVPyF_>3qq?qZ?TCM3}@Oq~$ddFcfc~Y>8udm|{fRha4+xcUAT;WT!5S zwhYec*%b);eJX8hA5Rjm4=hza#s%GB zP`@uE_ovpJevYS6|L2?X`&rUJHTi#RZSC6mpLchc`JWc@$ox;zf9;nLC(-=UKuPu4 zo<-B#o?yIxBBkAJwY7%cpyexH!7L$3m?nQhD;O<5*9o!I-8>%d^z*S$Pi)nP0e_7E zx-;w+Ff%WQ2~8~HT39KpTE5OymCIq&)BF^>Msn$szA5QSt;sPB=nj3hVrBP96VG+K zfuk6CbOhZwS2~-NbplZ%=z!G~XSkifTg~d7BGw-K&Vr-ebPL%ng?L`gO(dpFUoQc`?s?)v>d&HF#PfioTe zG~NH++;Z&y+e`n?#XN@n|C|l>ytaG_>*p~3i>}Pu?SsLk%D!$INs~L6L5u?s&@Czv zzv(O`JiJUz2 z_R2pR;uo$Yy3lGEU@iNj$d}CkSBZ;>CM{N!tURD7>snG!xh{OiXH_=AvXTW(n9CS) zUKb&)y$Uz#8vB=jLNH+3`ku-ONK6R|YVvs@nl1mR@%<_1@V9Sl53#&}e4X>U%q-St zhSR5Xml1q^0*4@WWTU#|nt3Pf0g3WU6x}{$ANWo&OD8ylr^0{1&Sf*;@8Jb)<*KV> z1ku>*TTzRqTBw1+@GEd_*bObM%a$X7L~@SuWKF++P_eS?(Y&NfTexIp%D;30l*kd< z=T}ExL6{$*{J|e)wSME2plm_H9}NiSFal+2r#o2O7YTuUua&3C#F#*8w^gq>(r;lg zfF*?Tv#-61I~6PwP$@zu+^Y8qrs2aSj8GO+Nt*7s;{sj{3y6m(jj2>Vjv|P${z^1o zR?A_LpjiIx3B@C&VTOd^)WgqoRAQg9XL`B~pAez4t#b$+*|C0#LbAIZ&@K}G|K07t zNqf{@n*OM##t6kBl%4yXp{r17EoNH>uVVhXYLcxQl_Zf@@g?DU_IP!`#w=a8!AU}F z0F-gUu%bbubZtmfp4rDwc2ze#C1^!^f?Bog&$No&1FMStnN~3;xK+XYNQ)cO-zsf< z13&mp>L2rIvj3G~QXcF6*T&}F-nxDNYjb^>|6?JKA-7$~!Jd!ErsmF1A+Bk?nYSTO zfp!G3%HU2lvXxmz2@~aOzuZ)QuLI^gM*4%1nbB73V3J`1!wLCeiH>jWOhJWcd-w1}MIf z#R?cFSpG2zizJlao&jJ=`V&QLyYsjNl%uku#r>je0e%`oOz{3Q0HS=nFJkRWSn_i( z%E#P6Z3IWCc&IGLKLdT7SDd(D-@ZNLzxJP*7D2nDXqK;u^AO`C8-Vqf+#ia2c`+W8 zke6TtL*{=r&RE^@P*rxT=g*>E+rH|~Y$#|%tHr`dD&&o^^xg|7<4pkxjNfl)}JAqYVp5(0}kIps{d2wU#Ws+K6J`ojl)y1myxRo{kn zzUSGrD5cKd?E_|K-d|fQ-~fK!SZB?x6>G1ye?#MwwT*IY*It0P$8ReuoSvS)-+ZN4 zU`PxglLY(;ip2E$@74AH`mf%HjqX1_er5mvu-^U0#}}Pd`j-CuI{Ig4#Z5LO=Pd~S zTdTJE;rRUO_1oV+Cja~j*{lE2`R9sxObCkt6>ssN8Z`~Q)$=q=GH{X+IAD4&9Q43O z=OtMEHANv2FV=fI^wrxWP3XemFL&10M;(8bq!Rg6p57J4oQoZ=ov&T3y!LRqRjf{HZ64gIY$}HWDhpBw&8Ba zJPcLS$UalG7>9cn7=;85P@(62mb*-#J%}`cy2s4>Q6g zR_>g`JYsD}tnz$R6Wb&bQ?`N9 zcE{?G+rR`4={^&lJ@RUNJAP68NS`$}9h@_1T{=-UtrLW{qhKNOUS`ZNu{f$El#9`O znLI~MTrw-t^$!&f-c$Z7OVY^KSfp>qn?O-%KWD)NHspiao)U=X@|B z0xh!=^0#p)Vewuo^eza(QLOzn$j7}TBQRy}l7DRM*ioTY^j6f==gr7gWSP3aOM`su z@zZ_85YPNl81XaE0RgMtV;V>7T_GJ6rr2cxv{#QAqS$pq_I1@8qPfCt*vwvlWAPb zGshk`mS|nv@sjm;7HQQ$&pcAn{@Y~#w-Yo>a|+O4|KHo)w&TBTY;SBY?f;8-4Euj6 z8C{BD2QqQWTr3XOWcn$N1)M(3^>DzvVx$s?1l$)R0Ep*cGRzR)QMwyCW?Im4ZYrya zXf6xC!?5s|q+e7q7IfcVj^|5Z24i1Pb+?i~_WHMP&)D(Ad6C>DDICCK9EB+}J~<$& z3bG?``8sy0m7myYJd7eV%FhebPg3SYNd*z7l39%Vr0N1M4~$YY0nLurLfT^E)P`;B?_dC}@5`^~PVHmW`#BDJ>FQO%Fm zp2|M6vPiqH0SP*e5Y96ANCI$W%C`7PCt@3M!75{TmqgI@DPFll>6rUhu1>bg@``WK zI3v9T%NQ|gIayTk(aFKpNBEj-8a~ST?R%n=%CL9R2O$tIS#lE|n1Ka{7{M?T5iZO_ z{9%Yen1K-EWRSraaFY6Lfc7G32x{ej)5b8t3AXXSe%4y*p&)t+a22Jj0wiM8eDB)6&kR9 zRCO`VNHT)rW=vpc*}=OkLK%lzo3^Aub64$7p24JD*V|tb6=*bIT%TcPLR*Drnzt}g zc&7YRB$5EFS;CxF*^F11ehg-s+qxxT>Y1$rnP6TMILglqeO9O?%1bY(j;yOf^HjvJ zHNzL6f?P08+R{$R^Ygh9tcaA!V6`?>n*HopYm!B^Q3&=@bPrZjd7sF5-{BrcmWEUc z)%RgWm=oVklEon8vHSk#0jtHFfKHFEu75c>eRX|#eDVI|=-Arx!#F+?$=d7eVRf=* zpf_>y{^&T6VD0Tdwq~Z16fXlC)2c~cv&EWII|$=g;ZiN?Gmvi)CPt=Bs%94Btjxxl zU~mJYaEu{UMybw85Qv88K4Snlx4waWR6v056A}%RY(UF|86rbifH8&z4^Q|863hn2 z3>`_;u%qA3{x}6unA4J`UwV_EYo4@LY}1tn#RP{pDZJc0nlcN29e*&PPqMwYLbu%c z+x4y~2E_zxqHepWL3om7!DfV=@TI=W+FObTqO#zrdyGa&t-PH__AN|3P3eO0sDqzw)Ok{_DoZj(z`gXJZ-v zZ6S}D|F<0M`5YZ;0Dp?ZLZd(PJ|5JmUus<=h;cZ8=OGyeAPCAAGP$aGAHgxj>ri!` z#0vH_=(dbdZtXe<6Q5Nx+Ev5uWj0wRlGR(y`Rn}yKWwL{nJxC$B!vM8eib1~uFxAa zz-QTUQJ}(i>}N&Zs>~5PiAbPxOrx)p8d%B}kbl`K-@Z?r}|03#DPUwRF0ARzLF|-6Ko2-|2v_-R<1?(rEL9iD1Fsiq; zRiLCHLiq}d*~b;a5cE-T9~LpdX^4m5!&)P%D|ty#dj~v48C3y)LzrA4rJ)5N_$7&x z0giR&n*4a)#G(f0mJ`EvCz0T!1Iu*%l(mgB zCm3dK@09b1)3DnCE32NWlBv{sYCc*e%7w>@$u_J~^0gWDg&SWShQi8-KkTG>e$HzF zaweJ9gYs=X=r2_{Ql=1ljr~(U(6=^47J1fs=PzDLn?3h!YazNp5U+Etl^G;GS)BAO z%?cCN;5kmEG;yPjp$DW>o$ zO9h4(SDkO^OvqTxG!IiL-FRA%9H|Pv7oy~Kevpb2mN1!jW+PaS>{Lk;jrF;xm%)3; zxX9dVH6oj@mQMLFO?f_F5e5x|Fik;@V!Wm~n9#|^tJ`%|rqEG%3ju~1hAeX@Rhm4> zu{~7(dR@<$T%xParSP>E;1UuLjWIzZz*Y>(m=8-1i&26x^W68OInPu}TbX#HCiO=My(au|GBa z7c2gHmA|KtWm{DJ3U1+p_N8W1N9li^IOsq0OM=R6Wux25#S~(Qm}klUvlCY^pn`Xo?TIYWG&mu1;$kq)DE& z7l7S9;~JL`{+VYfze;uk8CRp5JIl14!zk$|QC+ssl|CfV5XP4k6Wr>67iaHP%!w?m zY-V^d@g~~$<6MDq#UOyMpq~_&c&xR)cxL5J;lBl_K35>udW&kamn40V5G*!w+vMGH z&-PBU3e4<1j1HG1D(4-PHHQtUa&^R*r0Mm!w{p^%No*@A=P~i}aDS|*?(CkBzm=={ zrMMByNU5JEnyQ)_T*H^Z)TJ~E37BC9IFn*(xB-#9@d5KhPFx4K!g9^#@6C-bM)VkQmrOH zfjpsI;Xl4xX8^N@^YR9e$NjADtbq90t%+qY-56pPBwtCmr6+RPGBX_^pIZtA-2C9|L8nU?<#ihO?je`m|#|C>wyuZ27Y z|EGicDEz-Jujx;;3Fx^~AAb|5+6CAJ(;2q_3WM{1+NTEouN&c6<4zpkf>=A3eNAb_ zL7Kne`IPzZ6_`zP7}R41QU5t#25KzlW>EkKqD$&i)_)(l$VXb8D;gh&kkXuC$Y z=E_vAyWN%OR^;~g8_ImHbh+U?*K%0IV6=0bn_{@!3u8{I1TiWN{r~punVA0jRiK9m z6Yifxf3cm~0%=3^?dgCWY>RiLe-%SggstTWe+A<_=MjUe5F#Z14Tdo+u)wQ);Y51P zxR1Pw#ALZzDHl$e2*o{xXPib^5B)~@ff6uo6Ztrd`<-dhI=KXIus7oWj^fI8< z&7aE>K%%)xfsbVfP_$oK16n>_{vX4fE{7~iAYQvJGX$Sx|Kd&|lU)RE;Q!mZySDzn zxxKsO{|k9Uc(p5?vx5Q5V8L<=gjD#AnJ+2E_o(1L2{6Os0%DL5Al$Vu2%`dF48}Q2 zU%Lk5gh#zo+_-_6>T|AFPPv}E#j51bqz~jxRIQllxM;ii--Sg&znhNz%&$ax<7-~? zCD^EdF%CfQ0;Vv;uxH<3h;Q-&-X&^Y>hY~G+j1#toF|9xX~D^S4o@>HYK%2KUye{Jpg-CAC5 zr*@@rk$UUwKfn9m&+nLTu4jdnKi^?k@Czk^$Ym?F^{5PR6B;qOSN;{>L^?9`@BL`V z`@p?~^&Uw2i;JxojiB<{LqKnpu7sBWBM{~}24j{9onQ3HU$P{;;?9XNe@j1RUq>iN z5ael?u*(W!G=%o-zwgihh6lBs6;%1=Tux#Jla0+R=uy(MYZ-C~W(6kuJ2OBwxmWr0 zpO$K9l&6qov0*D>N-%W7QV?t+8!&|8R6x3=GVf8wPr>RD8jWB^cpB(D4IkJ(i&99% z>1R;c_-E3yW#N?Pzii z%1^&31D!Esr4+3dNV0)=PX~d$8y6{mMd``ju;t8NG5XZHHoKor`EU;!yNbS!^ALUX!3Ufc-pEFai(_gsY5 zVNRNjo!^{dRcBoCSw5I)#;p7ZQ>OiD&+@^1CQUm<)GM-f9p#*7ZRUx*o+YDj0Oj4q zeZVRmr3uW)3H|cSiat-3cP$O}&hFpk3z6_zys5}+&Ds|gRMu_rvO1YHw;ceWXR4O( z+@#bpEw!2M>KOob@@GBivYtK}fG#+E^X3`M?&yn)<5wq_*T0=zUh&Ud4gMWIT)@7p zP-XAnU%3y=-@bflP`VlMg}(jm+uua(TllbF+CmgU=ZBYIJ0KEDI(AkZ9y&jK<`QZcTW*}HGsS<#XAHl!<8>Im%2uJMb&B^uQyQ|+0oWlS9 zOwfy#eRJ~u_<&K0zoyeD1;Gk^FG|KpkfDG$M;V3(E2|o>q0P1KVO8Vdf2v#JD0XR4S!TH(g>i~QNU%z@j zzBxO5b#nR|Tu>xIf&t~g$}%02kaD{u10y&>#X|r-{yY7Wsg@b##A+5(kd0p1jP-#x zbiuyHFn&pS9Bq#>(vo3@S^>8DYcWTg+pD(0NBCHWKGkpgqNW0_If>VnL@}+ zhJ93kjdi-Pv=#us^gGyC7ccsWoDmss`uObEskpULR43!tqS}&UGmc$AjK)R83m5Ry z7-AwSM)`OjY^;yiAAADugPrxa$uj`bWRw`?w%6CKl7D}l$o=5$;l;_}t6vtfBZ%Q` z-V-EJ7iVWz3)>oMv6H5T0wGfF5s$tdFm5gI7(L)mX&8@^40OlL534&2R=(&1_$>h4 zTzhBG?_0n)t75kQ_HXk5iAhMt_}>N07zviLIWI;cttJyP5?*b|NEXOQ&Q4#SEsBxw z;cdZ41X8aKuMU4Xygc3q!Iv+NflvIaj?BM(TY#jeFYVvX-X0&U@wnhj&SRD1n_e-_ zjyNK#|HTes|10PO;47cscnG>(=H|chMW_BZ(CsqWZ*y;bV^8}isXz;S8YhrE+OoAh zF50i$`vF`o*o7?Eqcx;%k3c6i( z8KK)9W6te7wEq_Dn;$eGUw+^U!T#U>@%ODY+VM5{fz6+9!5Y&gm^-A#K4mX2QCfg{ zGlh?Vnk-ajqUAWcef>UB?kCfUQ|u&SGKQWbOa=v9n!gvp+9%W&G+p6~bLW*Ek?kM& zj?C1tQ0Fr_;v7x6acfD8v1lof0u$V)cDRdEbl5YcIebVM4&g zAK>Wp{IwMcS7OCF$>o`-Nb>R~+qg)zD96unx474u>wtiAxd8Myvx{#6z&y~IY8Rj^ z00C?D;t%G2u3}l~7?$zG85TK0DJ+aXyoZ)r$If{bJMQY_o#V|-*++pzbyp3n&#JKQ zn_Z8Xo9)G!dz?9a_s}feJM(m}#L7vsQhzFGtfyBfgDe2NKtsP&U&W%TRghgOxEBL@ zY|qkOV{z+{{V*<kgkcZv>`_69vNe9)stABnc z*4gg;nWrt^`K3P-*>2k#f1tdM{^MK>lqX%)cl7LTwE$)un?3S9!})Z;h1aGJ?Qbp) zTiskV&e7|yEpBbC?*bUjMG{i{)urq zLNPpu6HFP&Bje<~4T(RcJgmI$Qsjid-#%Ra-#1PR?96o@(COz_zqs&uwP{V5gp#W{gkrz`7%)F;KHz&uakiD!Kx4t(sWj9_b!p zNXR-+pJ~Aa*hYR;Fbh-btB*?n#DPrbcJT&1Sl~4`Jy?gQ=s2|=?1eU? z9&Ey#P7n6Lm`V@!z?o7Hu7EV99&AFJD(H~~gU@aOp}qR+03j(BKVG_}RGs$c3p_QO?x$bEUXbS3LQRWrPM8v) zx!&=vv;Qm6^D8B4I8F%&)`Ra*e>1PKx6o5qq>VUXPM{T?SCYEH>RANzvTFC+H%W#E zGzO%2pp%jfI|xCRq`dERD&Hq*D!*XxAxqMaR?gxQ>;VV@59-YtR=e1+T3m^G{fY$u z@P&o7bRY)M)_}DBxXO;2c^XhE5y&~KA;BQ}!D)!q>n?m;=cT!5&_v&-)mjWlQw4r? zAxsnV)rB&hZsCVBoo3efb3P2Si{|DAz8Jw=+rWPUv3y}q3;7?Tw3tQwZ_NL=ySr}7|6A*OOZk5h&-W<* z^GkL$;=d;Z-)z#qc9*VF_@`y&C;scuCO!Jmu(cpA`bfv1iNVDcHl?sL63|M!3V-Jj*5Az{O~NR2ZM_mXN!ANM@Nx>VaNtg{O9 zlGRIKoKCu=u8?jeL+X&G64f05(@5$D5JBq6WosSEcPS1V%Sa^Ml%v%o_|9EyWz?Eo zYBjc<#R#n>Cx0rL)hqwOEY4Aqk+thEjtht}#508dZ_NL=y|d@U|6ku)%72S^7!x@b z;|;n%4frg%ALab%DQKRQk1~m0Rpv*|<>ry;QI!1u*!%b9wsB-}82R36k zZ25ZD_2%8j<0P{_J4sw|cBamg^)CgJkcBlxG6W^ZJIQx{3RmLBn?xz`j94`ji^QeT z02<5BUBx&=6$u;5 z2CjYjNweo|C-tHi6gCZ<9e9_-4}c!@F#;Et024rF89mrg1j1RKqojzLHz!*wF}^Vs zsAlrX%JJx<5J@^A_{f30ehzMC1-MNMmYp)-gLpTtg56F~$$snroT$UR+IhAB+H@jh4S2DM#RpVj~XzA;dvVM%;8!)@OYs5r zLK>FqNHGMpr+?k4UZg-Yhd?obh0Iz;*kLdGru0<|if1#K<+T4a8MfjBYDchul*c0Y zYNs?mhh&Uwux-j>l=}#3$`1yvY*@-v?zHNHmD!ReTv0Bhm1tD~OSO=xSDvJ#&;WBK z+*;^0G1q9Qg`}$kfipN=rf*t*fi8!|L$=hIRU>tsZ_xreV;M~tXGscJ;LzYHr4m4K z23~-9gG(&A5^S;B(gacFoGvkE!Tl@62?(BpK=tc|s(#hc?Y5ofZdHzii_3G3CM2GL z^K$RgSwSJ#PEZAIY^=7QR((qSP+hZOe01Qs2KN(`7-$uV0Y36#4NDV!ZWxR$J$To0 z1tv{qaFO+0g$&=I?EyPO*4f6oIkw;ysiGZrS0G~;vFOzNpmf>hj-%EZy9PM%&3HBA z?FH`^7U&*6EDxG!s5@AHX6E`4JYN2vrR}(!#WA-+-~Gg+>+>_ecmMDGqeI94`(Xcg z!~d`2;e0(Kuv3`z#P(b3XIL(uCZ?aO2LnrsvVaQk31Bh;ucGS!ZP?lf0d?bPEdn$s z4oko1TTF`l;Yyh3pV`UC*meXzVA#KL+ zgE@Ul0-?*&j!23L0V~ zUIT4vPC>AxemvKUsF|Tf)DNQwM?U?||1v%@+@FGATeW|xni+r_NYL?NnF&jBCEuQW z6Wd?xtoNvx<$M!axP=7#50O;Szg542B4uS(ZL{C!)9(CVM*G)n|8acm#Q!|pod4^2 z)^h$Yq4awKKn!nCO!!I8|E@gC0f0%87F^L#r3YxY zKv1I!2@@8ui!sO)W`WaxodT#95Z=8~G}4uT(*))Zy6$IQp=@M5*Bq?kTJ(+|t3u;d zas}GqAE<*$o+<;MqGS6Od2mlVu#;@`;PzD$;SVGEl)iyRuE(!Dhen6)@k4z$157Aa@*R6X_Qzj?vCC=1YV z{vYq{JO1Ctha3CN;IErZV+1k}JAk*c#w%q{1L*9X zlGN4hMT@;xC!VC)Cb|{QJVs+>-5RxE2fD(}KQ`?`MJCsv7YKVG%kK5YT`oua#N6O& zQB`j8%I)1usux43!l6U0TOpE(_b9q5`JJUyFy58#Y*la9Myy6A7TYD%8mS(S?$)Bh zrE@1613XGRO}2;;j~fVS9Fk3en=N${-fvUyvBh`YNK=@oNL85sB5 z0-m4*ZBPrtMwtJzKlSqea`(RSsh9spN23E*|G)A7U(X{H#QZSn>GoI1{hnLj@@(yN z1KigB3jo_)M2?KVZ+C&~0l#OJMO%G9i~Cs11*5BQSM3Bch1oJbAeHK9QPA;LtKtin?#sP9P3-OS7!vZ< zx#q)R;a>(F#$QEj6RCM zIL*0}TLNP+BgilK)!BR4ep$q4V&VdAIbo4bVMbinHr7V1aft_Sykl)m(RN!=F5X?U zMajh8!Y+m+8Ye?7(P?M&vC2&zEL$>5D_f?b!>SdzJ%QvhM`Qd&MGX&l3*Ao&4Me## zDeF}5OZAVUd3Q6Lz4>;q2T-zNNXZhQDlgOEv`-L4v*6=t7r=DLm}}`|n89K~DjZ40 zSBI#!g_zZDzuVmI>dwoIZ8SLm6TmI{^20;MZ&&zIv570w{|!|^`>ZOP5SvFU>ujLP z({YROg_okD?p-N?3SLn*A^^d~G>g#`CEWb*DnlV28y-p+-gFzMYw=#y%s~D0dTzgRJL#N%Ki%_|X7?^wuX_SeQ zB>H7A@Ti8n&jp(Yoicey66>ym%2~fHxEKRifEYniu({?I{Wt-Z*^m}@WjGw#_X#4> z#?Y?hK^=2Bthgp3T_8{G^|NK{Ofej%aFc5--Z$BGFeSU3Vh?B_KKiw|i( zxFY694{72xs(7}-X4P5?1FGlNM@V7uY4t}4=hghEQB0bjjMgI!B}M+goL_y|tEPV@ zw^l{!TC-{`5$%I^38t-TfwyPeRseS!7OoEPdN!^HfZH>4EpH9CLX;QpGVaSzo`u}e zkK3CDv%!m%iw)0%?fhGy$xBLJMQg!nsLgc!{8#7T^$yz zv?p4Y?B)ftJrUW3)LYg?_lwlq0&J@`n7(KLMqMcrGq2J3Awix9D(W~R4HpCBg8-+R zX#HMg+W*8*$X<%uv3?b^;?C_?O~JXvI`5zz^|Z00CmGW-v9aKEy5k(98GK}?FL-7l zU57e>~lf%Ov8<5{? zEkN{xsYLP%mh;JBAJ39V@2bLHTgF(KK*AhNWsN|T4+da+%UU%yY1n-RUeg_lWokNR z;+7*AJ!tj~vSr79n#z6Jl4|Do-pSoAn+#z>x4Q(nlD9L-nbxNdh20oHW`_BBhI3>x z?bhg@bA&(GGjFH>%BkJv9FGFj7oDcW%bDJ>>_Fm(l57u>Dk<6bzS-J5ZJyfuUz`-^ zR)pQz{X|c@H!y*>sG}u#lmFNLft~+#|9Ec`|934$P!5N0 zvhv+~%W^!21=_ho4?DRiwv(kX4k;sY7T?1M68IQbhx9MHkTle`UQzum8Foar$8e>x z02%?zD*ARCUnn+zZHry6&^o}{J_3I|gx*`X4fnAAr^ER_Nv9}-x2UrzScCo7=){Tt zu|GQ6#Q#{!)0u3`RnY(8FI%o9MuV7AZV%-SXH&)9!Iyxy-e~SseY(r z8@kt6l{W7lN1B>L$&XcnwHg%f0t8Y?F(}W6o0J*Q5-^Id#go=gl3EMO^%sjPtPnM+dXI2hA*{3 zJEj>?nwageH7zsi}dUw z9|LXMbRX1veF1WGi@v-^SqwvT7RMm?=Rbe@ufQx7SoZLR1lV3m?1P2?y%D1Yk?G!P zfW9{hPI5FhOR_h<>#HsGMO*q~nSb9k?9n_Uom!XTI-A!QmI^f$jO!m>$8WIXxi06u z@f&krI)@SurGJFH7 z$l*~_&$_eyUAkE`)^k&1aB@NF9apBPfGp%5^Igech!#jxKsymPW%Ek5Tv##t7g9 zY-cE+!UQG7pxnJCJ5VzbSsGQCXP2;Pky>c)Z0XaEpOQfXIP#h>0K-NZEH^Lby(y0TU zW7prJUfIdqdf#@)YNb^Sot+(bG9K?-PjTe#ITsa8@1$jocc^#vpu}K@?ACXM10LR? z2O!2QI_quRwO4n&>Oj5nP-hircft8dYr^N%LUJ>(VR!p4FGPC3t?k09iKkzU+O$=D zPr(iwFUH(E^cDLwd^ca6Z z(Hk5^F}jC2_o;A9KDStWvGX)1jV1YrUei`>TRt^xg?Dc;p!U@H^SO0+mN ztQK`}8ynLK*EH$HRb$)US~Y_4?lbUChOHHN+ve~MoG~-DE>1%jJ9dFvZ4u=|ePdle z+(L;g!Dh8}82JkuQseH!+OYPNH11!!g0s@BbGoRh(6G%JyXR50q=6CoIF*! z&8&4@X$%`h{=m~;bAJkjj`F>B;lj<(@6ioG;VgHI%cm7Iq{P@+#3O?_;QJPZF<0)0 zEsRVJWQ1uF!oqx8-GqO7C9pGsa$_5LTrNbqN46%4Fj?Rfn2bb7;*dCTpquOI0h5zVrgS%wggfxX^o z({)9?MfV)#c>ECNQJs39eGW84D{_rf_JI&)eiM8!PONgN$7y;u%Nh^O4CbWy6sAk4 zYU$A9Ac-FU@31tShB;Cx)V*u74$y7UT2PL9cRqq~Hi4r61Z8O+Q`NrX;Ku1C98@ME z&q0oMAR+jcr`4Im9MkPvVMgu&%zZUvExXD?x9*EJwY_@5-DlvE&Jx4$4vN4mt3#*| zAGz%4!r_3bZn3B44V1qmyO;76=O4^EyU)Nm%TER%AX9cP#n%=)Y?z}tJL3!OZOxvxT8N1sT)y1pUB#STa1**s&K#_tmP9lJPpfNp#(Z2)TIGrUP zHr~Q6chh$lfL9UBqUrIatp@8=3sdCr{_U^zhfE0pcibv{nE_6~bQTvli&2R(G6b)_ z&?5&I@dF^tDgOa{RNt?I5>Q)x?41_}f0ivz?fhpIi=|mr{lr2Zn_eFR*}7qA-tKW6 z0~nJOM3`hTeBhaMDQGO&gw@zsh4eT}V%iPvmpB{y@fo~`q> z+=2>CU2@a~rZ%@So_b4O$aq@p5WB$xPRC2CCh4~c6Vqy?&w`lHTI`OAsh5a#!bGjQ zq6r;#<(_b2H`^UC4q)FiDc+yx@!tPQ8FTj&jN`MCP%jt+xWWH(?`UM_f8RUV4#XTc7u}(5{zN>0Xg3TR+&a&)R{ z+&q|_$;f`Z(t=3Md1L-zbfUI$x`$wsoML591N}!|cv$I+q(J!?hG-FPuz~&`?(f<0 zKMsx$Ht|2!@`!+Auf#k9HPH=BVU|W$847zj6`VzOnMMYy<;fmF`=5v`Ml7LG`E$U? zkhs&uJga48(g-cn1TD*dNzEiqZp*teQ7cQMF2`2m*!ni3!?cr&BtlX2VFcT5Ckl7L4q;tfT zEnZ5S8=q(3wgN}>WW;Z3)-LBMtSt}HOah4}JPm?jeopJq?(Kq*X=-LDa zXUBKfufSzn(Y=KK85J6~Zyo^2Vq6rGrr_7I`ZoTuBeH{khQb7|0#9jT71Xz*<}GRjIyuJd2Wls6>|6G0eGCGVjEdx-{?{o~EHc zkU@dm<>s!oilEG%J;UeVUStd|$N8M%mn%IOP0$bWR32g=gmKIlqjqFl;RJQ$ef#$0 z?!O5;=Mp>&lW@#LAXMC^`5j^WzIJVAR;<36`QH4`pZ#gz{~f*8B6^@E{qMn{9sg%^ zcyO}e|JU(2`QMe*a!E8gu)7{TseX;sEDPi)iBRrk`JthGHO=a^Z-dR%P=}}0{$ElB z+_?YuNA~^C!NDf}*IJ&c{U39caObVB>u7t~^|90fnj4yAe`|T#?QPADTT?~xphryn6@T`v%rcGNeSus`)7d9Aa=suMuC1-r3lF?C z^d&C0v=!cNdT(FT#`M^>G!kMic2rb;k8aVIH?RmNAo#x@;m*JJcK&j`y}k2S`S;FW z2hZf+gTHQ>*8JNsqW>kv%j1JVT^QP@1nhuv{&YKGW^p$JZ)Qa1e4%jCAuyc41Tc@3 zWHv=P4tW^75E8D>W#R6I;DTTKO9RvY-1*NT(}u_x_OJlcloa6jpsYoPfm+h8vqFVY zmVce$FYH3@T6L58Y z_RA|kQgDwL8ps{axPKkQ@ys=Rme%8K1~UwCgYmC3wexF$q%uTir2UA$>|6t$kBwWQ zv-{7OCmaAD@)>%2cEv|hH!V#Dz@~Py71kNf|3Oerq%}H4&Ws=q&5laDT8@#AgX_8` zkSW}7a!UYCguaE($j|?{Ftx7Dh!cB)`Ea&GUpgxYj+jQ61ALZcq~p@wGO5jm!TQ5K z4g6nb+*Yl~{_nuH|JmO=Io{v!f9rT!*#Gr;)tgzjpIxnh?D{+GsyB{>9Zn9D=!|j) zZ)a0*q+7vkD473g-v6t&|2sHw?f*_joBh9zr{4ar=dHh}?Vnb)h49$TNk@jP)-$fk zu+*{;Q#NT{!qQ(bMu^?#mbnWkKr-0|CjbH-Mun|P%$qK%TZD9b4-ErRaVO-Ts!;=Cj`Vye8Z-E(Y7B zICVPFNWQ=eJy67-+DHA)l$OwccTjo~gpyxWKb9R7`+8<}WSjVL-Jt=WVY#H@7Y{8h ziVVVXX9p|RHCO7OxYI$EbGLN|zI|gf*NsN3m~qo`M;otcxubp9x~sIixZ~TzXBnu!6 zSLMCOeVX6JDePqCZ;!33m?~2}4Yi+6A!Tf={giZB9!OgKEwk9~ziY{7gfE(2T%1Er zEhSd<F$N% zx6krdX3!G%lw9pp7C3zZgiw0QNVt%0q$?M*qMyQS_yp*ttGukv8}sz9qM=( zG|~TKPyYYW!G`{?<1y@i>6A|^rhJ(Lfim88ZF}{2l?e?>?_N%{D}8&1`uV{bf9~GP z$h>ArRiuFH`dHn|G#a+x{hJ5X_g$6h%?#11e8Cc2U>M_nqcYuVz>T;9kY?qnUS9fG zLGvvGuq=(m=ef!f$|Bv@Z_WjTC$>H9H{;%UP=>NH#@@0v=T04)HvTGygn~dWr zyhZPB{>7+xo=*RVqzTxrQK6`f$ZB4x{GOfj6dO$HR)O*zN z3aQF^WqHh&hA^vI0a=V$nQ)`CkpBXEi`OMvz6|`_;Wh?Q&A=IKdxP4{zZV zJ=cD7HLdLrA(fnAxl9b@sFs1bhB;wr7-hm`J`O9*7k?VZW+LwV0HfRWTnX7sZVT46`(PySP4!$=ZnjoVvZv*ofNXj9vY73&Su z*|MEWjSl8JV5nt6c;VI0mVMUP%z z{hX(>%zr=P6tmaV!aCrFjqTxX_gWYzZ}{2nPc{D+E$r`YKMnlf(czx$|9NzDw7LIT z%VXUCynK5Fgqjm35#X^&mt_f~iU{71feVb16}X&c9K)wCKyV(mRThmR5>rrhA^1dyfYOQj1e)-W{FQK zO58+yT1@7$7twL0Y3A-T@EcuF0zMHrzeoWc63Ys7haL#?70J=(8O~)oEkigGwK*P4 z@k#pEp$84cOq4?_l}6ot#tWz@Q|Cr!s>oHN{PH-{t`*CTB1SXRP@>)mY^dK7QKE4^ic>4_ zy{A0~m$wCv<2D?CgZ3B%(==yZ`U&`WaIGU!>+IS#s}&vjP{>|rbx)nx`{IUmNBT_; z4X2V;6XL;*!ebp`ju%7Bv4I%bQ)jHmit9p&TxzU>_)*z6?OhpkFc`SXz=1>SXgH@_ zL-~pQJoOC1;|^;Nr}ZY>$cp7tE&p-WLfA9@f|I+2#lc4ZpW|a&|9^D2iT|^f$B_Tr zDPLCjb6b40vY>A$eT#;k30S+Sw+q9-r|vg^thMy^lwXg1_kts7)l!Y{P*M2DJaMY& zKNYLaVhjmdRu9-f|M&Nf51jZv8~VSV$DsdIhy`NKm!tKYqCsVB3D`q2$;1z&PvG$XO>{4z&W*)EE=FqBI4$1?N9gApZ^z^=RMp3Hpzbn zCr7sb*TLTA{%T{pL-}jj>8eYFpCpxy|9|=ya_$CW=;13oT z*&5-ju2UnC=_NKNneo)qe{uJ>TKR8uc;MuJIv8!}|5_fG{>$6t9?pR3tK-LW4yZA# z;w%uC@asPd#Hc)UmV(rH9>_Ja9z9+wfa~iu91gUNKj-04Pya73UVbnBf203f%j44j z%ZrzN(EiJdmyeq6Gx%3Q^C^D63(dd0cG zu_v6jaO9PZ)}<6SI^J;MKgd%}|5fa~D-`CaSY7=8eNX)Vy`xS1kF`7o{lB174(OZ% zKIz~WOp0X>18X5Y+B3l!N8d*Sp5B(tdo#NUW2l6O?GWWzxDJcIwqP|+j%*gkGMCJ@ z73QHXx>#+zi2(=84U-|kl(9by&X_wj7BIg>1rKa`7RM}w59N`qU-8}Rd1kAT`9`C8|9Zc^>zupUXJ7?$u0eK(= zng;B&@y4pspMbX0zAPzV9Jeh#%WiWRAzs{wD#lWV>%Q_5W&uvwlWN4QKSlX1ip=r* z1YrwHE`4qj*v#q7;}Z0!Vwst{w>F@eiNFp)%{)%`HtZ~lRfXq0gR#smprvEd%;IVN zYdeOTFQl02SY}ORku!YYG(G|aO20i+3_dmV(3Aa z2v_b@*nI{*2(AGjwmAskg?U+i?nVI3QNn1CpgS!f6*1B&z;l!!Qu>%Fs?4s|oF!k^ zR*qnV`)Z7`mBlQpZR%0P`_q9GGFFia&!w@xz;2*O8_d?L4H)GgEe?l;ZL!YudIG2o zueKg1gi<23y4K?iw!Vea?=WRH+6!{Q85^S+n-!@Xs$z?rur{lUtGMKN|H0X}1;=YL ze?QiE+mAvpw}X}!C_N2fDUcZ({yhQy@%12o)~8zklcbT#HMQFN|C57}egA(r+T8!I zC*4x(?Z4-qYsbp-mzm(BxIE9@bFejM zN~LlLUPZ&!+?M1;gTMa{w(h{UZ_2TMYu+(%8;6gF2w32lt)~BU-c0dhHSxbjhe!KP z{*U9s&Hevc9)td0rV)^H4#cD{dki#Z@>@hZyw7ogi~=<$(AI4> zYq%MpOGTx;8%`kk`SKr&XKI!GMre*h#B?&+J)T6qKIE(lqTkm zJ#pRFOOz8#3Y3IMyV>D!L8mZd0eZO^Ou&}fOPmKFh|>Gy9_G>65JTT^%6Oq7$OQ$ZiaMfM6RrKm3KJM&R z`%*M>%I<;p2Hqh+W;p^$%7SQtpqSv~mIN%kIb#|sV&~Hh)o>In89;wv?bF{aC(@P> z_&u=}?_GqjY1z9!63{}ui{R)I1~nO5rVnWSI{Cefsn*?kphH?T!Bd>;`q^$t)@_bS zUC?w_%ZeM|0Wi-5icK5NA&len{xZjN9HU$Gii9xcS>oNInJg7~K87%ZH#o)xMq~)1 zNbTZn#_2lca|EMzN&N6WO^eq!MqJZAs4PB9&dA#|p~VMf+i?N5D+<%a0KNj86az3C z)E4FUUuD^yzTCM4-KCtQl{C(};L=#qfXuQiMpKj&Fy>rf0Jg(4387JN=#~?V+uTmCZYVgY z%Lih~d>`HF%mifu=Ln=p`~YSN{yalG>?NtQMQI0<593*y7w;J{ZAt4UD5kuCL+Nf& zaVgtcTzmq`RvDHT)!-f`1z|b?oJ0V!#Pi_)_X3Re_76cgVc=7-cb1gY?Gr8ZiQVa2 zE~K2Lm9P%u^d4--h>p3i-Vaz0`jqZI10N=^0OWy$1v7i6>xkk!&FP%pPf#K={%F~L z%DZ*B`p}yAkm~DrV~4Tf&~2sP!t1Mw7cia3f&>*qoXro1IQvwA`v3%N`39Qb!aT6? zJm_}MtxFs@VNP!5CK&V6fa{UBi}Z@+E%Fx$0?(eU(a(sAwK|!92%`_WD3#%dRKXd{ zsV|+pZE8 z|HPC7Hs`%Wf^b&RqrCw1jHGXSkWe;l2Z!k28pIimDP@2XB%Uj9-uqpn-!GRtB?d14i6aRTFk3s+6^C_1(z?UTb#sYe@WZxP^-y~m4 z1}??gMyen248tVoLhy}on3PqeO72eSb#E1=S;S-I+S7*a_Xn9@UGNso*=4$>Hh2wj zJj+*-oY@$SM;p*ferAu)?Msx!=>wH)1KqR{1Xl$t(0CSeL&qIkcezbhzC?}c*BgVP z@cBk|#>Ge8*)!hn-dT{v=#jpV*;#En5V6T;JYybeM5IK25ADW&d+{%H5?AD zi@OOVe@CvBDi^6ifWMs6m1UXxN?7PDbzAvE62f?)yG&b|yOrD5a3yNC^7dC>s+xUl zcHa$haI4=F;zKgW5r*rr#Rb7_HsfCT0q>V~vU{7&f`P?Qq0b65$GBtn8JHABMoxEk zZ*ei1-LO_@sRWYUDUPBT-NPL1-o)w6?%vHf+&dZ_ABP9yzZ~6+;LTwO58+>qM~BCM z8I4DW2YUz6%|6;Cd8k#6jK8yZc8e3TdpEm5d4dW=KE*hhec7EAI3~mF;Xi&E9h-zS`Ee)TGUVi%BAF)D3NqxMe?{YN>o_YA{ymK4hz0!{M& z!RXMI|Bntg`v0{&CjIAA4#b@Ia|$@i=fD}d#wtNruugyRF~hj^ppe6p-{@pR+qiRp|;v= zbdeMD`a%Q0q70wh7XU`l$b7f6s^HW$gIO>}b%z$)A*ch2^a?**=<2@KLB$Z;*gM}A zW^C)0EJ{S0>rugcTBkZxbH=4KgHsd`hl|;HOyuK0cjagL{;hrK+MV>R{Df z_Xs3z_`Kzx8vbtrb99-fA>ukdlEH8>7O+YFKR&SIe~k7IPB#4CIv$h%qf-vVoC7uK zOS6E!mGpSIK>uiZX9RuStUqzA7YxfK&kt&CQdxhM4!VZL6Z$PRqPFeT9bT2?zsFft zP5%p&PjSK=e}B$lh%Ql%SxBffiMr*4ZKVH4R{p>J{gcCu{r6fPgZ_UgryQ_32Yk|j znDu23g4!kZXb*&jQT2T=+?IW;UT0i8Hj`%RaCM9$*iCV~5}00n$zT!z%Q?spmYLUQ zU^F_Y>yCx<(_ghvV(Z1%awOEy|1?H96w6?#4B!p)|7dT|x&J%Z-_ZZHJSP1wr+jHr zUpDo43A;XqzR9@OxSQ#31%zDd&eZg3A6k;_5}quLs)6y5?j@m6N^XBcB^~D$XqIV9 zn$bEb50p-+^Y&1^`U-@)oq6z=p<@jw@6dx*m;P#1jk~v&75VR0Rnd4%mvmWIyl7Rq zNMm^_(uG*!Og}4K^ypUQufAYXkN^ZMu8AE(-nN)m*eu(!Bj;3^itDG1tlZ6dUh7i* z-F!K~OyF5~UUNro&_j3VK}I2Bb2spgD)1&X(#Ca%9&I%OJzon^40D{XL zjZv<>a#kse(IR%vwz*`*TiKs~W*gQkuiG*5gX~cL)pDsa=-p@~A3_v}6Yn^)G~*VX4ciM=iZ8dLGwyKnRN545e zTlr*|=C`{!4DW&`0L1VH#nPaKhpS?-(te@uMf@r;w#xlGMFotQp@wLOS8n#C5k50a zNg!U;fPRop+^oV#4NDA%|2w?(X6akV>SpZTT@k=I{r?Vsi z2$Ba%iKp-mfhi^hyhCINeo60HNFq~>GX!5jk^V27#^5VR#3=V3WA6PQ;i=~T=4m{e zqGfge|ED?s&;G&DiKYKPK0My&|JU*u{NJy9%9myK#L9WJtet|tXGYF6(EfuaGfB)0 zCSpmgGHHnpo+k;q1AI+VVZ9|It9ateT~4Z!*Z|GcSZG5j`@;|t7ZR;~fi!lvAl zAH=q37asY-iW$y|G(-6m6QZ%-z%pdEvgMWbxq(@qxamRcG0+N^Wd)B(cS8-2wSEHz z%pztYmRh55*NmQ^;yDN>D7>R!3OuSltIWWw<}l5D=rR<#PQsfOmh)DKVx3@Up^D9R zR4g7!5nMI3)J)a@;(7&GSalVi6{&bw2K)A1wV3%@!+-xY+t&YQaqP~#H0oc<{=ZdD z9}8;Qf7P<%&L~cbA5r-wCpdKP3!+n*rCnYc($|!Vno~mGmY0tHpc%t4jN=;^-n|sD zN%Z5ZOy_PckT#sekj=#V-`@GouuhR2^uxwjbY_zUleRc6^ny`pp zHnJ*s-8^|MUHN|R6syTSL;DhI{oC?ZYME3nFpq#u*W5Tyr~eD5@mZcT%{H)%Y9^4p|LvWf_SH~MOqmvfk7mba zG^t=X1;Kj+qu+8|pm&KkMWpDaf-}F#5xlG5dn-2r<#I){Ua0Jg7(D{24S;2=^|722 zCKgeFjEY9aD6e@grWuhgt{+tg*MYN*wQQ%=cSVgCPXn-hTY&9ty=IQG7>AIQtoUf) z%~EI4IT%I5dzdH8g1vFwv9(8wYk8J_JA423;_c5|fYa&3y z)Ebgc7**eVqNwE4Cy-p`XpFyrU^gfvonv&IZQF%ov$1X4R@2yQ)Yx`1L1Wvtoit7w z+qR9yo^PJ_TWi+*o%u0ypVxKny^pS>H6Og)%N!{OO;c zJ?(u#E=wA-suC9?g9_Q99?bOLK|K}U8ZHUc9Hv{PtLszobfbkk_ChqSey8V+Pp1w< zCtV_+OnRT~{q)bJ81*e&>I8$TbBb*Blp;G%%h#IkC|29ZNYuB4G~@B1P6V4^V-hIK5sP&U5D;{} z>m{%kYu9~pj0kvPkG1nm=NO6?07f`C_zL9x=}i`-1#UOKVyIO*}t zeiA4&@?5Dovo5GNC4lUU2tb0IN_B0%4k<%vAEdp`*Xxb8wBGC9O`;5DL+^Y%wLPx& z*9oo#Z=sE^m-D-U8HX?b7~mULgBFnM15lr-o5!*|9*d+wbdI;6ks1_^l-n+S1-4>CD-*1e)ARWv9r6?`%43R;cpt-ApD>2 z2(D4iAWO=K`VKDX&>dmRo*d(-jmS5zAli zTWZ_VgS>u`;FACz8?p$t=R~ycPX?mwU{TJ*Ccmv}VTRC0gvYlPk$rGg6rPLZUErT;LyK7ffjbw`i#^X|ZC>^P=TNFVvc382#&!JI@ydo6kUJ$|eHR8zF)RStj0Q=db%m`kxPI#I5_c zag^MU9?URsxSnVbW3w0+L+;zoH@h6o(^!2bRDmE#rlOUh$um#66>ilIA{lC2hz?yW zSqcFvO9mIgUio{7VZ^Df?EsF^%#6C7Q8%pzU{We4^n0}b1}kYy}hW^&8*Ew&U*`1@%M_~WBW zAFfj$tuHvz`*IsCM9|9Sj~`gRxh2pLF&_Q%9k(v39Q+*$S7JjP1_J@XB5MpH}l5viWuco#^+G4Z>8;P^QnM1St0>Mt9(Lc@3yM8BE%mx zY!^>L_<8gK;m!m$tU?C=PEmoJ697<^^(#PnMDe3H=@X=}oU{mremp-tYV^+MiIfii zO8Q)-)ns`!i#pffC{a@wF4j3n*Em(>kcrc+lAhwPRBl2!U*JBtHHy#ojlBzT9IfJh z*w$T3kB+FZnB*j)xS5<-jUYRX9{CYBZvIwB-c~&d^l@$U;B@}zMdg0${ZG=-Qro(r zQ^t8eX~=df0af;M`p=E~zd*gls!j!3 zi3k^&IOMF`!+dntNHlviWIlkhMicyo;8DSESc9~90SO0s%AHpWl>SD#wsW`(b{4c2 z(-o6Wh7@4g@fxobr@GMBY{rnh!|kIYg;+UhY{-(YHJyQ5`SsXc_cLWzZ);bUc-~pn zC|kn?NPWw``BGK_t(Y!Of&T%3z zo7WzxZjU)|^(Y z=fF^HI897CI1|@Jw<^AP&X^$F$SE{F3HI04lW9S>>FYC23GeQ!WwkU0boOK5=ceg}UoaSVnKK4{Lo-dC zrknh8P-&3J9QET^S5$34UN0(5W?K8yJY%`*Y2ZX-!Lo!muN1=Vl<^!IvfNa81b1l8 zhZ9AVlnB#cLMzxg5Z*toL5nKx5HFWd6o_*G8;*izBkRygHDUz(L3#77}cfTM;>(x1CJ}jN^j=y0NSKSF?O~ zO*_%U6XRQtYgu0~=Z#;HQS79SlcvSg<*HejaV91j4K0uOgj)_>5f+!8y9MH8CI#&h zl2nhjCuU=yFl@fTs$I&2l7GXp6uT>NR=>_(teoT z*wj+P;}Q5UwvDBZ21-;&*wYVp%6vV905Sc%f_3mCO$=|9B4W)76@{s4DEytPKUM=p zGI0C89k^iBx%Wc}>4vjImD5@bBQ+}<7H}-@L$#)o3L?c52|1$Qd4v(mmzD;>wH}UT z&jv;H9U|~D1*o!2)(2CS`syp<7?;;IZ4~)m$|~&sayi@oJbfA?zhAKO5ryts_@9Vi zl9#5{i@8QVdhmk@m3t=cwz(dd9>&lL6u>3odjf z{>a=Kp;pkv3-8=oJ&}BBk15zFJsHUj`CUH=vj^s?6~>@ynpZe`Gj{|{4?Xk{4WAsM zrMEP#OuHY4>>{yAp6pZ2icftei^F=YEaS_iW&q&;NPI;?B=8Rq_XOf!5P^2bb*rEm z2c@3LDcGu(-}z*x($vczvH=mvjq*Z$62)_ZXn4n!NoIAs0BFV8zVlFcBo|#h^jZVG zv>_ZA16OiRLXz^-rqUj+sFxcb3z*?C%yWt3h3`26v( z=VB5AW>a|}6E1s`xDZQ%bUq>R?g7Uigr)|mmnH4>h14S7usOg1RIKByVG=h}j-_~4(t|U03Li9n3ID!g0X78VIW2kR81z>_JPutqW+xMk`a@Nb&kGGqL9EFy z5Qoi=q}KfX($lQ0N>e)A6h6D~#2uQtn9pNH8eXE6x_+&`<|}ulOWwS_GWsi&wm`fD zqd}4nA)};;P|5gueM;{8dv}4Nbuss&^)ntQ%#1sN9RlsDq@tsF)O+8^lN))xTMfYi zcH}YL7!7gYoARf=z?Z5^>FO>WY*Z@&y24eQ&4V&v*tt-+6Eq)M3EI`*;+R+(N*!yYbNg;C>jym{cTGyg+bhl&J{l_q% zk-jm?u>(~xaBT}?3RQMflOr;53~oJgyGO<~-SS1#-(A9jacFYo7Vyd_JrN4(P6UN+ zJ&lF{ghV$a_J^R=GYs%KciIzxM4~53AUrcXa*q66M}{f9oESz7d^Ko#$(?FS*(ek+ zy`W>>$>9!GVtcS2W50i)MwRljP-#heLimKXSEp1&v$v2X@M+5;e~?}j?$wvcDF;{- zxS1r#>h)SFr@L6of!~(ZW-OiJ2XQ(?QQr5WH`{RDh#I=}-U!d~RG4%JfC+dM_Y+M4 z3eO^8G_An@46*+?D&s1E7#!P0(@M>M_8^34&oatPfj!;i2lY^UQ&vjx7a-3n{=uKxi8ypjJ^#)vE|3J!a(fx+7N{x!P8hsbl|_8z zU2fa~$E3du7Y5Emwm8znbynk$SvPFNfiG3&y!As*3WyBrl`xq78-6g%+R}e;fdqkk zs0GCh*LsYG$RtTKzIG5}3{EjdzE9iX^#k#V22Q|!e;aSbS{!o+Ht;)daVwV+`&8r~ zyBCNPSPKv04=3ou`LfN8@Y)^Ui~d zA5O7G4`BJ{3(M+h2MfvuM*-xg_X1WTe0IYuPI9dt!_1cNB(YHii1 zZ+s&+!9x8Vc(vRy8}l#MsxoajL>As@jc%ctpu`~Y<^xrm=b6a!(D@aVWj^rT=Uwq5 z?O<;1Kijb}qT$=;v-qo2SNIbO$<~K}R%urm^|V7)}IqaFUS`tJip2&(4t6R2%6b!_#jo(+s9z4Q-K`Q4uOpd+g%a1Vie z0{r*2U2p~D;}>27VQ@SLUuUok1tu{#zm90~6`q~Dz-&BukEX0^xMkSyc|*m!zfzx~ z)cy#&hDNd&1&CA}u^qFHB&)&l;TI87k$Ee|p^e5^T5^2L(XDZ>mgZW2Q^k)IfAh4Y z`)o6o;0@%9{LQf1= zAY+OY zM)XjGH5mvhJh&Poa|vN57|RZIV1=KmHSbyaS{j zgAy=&f~z78k3gTIftU}_et}zFgKNYuAvMt5Zb`F1elWD6x70He|G8`160kps>kUNpf&74p{;WYBvil<@K z)WraM&H)&ssTd1fYvy$%aqK4~u@(xLeE&9BLz^J*8$)W$oxwdOc zuVR(f)KvfAq;z4kyP7fltN+xzPk}I>GSpP>|txP^gefby4yDfbows|2U3*)hA^VpF$U8R)Bi34yJ)FRFmC zu^hcU)~I-oQ*GKS|N05KBH?F1=8U@mb#_Qrh4e$SylKTbT>=Qm)+<*2+=^DsRg+j$!fA!p~;9 zzfzSIPcuKtst-dC=SQYK?IBZn>jp}w^T8YB(ejb~+$v=BmY)f4K|c!hrK!D?E76`# z$V$`xX}VVFwxD4D^8$SrUH$=jqGbTTzrwX?F(l3{feWTfY=PYl2K%8I6hWLw@p6_2BpBTsB&ynr1Tq5A> z?yY0dfBMTB;J2#O%7_YX>RS)jMqoO1W);?4 zX6-u(otv#sXZ`Re!1M&j%gev|A7|v(6~NB>Js(WhB`yXAH~-le=P(|e=&E+#f0T)X z-cp<>cuAfddkYxKq6|r8xe6>Afb;>95arnJ_tqR$tO84`wBnNcEMFStp={6?j?q6{ z3NIu%zRsKfCaJK5`0+Fbx*ij}xK)(EXO2cJGIti-#P$oMhp6Ep1n9e+fWBatkSs&% zw~#nJU%j`pA3&!kd_|{C$-9`cz^@w;qN}x!o$Wnp;Jq$!)Yrt>Rq)|ND=|R|%bo$( z293|1Svk?bnHiA|i(Dc^s0Y7BuSsmb)`MH0>S>J1mov<-SLyPNajnNOJ1%8O!>zF% zzWLY(19x4BeX198lI;1kd@a09PoxM*iHGt{`@1ft3HMf7`l{60R#yl)^*($xMx~M5 zISnShNs5fL-fU%1XyO{1L8lF~3j1K_=!4Y=NC^AX;iQRwGt@MWJz}-OHLQD!cVCYq zkAPwHMdnM`nG0OIq#icC<7V0h@o=)GRAS*OW-$Jv%@KkERv=r`vp4a@M_uN&fxR@t zy1(s**dy;77F3(0Of%%oRmC;3TT*F*7rRCvUwyH7O%hHGemR@L5@=t6c{}szS^|VZ z4_Y|16&!|VUXKU_xju|;R!f0lVPRP>bv9m%Z-AjPoYB{-;A=g(aSEKv|8|2%90U=4T7J7;l~ z6pHO)tH3c}RY*}%Z#|&QX`ML}z6SDXm2j9}a$*7u3s@D%^8{FkAy=IAICnW7G)YQU zT3^oodDU{>JL&GnZfqO4(dnkrUM-iL()S=8>JpC7F~(L{hGRTB?EaxBKVHZdXd5Sf zf-!p6eE$Ry<$QeXub{Q)@^rZ(mMO=$7zfb(Hz5TG!B)sLV>Wo0f%8W>Y7zQRGbJt< zaG++h(4DcqZD47M+559_1GiG1lHS)1h*G6;Z0IWUPzEI7dj+CC#Xj-;=kbXGsxfB< zD0;GN8ixKIv4J<2*h%|sC}?`xJouDEuakxT%2lP=6GT3;plUq*l7XL=-V^QT*$er3 z{j{&DCXd>$6~9X)y2Zw+`uLQEp?1Oz?c9GH}#Kg;erGcf{W%De_G0*DRD>Z%OzhW`F~oG>q(_L#$2 zk*u36#K6C=l%XYDw~sDytz7XcY%AYPqTgE*!sI^LR6W@&;y>;wGkqT*ZV-7``1i4r zr1RkZl}8wzeGdSsx_T48a)932J^nMmRk)XDxEX*8*e89ETeC=@Q+8;*=$jlKiOS}i z)rq~G71Jbp8}UZ=$mdv2tXDvfc5bglzF5mEKkbRT-DC;8d7exw-zFRd zP)pq&Uv9yjh|H^beC350^UFn+EQoTh19DcMfJMP`!$2D*5VbW5-cZ3*e$JCbCCVoA zO*nx;;g29&^ikTlW2!P{IiihKOivnEnr`pb{_{Bc>)#jM`zE7XIf6km5Z#{7ao~NN znOKQe9{vttz$EphGG>s$={XE3?llbXaRNvAsi^GcF_MA=4GT6pdCa5l{W z9mu*tf=_A~diI3j%o(#q67s4oi_5mfy<<63HVGNLEjQ{$Jr2sDU;A5xxL~~q1L@ad zPFYLt)q~(0%>wx5KM=jSQtbzjR0!fRjY~zc*h_q(b)z)FE$jX@nPcx@axmtW%qPz1 zK`$2Zff-(<53tbmi7ZbHan?%sBD4=r-1T!NU4BohbZf5S8cN3I6UN+3JlkpU`^iJJxNmh?mhe^+U3SQXEqSl zM@I4Mxv1!WDpr}n=JAEmXlg$w&R#9?74CjwPHD}7-7n}IU9W)z!OK9+E*_}Zx=E|$ z{%;w6kw_{_Q9^BwT%HL&)6ex#eDyT$$rLb7O7?7Z9ez6{I+n=* z_9HgUMk$ihkkBm8u~EF52|VAnP$)pdH-Tg^E&cZy;Ss7`T1DlocY$;zjF{};!dXH} z&FZ(FR-0Cs9xO%!96*hh45H*yXY5b?CvY1jxlE4-EX*??nwS|6;SR}5#R)Kxjjy*u zJMz^A1L$Y^3W$zX;{GDJ@Jf$7xw>F*^ml7mq>3}bdX4;d>T8`Wl>Ek+f9VAwntZ@F z?nUKp8Tt3)6NG-%wbls&B9peo8yV8D%Is5oCPgkc3roTIkg?ac>?a=0`mkfb!!L(f zX80vSVDl2*)s-YGmNCoJi-HB|1c}U`rT0-r&bhF?{p79&j;chHiV3hzxc_HAB0p{; zV@7?+>TQUuK2hcQm;5oJ_U%O!ef81LxO_>ZzJ0!fpCOWPXA;2*mCj=7z{2Fw98V?^ zzNTWtc&_rZJ+96BO{tW}CLaibCWw>(3I2;Q_yd8*Wj&`NhHP;;UuwTyOM%X(0L!=D z&Qi#Lj8Ou=n`_~m8{r(pz0%k3xav5Z(*fXN6tWbq8hv`MA%6+6ZsyV@62FJZh`e-x zjpYYuZuxbc;1c(wjdhxMZaQK0)I1Be1SjV0J;q}~J}Nmt=T zVm(fIzbY#@!HyAkWY3rl+k=TS#2uXqELN-tP0F7gpne7ikh zAYmE+6Ic<4=~=2^RaH|fYZbrC!)d7<5UXLh_1TH7UhwmRar3VXSFFvisq!i>!=MEG z>V`2L+j;{DXm$Kf&F7P!;2OFP?%%uQ`nJJvJ(yi?$BLC|jF>=567c=*C$^flrYP)dT~bTky{OHJ-KAXldT6!Ikq zVLje402$^QnIhb1GI6~_x(tEmKs7-=7zk(K^j;6ny>hpE_-_rg(kN<}Ca>w7W7b+S+Yh$+D zo!*YA+VM$NY->)mmeaA>t#)YgvUvu3NW%K7@05gvulF>9(d{2z*8TB(@mEn);jK4m zKw<;r5<2Lzoa)@wRo@zST$7pa6~p95`{HCDb3AY;+M<3@o6wdLHJdV%~|d z&}hKn3<`0v%o>qUvvSlh_bO;&ihiN%>P-ADBAb$4x)s5 z9J*r)s#)mz{0x{Fo3{_DY!?)E{1AD1Lg4|aA*d_Bf@~vI){07!yqRj-IbPo1*L9k6 z7L|?bm7iesSO9#a{f+t*jPKB=LU~?#LlWl7gSNylr0HQ&U=Z%Vy9blWsejR^F#8+*a4*CE~$mwqjwL6(cEjln-jTJJ)zXyGHf4P3e`k) z8z|;5{MJMl1qxTkykB!-Z!#^c^N_N~*J)IK!@F1()8=f`Mu+_;R+M7uV0BvyE#=W_ ztS;i~9a8?wCfALM()%M_A0X(Rg39!jC=tiSaI#+s@EAp)vUPcO zw&Q2P9>$$Vw&YvkdrHok7O0zvvLs9U(co6;Bzfn&{_PUodW*Rgf+2Lv3@dWmrth-# z+f~iXm0_K7^k4F+8vU(kV$HPLspX%t2hr4&KZNHwriMakEIgp$dI2&xXRRMQeEklF zhBb#@&%3*pGd;kqTY!x>t`Ci;@M14ndED#!HMiIT$f172j)1v$v`P?vr?oR=>pFCf zh1WGuWdj{pF^bX^=EH#X0+rZSS9kjDj;O)e>nfnl3Vf7tVm|wu=9Fz^j4Ij5KQ{6! z!6O$*9o|U);1ewW?mwbx$C@?P@3G5z>YnX#x}9HyOe31PI7%nP_WjmXQ~e{Nzr+M) zaRK1{wL4#tC|fwQ1F-lEllestb-NzwBpy{BN;rjVOn&&goRa>Tz0N984QvsgjNB2r6bNZzMG?FSCP3b%&M~ka5>k zo!V5@rb1!h^JpyPuco|N%2vS`d(*fb*64m*2n2R|-!E9d^d5kcc^vB-8!y1>BevJx zZRCES{>RQY^8*0k*UkBqlEz1#z5&AtP*nL%6n1>;MZhuSDE$2d!7a2th~ki8#RX8= z=N&=8Ej`!=N#cc-##X(DL}XOizF?pKFkSfdh<;bzgZ1#!OC41-E>6a-?>sL|#%=chM;gsMOU z7FFL#h$AzS>Y|O`-JLK0HtM?~I}DSUxsRwCNn@hQ=F)}d%i_-tw- zJGL6@pV4e~;=A~;nK926DORl;pFjF7qXZIp@_2-k^t{e*rMt?epO0O5;((xmdBg`4 zOFgZHvn>fKSK;S8|d-|B59R5av;8O2<4%S~k&j6Qo0Sekez%huI zG<|MRs)AEf0}vG=2{%tn@X~hNV$jmgJlEb@U8?tzH2ap6DQM6HF~VLDo{n?0uO%EK z{Ei@LXjU6*Rs;_25sbX}YEskQx6()CJzElw1`WAFmT^QcmNyXyD98{inzH_njeEXm^F%7KrLD`KlPk_tG*@%Su~^Zk7N?ackDc56Vova1Mefos6j ze0VP=$5F?h#(tftOYPiRb`PCIm;AQgajdt_L+-3ov@J)3?B}M6mc4gC5@3=*r+?>shyu| z=hf_F0f1dBC~%;jEemuE2PXrxco=%Fmn!}r$VV#S^3YvqTxL#Hitf-YS~(%oh!8CQ zij0xb<2_a@EaT&vu*}!+GXL0Nkky^=zB%_r=XgaEd=hzbnXo;Q)|t8(#d=$ZG>~=P zZ2tP?Ld~w|^p!pCGoxtek5OVV^x=wzv*TOmW3=)G8>^A?aHXG(kkM0;DXpNLoBkPM zlB&jo1;{ZKBZg^K*Qf%~7u{@wNXC?AUjzy#K`Ro5Q|oprd2+|DY73fXSPJ ze4AyX?o)(QF_`Lt8Ej)_z#`&rvvxJ=fh|#!^$)l)rQz0~F~|U?KxhBQHH z3E4ENN=l~kWEw6jRq5aO)*?0J8W1Np>UNcVhNX$QEAQh$>VodrcwVG zV?$UAOnzAHre*%TP6hdG=x9q|D1uKK|3(XwQ($0D_!eK}$@TW(Pc^Y3G;&V+dq`bV ztzJs=G6}&Ud#O3MdkekQ3RZ74hOG%U>nQe2)X)~%YGK`?(6oWkNL9`Y|G4-=xnJrq z!!@jOE%1Y>oDd>OPuFlOszlPveCT&YaZ@syF9rqHjeLxbUiQ=euZuW}5+7|7Lp01RBit>H=&03UkL?8$fv*_N7}lmwTy3rVDSke(sIX;hFqHrj}_v|!m*nQ7f$PdY0JHJ zj6|cNm!Y=gd@&|IF3N{1%K)wPYrk-YLe&I*4quav>-2g#lzz^u?bqptrNV`5Voj2% zOU%8DPv$Ft9=s+QxFbSL#PTB_83^lj`=hQ)CymSJJ~KHl*F0ty2~9g zJ;B~x^M5|doOew%gEf#UDJAnNtTo3&vg zPF(&T)HbnIk_phx1#JS}pNc<9oI{Xm^vRid7K^XX+4kL_?N{yVvn(iZmm#)7R z$xThd_>VqlPg3X$HMA#bFEa7&#@uQQRnLj|H(TK45wks(KdpsulUNBCLynhPmHp3x;6HC{CA!I zcS|9pfDkTa>cM{{;JVEwmoD4aJ5Mm{E6R=t(P9d5OWx0x-D$ps>Mc$!{{eeYe^it<|)=KJ6 za_HeM@Hx@;Tm)kfD%gcPMs%lvRfaf?3Ojw<>8Eo)h9gaCgv{qCbgOehARvM5i)HKZ z(p$;i(oVkf%rD599TdaA#>D0|6`LH&=WQ$K&?=R`3Iov>vZc^T&ysDLMPu!aiT4h% zH&$Be@)@6;TM&je;5uR?B-}h7!A7fJX`5zJKwY2Z-~H+EA{7kg%^Ju@`JT zf{gU#iGLiDRGWUZV}b{1cOTM=e93Lw~hSe9tsUxP?ULP#T=!K&DVG? zn~n_6rW|<}uQ;Myu@&X>v!AAsGKosPV#Swxq?ePv--NrF5Rs({+2V7==2QCfXa4w- zZ}cwtn|+eN@G5#0@3@hUo|{DnS1qB?L@56&m0^=EpXXm;=_YVwJByje*#YM#)=@UE}dD`rG)YRii-gW|- zlvC%4fD&#P;iXJI5bH7x|Ju6-)0;hk^yOaZ6_wyZ)#rAE1pnEA3YCk;5oK77y5~DC zxTJ=Q4+PfvOy7*axnVCSPoM>a%*wBYY(0LbIIkS5M4G9tuR#O8*9GV8QvR!5f#&4cr%DbIC%IkZbCD*2>sEq`7TZz7 zed9(UNeFB!SX>1h)nxWq>5W5e8Ucj_ghigOdQV_Co&f}O)1P&dF_n3qAC}x5JyLd7 z;H^9gJ5IdqrL@7ASfLuo>F7=f_cr=Xd&Th50Z<;6NEQ%mPMe8deIi5pb=Wt{Z>FKN zLu}{4`&sX%!(UWt+?G<`-_w6$j2q9-v^cE@&29>}i>LxB9GSVVH$VF#G{211`?Lxh{;!=N(+dka(!m~d!UKtx7DdLkcg0j7#& z_tL)-{G&UwD9$u$;}9Q69qLvub3~!8Pv2i_EST@@4KwUs4@;&5*+(n!0_rmE*xECn z8a=O!*_X`}We5K{l2rc67C&r%rQc7U`OBwoCVvhT-S_wJ8abYRWTRL53-j^014eJe zyWajCEk$`C?7zVzJV(A%w7g8RrkyD_BPmA6fn zNglgecMkTVm}_oKFC?7_hEixc&Rf_k&08w$+LRw9VG%y<_*?%JJgPN|hHJ&CXUGc4 z6v9FgEY}o1Gd~$JLOq%{GICUXPot~xE@$6W68)FYJi6Fj@}}LA4{QZ$`iFaoE*|V} z81lMz);fwRKeSC&**Bu1YdL3(5k2vlj!@#iQ^p8XN^y~G)!r<}j@?H%-pUyC$0TGs zR&za*lE^2%Nnhrsw zjdvxP&>EA;JNaALA(+}0_LLv0E1`EM8klfmV!9JTerOdD*-GWZn?V@S9Hs zlMo%aLt$;z$7RePY)<*MJ3aSveyMTa2Q$F-aoLQ4Z z8tw5u{T5$^32>fDFF8CZk7Wbtf4ptiHL9Gf!SF^WLzY$yWtfSPfj_Ys%vC7Fk4ePd z$jPAe13pwlSXT6J|75heA_a zDe7yYVGP0wKa@sg-Ztpi`9TtYy5ZmAE!M6=&U?{ImSyBHr8< z9B*#lA1k2i-|xSWDW2ss;sXNkpGAU0^u#L+5C;xM5DRc~{+0}wx)Iss>|Xek*x^+d zv$D=^BaWT7bWO=D7v0|*>=|(G|3VDw*=@Q<2UCfg$?sB4^_qlS4Kc1%d=vKLTFRw) zZu;kJ5A3dEneq(DWyhl*D$2EX`z(o zKa@KbHu8#Dc~&pmX!TBU{LAT-d484lz)X3m&;4%iX!roCA5)$qq82yo*Jh)agw=ws zg_xh0 z_vRvp=?mNK&6?_tA3t*Q-<^Yy=!LDi!D2*r?mLq2A^sHn{?1(TGjw0RWNXEhMr4`Xy%f=@^PI9dk0xh3~Dkx3Tn2l0GnsJ z&7xZd8osX0)l%T+E_vEQK9{IVt~*oevR6-nCJ;cV2n9fbReX<0aGg2~*#o%Tc&U>* zT_nDEQ*ea`;72tk@aEL?{mX-*1p0HPt)FHH!nwMe zfltCD7)g}dTW=7a_NN3d-pAj?wO|$YG~INeIy)U|P}QM5A{Y?9srUx^13`E%Uwwj}Q5kFV zZ)l57=$@h{)l7K-klOc#VRHEl=;P?=>At%FTxe=y`rMJUDg~MlgfltH8SI98oPe_` zL|ERyRyP|^_RpCW_kb6k@t1+@Lm;&xTdSPw6bx0^^`;Y zT=6LB)g{KZ83O`5J-ts)fFgoB!@%wDbVCp=g%$*`YjToaD;A{Rw<)bfAfuWQwI{tM z7%M}odAtQ{LM+rA;RU@dF71D3YQ-udKH7Nm_oVB?unmr6+y=TmP14<*Q-N=?MsBkHCc`V(ggT1O*5?!j<(F7@jI zw7&yGDz$fLAr$3w;tk-ciR%N`pKQzC<)CFc?e*GjW<|7Y29l6?f!HMfUdK|u910ib z01`aN{cJP69SuSA7k{vyA#>mun2BdKgtQU284=1;*IGj|c95uU?}j@G_1TxKf0bLt z$hI5vj-9s{h~4Mz!p0^!$7AFeX$-XH9ex<>b*y+^R2o996ZBOUAZ=k2i^Mt=9=Hka zQYNselh7W|AJ%TGi(1RHWTDZY4`33$ZMdQu)n*46Be4Fm=M>ZwoTFuj3QQL){}msO z%w*V&C|DhOH$Nm@iW1WGbIqzdNblXZIryOgH_J{8NE5C`Sd;LTNA&XAiyGVZ1e{9d zzU$ovBRcC@<0k8HAl3B_c*RtPHo$4IaRWy@k42uQ1_AV2`2){32Az-teg@hb{knF$ zL?&H9mdB72qD?YzKo*>@`t|LPGvHqlrQ7EUpBDw)cv}#uuSup+uA*oD->6eT1KUiq z-_Dq*;|3r7oDEe)VO(#~``Sw1lHV4(5K$N&>13YSCQO8MtOD0Zs?b{UfhJ@tRv_=H zApiO>z`M9mkRJ2rQh$mQKLlh>s**61`LdiEo^Kvo(qDy0>jA4u6K5ls;!(U{@}KcT zdPrD_#82#we7JjfKLWi@%5f+2nZhbOmsYodw16X85JTUsbm!RE5WK;&uoYoQg1CQV zh2J^Mw@jmZoNQ-l>72m(lhQTAmiKw!X97fG!fyANcQfkT+OJCDX?(vf?~ztt!V+j; znQ6!AR4={4+m4D32pBH3eg{-Y=6=iD1S4t@X|eh%=rxY+><6Zf3cfT`sbBR*2R05- zuKN<1CthB&ZjoPo##}DCa#459{hh0^E;w7(zw4be_~S|Zbb$f%+e2?!@c_Cw8ngoK zZUEe>^ant88Jdgg#F~r7Fi^a%lKiXs`w6>*mv4*QuX&Ao_Is5o-?JYK3oTv9_3mzR z&(G=jX}yAZ$@5D=Us>_bh#Udb?>qf-8A?DUrT;z4HHm;iJB(x~Mn?2LdbvNyNS_6` zY^Z>QO8w}O<~=VC{#G^MnE4M&GjZG<42#g&;K}@T9baR5OWVMY)0*Ks98qZVyeTYY z;o{{q(IHB81IUy-8{G!=iHQrvS7=!HplAV(+Pl=v*CYchrwgamu~uJ`l2D);=U?_8 zf@5eQ*|Sp60n}fB%Xa_?Q8tPFCuqK8@_B;-l_IOvNT@Ebv8qCPfyydQ4U3_=z-cox`2QR`57iU8reWa{fVdMRYS1kA28}O z6*s^0gK>X&oh7_X?-G4m#6hlIO&MM|K%n%Yb2MQhuRCsHm%v1oVAB%IGo=SL8j4bD z;wBHk9EycR&5i09`&e&gk51@iD<;(VYe(wEI?K8=;VKc!@7A12m1<(!q$)!lwCnI< zqV|;}!zH$-PkeBYTB!>p4x_bu!6cW7n6e$x-{y|v-s77a@W+e3bLqzwKIXEA^(z(!&T7BWw%*;iC4oVEJQF1SR^M z4ao|y;plDgL=gpufk8=$6XRK_G>3YahE~fzc~P7(lg?}sLC_O|M-C}osk!wW_C0Bs zki04pUsWwR;2l zKc9SYic#n+yHhjmTWs7(tp{I(*+heT=9WMy4>@ViJJ#5UoWJQ5{!8c+|D$i#G4nf4 zDIEKtXwVIGj2e3Rb9djDLQ;SXUBPK3c$NPJ5>%-ILx+~jSIXd>jbs`!_?j!wWw#gP zG8PdA{Vi>aIr9K5$mHkJ0nwJ#;tnb&p<3n=8hFJp$2*$KI249G%OXE}d|@(aiJBHSE~?q5_6Qq<>A`%%gakF;+k{hlhc`^a5Lr19hde3|t^qI1HgNO6lf14ycjXpHFaR)6RZ z&c21Hp4PD?ugw#x=o<__-*Z`E^xH5{`&pG_e6iSkT1|rHva`NF(8a%_1eirjbSYvj z;#p`k3Z^a_nCFk&Lvfdjv${-D%511s{4gL;QLs^y$#jZ?UZ@7VShSe*} zV{g;^CV4^PwLgf-C*GL3gj-l=8Ao6|_W-7yuC0YbD}@DOuq%|kPUFDvhagUeH9R08 z;oCTx91rL8he#UEHyj=6-FA`3sOef0ohvZ5a(PHS?@x zU&d68m8|1JqGpYRiB|Yp+WY#F6M+<5rw%DX92pbtB#lrq=`=22YeJC|!Z1(Lk8#2A z*xRKnbdU2`T-sl&EG;G>LNsm!iV8_Qwth0Suq+rw4Qv_I4dZc7ZCPy&f>ElsnoK+Y z2N*%;zLmKF(CbB|&;A=DX&?bk*{qZ=quFx?w6*NOO=d3RtjesigsL3oFbdl%i=!)Q z2(Uj&Uzgl&>6$I`1l9@#AO9LFsm!ZwVUSkZ;dX}8B$1Z4+*G(@wtN}yIx}3peR4oj zpf_8@AM+wNmJW&N%(XhD>COqxK>yQLt!>-CA6(wrik{CxKGh9Ln0U=ZM?DKefp)+uc@?Zq4y^PXd% zA3?g?RbGS1w`t&pOb{RAbOaty%E1FA>1fb?1=QfpF!M`0n8siN>3z{9WML_yAV7gk z!y(R8ZZBz6&UP#((wfVyetwqv)|#6T(Zxxt15w<7>3_8jD()!`Ie}oID;GWsxm@`F(AX9?9uhMHtof9Fa+kI=< zD%?q~W#t{IAo$8`pae6&CyjV8^WB$f0S(&!W+*|FJpJ_!M)%X~h7$@$=oN{i-~9XB zgTAdru;Kpa`0&WL{~e#7Z~ebFQsm)!FV`D<6IyOithW`_;Zm?+`E6JBq0;65Yk1c$ATwVVnmr#UF~M6@NeL0id;eLt(Nj(^wW?<8QFYKhYjY}8XCcTanc)~whng#QVzsV7FD%Gc)>1$$CBp#vr9M@r z-+x3=j8cwavNQ$-sD*JDl-|59hlqr?I5tIsqm>|YkLC@yIC&wW2r>4Wc$t8AY4n1AP~XFrwWu8~KZ@{%LSuc8wiq9k-j)c5pY1?h#)tLKmQJO)^k{C9p{y8k^r*v5a{NNFS9m~Aj%avwBGGi`+#T`8kzh!q6= zPut!u*dFs-3Z>e9j{uue1aiR#7g^xkwCARRmrN@E?kR+(iyxRVHxyN6(6fjl$VF{6 zAJP!<{^pfui;}TBWI}N@sQ!#4eU}L-=q^{zyLuj|T8VQNldzD`4g2tc`Dhf91$^*g zmZ|Bly|eIl34CDrPSMi5gwn6+bXVWi{RAh;u78=3n|tk+jb#Q*O?KJ@e)H_RT^c&)Rzy>#HGnF!s|}BA{UIDFULf z)Fi|u9eVwpEuktpPhEPR`LJ)h1gaZYJ!pH9<%O5s)MTYACwH@JIVtig($3lS)fJoB zi3yp;eLXJI`L6BmQM@uK&x)Rx;8BPY$VwZ(IiQA_OCJa8Hr-Na^%MB~&5Kkn#Ss^J zUDaciux{LSq1;W-2wesB(9>eokrf|2{eJ-+vw+Z{xpi zrr7qs8@=4CHTjuM^k`N-gTMlYy&&%Ex8>y+m(_QFslsZz0nlJV2qwXvGW7N#Mf4pS zB8t)ov8z-W4I0v6-w~3ytf3l|YY}Q5+t1aYj6q1{d`2*B!=tz63SDaH|BNKl3A#yP z#>Rv%d;!!z|BsGOeENTKbiAei8!0yZe;-`#)p7&1rI_yH(QkkXpW5R?VjLyN&Y z>cx**P+(ScT{k~vE5<_ID>w^vzQRfH0Iu>DtSct#y9QerleOG~Esjm)Mc9_Vw=8x1 zzfhB({t6!!PXN`x{}0X&PD}5{jg(IIf7`}rd!ic?{h+X06#>Tn@$YCZe^nRE zIPPmRMFBxOXWpx*uDV4?)le>tvXh<`Vy+phl1zW=iKT?D_Grg4JQsWpE+ zGsn83a^B@1;2%@MQTfbQbT_4msyn4gMJJ-l!thOWAX!8I@k|O6Lbs~u(S%i3k1HH9 zrrOCT0xcS==WsrR-}8t{!G;;+V^dZ9`&odbI@1t-TTs^np*-(_P#)@GYt&sssi*&R znxG{T|LW32|BrnC|HHHMZT{cQlvea#ZUfhrDZVIbF8|d`>SaAoZWG^>&L@FraSdkJ zmh(z2237@-Yk(m!uYxA&KVgQyqhy*@_o9AYrVsUIsd^~I@5}T;bzrKBPV%1@>Z44- zB~TWTEUzp7=*$(iwEOW(J^i08=lG#ZJ^epCI}YUkJwM*k|4o!u^uOXltCe?ea}YoO zzJSlOz@0^I*!xi-<%Um~XXqDzQ}DAv`Ky`q3lOmH5Rhg**EfNU3FY=<;lO3ajzs0z zb0t&zDDDI<@x%}Ia~d;q>8KC-lPOpK+;#N>_ce`zEdlMWY8tBF%c$rPfoXAG(P(Vs ze{1F|u$USV)^Q}J*%}trcUxfzmXEFjNOzt8TCAmuir5t`r(fXrb{NL1W_X(M>#Dxb zdvH0-vKfQ}=~tS^E-wa`T&>c8^r_MiO;{dz8XaVJJjxOtSG^gs{ZK35_@nPI0nQK` zW}~oq%Ej$AxYFjAPYC)FTsfS?%BMn}fxOQSGZ7X?Ls{ya6%UxB+KQ}yE2CB!PY<9~IL_%5rXqGswwke_g7-g#sozE)S!5KmQy>#ax zbd(z$W|<2SE`seiOm3a2Tc14DnrkvyfRmWE>)4_d1jk1{z%)Cczdkvj-2g0GQg{4| z#*c-5VWsMhecpD1$nQv_m#yqwst~$;(9Z)c#(mKLx)epPWJdExtY8~ici^jR+*j{Ra;+MjI0)vhH0Ae_#$cW!X?TFj6( zg8c$yM}aw#Z|r|AcO?_iY5ik0vYa<&%RbkB#NK|bYgo0DW!1n=euHL`n_LawAQYpx z{XTXeF0zkRpIa!R>I$&rbTFKTHS||Jq$-Q?(nrP)JjNQ;tT6 zu0kpG2G(w_o+KPR!6~nvpTo6I!AM3cpei%^!2;9JVh`7he$+Jj z@PWzref!*J6{Y_EKVPMF=Kni7IXU$2|BueM`TsUj+T8y;m;TnpqWQgr_t(DX+#0^U z%fZxX@v@ThsnS`r>~2)8g~}?{hlPO#1b2u*>DE8PBPJV)uqz25c?F$$}qi##;=%Wrs?zaYX+{&$S z`GUlWF#jj?J|QrE`fEf<`Wv~s$xyVm_dmx+ho$$wN89-Cn<+Z-8cF{~?tob4Wnz4o zeKWAOP3xd+eu$5@K|S11ASUvW7y1dOa*$w1=mhdTzz_ms&NKGx=~I*r9`HTRP>kV# z(9u)z*Hck_&;z2=Xi6zcqq*VQ7fC`M_Q1D<-r;x;5DMO*EP)XkfEVhmugsb!s|~cU zg5tlCJN7+hoY46zJi%OHm`*2mh>9VpT40D%%*H4NzmYo$h9VAe>ViHLVA)hY4<1gF zCeTIAcHoaCcn&GY>F5Q5ae`Bn3juF4m0J_U`WG>~Op6UeLi3h#m3||4LSe-m2tJKi zz9zAhE@T6k&H+V`5f6_PCj%{o{F9`5P0e3AACq0*B&NIl&mI8(r`~`v`$$jk>N;UJ zxOw+iZ%sdV+pkC%=r+*^(=5_2L}pEx#kLh*#Lk3+53&$-R3kM0G6Ss z5T#lW_+^OuA3%#3{l9@Xs*EI zgUi2*R#S!)7%2;?WPd^m%1F$VVw<7|KvKj8UBnS@CRZ(xm;v|_iTQ4^(sv|Da5_>k zk|jqC&$P#^LX~{Rr{Z?sm{}G=-(0^aEKszCq5SGTgtLdK8+M)AzgZHJ6tM^m1x5AR z^e6Dc4=J2MoWQ$8z;D;)W=cn>zq_mLf%fmu-0PjrD3}M9?&tDS*gytuWl(wZ(hV&& zN(&+Rp&1ofts054t>_E1)~voX@qd&hWIjRZG6Fyo|35$V?LUVHN89*M8!3wa=c~Lz z0l?Wg8Ig!I1Lsl#{`hcRToUbSPLG`8DHwX|4zLlG6SB^pMxFJSKEKp~N z?^PiO;7~c2BH5|#i|ql-MN^dE5f)rYyW>tdnLv&sD0X3tMBniM{5TdHL4&|z|BG#} zf8LXc)5Q3qd6Xb9nnDUwjt~P+&|owWeZmC)6H&Gc9&nO~j>aS4!4kDO}@%{Y`Nw3lveL(Tw!4oY5?uyOyck{WEYOt=$Op9ihKoP&>ribfA%T~q}NFmt+H-Lj}Ck%PCHXzi22AU&ta|<_BPy_`&L;R%RkFd9p;(#M zWExu0_L{_<*rgmmdoEbbN&oz_rvtEDL=l;$@*RvMYt_>z4qUm>LdujNtU~${KyDn6 zx8xqBEfA?|z9>p`nhJsXGJ%Y>oDaXrqFq~TsYY55J>m%*q3daq+;mGU>$&uoMU0q);+7TN= zimoXUTKXF&P8iE< zcGy_j=7&l89fc9PMii6Sgb`SD{IyV*Ke(JECeGIK`#&kimai8l7>cHn5-H*OS*z9b z8ZCjgkDJ(QKQKhwFvGm=a_k7Z0d+GH%j+$nZ9tqN%CyJ1{;Q2ow7@QJag)J^6fHxO zTRoGj7zR!;zjTJ;erY=#r`3jr)aLZ)e7nn@91X^7|I(THlB`V)_8-O}N5g5dlm~dz z`@e&elKeCr6dN=Gnd63A6a zyS)sk@o_lR@2}ZsEQ6F|nUv(Sb{Z>&S)}08UmB3f>utU2x22-g%YQ}UpF9-A`|c^B zn*9F{PyP3Q$7e@d|G$kCC;mgRwyTT+@!rZFrDec12zDhj-+c^3R?;7jAF4%9KOZ%2*fu;GG#bMdw>z}fPkju%5zdWTncT5sFU91;eXfjyp<$A;?kb~ z=kJg^O8`y$|Gf zie0vq0ous`;ThWs0o$^w(w_e>X8Zq_7X1I{_`u`;N9V`e_dgpc`TPGBGybjJzs0NE zmD>EBA$taY=eLrzztpnMUhh;ksW8neRr|?m18*xE?`_DwFrb0%fue(QMl%;gbNWB@ zkJ5mOp_FdweUrYuXNtf38>#uzV7~7z;qfm_J$*z~*iN?2Wdy z0kpCKR885|2(T?HDDC;b`PkhE(8T{wj!u03e{i_H|KCWF?EOc*wBQ@aaI|U>AftE! z>D*?8JCdMuiOErhVLL!wrI=$Gt;~2fSzb*$W5}*mdqKbb%sS%dm-4B7?EY+ke@6hB zAqosKHf##h5du3YoS;3hlh+VTUFXEfzggTtU_30~VWy*v<)91hl+S>v;VFDFb-m5Z z3!8D@VIF4yzfp+%W@~Bz;G>3QGp6GEOn?gF);1 zFw2s8-r!3;tZOLM=U>eDYA8U%`9C{2^W%S?9UO1-zi*_-^Z$y#ScoeLU@F)HYkB0= zsdOdr-%!LsG-aGjWK!lKP7vDzkZDjcz^Rtf2Xi<{njau&qz32%r|>pQ`cBA(1E>F& zDVtI&>@dg>)d|8Gu)=&mA)-lKJrSh-ZLokVAhN-4LV(_J`hE@X5s=+05m59Y#1|p$ z{B-g96+n~{%9^{=vtwRt^o=s%$yqYOp-M6S8fH(}Zu_Z>WGiWgs-8>TgNa`iC6KXB zy*Mpf^rXV$b?SoY0DXCVAKNc%MTpU6ei#*<%kYpggW(tbo0D*i!O~g->D-b?6+T-g%+d*c*Y5ZBNeT( zTNkQf+rx7GzT1Llvo`CkV&mMTFk@rV?I`N7I=X4+zPeAC+hN;z!|8~kjy>r%Euen~ zIeLI|aB+PF-jONqc3h}v(Waa43B~^u+$@p7doQM(um~oIb{p3?gDpDKF-7I`$ayFD zsok;-t0D0V%;;2R82@G(k2-RLK>HTGKA^iXA@|+rjcU{8oKiADe2k_HyhfbjsM``v zRGStZT_Vc&U&9oR^dESLBO%jwlMIT6&3!(-K^$a+ihY=i6nnYt6aUAx{EbPo&c*fh z5AR-eSxnKk#lYXA1W^LsJLKdQiKL;pJvEU~Jff0lDDAQM21fVO>_*Y@MUl9ZKr}<> zj>C<9G~BgY^Vm4p(^l#J980DCk5kN7WB_c?|Bug3ef|IR>~yRDZ=^WaXRx?Gvt4Z3 z83U9_uhF0vjZt(zh+qcqaDq8j;*O(6BRVoYYitDj;L1;TLQ?%(Y?52G)u&5F$ERO| zYe*Ra31(dN0<%mIIZgr>iM19=3Brf2tr53$iY^7tOrvfbnQ%HJbfS}OF;E1KYHyK{ z03#Ed)$Lx0g(H+A3c1Xx#f236j|60pu?Iq9CNKIBird&gaseUDMtv0pH`otFF=mT( z5hF4AD2*^;0|{rKY&3+{^*DhP!}x9meQHSUdL`+Itfp55sa3C0f}{H}nKHD3jtgL| z`er1dE9g~#sp{_?8ezr}1#dIaC!t+>$kffzH1M&HMDmZi#5V811Tvn*|cS&BFt6T&-BooU#0;!L|* zxS&9ptRYqPtMZJ;ZV zSb!=c>u?i23_1RO1d~L_;{D4v*WdNS4ersr5BhQz z^;?a?d-zg@>;Mo%B%8ZV!`|DX$&~RI2xXU|;!Zv@UhOw}RgCNIS8QKY-T#X9tz}cl zyO`V{mHb=&^m4M|d+W8AopkhIu~ZF*z^ebWL|U z^64)P_-bf5%48JHFqty@9%+bpG}g)Cy?IdSViH2`ry1za4#inA2=>9w;2la3WN475 z?koJ#zheHr4vlcvcW+k+LlEQP5K)x!e5LdgXqd)envE!ok>%3AmwyZSe9Nf&DYBP! zAoR$=%q)gIl^W7(_#2@m7xAZGgWI<+-aZ2`;!~MzeXKT=G5qEDs@wn!$hj|Jg^K49 zj-Pme;d2+qNTK8%OmHwm3M}G5iAzDVh8PCy9R|i=pQ%FGoInTrEuf zhynH7aDq4#68bH9fg|4T;ckGasasL@)Z9$Q`a|HQg*+0WOd$GF)XP4hzlPq&xXd!p zW77=Cbu;pe>Aq8L<4SDmCZZEs%mcI{{FGmv^aNJ}mwrtlB36%PM#&7vxuc#zy9<_} z&*vHHn+;HUtP~{)A|&1PZhcXZ;o?29`LXk;*v?lT&Oq$b_Vr6Tw&q%IEw4nIei2 zb46$``p(m@!M9Sh)7NK`(P_6_Pxg-Qu0@4s&q3eK02L4bjcaa`^fzT()HH}mLGi%6 zp_BK}_XuTjOPG7OIKP7fkdkRyel<#{I#sU1v73)*-=!5-!~D%0p+MKsxTvL32VqYf ztYV8YZ@qy1bhO-+?(7F9WPN$Stbq^;j7B2HtcNNTmlQn|)k-J1SR*&&k*;rPLKLR) zMUsu-o9P6c9aSAi3sdRaW*`~N@()9dlCnTpA(WaO<4j9{n!or)9Jd&y9K(d^6R`&# zaFPI+FruFoOeY z!?xlz6dxbSf^7QlWJb!uWLo3xL$8-lJ8 z9TGYLg+{4F7T{7K2F7qE_Sgh|P`3C4r6WET+wJJ|xPz2qQGTYr_*;Q3;16@qIGPSk_9^8oK<#6t88jo_4=qtj)aYj{!CvusuN41FnL~ zX@%Y!Xd0srd*Z)lNY8KyDFrW{}na0=Y? zp+h`scZV*k_I=?n?_@WKaxV56nFoK^7h=!MH~r}e+jYlPC5g1y8eN47-)|$tbv09S zE;|QHx>NMJ^U@|xs-N;+a1NvK1f~3iIJVdse;3~R`LWVZvefc_8Es{GAHW9we{fp% z|2se2#{b?(X~TeZ(4B(48E(YU#AZOIDsXQj#7GTc;8FWNCpZDCqOnpe*pqS zzhr0r^UvP?{=VIx39_slsQS8Zr)$xj`n=;jbhcq943!%_QLX*}ocshQ$!<;iG!&3bJ!}GJP|L;bM5E6Qh|F1C`)H?w;1;lqE zj2O!C^lR{)c}yq-m$>MS0my=Hxm=U&IDmH17xb7eM{{N=q2oYp0qULoWac=hcjz7K1qInM$G`fue@ zDtNiHCYPq@r=3+w34^L>@Xl|0<@ZUIYWnXzxzrZBi#-<=ykavEG=>EO`$*WkAGk247};i zu+?SQ$8z;$PTZ$;@8xrckMH)YyyMFbetNI9AEq*(scx5Xt<)KVq*&ShaYL*C$5x^! z;F}g@*ac3?G`(dX+HW;TdYdi~Wh0P@KEuv|pYBDXi8K4T-6Gb=f9j3<3Z4Kr$baXD zXD7b>@AP~t|81n`_+N6VS9a-_hfD1y?U`1qm-6ff5%Mi5Ns~D^%#)L#4>AB)s{k$L zTvVnt3d@yxifxHfe_D?uStCQLe*O9ta-&`pzqXbW^{)Z>Fn{}z3yCtbQhygbF&GSt zy{A3{p4pw2eb`Lh&tK)4bagiaa4R;edZ>;Wh!Ml1RC&@r5PGjxUOpZ$KupWN?Z{ z-a+fw+ou|*9E~Up=adgTS+(oSz}+VLcbiJVXRSfxt+a4Hd9LR-wX*|MF_Y&cS*Gah^~TK`hV!^wi(5I@_jzc{;lx) z&_7$gA2uN0|HF?p4?Mk1$~X>4$I)X~1$k29M6((s@y@f=?vz4NIa0DakaanWCywtkOY8 zkd+KGVJX?ezsMT&Zkm*3@7f8=n^Kv}rG&U|(%N$DFSk_lf9>#pEpvA*B?UD3e;yzC z{Qvy??0C!nH&IIdpU$$c#s}2P0#_{zI2GFo1TMOkSm6HP3kUAzt`HHNN|vBd2Hn+N z)E#J@<7fbf)-I$W{MRKPIDPeleRpv%^|s8`)pT8@n*IlJDK5wbn*BcyegFT%gRTGn zMv5d^8HwY3sqf@cugn)9n3A)TUqBGT`aMCj_|E1h0W2J%v@sXZEWYdF_<2oYP#_NU z{M9*shUR;P4xpjU*6Bt(i|;qFef$5((boTSBSjHZ zmBD*;BA-g!-BHR@jV$ZH+ccR2I!zSwVy z&BZRe`h*O{HS*sqT21=zru^S0hv&ZhcY1!XjsLlkqA2bA%hefwXHi#KPqe5O%n)Um zag@5juIQXJQYUnQs`tZ;Lyn`sCzYjDzFDdGtsi5ih^POq zvJOc#JC|BYa$y%g*#yFSjN75J8A+xS)RdmznIA6`tutOWx$|wZzBqgH`WtY0bJgY5 zroCs_A5%Q51XZ3fH)F4S z_FBqeX?3mY)jzH-7gv4Bm%dHQ1m2;<-=XTGwKoMGyKTV1G$mYd4G*UE%OZfC8_X#~ zv^-?Jhs}>pF4A%}^J8=G;n&o1DQ&nhnLwPD>X!CYvBWybu4>o^gJ3`Y%Vf~%Jy*L3 zZUrjgN72@kvnpDV4p|eec=PSeGPEKcvd5tn>5#38R)jz;Fxe{Ybdc1v8&l{U6u&Pq z!T@0PQ*fyM)g36s3b=mnZg!@D#V#?0#R|Tc z({_`>jExBoTpMe>cSaIX$q#=r^P1P}6<6a^4Vi8j+Ciqv3e8XdS{A*u<>1?ClBnGP z40=HP9qP%T5s1GcZP31)W;(Bs+8V9I?%+H5Y^=sq>t=wZ1s&ed#4RWYn21lfP}61j8K zWue0B(20yS6EYXQW|~&QFGP4NNpV=AQjhX6ix>{P#UBFVMXnMR2XM;AH;4&tT=DA* z%px*FbRMEmtyKPxS?OOw?O#HFT2y;lsqVBU&B?^LzMtM9nj(&b{P|Swr~PPLl|E9Sho5s_gku0YN+3>efpgxyUeg8-A;EFB)oBY3y5B>YUvxCE} z|JO!}ivRS@#pSBJzQnfacmb%Itlq~T*(U z$#%|8@|-=ckJHrT}=l?i4D!u2TpdPalPd*fDm{=Dkkc;AJi4(1!E= z$y!3YhEn>NrNFlG-!f*vCi(CD%)kFVJUrRvf89t45YH%20=0S}a1n!G5W=R#!IF6} za6CQ=xv;ab(33n`7!3nMU!Rz`fC(`G;IkJP8!U=VOSTmqo$c~z%a4_|vyVcE^tbFH zvgF5L+FYAJxl!9CVwm$zEKz&ELz1xxbNC_R$2SBGU6u}``2Hp!HfY(i}WO;Hym;_oF+G@BW_GLWQ)YoYKhzn zh$bZMj9M(4trM}ok-Kgv{U#c$37Jbu(#{A)l%&fdwbjhFT=e&Dq_tM+2nYG?K=TOsG`^)pMttW~%K@XzlOru{ru&++5m%&53#5Ln2m zpt866cnc*&>m7Rl#=lKjI82_G7rGi=D}~o;zKnGW-h?CsW|4mKe;|P#GE}i_r$Q7qp;d?i@~mbslEHQrH30cO zAQWKEP%_*DQf9>|h#*5UK(Dlz4=I^|2h7JfHH}MqCqoo+LKWeN(Fd?&4tV}kU$rf1 zLbGJ~V+QU}1gA{!LBfi}$B-g0WmA~UrRtEkk}8CJkf>%lO0Y~eGKMppj%;SCG$gC( z1DPfH>-+mEiTssNaTvVIzwjw}B*n2n zaRJrQ57N@=;x9b>^#z4m?CP(Wm(R~Nt@G-&U%BnQ-=`&oR_=k%=i)C+4L&usb+ys7 zI$r&?B&gfFza{VfW((c@g;(bzyZoyX!nQi)r&CJ$-%K*Sr@!J9FO~GcDh>MI;Xx_? z*Xh~$R{z^bQSsjp9qG5lK&?M8iQLux(7$OZhFJ>X?HGZ+rVf4cdfDbP3BIF{&KK1o z6*>d48wDY0Rur8Eg*u3b#rqyLB>Tb3j{2r52-f8&4z&%%#8k9xiTr;uMTgG69IvJnV#K1emEC^JESp zn1V6PGL!;1K|2lJ;?pac_Eu=Ti$2uJ2MV2tFdJs|C) z@BmY;Vr_5=BW{5pX)@mfcT=9bO<-QEdOntC{k_~Kbj864aRxF-#Y#a2qg1ljh})4nf}idd^J=5y+LLQ;2oJEJ;MWgT|)fyqi3j9^gqFjGxPe(dlm2s zvrei(qx^sF=l?i9I^5>}*hpz2ZIv6qp>U^}? zflySm*;A_uZpC{wHFRsOwmQORT^i_rjAl4OT?xKdn&|)WQOW=N@N7%}H&UADf3X3& z6MWUSn&ua<9Xp1;X|!AGXj$r0@czx=2&!HOe&F=AZkCWC$}r<7jT)SF>l!Xi{w-jJ z=sW9WuZRp`=Jw?Z;xA-Npq3K6O_MqJSwZ^+$fXks;T_7O8R8Tai?8&F5#iwHuh=jB zz{Jsby)U3Q3iY~fXBuzguzuREdh1Bjb))5JxdN2a zaA*3rw0m31rGfriTH@k7pxORY%Kv?Idbp+knkhF z3F-D-*+;qCFV;L%Udc8#qW-l7NgIgd%H;+kHkOypRpudi=iJ{~fYwu*=s%$g8hxzN zK>v@9jy?JR@cjJXcuW5`Q5xyL-T;+^-~8M9na!et)DMckEEciDC)tf%%?k+Pv~lRB z(^8^Wg;>MW9fqi&y{bQxwJPA%Z&tpa&r09LcsC#vJkHemcT4(LaNxhy z(R<9Fv>GmK4WpmW6{pjxnB_rkY{?rrIA73kC&3mqg5Z2HgZU?+<}p~Qt}9Li`wKPi zxMjBteDkG&|C>M&OUVF@_CKHhA03F>5Q(|;ukuJ!)s=;YM5{~a8kZ~ebEQX1)h zu>o39eYWQCo=|uk*R0A9Bf2V%_zis~KO_gr+ea55(_$-!RQ{25F7OVqN04UX{H=|*cc@V7$xLR1#iOXXb(`7K#pe! zWRQ=o?=X#fe*q~PDI)VkMaV_5qR9Wp?m)d8C#h^HPy!jEAi*gb^ad|(e!by@qTXM? zr3%CN{_+OIn6lnrg!xnXzY6`{;O?LFsr+B_VLW;&{>S{uX6e%ckP3tXhB!g2_w|51 zWWBEkcksUV^?*;rzX`>o-q-(c?=Rpzq?k+@xO(xD^#&OwzoCft1~^9Wsj5!NZ@s~c zMI=T~KLyID&;P5d%a?C%UaqH)`tyHyczSf?o&Uqrv+etjjg)Vu45x@Oa6_h4dgwm1 z?XN1z8pU^0PAJphPz-(~^!`}|xc;S%EBif4CP04dUBodK1Oz7F2Zq3R6sG(c_=!wq zpf{6CFEQXB2)ze51sNsrG!hN>0AwH`=_q)c3dFCN1Iz?*K@m^pfXS)RX#}8+pbilp zSAZhJA&xLi07V&Lm=ikR0}r9BP9OceN@JfIn(d$OrR zyHq4nG(#y@Q84cin7|kTID(nGT2I z(U^lL(JnYTI6MchA;s{;H{g=cj8HY{7k7K$B1ynIQI&yrh#@*d@u2tL|MkBr=IFow z>wk+0fPhmNqY0$&o4F>{aMA6+Gj0EXtU{0oTRn*jQ zBIjvO(MUmVRic9!Ns5YRs3#6I6LM;dnPNytN~enQrX=0>j+%~S?kxL2kiwiPO6o0} z!xV%#)Se0(x+g^13Fh)ZCwL-=TF>om(CfV%4pAhJiy-e~1guk<@82PrQa%PSP4Ns- z25FuuX^1J~Ae-JLI7;Tdd>?{*yqXq3z%mpGP67mooI?0JTqOO_lmL68E*HyddUZ+7ULJ#9w~}zoF%e1vg(C{HaZg2L6`*hmxtPJL zq3DiQuAUv#c#=}Zk13{#EcK!(6@)vPi$0ND6&b%4v54Zk@`>G(gPcs|^wVf8 zC>ZPs5gSn{2WWayWDz!VwI`Dm!Ql`mSkeNNaxBQYTyHq#V?yyiQQV`5p(H_6{g8J@ z(U3x%D!@}_7@oUjdp$uHB9aMqp{GUYHdt&`c>ttbfnv9vT8QERNsh>Rp?Tetd6U^x zN025iJyY7FIo>eK5{y`nA+eGiC3DFJ5RAt4+tF+b>r}||H-mKEYX^cN$zEc?Ma>cn zdcB{_bVej)8IGo8%96Q}BAmg9qbd8zCs0rUGk<~v1t(|#)Yb$PMM%tL88@8TFnc*n znGQ*dpatijt23w0k(il?q>B77Y4RHqK_&D)?b&lb7whAm63FG+ij9)as}B!O12TmH zE!iQQaw24aNN~hnelk^eHW6^!8ZkhhJ2@VhBtQycJ-wnVOpgVRut4PpTv81=Hh!1cSg@2_6Gd;#9R>0P`LQqIK{+o-NtDAvt^7bA0{^h%u-~0q#T-{v0 zy106M11?^@0zY27dw22X_Uh#gxOnpdT)utt;_CM5?VFpu-pl{Ee)sa`2E2U-u3lfi zx_bFy4_v*ueD%YNt2f_)CqG`@e*gA|Tkz`Y_0{c#XtQfWd;4wg^~-mc-(S4Bz4+$p z)z$4!d*Iuv+cyH@w{PEp3vhk$?)K{PhgTQx!1WLBuHW9g+yigkzS+Ne^X3gn_3DNc-hn9mkWlAcnTD2i}~kw(6(k8>hJ_nXsX z5#eXO-r)e;5-pj`#oU!e1NrH@>sR2tCh|vv1IZ`TIY=N!)KGt^n~5KC&a1K-Fu53z zV<8sF1qne5z0VjUs|lWxGRpWPVARM9UF{Dq~?K zyb!_ynuGHII1*|;sfC2FV|V@)z(1P6V^NiN$-8UDP3jh<%3FYD(a9=(Q{3n2eoj3}ar`?!j4d5s7r2)z6t&1wm_N;#rK z7@=q2@A$+1&O4>tsFpI9?caO7e**%V;_mzZ2LA5WlICm${@-Ml9a&EjZS)~RC}!a7 uSSEpk5tquR6!ZC*l7~Fq$|pwowq;wkWm~@N^8W__0RR6|RyF+qm<#|Q_{*sP literal 0 HcmV?d00001 diff --git a/stable/gitea/18.14.4/charts/memcached-12.8.2.tgz b/stable/gitea/18.14.4/charts/memcached-12.8.2.tgz new file mode 100644 index 0000000000000000000000000000000000000000..1789bcb647c08910a6e10f07d8a5059b70f3ca3b GIT binary patch literal 109301 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 literal 0 HcmV?d00001 diff --git a/stable/gitea/18.14.4/ix_values.yaml b/stable/gitea/18.14.4/ix_values.yaml new file mode 100644 index 0000000..875b7e5 --- /dev/null +++ b/stable/gitea/18.14.4/ix_values.yaml @@ -0,0 +1,132 @@ +image: + repository: gitea/gitea + tag: 1.21.9-rootless@sha256:5f9b30b9b2599ead2ae4bb293bb65097a227c233a29c756940260a38e5c0d998 + pullPolicy: IfNotPresent +service: + main: + ports: + main: + port: 10037 + targetPort: 3000 + ssh: + enabled: true + ports: + ssh: + enabled: true + port: 2222 + targetPort: 2222 +persistence: + data: + enabled: true + mountPath: "/data" + targetSelectAll: true + varlib: + enabled: true + mountPath: "/var/lib/gitea" + type: emptyDir +# Configure commit/action signing prerequisites +signing: + enabled: true + gpgHome: /data/git/.gnupg +admin: + username: giteaadmin + password: r8sA8CPHD9!bt6d + email: "gitea@local.domain" +metrics: + main: + enabled: true + type: "servicemonitor" + endpoints: + - port: main + path: /metrics +ldap: + enabled: false + # name: + # securityProtocol: + # host: + # port: + # userSearchBase: + # userFilter: + # adminFilter: + # emailAttribute: + # bindDn: + # bindPassword: + # usernameAttribute: + # sshPublicKeyAttribute: +oauth: + enabled: false + # name: + # provider: + # key: + # secret: + # autoDiscoverUrl: + # useCustomUrls: + # customAuthUrl: + # customTokenUrl: + # customProfileUrl: + # customEmailUrl: +config: + APP_NAME: "Gitea: Git with a cup of tea" + RUN_MODE: dev + ALLOWED_HOST_LIST: "127.0.0.1" + nodeIP: 127.0.0.1 +customConfig: [] +# - name: test +# keys: +# - name: testkey +# value: testvalue + +# Enabled postgres +cnpg: + main: + enabled: true + user: gitea + database: gitea +# -- memcached dependency settings +memcached: + enabled: true +portal: + open: + enabled: true +securityContext: + container: + runAsUser: 1000 + runAsGroup: 1000 + fsGroup: 1000 +workload: + main: + podSpec: + initContainers: + 1-init-directories: + enabled: true + imageSelector: image + type: init + command: + - "/usr/sbin/init_directory_structure.sh" + securityContext: + runAsUser: 0 + runAsNonRoot: false + envFrom: + - configMapRef: + name: gitea-env + 2-configure-gitea: + enabled: true + imageSelector: image + type: init + command: + - "/usr/sbin/configure_gitea.sh" + envFrom: + - configMapRef: + name: gitea-env + containers: + main: + probes: + liveness: + type: tcp + readiness: + type: tcp + startup: + type: tcp + envFrom: + - configMapRef: + name: gitea-env diff --git a/stable/gitea/18.14.4/questions.yaml b/stable/gitea/18.14.4/questions.yaml new file mode 100644 index 0000000..17f0723 --- /dev/null +++ b/stable/gitea/18.14.4/questions.yaml @@ -0,0 +1,3424 @@ +groups: + - name: Container Image + description: Image to be used for container + - name: General Settings + description: General Deployment Settings + - name: Workload Settings + description: Workload Settings + - name: App Configuration + description: App Specific Config Options + - name: Networking and Services + description: Configure Network and Services for Container + - name: Storage and Persistence + description: Persist and Share Data that is Separate from the Container + - name: Ingress + description: Ingress Configuration + - name: Security and Permissions + description: Configure Security Context and Permissions + - name: Resources and Devices + description: "Specify Resources/Devices to be Allocated to Workload" + - name: Middlewares + description: Traefik Middlewares + - name: Metrics + description: Metrics + - name: Addons + description: Addon Configuration + - name: Backup Configuration + description: Configure Velero Backup Schedule + - name: Advanced + description: Advanced Configuration + - name: Postgresql + description: Postgresql + - name: Documentation + description: Documentation + +portals: + open: + protocols: + - "$kubernetes-resource_configmap_tcportal-open_protocol" + host: + - "$kubernetes-resource_configmap_tcportal-open_host" + ports: + - "$kubernetes-resource_configmap_tcportal-open_port" + +questions: + - variable: global + group: General Settings + label: "Global Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: stopAll + label: Stop All + description: "Stops All Running pods and hibernates cnpg" + schema: + type: boolean + default: false + + - variable: workload + group: "Workload Settings" + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "" + schema: + additional_attrs: true + type: dict + attrs: + + - variable: type + label: Type (Advanced) + schema: + type: string + default: Deployment + enum: + - value: Deployment + description: Deployment + - value: DaemonSet + description: DaemonSet + + - variable: replicas + label: Replicas (Advanced) + description: Set the number of Replicas + schema: + type: int + show_if: [["type", "!=", "DaemonSet"]] + default: 1 + + - variable: podSpec + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: containers + label: Containers + schema: + additional_attrs: true + type: dict + attrs: + + - variable: main + label: Main Container + schema: + additional_attrs: true + type: dict + attrs: + + - variable: envList + label: Extra Environment Variables + description: "Please be aware that some variables are set in the background, adding duplicates here might cause issues or prevent the app from starting..." + schema: + type: list + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: extraArgs + label: Extra Args + schema: + type: list + default: [] + items: + - variable: arg + label: Arg + schema: + type: string + + - variable: advanced + label: Show Advanced Settings + description: Advanced settings are not covered by TrueCharts Support + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: command + label: Command + schema: + type: list + default: [] + items: + - variable: param + label: Param + schema: + type: string + + - variable: 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: admin + group: "App Configuration" + label: "Admin Credentials" + schema: + additional_attrs: true + type: dict + attrs: + - variable: username + label: "username" + schema: + type: string + valid_chars: '^(?!^admin$).*$' + required: true + - variable: password + label: "password" + schema: + type: string + required: true + private: true + min_length: 8 + - variable: email + label: "email" + schema: + type: string + required: true + - variable: config + group: "App Configuration" + label: "Admin Configuration" + schema: + additional_attrs: true + type: dict + attrs: + - variable: APP_NAME + label: "APP_NAME" + schema: + type: string + default: "Gitea" + required: true + - variable: RUN_MODE + label: "RUN_MODE" + schema: + type: string + default: "prod" + enum: + - value: "prod" + description: "Production" + - value: "dev" + description: "Development" + - value: "test" + description: "Testing" + - variable: ALLOWED_HOST_LIST + label: "ALLOWED_HOST_LIST" + schema: + type: string + default: "127.0.0.1" + required: true + - variable: nodeIP + label: Node IP + description: Used to generate configuration, when installed without ingress + schema: + type: string + required: true + $ref: + - "definitions/nodeIP" + - variable: customConfig + group: "App Configuration" + label: "Custom Configuration parameters" + schema: + type: list + default: [] + items: + # Do not fix this typo, it will break + # current installations + - variable: catagoryItem + label: "Category" + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: "Config Category Name" + schema: + type: string + required: true + - variable: keys + label: "Configuration Parameters" + schema: + type: list + default: [] + items: + - variable: configItem + label: "parameter" + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: "Parameter Name" + schema: + type: string + required: true + - variable: value + label: "Parameter Value" + schema: + type: string + required: true + - 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: 10037 + required: true + - variable: ssh + label: "SSH Service" + description: "The SSH service" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Service + schema: + type: boolean + default: true + hidden: true + - variable: type + label: Service Type + description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: LoadBalancer + enum: + - value: LoadBalancer + description: LoadBalancer (Expose Ports) + - value: ClusterIP + description: ClusterIP (Do Not Expose Ports) + + - variable: loadBalancerIP + label: LoadBalancer IP + description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: ports + label: "Service's Port(s) Configuration" + schema: + additional_attrs: true + type: dict + attrs: + + - variable: ssh + label: "SSH 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: 2222 + 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: data + label: "App data 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: 1000 + - variable: runAsGroup + label: "runAsGroup" + description: "The groupID of the user running the application" + schema: + type: int + default: 1000 + # 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: 1000 + - variable: resources + group: Resources and Devices + label: "Resource Limits" + schema: + additional_attrs: true + type: dict + attrs: + - variable: limits + label: Advanced Limit Resource Consumption + schema: + additional_attrs: true + type: dict + attrs: + - variable: cpu + label: CPU + description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" + schema: + type: string + default: 4000m + valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' + - variable: memory + label: RAM + description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" + schema: + type: string + default: 8Gi + valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' + - variable: 'gpu.intel.com/i915' + label: Add Intel i915 GPUs + schema: + type: int + default: 0 + - variable: 'nvidia.com/gpu' + label: Add NVIDIA GPUs (Experimental) + schema: + type: int + default: 0 + - variable: 'amd.com/gpu' + label: Add AMD GPUs + schema: + type: int + default: 0 + - variable: requests + label: "Minimum Resources Required (request)" + schema: + additional_attrs: true + type: dict + hidden: true + attrs: + - variable: cpu + label: CPU + description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" + schema: + type: string + default: 10m + hidden: true + valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' + - variable: memory + label: "RAM" + description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" + schema: + type: string + default: 50Mi + hidden: true + valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' + - variable: deviceList + label: Mount USB Devices + group: Resources and Devices + schema: + type: list + default: [] + items: + - variable: deviceListEntry + label: Device + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Storage + schema: + type: boolean + default: true + - variable: type + label: (Advanced) Type of Storage + description: Sets the persistence type + schema: + type: string + default: device + hidden: true + - variable: readOnly + label: readOnly + schema: + type: boolean + default: false + - variable: hostPath + label: Host Device Path + description: Path to the device on the host system + schema: + type: path + - variable: mountPath + label: Container Device Path + description: Path inside the container the device is mounted + schema: + type: string + default: "/dev/ttyACM0" + + - variable: cnpg + group: Postgresql + label: "CloudNative-PG (CNPG)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "Main Postgresql Database" + schema: + additional_attrs: true + type: dict + attrs: + - variable: hibernate + label: Hibernate + description: "enable to safely hibernate and shutdown the postgresql cluster" + schema: + type: boolean + default: false + - variable: mode + label: Mode + description: 'Cluster mode of operation. Available modes: standalone - default mode. Creates new or updates an existing CNPG cluster. recovery - Same as standalone but creates a cluster from a backup, object store or via pg_basebackup replica - Creates a replica cluster from an existing CNPG cluster. # TODO.' + schema: + type: string + default: "standalone" + enum: + - value: standalone + description: standalone + - value: replica + description: replica + - value: recovery + description: recovery + - variable: cluster + label: "Cluster Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: instances + label: Instances + schema: + type: int + default: 1 + - variable: singleNode + label: singleNode + schema: + type: boolean + default: true + hidden: true + - variable: storage + label: "Storage" + schema: + additional_attrs: true + type: dict + attrs: + - variable: size + label: Size + schema: + type: string + default: "256Gi" + - variable: walStorage + label: "WAL Storage" + schema: + additional_attrs: true + type: dict + attrs: + - variable: size + label: Size + schema: + type: string + default: "256Gi" + - variable: monitoring + label: "Monitoring Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enablePodMonitor + label: "enablePodMonitor" + schema: + type: boolean + default: true + - variable: disableDefaultQueries + label: "disableDefaultQueries" + schema: + type: boolean + default: false + - variable: pooler + label: "Pooler Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + - variable: instances + label: Instances + schema: + type: int + show_if: [["enabled", "=", true]] + default: 1 + - variable: createRO + label: "Create ReadOnly Instance" + schema: + type: boolean + show_if: [["enabled", "=", true]] + default: false + - variable: backups + label: "Backup Settings (Experimental)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: "enabled" + schema: + type: boolean + default: false + - variable: serverName + label: "serverName" + schema: + type: string + default: "" + - variable: revision + label: "revision" + schema: + type: string + default: "" + - variable: endpointURL + label: "endpointURL" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: destinationPath + label: "destinationPath" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: retentionPolicy + label: "retentionPolicy" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "30d" + - variable: provider + label: "provider" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "s3" + enum: + - value: s3 + description: S3 + - value: azure + description: Azure + - value: google + description: Google + - variable: s3 + label: "s3" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "s3"]] + attrs: + - variable: region + label: "region" + schema: + type: string + default: "" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: accessKey + label: "accessKey" + schema: + type: string + default: "" + - variable: secretKey + label: "secretKey" + schema: + type: string + default: "" + - variable: azure + label: "azure (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "azure"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: connectionString + label: "connectionString" + schema: + type: string + default: "" + - variable: storageAccount + label: "storageAccount" + schema: + type: string + default: "" + - variable: storageKey + label: "storageKey" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: storageSasToken + label: "storageSasToken" + schema: + type: string + default: "" + - variable: containerName + label: "containerName" + schema: + type: string + default: "" + - variable: serviceName + label: "serviceName" + schema: + type: string + default: "blob" + - variable: inheritFromAzureAD + label: "inheritFromAzureAD" + schema: + type: boolean + default: false + - variable: google + label: "google (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "google"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: gkeEnvironment + label: "gkeEnvironment" + schema: + type: string + default: "" + - variable: applicationCredentials + label: "applicationCredentials" + schema: + type: string + default: "" + - variable: recovery + label: "Recovery Settings (Experimental)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: "enabled" + schema: + type: boolean + default: false + - variable: serverName + label: "serverName" + schema: + type: string + default: "" + - variable: revision + label: "serverName" + schema: + type: int + - variable: endpointURL + label: "endpointURL" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: method + label: "method" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "object_store" + - variable: backupName + label: "backupName" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: provider + label: "provider" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "s3" + enum: + - value: s3 + description: S3 + - value: azure + description: Azure + - value: google + description: Google + - variable: s3 + label: "s3" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "s3"]] + attrs: + - variable: region + label: "region" + schema: + type: string + default: "" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: accessKey + label: "accessKey" + schema: + type: string + default: "" + - variable: secretKey + label: "secretKey" + schema: + type: string + default: "" + - variable: azure + label: "azure (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "azure"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: connectionString + label: "connectionString" + schema: + type: string + default: "" + - variable: storageAccount + label: "storageAccount" + schema: + type: string + default: "" + - variable: storageKey + label: "storageKey" + schema: + type: string + default: "" + - variable: storageSasToken + label: "storageSasToken" + schema: + type: string + default: "" + - variable: containerName + label: "containerName" + schema: + type: string + default: "" + - variable: serviceName + label: "serviceName" + schema: + type: string + default: "blob" + - variable: inheritFromAzureAD + label: "inheritFromAzureAD" + schema: + type: boolean + default: false + - variable: google + label: "google (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "google"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: gkeEnvironment + label: "gkeEnvironment" + schema: + type: string + default: "" + - variable: applicationCredentials + label: "applicationCredentials" + schema: + type: string + default: "" + +# - variable: 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/gitea/18.14.4/templates/NOTES.txt b/stable/gitea/18.14.4/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/gitea/18.14.4/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/gitea/18.14.4/templates/_configmap.tpl b/stable/gitea/18.14.4/templates/_configmap.tpl new file mode 100644 index 0000000..7605060 --- /dev/null +++ b/stable/gitea/18.14.4/templates/_configmap.tpl @@ -0,0 +1,15 @@ +{{/* Define the configmap */}} +{{- define "gitea.configmap" -}} +enabled: true +data: + GITEA_APP_INI: "/data/gitea/conf/app.ini" + GITEA_CUSTOM: "/data/gitea" + GITEA_WORK_DIR: "/data" + GITEA_TEMP: "/tmp/gitea" + GITEA_ADMIN_USERNAME: {{ .Values.admin.username | quote }} + GITEA_ADMIN_PASSWORD: {{ .Values.admin.password | quote }} + SSH_PORT: {{ .Values.service.ssh.ports.ssh.port | quote }} + SSH_LISTEN_PORT: {{ .Values.service.ssh.ports.ssh.targetPort | quote }} + TMPDIR: "/tmp/gitea" + GNUPGHOME: "/data/git/.gnupg" +{{- end -}} diff --git a/stable/gitea/18.14.4/templates/_secrets.tpl b/stable/gitea/18.14.4/templates/_secrets.tpl new file mode 100644 index 0000000..215287c --- /dev/null +++ b/stable/gitea/18.14.4/templates/_secrets.tpl @@ -0,0 +1,233 @@ +{{/* Define the secrets */}} +{{- define "gitea.secrets" -}} + +{{ $DOMAIN := .Values.config.nodeIP | quote -}} +{{ $URL := (printf "http://%s:%v/" .Values.config.nodeIP .Values.service.main.ports.main.port) }} +{{- $pgHost := printf "%v-cnpg-main-rw" (include "tc.v1.common.lib.chart.names.fullname" $) -}} + +{{- if and (.Values.ingress.main.enabled) (gt (len .Values.ingress.main.hosts) 0) -}} + {{- $DOMAIN = (index .Values.ingress.main.hosts 0).host -}} + {{- $URL = (printf "https://%s/" (index .Values.ingress.main.hosts 0).host) -}} +{{- end -}} + +secret: + enabled: true + data: + app.ini: |- + APP_NAME = {{ .Values.config.APP_NAME }} + RUN_MODE = {{ .Values.config.RUN_MODE }} + + [cache] + ADAPTER = memcache + ENABLED = true + HOST = {{ printf "%v-%v:%v" .Release.Name "memcached" "11211" }} + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "cache" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + [database] + DB_TYPE = postgres + HOST = {{ printf "%v:5432" $pgHost }} + NAME = {{ .Values.cnpg.main.database }} + PASSWD = {{ .Values.cnpg.main.creds.password }} + USER = {{ .Values.cnpg.main.user }} + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "database" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + [metrics] + ENABLED = {{ .Values.metrics.main.enabled }} + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "metrics" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + [repository] + ROOT = /data/git/gitea-repositories + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "repository" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + + [security] + INSTALL_LOCK = true + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "security" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + [webhook] + ALLOWED_HOST_LIST = {{ .Values.config.ALLOWED_HOST_LIST }} + + [server] + APP_DATA_PATH = /data + DOMAIN = {{ $DOMAIN }} + ENABLE_PPROF = false + HTTP_PORT = {{ .Values.service.main.ports.main.targetPort }} + PROTOCOL = http + ROOT_URL = {{ $URL }} + SSH_DOMAIN = {{ $DOMAIN }} + SSH_LISTEN_PORT = {{ .Values.service.ssh.ports.ssh.targetPort }} + SSH_PORT = {{ .Values.service.ssh.ports.ssh.port }} + START_SSH_SERVER = true + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "server" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if not ( or ( eq $catvalue.name "server" ) ( eq $catvalue.name "server" ) ( eq $catvalue.name "security" ) ( eq $catvalue.name "repository" ) ( eq $catvalue.name "metrics" ) ( eq $catvalue.name "database" ) ( eq $catvalue.name "cache" ) ) }} + [{{ $catvalue.name }}] + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + +init: + enabled: true + data: + init_directory_structure.sh: |- + #!/usr/bin/env bash + + set -euo pipefail + + {{- if .Values.initPreScript }} + # BEGIN: initPreScript + {{- with .Values.initPreScript -}} + {{ . | nindent 4}} + {{- end -}} + # END: initPreScript + {{- end }} + + set -x + + mkdir -p /data/git/.ssh + chmod -R 700 /data/git/.ssh + [ ! -d /data/gitea ] && mkdir -p /data/gitea/conf + + # prepare temp directory structure + mkdir -p "${GITEA_TEMP}" + chown -Rf {{ .Values.securityContext.container.runAsUser }}:{{ .Values.securityContext.pod.fsGroup }} "${GITEA_TEMP}" + chmod ug+rwx "${GITEA_TEMP}" + + # Copy config file to writable volume + cp /etc/gitea/conf/app.ini /data/gitea/conf/app.ini + chown -Rf {{ .Values.securityContext.container.runAsUser }}:{{ .Values.securityContext.pod.fsGroup }} "/data" + chmod a+rwx /data/gitea/conf/app.ini + + # Patch dockercontainer for dynamic users + chown -Rf {{ .Values.securityContext.container.runAsUser }}:{{ .Values.securityContext.pod.fsGroup }} "/var/lib/gitea" + + configure_gitea.sh: |- + #!/usr/bin/env bash + + set -euo pipefail + + + # Connection retry inspired by https://gist.github.com/dublx/e99ea94858c07d2ca6de + function test_db_connection() { + local RETRY=0 + local MAX=30 + + echo 'Wait for database to become avialable...' + until [ "${RETRY}" -ge "${MAX}" ]; do + nc -vz -w2 {{ $pgHost }} 5432 && break + RETRY=$[${RETRY}+1] + echo "...not ready yet (${RETRY}/${MAX})" + done + + if [ "${RETRY}" -ge "${MAX}" ]; then + echo "Database not reachable after '${MAX}' attempts!" + exit 1 + fi + } + + test_db_connection + + + echo '==== BEGIN GITEA MIGRATION ====' + + gitea migrate + + echo '==== BEGIN GITEA CONFIGURATION ====' + + {{- if or .Values.admin.existingSecret (and .Values.admin.username .Values.admin.password) }} + function configure_admin_user() { + local ACCOUNT_ID=$(gitea admin user list --admin | grep -e "\s\+${GITEA_ADMIN_USERNAME}\|{{ .Values.admin.email }}\s\+" | awk -F " " "{printf \$1}") + if [[ -z "${ACCOUNT_ID}" ]]; then + echo "No admin user '${GITEA_ADMIN_USERNAME}' found, neither email '{{ .Values.admin.email }}' is assigned to an admin. Creating now..." + gitea admin user create --admin --username "${GITEA_ADMIN_USERNAME}" --password "${GITEA_ADMIN_PASSWORD}" --email {{ .Values.admin.email | quote }} --must-change-password=false + echo '...created.' + else + echo "Admin account '${GITEA_ADMIN_USERNAME}' or email {{ .Values.admin.email }} already exist. Running update to sync password..." + gitea admin user change-password --username "${GITEA_ADMIN_USERNAME}" --password "${GITEA_ADMIN_PASSWORD}" + echo '...password sync done.' + fi + } + + configure_admin_user + {{- end }} + + {{- if .Values.ldap.enabled }} + function configure_ldap() { + local LDAP_NAME={{ (printf "%s" .Values.ldap.name) | squote }} + local GITEA_AUTH_ID=$(gitea admin auth list --vertical-bars | grep -E "\|${LDAP_NAME}\s+\|" | grep -iE '\|LDAP \(via BindDN\)\s+\|' | awk -F " " "{print \$1}") + + if [[ -z "${GITEA_AUTH_ID}" ]]; then + echo "No ldap configuration found with name '${LDAP_NAME}'. Installing it now..." + gitea admin auth add-ldap {{- include "gitea.ldap_settings" . | indent 1 }} + echo '...installed.' + else + echo "Existing ldap configuration with name '${LDAP_NAME}': '${GITEA_AUTH_ID}'. Running update to sync settings..." + gitea admin auth update-ldap --id "${GITEA_AUTH_ID}" {{- include "gitea.ldap_settings" . | indent 1 }} + echo '...sync settings done.' + fi + } + + configure_ldap + {{- end }} + + {{- if .Values.oauth.enabled }} + function configure_oauth() { + local OAUTH_NAME={{ (printf "%s" .Values.oauth.name) | squote }} + local AUTH_ID=$(gitea admin auth list --vertical-bars | grep -E "\|${OAUTH_NAME}\s+\|" | grep -iE '\|OAuth2\s+\|' | awk -F " " "{print \$1}") + + if [[ -z "${AUTH_ID}" ]]; then + echo "No oauth configuration found with name '${OAUTH_NAME}'. Installing it now..." + gitea admin auth add-oauth {{- include "gitea.oauth_settings" . | indent 1 }} + echo '...installed.' + else + echo "Existing oauth configuration with name '${OAUTH_NAME}': '${AUTH_ID}'. Running update to sync settings..." + gitea admin auth update-oauth --id "${AUTH_ID}" {{- include "gitea.oauth_settings" . | indent 1 }} + echo '...sync settings done.' + fi + } + + configure_oauth + {{- end }} + + echo '==== END GITEA CONFIGURATION ====' + +{{- end -}} diff --git a/stable/gitea/18.14.4/templates/common.yaml b/stable/gitea/18.14.4/templates/common.yaml new file mode 100644 index 0000000..ebc9e98 --- /dev/null +++ b/stable/gitea/18.14.4/templates/common.yaml @@ -0,0 +1,52 @@ +{{/* Make sure all variables are set properly */}} +{{- include "tc.v1.common.loader.init" . }} + +{{/* Render secrets for gitea */}} +{{- $secrets := include "gitea.secrets" . | fromYaml -}} +{{- if $secrets -}} + {{- $_ := mustMergeOverwrite .Values.secret $secrets -}} +{{- end -}} + +{{/* Render configmap for gitea */}} +{{- $configmap := include "gitea.configmap" . | fromYaml -}} +{{- if $configmap -}} + {{- $_ := set .Values.configmap "gitea-env" $configmap -}} +{{- end -}} + +{{/* Append the general secret volumes to the volumes */}} +{{- define "gitea.initvolume" -}} +enabled: true +readOnly: true +type: secret +objectName: init +defaultMode: "0777" +targetSelector: + main: + main: + mountPath: /secrets/ini + 1-init-directories: + mountPath: "/usr/sbin" + 2-configure-gitea: + mountPath: "/usr/sbin" +{{- end -}} + +{{/* Append the general secret volumes to the volumes */}} +{{- define "gitea.configvolume" -}} +enabled: true +readOnly: true +type: secret +objectName: secret +targetSelector: + main: + main: + mountPath: /secrets/config + 1-init-directories: + mountPath: /etc/gitea/conf +{{- end -}} + +{{- $_ := set .Values.persistence "init" (include "gitea.initvolume" . | fromYaml) -}} +{{- $_ := set .Values.persistence "config" (include "gitea.configvolume" . | fromYaml) -}} + + +{{/* Render the templates */}} +{{ include "tc.v1.common.loader.apply" . }} diff --git a/stable/gitea/18.14.4/values.yaml b/stable/gitea/18.14.4/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/gitea/18.14.5/.helmignore b/stable/gitea/18.14.5/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/gitea/18.14.5/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/gitea/18.14.5/CHANGELOG.md b/stable/gitea/18.14.5/CHANGELOG.md new file mode 100644 index 0000000..3c56f69 --- /dev/null +++ b/stable/gitea/18.14.5/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + +## [gitea-18.14.5](https://github.com/truecharts/charts/compare/gitea-18.11.0...gitea-18.14.5) (2024-03-23) + +### Chore + + + +- 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 gitea/gitea to v1.21.9[@5f9b30b](https://github.com/5f9b30b) by renovate ([#19627](https://github.com/truecharts/charts/issues/19627)) + +- update container image memcached to v12.8.2[@498f00f](https://github.com/498f00f) by renovate ([#19535](https://github.com/truecharts/charts/issues/19535)) + +- update container image memcached to v12.8.1[@18f10eb](https://github.com/18f10eb) by renovate ([#19442](https://github.com/truecharts/charts/issues/19442)) + +- 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 ([#19390](https://github.com/truecharts/charts/issues/19390)) + +- update container image memcached to v12.8.0[@ac16683](https://github.com/ac16683) by renovate ([#19394](https://github.com/truecharts/charts/issues/19394)) + +- update container image memcached to v12.7.0[@e63a46e](https://github.com/e63a46e) by renovate ([#19363](https://github.com/truecharts/charts/issues/19363)) + +- 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 gitea/gitea to v1.21.8[@e7ee046](https://github.com/e7ee046) by renovate ([#19311](https://github.com/truecharts/charts/issues/19311)) + +- update container image memcached to v12.6.4[@23b2892](https://github.com/23b2892) by renovate ([#19319](https://github.com/truecharts/charts/issues/19319)) + + +## [gitea-18.14.5](https://github.com/truecharts/charts/compare/gitea-18.11.0...gitea-18.14.5) (2024-03-23) + +### Chore + + + +- 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 gitea/gitea to v1.21.9[@5f9b30b](https://github.com/5f9b30b) by renovate ([#19627](https://github.com/truecharts/charts/issues/19627)) + +- update container image memcached to v12.8.2[@498f00f](https://github.com/498f00f) by renovate ([#19535](https://github.com/truecharts/charts/issues/19535)) + +- update container image memcached to v12.8.1[@18f10eb](https://github.com/18f10eb) by renovate ([#19442](https://github.com/truecharts/charts/issues/19442)) + +- 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 ([#19390](https://github.com/truecharts/charts/issues/19390)) + +- update container image memcached to v12.8.0[@ac16683](https://github.com/ac16683) by renovate ([#19394](https://github.com/truecharts/charts/issues/19394)) + +- update container image memcached to v12.7.0[@e63a46e](https://github.com/e63a46e) by renovate ([#19363](https://github.com/truecharts/charts/issues/19363)) + +- 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 gitea/gitea to v1.21.8[@e7ee046](https://github.com/e7ee046) by renovate ([#19311](https://github.com/truecharts/charts/issues/19311)) + +- update container image memcached to v12.6.4[@23b2892](https://github.com/23b2892) by renovate ([#19319](https://github.com/truecharts/charts/issues/19319)) + + +## [gitea-18.14.4](https://github.com/truecharts/charts/compare/gitea-18.11.0...gitea-18.14.4) (2024-03-23) + +### Chore + + + +- update container image gitea/gitea to v1.21.9[@5f9b30b](https://github.com/5f9b30b) by renovate ([#19627](https://github.com/truecharts/charts/issues/19627)) + +- update container image memcached to v12.8.2[@498f00f](https://github.com/498f00f) by renovate ([#19535](https://github.com/truecharts/charts/issues/19535)) + +- update container image memcached to v12.8.1[@18f10eb](https://github.com/18f10eb) by renovate ([#19442](https://github.com/truecharts/charts/issues/19442)) + +- 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 ([#19390](https://github.com/truecharts/charts/issues/19390)) + +- update container image memcached to v12.8.0[@ac16683](https://github.com/ac16683) by renovate ([#19394](https://github.com/truecharts/charts/issues/19394)) + +- update container image memcached to v12.7.0[@e63a46e](https://github.com/e63a46e) by renovate ([#19363](https://github.com/truecharts/charts/issues/19363)) + +- 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 gitea/gitea to v1.21.8[@e7ee046](https://github.com/e7ee046) by renovate ([#19311](https://github.com/truecharts/charts/issues/19311)) + +- update container image memcached to v12.6.4[@23b2892](https://github.com/23b2892) by renovate ([#19319](https://github.com/truecharts/charts/issues/19319)) + + +## [gitea-18.14.4](https://github.com/truecharts/charts/compare/gitea-18.11.0...gitea-18.14.4) (2024-03-23) + +### Chore + diff --git a/stable/gitea/18.14.5/Chart.yaml b/stable/gitea/18.14.5/Chart.yaml new file mode 100644 index 0000000..03c1e1c --- /dev/null +++ b/stable/gitea/18.14.5/Chart.yaml @@ -0,0 +1,49 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: GIT + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.11" + truecharts.org/train: stable +apiVersion: v2 +appVersion: 1.21.9 +dependencies: + - name: common + version: 20.2.3 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] + - name: memcached + version: 12.8.2 + repository: oci://tccr.io/truecharts + condition: memcached.enabled + alias: "" + tags: [] + import-values: [] +deprecated: false +description: Self hosted GIT repositories +home: https://truecharts.org/charts/stable/gitea +icon: https://truecharts.org/img/hotlink-ok/chart-icons/gitea.png +keywords: + - git + - issue tracker + - code review + - wiki + - gitea + - gogs +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: gitea +sources: + - https://gitea.com/gitea/helm-chart + - https://github.com/go-gitea/gitea + - https://github.com/truecharts/charts/tree/master/charts/stable/gitea + - https://hub.docker.com/r/gitea/gitea +type: application +version: 18.14.5 diff --git a/stable/gitea/18.14.5/README.md b/stable/gitea/18.14.5/README.md new file mode 100644 index 0000000..1d7e1d4 --- /dev/null +++ b/stable/gitea/18.14.5/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/gitea) + +**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/gitea/18.14.5/app-changelog.md b/stable/gitea/18.14.5/app-changelog.md new file mode 100644 index 0000000..00f81ce --- /dev/null +++ b/stable/gitea/18.14.5/app-changelog.md @@ -0,0 +1,29 @@ + + +## [gitea-18.14.5](https://github.com/truecharts/charts/compare/gitea-18.11.0...gitea-18.14.5) (2024-03-23) + +### Chore + + + +- 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 gitea/gitea to v1.21.9[@5f9b30b](https://github.com/5f9b30b) by renovate ([#19627](https://github.com/truecharts/charts/issues/19627)) + +- update container image memcached to v12.8.2[@498f00f](https://github.com/498f00f) by renovate ([#19535](https://github.com/truecharts/charts/issues/19535)) + +- update container image memcached to v12.8.1[@18f10eb](https://github.com/18f10eb) by renovate ([#19442](https://github.com/truecharts/charts/issues/19442)) + +- 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 ([#19390](https://github.com/truecharts/charts/issues/19390)) + +- update container image memcached to v12.8.0[@ac16683](https://github.com/ac16683) by renovate ([#19394](https://github.com/truecharts/charts/issues/19394)) + +- update container image memcached to v12.7.0[@e63a46e](https://github.com/e63a46e) by renovate ([#19363](https://github.com/truecharts/charts/issues/19363)) + +- 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 gitea/gitea to v1.21.8[@e7ee046](https://github.com/e7ee046) by renovate ([#19311](https://github.com/truecharts/charts/issues/19311)) + +- update container image memcached to v12.6.4[@23b2892](https://github.com/23b2892) by renovate ([#19319](https://github.com/truecharts/charts/issues/19319)) \ No newline at end of file diff --git a/stable/gitea/18.14.5/app-readme.md b/stable/gitea/18.14.5/app-readme.md new file mode 100644 index 0000000..e8603ad --- /dev/null +++ b/stable/gitea/18.14.5/app-readme.md @@ -0,0 +1,8 @@ +Self hosted GIT repositories + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/gitea](https://truecharts.org/charts/stable/gitea) + +--- + +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/gitea/18.14.5/charts/common-20.2.3.tgz b/stable/gitea/18.14.5/charts/common-20.2.3.tgz new file mode 100644 index 0000000000000000000000000000000000000000..701ca7141bec7a024c6a235eece1372f39cd79bb GIT binary patch literal 101772 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 pQu&l(J|9!^kf&Su#3jL{{R30|NoDc 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 literal 0 HcmV?d00001 diff --git a/stable/gitea/18.14.5/ix_values.yaml b/stable/gitea/18.14.5/ix_values.yaml new file mode 100644 index 0000000..875b7e5 --- /dev/null +++ b/stable/gitea/18.14.5/ix_values.yaml @@ -0,0 +1,132 @@ +image: + repository: gitea/gitea + tag: 1.21.9-rootless@sha256:5f9b30b9b2599ead2ae4bb293bb65097a227c233a29c756940260a38e5c0d998 + pullPolicy: IfNotPresent +service: + main: + ports: + main: + port: 10037 + targetPort: 3000 + ssh: + enabled: true + ports: + ssh: + enabled: true + port: 2222 + targetPort: 2222 +persistence: + data: + enabled: true + mountPath: "/data" + targetSelectAll: true + varlib: + enabled: true + mountPath: "/var/lib/gitea" + type: emptyDir +# Configure commit/action signing prerequisites +signing: + enabled: true + gpgHome: /data/git/.gnupg +admin: + username: giteaadmin + password: r8sA8CPHD9!bt6d + email: "gitea@local.domain" +metrics: + main: + enabled: true + type: "servicemonitor" + endpoints: + - port: main + path: /metrics +ldap: + enabled: false + # name: + # securityProtocol: + # host: + # port: + # userSearchBase: + # userFilter: + # adminFilter: + # emailAttribute: + # bindDn: + # bindPassword: + # usernameAttribute: + # sshPublicKeyAttribute: +oauth: + enabled: false + # name: + # provider: + # key: + # secret: + # autoDiscoverUrl: + # useCustomUrls: + # customAuthUrl: + # customTokenUrl: + # customProfileUrl: + # customEmailUrl: +config: + APP_NAME: "Gitea: Git with a cup of tea" + RUN_MODE: dev + ALLOWED_HOST_LIST: "127.0.0.1" + nodeIP: 127.0.0.1 +customConfig: [] +# - name: test +# keys: +# - name: testkey +# value: testvalue + +# Enabled postgres +cnpg: + main: + enabled: true + user: gitea + database: gitea +# -- memcached dependency settings +memcached: + enabled: true +portal: + open: + enabled: true +securityContext: + container: + runAsUser: 1000 + runAsGroup: 1000 + fsGroup: 1000 +workload: + main: + podSpec: + initContainers: + 1-init-directories: + enabled: true + imageSelector: image + type: init + command: + - "/usr/sbin/init_directory_structure.sh" + securityContext: + runAsUser: 0 + runAsNonRoot: false + envFrom: + - configMapRef: + name: gitea-env + 2-configure-gitea: + enabled: true + imageSelector: image + type: init + command: + - "/usr/sbin/configure_gitea.sh" + envFrom: + - configMapRef: + name: gitea-env + containers: + main: + probes: + liveness: + type: tcp + readiness: + type: tcp + startup: + type: tcp + envFrom: + - configMapRef: + name: gitea-env diff --git a/stable/gitea/18.14.5/questions.yaml b/stable/gitea/18.14.5/questions.yaml new file mode 100644 index 0000000..c1fdbc4 --- /dev/null +++ b/stable/gitea/18.14.5/questions.yaml @@ -0,0 +1,3425 @@ +groups: + - name: Container Image + description: Image to be used for container + - name: General Settings + description: General Deployment Settings + - name: Workload Settings + description: Workload Settings + - name: App Configuration + description: App Specific Config Options + - name: Networking and Services + description: Configure Network and Services for Container + - name: Storage and Persistence + description: Persist and Share Data that is Separate from the Container + - name: Ingress + description: Ingress Configuration + - name: Security and Permissions + description: Configure Security Context and Permissions + - name: Resources and Devices + description: "Specify Resources/Devices to be Allocated to Workload" + - name: Middlewares + description: Traefik Middlewares + - name: Metrics + description: Metrics + - name: Addons + description: Addon Configuration + - name: Backup Configuration + description: Configure Velero Backup Schedule + - name: Advanced + description: Advanced Configuration + - name: Postgresql + description: Postgresql + - name: Documentation + description: Documentation + +portals: + open: + protocols: + - "$kubernetes-resource_configmap_tcportal-open_protocol" + host: + - "$kubernetes-resource_configmap_tcportal-open_host" + ports: + - "$kubernetes-resource_configmap_tcportal-open_port" + +questions: + - variable: global + group: General Settings + label: "Global Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: stopAll + label: Stop All + description: "Stops All Running pods and hibernates cnpg" + schema: + type: boolean + default: false + + - variable: workload + group: "Workload Settings" + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "" + schema: + additional_attrs: true + type: dict + attrs: + + - variable: type + label: Type (Advanced) + schema: + type: string + default: Deployment + enum: + - value: Deployment + description: Deployment + - value: DaemonSet + description: DaemonSet + + - variable: replicas + label: Replicas (Advanced) + description: Set the number of Replicas + schema: + type: int + show_if: [["type", "!=", "DaemonSet"]] + default: 1 + + - variable: podSpec + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: containers + label: Containers + schema: + additional_attrs: true + type: dict + attrs: + + - variable: main + label: Main Container + schema: + additional_attrs: true + type: dict + attrs: + + - variable: envList + label: Extra Environment Variables + description: "Please be aware that some variables are set in the background, adding duplicates here might cause issues or prevent the app from starting..." + schema: + type: list + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: extraArgs + label: Extra Args + schema: + type: list + default: [] + items: + - variable: arg + label: Arg + schema: + type: string + + - variable: advanced + label: Show Advanced Settings + description: Advanced settings are not covered by TrueCharts Support + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: command + label: Command + schema: + type: list + default: [] + items: + - variable: param + label: Param + schema: + type: string + + - variable: 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: admin + group: "App Configuration" + label: "Admin Credentials" + schema: + additional_attrs: true + type: dict + attrs: + - variable: username + label: "username" + schema: + type: string + valid_chars: '^(?!^admin$).*$' + required: true + - variable: password + label: "password" + schema: + type: string + required: true + private: true + min_length: 8 + - variable: email + label: "email" + schema: + type: string + required: true + - variable: config + group: "App Configuration" + label: "Admin Configuration" + schema: + additional_attrs: true + type: dict + attrs: + - variable: APP_NAME + label: "APP_NAME" + schema: + type: string + default: "Gitea" + required: true + - variable: RUN_MODE + label: "RUN_MODE" + schema: + type: string + default: "prod" + enum: + - value: "prod" + description: "Production" + - value: "dev" + description: "Development" + - value: "test" + description: "Testing" + - variable: ALLOWED_HOST_LIST + label: "ALLOWED_HOST_LIST" + schema: + type: string + default: "127.0.0.1" + required: true + - variable: nodeIP + label: Node IP + description: Used to generate configuration, when installed without ingress + schema: + type: string + required: true + $ref: + - "definitions/nodeIP" + - variable: customConfig + group: "App Configuration" + label: "Custom Configuration parameters" + schema: + type: list + default: [] + items: + # Do not fix this typo, it will break + # current installations + - variable: catagoryItem + label: "Category" + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: "Config Category Name" + schema: + type: string + required: true + - variable: keys + label: "Configuration Parameters" + schema: + type: list + default: [] + items: + - variable: configItem + label: "parameter" + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: "Parameter Name" + schema: + type: string + required: true + - variable: value + label: "Parameter Value" + schema: + type: string + required: true + - 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: 10037 + required: true + - variable: ssh + label: "SSH Service" + description: "The SSH service" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Service + schema: + type: boolean + default: true + hidden: true + - variable: type + label: Service Type + description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: LoadBalancer + enum: + - value: LoadBalancer + description: LoadBalancer (Expose Ports) + - value: ClusterIP + description: ClusterIP (Do Not Expose Ports) + + - variable: loadBalancerIP + label: LoadBalancer IP + description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: ports + label: "Service's Port(s) Configuration" + schema: + additional_attrs: true + type: dict + attrs: + + - variable: ssh + label: "SSH 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: 2222 + 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: data + label: "App data 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: 1000 + - variable: runAsGroup + label: "runAsGroup" + description: "The groupID of the user running the application" + schema: + type: int + default: 1000 + # 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: 1000 + - variable: resources + group: Resources and Devices + label: "Resource Limits" + schema: + additional_attrs: true + type: dict + attrs: + - variable: limits + label: Advanced Limit Resource Consumption + schema: + additional_attrs: true + type: dict + attrs: + - variable: cpu + label: CPU + description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" + schema: + type: string + default: 4000m + valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' + - variable: memory + label: RAM + description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" + schema: + type: string + default: 8Gi + valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' + - variable: 'gpu.intel.com/i915' + label: Add Intel i915 GPUs + schema: + type: int + default: 0 + - variable: 'nvidia.com/gpu' + label: Add NVIDIA GPUs (Experimental) + schema: + type: int + default: 0 + - variable: 'amd.com/gpu' + label: Add AMD GPUs + schema: + type: int + default: 0 + - variable: requests + label: "Minimum Resources Required (request)" + schema: + additional_attrs: true + type: dict + hidden: true + attrs: + - variable: cpu + label: CPU + description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" + schema: + type: string + default: 10m + hidden: true + valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' + - variable: memory + label: "RAM" + description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" + schema: + type: string + default: 50Mi + hidden: true + valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' + - variable: deviceList + label: Mount USB Devices + group: Resources and Devices + schema: + type: list + default: [] + items: + - variable: deviceListEntry + label: Device + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Storage + schema: + type: boolean + default: true + - variable: type + label: (Advanced) Type of Storage + description: Sets the persistence type + schema: + type: string + default: device + hidden: true + - variable: readOnly + label: readOnly + schema: + type: boolean + default: false + - variable: hostPath + label: Host Device Path + description: Path to the device on the host system + schema: + type: path + - variable: mountPath + label: Container Device Path + description: Path inside the container the device is mounted + schema: + type: string + default: "/dev/ttyACM0" + + - variable: cnpg + group: Postgresql + label: "CloudNative-PG (CNPG)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "Main Postgresql Database" + schema: + additional_attrs: true + type: dict + attrs: + - variable: hibernate + label: Hibernate + description: "enable to safely hibernate and shutdown the postgresql cluster" + schema: + type: boolean + default: false + - variable: mode + label: Mode + description: 'Cluster mode of operation. Available modes: standalone - default mode. Creates new or updates an existing CNPG cluster. recovery - Same as standalone but creates a cluster from a backup, object store or via pg_basebackup replica - Creates a replica cluster from an existing CNPG cluster. # TODO.' + schema: + type: string + default: "standalone" + enum: + - value: standalone + description: standalone + - value: replica + description: replica + - value: recovery + description: recovery + - variable: cluster + label: "Cluster Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: instances + label: Instances + schema: + type: int + default: 1 + - variable: singleNode + label: singleNode + schema: + type: boolean + default: true + hidden: true + - variable: storage + label: "Storage" + schema: + additional_attrs: true + type: dict + attrs: + - variable: size + label: Size + schema: + type: string + default: "256Gi" + - variable: walStorage + label: "WAL Storage" + schema: + additional_attrs: true + type: dict + attrs: + - variable: size + label: Size + schema: + type: string + default: "256Gi" + - variable: monitoring + label: "Monitoring Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enablePodMonitor + label: "enablePodMonitor" + schema: + type: boolean + default: true + - variable: disableDefaultQueries + label: "disableDefaultQueries" + schema: + type: boolean + default: false + - variable: pooler + label: "Pooler Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + - variable: instances + label: Instances + schema: + type: int + show_if: [["enabled", "=", true]] + default: 1 + - variable: createRO + label: "Create ReadOnly Instance" + schema: + type: boolean + show_if: [["enabled", "=", true]] + default: false + - variable: backups + label: "Backup Settings (Experimental)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: "enabled" + schema: + type: boolean + default: false + - variable: serverName + label: "serverName" + schema: + type: string + default: "" + - variable: revision + label: "revision" + schema: + type: string + default: "" + - variable: endpointURL + label: "endpointURL" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: destinationPath + label: "destinationPath" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: retentionPolicy + label: "retentionPolicy" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "30d" + - variable: provider + label: "provider" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "s3" + enum: + - value: s3 + description: S3 + - value: azure + description: Azure + - value: google + description: Google + - variable: s3 + label: "s3" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "s3"]] + attrs: + - variable: region + label: "region" + schema: + type: string + default: "" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: accessKey + label: "accessKey" + schema: + type: string + default: "" + - variable: secretKey + label: "secretKey" + schema: + type: string + default: "" + - variable: azure + label: "azure (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "azure"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: connectionString + label: "connectionString" + schema: + type: string + default: "" + - variable: storageAccount + label: "storageAccount" + schema: + type: string + default: "" + - variable: storageKey + label: "storageKey" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: storageSasToken + label: "storageSasToken" + schema: + type: string + default: "" + - variable: containerName + label: "containerName" + schema: + type: string + default: "" + - variable: serviceName + label: "serviceName" + schema: + type: string + default: "blob" + - variable: inheritFromAzureAD + label: "inheritFromAzureAD" + schema: + type: boolean + default: false + - variable: google + label: "google (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "google"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: gkeEnvironment + label: "gkeEnvironment" + schema: + type: string + default: "" + - variable: applicationCredentials + label: "applicationCredentials" + schema: + type: string + default: "" + - variable: recovery + label: "Recovery Settings (Experimental)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: "enabled" + schema: + type: boolean + default: false + - variable: serverName + label: "serverName" + schema: + type: string + default: "" + - variable: revision + label: "revision" + schema: + type: string + default: "" + - variable: endpointURL + label: "endpointURL" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: method + label: "method" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "object_store" + - variable: backupName + label: "backupName" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: provider + label: "provider" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "s3" + enum: + - value: s3 + description: S3 + - value: azure + description: Azure + - value: google + description: Google + - variable: s3 + label: "s3" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "s3"]] + attrs: + - variable: region + label: "region" + schema: + type: string + default: "" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: accessKey + label: "accessKey" + schema: + type: string + default: "" + - variable: secretKey + label: "secretKey" + schema: + type: string + default: "" + - variable: azure + label: "azure (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "azure"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: connectionString + label: "connectionString" + schema: + type: string + default: "" + - variable: storageAccount + label: "storageAccount" + schema: + type: string + default: "" + - variable: storageKey + label: "storageKey" + schema: + type: string + default: "" + - variable: storageSasToken + label: "storageSasToken" + schema: + type: string + default: "" + - variable: containerName + label: "containerName" + schema: + type: string + default: "" + - variable: serviceName + label: "serviceName" + schema: + type: string + default: "blob" + - variable: inheritFromAzureAD + label: "inheritFromAzureAD" + schema: + type: boolean + default: false + - variable: google + label: "google (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "google"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: gkeEnvironment + label: "gkeEnvironment" + schema: + type: string + default: "" + - variable: applicationCredentials + label: "applicationCredentials" + schema: + type: string + default: "" + +# - variable: 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/gitea/18.14.5/templates/NOTES.txt b/stable/gitea/18.14.5/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/gitea/18.14.5/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/gitea/18.14.5/templates/_configmap.tpl b/stable/gitea/18.14.5/templates/_configmap.tpl new file mode 100644 index 0000000..7605060 --- /dev/null +++ b/stable/gitea/18.14.5/templates/_configmap.tpl @@ -0,0 +1,15 @@ +{{/* Define the configmap */}} +{{- define "gitea.configmap" -}} +enabled: true +data: + GITEA_APP_INI: "/data/gitea/conf/app.ini" + GITEA_CUSTOM: "/data/gitea" + GITEA_WORK_DIR: "/data" + GITEA_TEMP: "/tmp/gitea" + GITEA_ADMIN_USERNAME: {{ .Values.admin.username | quote }} + GITEA_ADMIN_PASSWORD: {{ .Values.admin.password | quote }} + SSH_PORT: {{ .Values.service.ssh.ports.ssh.port | quote }} + SSH_LISTEN_PORT: {{ .Values.service.ssh.ports.ssh.targetPort | quote }} + TMPDIR: "/tmp/gitea" + GNUPGHOME: "/data/git/.gnupg" +{{- end -}} diff --git a/stable/gitea/18.14.5/templates/_secrets.tpl b/stable/gitea/18.14.5/templates/_secrets.tpl new file mode 100644 index 0000000..215287c --- /dev/null +++ b/stable/gitea/18.14.5/templates/_secrets.tpl @@ -0,0 +1,233 @@ +{{/* Define the secrets */}} +{{- define "gitea.secrets" -}} + +{{ $DOMAIN := .Values.config.nodeIP | quote -}} +{{ $URL := (printf "http://%s:%v/" .Values.config.nodeIP .Values.service.main.ports.main.port) }} +{{- $pgHost := printf "%v-cnpg-main-rw" (include "tc.v1.common.lib.chart.names.fullname" $) -}} + +{{- if and (.Values.ingress.main.enabled) (gt (len .Values.ingress.main.hosts) 0) -}} + {{- $DOMAIN = (index .Values.ingress.main.hosts 0).host -}} + {{- $URL = (printf "https://%s/" (index .Values.ingress.main.hosts 0).host) -}} +{{- end -}} + +secret: + enabled: true + data: + app.ini: |- + APP_NAME = {{ .Values.config.APP_NAME }} + RUN_MODE = {{ .Values.config.RUN_MODE }} + + [cache] + ADAPTER = memcache + ENABLED = true + HOST = {{ printf "%v-%v:%v" .Release.Name "memcached" "11211" }} + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "cache" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + [database] + DB_TYPE = postgres + HOST = {{ printf "%v:5432" $pgHost }} + NAME = {{ .Values.cnpg.main.database }} + PASSWD = {{ .Values.cnpg.main.creds.password }} + USER = {{ .Values.cnpg.main.user }} + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "database" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + [metrics] + ENABLED = {{ .Values.metrics.main.enabled }} + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "metrics" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + [repository] + ROOT = /data/git/gitea-repositories + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "repository" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + + [security] + INSTALL_LOCK = true + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "security" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + [webhook] + ALLOWED_HOST_LIST = {{ .Values.config.ALLOWED_HOST_LIST }} + + [server] + APP_DATA_PATH = /data + DOMAIN = {{ $DOMAIN }} + ENABLE_PPROF = false + HTTP_PORT = {{ .Values.service.main.ports.main.targetPort }} + PROTOCOL = http + ROOT_URL = {{ $URL }} + SSH_DOMAIN = {{ $DOMAIN }} + SSH_LISTEN_PORT = {{ .Values.service.ssh.ports.ssh.targetPort }} + SSH_PORT = {{ .Values.service.ssh.ports.ssh.port }} + START_SSH_SERVER = true + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "server" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if not ( or ( eq $catvalue.name "server" ) ( eq $catvalue.name "server" ) ( eq $catvalue.name "security" ) ( eq $catvalue.name "repository" ) ( eq $catvalue.name "metrics" ) ( eq $catvalue.name "database" ) ( eq $catvalue.name "cache" ) ) }} + [{{ $catvalue.name }}] + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + +init: + enabled: true + data: + init_directory_structure.sh: |- + #!/usr/bin/env bash + + set -euo pipefail + + {{- if .Values.initPreScript }} + # BEGIN: initPreScript + {{- with .Values.initPreScript -}} + {{ . | nindent 4}} + {{- end -}} + # END: initPreScript + {{- end }} + + set -x + + mkdir -p /data/git/.ssh + chmod -R 700 /data/git/.ssh + [ ! -d /data/gitea ] && mkdir -p /data/gitea/conf + + # prepare temp directory structure + mkdir -p "${GITEA_TEMP}" + chown -Rf {{ .Values.securityContext.container.runAsUser }}:{{ .Values.securityContext.pod.fsGroup }} "${GITEA_TEMP}" + chmod ug+rwx "${GITEA_TEMP}" + + # Copy config file to writable volume + cp /etc/gitea/conf/app.ini /data/gitea/conf/app.ini + chown -Rf {{ .Values.securityContext.container.runAsUser }}:{{ .Values.securityContext.pod.fsGroup }} "/data" + chmod a+rwx /data/gitea/conf/app.ini + + # Patch dockercontainer for dynamic users + chown -Rf {{ .Values.securityContext.container.runAsUser }}:{{ .Values.securityContext.pod.fsGroup }} "/var/lib/gitea" + + configure_gitea.sh: |- + #!/usr/bin/env bash + + set -euo pipefail + + + # Connection retry inspired by https://gist.github.com/dublx/e99ea94858c07d2ca6de + function test_db_connection() { + local RETRY=0 + local MAX=30 + + echo 'Wait for database to become avialable...' + until [ "${RETRY}" -ge "${MAX}" ]; do + nc -vz -w2 {{ $pgHost }} 5432 && break + RETRY=$[${RETRY}+1] + echo "...not ready yet (${RETRY}/${MAX})" + done + + if [ "${RETRY}" -ge "${MAX}" ]; then + echo "Database not reachable after '${MAX}' attempts!" + exit 1 + fi + } + + test_db_connection + + + echo '==== BEGIN GITEA MIGRATION ====' + + gitea migrate + + echo '==== BEGIN GITEA CONFIGURATION ====' + + {{- if or .Values.admin.existingSecret (and .Values.admin.username .Values.admin.password) }} + function configure_admin_user() { + local ACCOUNT_ID=$(gitea admin user list --admin | grep -e "\s\+${GITEA_ADMIN_USERNAME}\|{{ .Values.admin.email }}\s\+" | awk -F " " "{printf \$1}") + if [[ -z "${ACCOUNT_ID}" ]]; then + echo "No admin user '${GITEA_ADMIN_USERNAME}' found, neither email '{{ .Values.admin.email }}' is assigned to an admin. Creating now..." + gitea admin user create --admin --username "${GITEA_ADMIN_USERNAME}" --password "${GITEA_ADMIN_PASSWORD}" --email {{ .Values.admin.email | quote }} --must-change-password=false + echo '...created.' + else + echo "Admin account '${GITEA_ADMIN_USERNAME}' or email {{ .Values.admin.email }} already exist. Running update to sync password..." + gitea admin user change-password --username "${GITEA_ADMIN_USERNAME}" --password "${GITEA_ADMIN_PASSWORD}" + echo '...password sync done.' + fi + } + + configure_admin_user + {{- end }} + + {{- if .Values.ldap.enabled }} + function configure_ldap() { + local LDAP_NAME={{ (printf "%s" .Values.ldap.name) | squote }} + local GITEA_AUTH_ID=$(gitea admin auth list --vertical-bars | grep -E "\|${LDAP_NAME}\s+\|" | grep -iE '\|LDAP \(via BindDN\)\s+\|' | awk -F " " "{print \$1}") + + if [[ -z "${GITEA_AUTH_ID}" ]]; then + echo "No ldap configuration found with name '${LDAP_NAME}'. Installing it now..." + gitea admin auth add-ldap {{- include "gitea.ldap_settings" . | indent 1 }} + echo '...installed.' + else + echo "Existing ldap configuration with name '${LDAP_NAME}': '${GITEA_AUTH_ID}'. Running update to sync settings..." + gitea admin auth update-ldap --id "${GITEA_AUTH_ID}" {{- include "gitea.ldap_settings" . | indent 1 }} + echo '...sync settings done.' + fi + } + + configure_ldap + {{- end }} + + {{- if .Values.oauth.enabled }} + function configure_oauth() { + local OAUTH_NAME={{ (printf "%s" .Values.oauth.name) | squote }} + local AUTH_ID=$(gitea admin auth list --vertical-bars | grep -E "\|${OAUTH_NAME}\s+\|" | grep -iE '\|OAuth2\s+\|' | awk -F " " "{print \$1}") + + if [[ -z "${AUTH_ID}" ]]; then + echo "No oauth configuration found with name '${OAUTH_NAME}'. Installing it now..." + gitea admin auth add-oauth {{- include "gitea.oauth_settings" . | indent 1 }} + echo '...installed.' + else + echo "Existing oauth configuration with name '${OAUTH_NAME}': '${AUTH_ID}'. Running update to sync settings..." + gitea admin auth update-oauth --id "${AUTH_ID}" {{- include "gitea.oauth_settings" . | indent 1 }} + echo '...sync settings done.' + fi + } + + configure_oauth + {{- end }} + + echo '==== END GITEA CONFIGURATION ====' + +{{- end -}} diff --git a/stable/gitea/18.14.5/templates/common.yaml b/stable/gitea/18.14.5/templates/common.yaml new file mode 100644 index 0000000..ebc9e98 --- /dev/null +++ b/stable/gitea/18.14.5/templates/common.yaml @@ -0,0 +1,52 @@ +{{/* Make sure all variables are set properly */}} +{{- include "tc.v1.common.loader.init" . }} + +{{/* Render secrets for gitea */}} +{{- $secrets := include "gitea.secrets" . | fromYaml -}} +{{- if $secrets -}} + {{- $_ := mustMergeOverwrite .Values.secret $secrets -}} +{{- end -}} + +{{/* Render configmap for gitea */}} +{{- $configmap := include "gitea.configmap" . | fromYaml -}} +{{- if $configmap -}} + {{- $_ := set .Values.configmap "gitea-env" $configmap -}} +{{- end -}} + +{{/* Append the general secret volumes to the volumes */}} +{{- define "gitea.initvolume" -}} +enabled: true +readOnly: true +type: secret +objectName: init +defaultMode: "0777" +targetSelector: + main: + main: + mountPath: /secrets/ini + 1-init-directories: + mountPath: "/usr/sbin" + 2-configure-gitea: + mountPath: "/usr/sbin" +{{- end -}} + +{{/* Append the general secret volumes to the volumes */}} +{{- define "gitea.configvolume" -}} +enabled: true +readOnly: true +type: secret +objectName: secret +targetSelector: + main: + main: + mountPath: /secrets/config + 1-init-directories: + mountPath: /etc/gitea/conf +{{- end -}} + +{{- $_ := set .Values.persistence "init" (include "gitea.initvolume" . | fromYaml) -}} +{{- $_ := set .Values.persistence "config" (include "gitea.configvolume" . | fromYaml) -}} + + +{{/* Render the templates */}} +{{ include "tc.v1.common.loader.apply" . }} diff --git a/stable/gitea/18.14.5/values.yaml b/stable/gitea/18.14.5/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/gitea/18.14.6/.helmignore b/stable/gitea/18.14.6/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/gitea/18.14.6/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/gitea/18.14.6/CHANGELOG.md b/stable/gitea/18.14.6/CHANGELOG.md new file mode 100644 index 0000000..8739389 --- /dev/null +++ b/stable/gitea/18.14.6/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + +## [gitea-18.14.6](https://github.com/truecharts/charts/compare/gitea-18.11.0...gitea-18.14.6) (2024-03-23) + +### Chore + + + +- update container image memcached to v12.8.3[@0d3a9c4](https://github.com/0d3a9c4) by renovate ([#19694](https://github.com/truecharts/charts/issues/19694)) + +- 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 gitea/gitea to v1.21.9[@5f9b30b](https://github.com/5f9b30b) by renovate ([#19627](https://github.com/truecharts/charts/issues/19627)) + +- update container image memcached to v12.8.2[@498f00f](https://github.com/498f00f) by renovate ([#19535](https://github.com/truecharts/charts/issues/19535)) + +- update container image memcached to v12.8.1[@18f10eb](https://github.com/18f10eb) by renovate ([#19442](https://github.com/truecharts/charts/issues/19442)) + +- 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 ([#19390](https://github.com/truecharts/charts/issues/19390)) + +- update container image memcached to v12.8.0[@ac16683](https://github.com/ac16683) by renovate ([#19394](https://github.com/truecharts/charts/issues/19394)) + +- update container image memcached to v12.7.0[@e63a46e](https://github.com/e63a46e) by renovate ([#19363](https://github.com/truecharts/charts/issues/19363)) + +- 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 gitea/gitea to v1.21.8[@e7ee046](https://github.com/e7ee046) by renovate ([#19311](https://github.com/truecharts/charts/issues/19311)) + +- update container image memcached to v12.6.4[@23b2892](https://github.com/23b2892) by renovate ([#19319](https://github.com/truecharts/charts/issues/19319)) + + +## [gitea-18.14.6](https://github.com/truecharts/charts/compare/gitea-18.11.0...gitea-18.14.6) (2024-03-23) + +### Chore + + + +- update container image memcached to v12.8.3[@0d3a9c4](https://github.com/0d3a9c4) by renovate ([#19694](https://github.com/truecharts/charts/issues/19694)) + +- 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 gitea/gitea to v1.21.9[@5f9b30b](https://github.com/5f9b30b) by renovate ([#19627](https://github.com/truecharts/charts/issues/19627)) + +- update container image memcached to v12.8.2[@498f00f](https://github.com/498f00f) by renovate ([#19535](https://github.com/truecharts/charts/issues/19535)) + +- update container image memcached to v12.8.1[@18f10eb](https://github.com/18f10eb) by renovate ([#19442](https://github.com/truecharts/charts/issues/19442)) + +- 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 ([#19390](https://github.com/truecharts/charts/issues/19390)) + +- update container image memcached to v12.8.0[@ac16683](https://github.com/ac16683) by renovate ([#19394](https://github.com/truecharts/charts/issues/19394)) + +- update container image memcached to v12.7.0[@e63a46e](https://github.com/e63a46e) by renovate ([#19363](https://github.com/truecharts/charts/issues/19363)) + +- 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 gitea/gitea to v1.21.8[@e7ee046](https://github.com/e7ee046) by renovate ([#19311](https://github.com/truecharts/charts/issues/19311)) + +- update container image memcached to v12.6.4[@23b2892](https://github.com/23b2892) by renovate ([#19319](https://github.com/truecharts/charts/issues/19319)) + + +## [gitea-18.14.6](https://github.com/truecharts/charts/compare/gitea-18.11.0...gitea-18.14.6) (2024-03-23) + +### Chore + + + +- update container image memcached to v12.8.3[@0d3a9c4](https://github.com/0d3a9c4) by renovate ([#19694](https://github.com/truecharts/charts/issues/19694)) + +- 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 gitea/gitea to v1.21.9[@5f9b30b](https://github.com/5f9b30b) by renovate ([#19627](https://github.com/truecharts/charts/issues/19627)) + +- update container image memcached to v12.8.2[@498f00f](https://github.com/498f00f) by renovate ([#19535](https://github.com/truecharts/charts/issues/19535)) + +- update container image memcached to v12.8.1[@18f10eb](https://github.com/18f10eb) by renovate ([#19442](https://github.com/truecharts/charts/issues/19442)) + +- 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 ([#19390](https://github.com/truecharts/charts/issues/19390)) + +- update container image memcached to v12.8.0[@ac16683](https://github.com/ac16683) by renovate ([#19394](https://github.com/truecharts/charts/issues/19394)) + +- update container image memcached to v12.7.0[@e63a46e](https://github.com/e63a46e) by renovate ([#19363](https://github.com/truecharts/charts/issues/19363)) + +- 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 gitea/gitea to v1.21.8[@e7ee046](https://github.com/e7ee046) by renovate ([#19311](https://github.com/truecharts/charts/issues/19311)) diff --git a/stable/gitea/18.14.6/Chart.yaml b/stable/gitea/18.14.6/Chart.yaml new file mode 100644 index 0000000..d25c48b --- /dev/null +++ b/stable/gitea/18.14.6/Chart.yaml @@ -0,0 +1,49 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: GIT + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.11" + truecharts.org/train: stable +apiVersion: v2 +appVersion: 1.21.9 +dependencies: + - name: common + version: 20.2.3 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] + - name: memcached + version: 12.8.3 + repository: oci://tccr.io/truecharts + condition: memcached.enabled + alias: "" + tags: [] + import-values: [] +deprecated: false +description: Self hosted GIT repositories +home: https://truecharts.org/charts/stable/gitea +icon: https://truecharts.org/img/hotlink-ok/chart-icons/gitea.png +keywords: + - git + - issue tracker + - code review + - wiki + - gitea + - gogs +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: gitea +sources: + - https://gitea.com/gitea/helm-chart + - https://github.com/go-gitea/gitea + - https://github.com/truecharts/charts/tree/master/charts/stable/gitea + - https://hub.docker.com/r/gitea/gitea +type: application +version: 18.14.6 diff --git a/stable/gitea/18.14.6/README.md b/stable/gitea/18.14.6/README.md new file mode 100644 index 0000000..1d7e1d4 --- /dev/null +++ b/stable/gitea/18.14.6/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/gitea) + +**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/gitea/18.14.6/app-changelog.md b/stable/gitea/18.14.6/app-changelog.md new file mode 100644 index 0000000..2ddc579 --- /dev/null +++ b/stable/gitea/18.14.6/app-changelog.md @@ -0,0 +1,31 @@ + + +## [gitea-18.14.6](https://github.com/truecharts/charts/compare/gitea-18.11.0...gitea-18.14.6) (2024-03-23) + +### Chore + + + +- update container image memcached to v12.8.3[@0d3a9c4](https://github.com/0d3a9c4) by renovate ([#19694](https://github.com/truecharts/charts/issues/19694)) + +- 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 gitea/gitea to v1.21.9[@5f9b30b](https://github.com/5f9b30b) by renovate ([#19627](https://github.com/truecharts/charts/issues/19627)) + +- update container image memcached to v12.8.2[@498f00f](https://github.com/498f00f) by renovate ([#19535](https://github.com/truecharts/charts/issues/19535)) + +- update container image memcached to v12.8.1[@18f10eb](https://github.com/18f10eb) by renovate ([#19442](https://github.com/truecharts/charts/issues/19442)) + +- 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 ([#19390](https://github.com/truecharts/charts/issues/19390)) + +- update container image memcached to v12.8.0[@ac16683](https://github.com/ac16683) by renovate ([#19394](https://github.com/truecharts/charts/issues/19394)) + +- update container image memcached to v12.7.0[@e63a46e](https://github.com/e63a46e) by renovate ([#19363](https://github.com/truecharts/charts/issues/19363)) + +- 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 gitea/gitea to v1.21.8[@e7ee046](https://github.com/e7ee046) by renovate ([#19311](https://github.com/truecharts/charts/issues/19311)) + +- update container image memcached to v12.6.4[@23b2892](https://github.com/23b2892) by renovate ([#19319](https://github.com/truecharts/charts/issues/19319)) \ No newline at end of file diff --git a/stable/gitea/18.14.6/app-readme.md b/stable/gitea/18.14.6/app-readme.md new file mode 100644 index 0000000..e8603ad --- /dev/null +++ b/stable/gitea/18.14.6/app-readme.md @@ -0,0 +1,8 @@ +Self hosted GIT repositories + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/gitea](https://truecharts.org/charts/stable/gitea) + +--- + +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/gitea/18.14.6/charts/common-20.2.3.tgz b/stable/gitea/18.14.6/charts/common-20.2.3.tgz new file mode 100644 index 0000000000000000000000000000000000000000..701ca7141bec7a024c6a235eece1372f39cd79bb GIT binary patch literal 101772 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

F>uE#WQKvy=c3#ymZlOaNG4D-e@N0M`7w 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π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 A=Kufz literal 0 HcmV?d00001 diff --git a/stable/gitea/18.14.6/ix_values.yaml b/stable/gitea/18.14.6/ix_values.yaml new file mode 100644 index 0000000..875b7e5 --- /dev/null +++ b/stable/gitea/18.14.6/ix_values.yaml @@ -0,0 +1,132 @@ +image: + repository: gitea/gitea + tag: 1.21.9-rootless@sha256:5f9b30b9b2599ead2ae4bb293bb65097a227c233a29c756940260a38e5c0d998 + pullPolicy: IfNotPresent +service: + main: + ports: + main: + port: 10037 + targetPort: 3000 + ssh: + enabled: true + ports: + ssh: + enabled: true + port: 2222 + targetPort: 2222 +persistence: + data: + enabled: true + mountPath: "/data" + targetSelectAll: true + varlib: + enabled: true + mountPath: "/var/lib/gitea" + type: emptyDir +# Configure commit/action signing prerequisites +signing: + enabled: true + gpgHome: /data/git/.gnupg +admin: + username: giteaadmin + password: r8sA8CPHD9!bt6d + email: "gitea@local.domain" +metrics: + main: + enabled: true + type: "servicemonitor" + endpoints: + - port: main + path: /metrics +ldap: + enabled: false + # name: + # securityProtocol: + # host: + # port: + # userSearchBase: + # userFilter: + # adminFilter: + # emailAttribute: + # bindDn: + # bindPassword: + # usernameAttribute: + # sshPublicKeyAttribute: +oauth: + enabled: false + # name: + # provider: + # key: + # secret: + # autoDiscoverUrl: + # useCustomUrls: + # customAuthUrl: + # customTokenUrl: + # customProfileUrl: + # customEmailUrl: +config: + APP_NAME: "Gitea: Git with a cup of tea" + RUN_MODE: dev + ALLOWED_HOST_LIST: "127.0.0.1" + nodeIP: 127.0.0.1 +customConfig: [] +# - name: test +# keys: +# - name: testkey +# value: testvalue + +# Enabled postgres +cnpg: + main: + enabled: true + user: gitea + database: gitea +# -- memcached dependency settings +memcached: + enabled: true +portal: + open: + enabled: true +securityContext: + container: + runAsUser: 1000 + runAsGroup: 1000 + fsGroup: 1000 +workload: + main: + podSpec: + initContainers: + 1-init-directories: + enabled: true + imageSelector: image + type: init + command: + - "/usr/sbin/init_directory_structure.sh" + securityContext: + runAsUser: 0 + runAsNonRoot: false + envFrom: + - configMapRef: + name: gitea-env + 2-configure-gitea: + enabled: true + imageSelector: image + type: init + command: + - "/usr/sbin/configure_gitea.sh" + envFrom: + - configMapRef: + name: gitea-env + containers: + main: + probes: + liveness: + type: tcp + readiness: + type: tcp + startup: + type: tcp + envFrom: + - configMapRef: + name: gitea-env diff --git a/stable/gitea/18.14.6/questions.yaml b/stable/gitea/18.14.6/questions.yaml new file mode 100644 index 0000000..c1fdbc4 --- /dev/null +++ b/stable/gitea/18.14.6/questions.yaml @@ -0,0 +1,3425 @@ +groups: + - name: Container Image + description: Image to be used for container + - name: General Settings + description: General Deployment Settings + - name: Workload Settings + description: Workload Settings + - name: App Configuration + description: App Specific Config Options + - name: Networking and Services + description: Configure Network and Services for Container + - name: Storage and Persistence + description: Persist and Share Data that is Separate from the Container + - name: Ingress + description: Ingress Configuration + - name: Security and Permissions + description: Configure Security Context and Permissions + - name: Resources and Devices + description: "Specify Resources/Devices to be Allocated to Workload" + - name: Middlewares + description: Traefik Middlewares + - name: Metrics + description: Metrics + - name: Addons + description: Addon Configuration + - name: Backup Configuration + description: Configure Velero Backup Schedule + - name: Advanced + description: Advanced Configuration + - name: Postgresql + description: Postgresql + - name: Documentation + description: Documentation + +portals: + open: + protocols: + - "$kubernetes-resource_configmap_tcportal-open_protocol" + host: + - "$kubernetes-resource_configmap_tcportal-open_host" + ports: + - "$kubernetes-resource_configmap_tcportal-open_port" + +questions: + - variable: global + group: General Settings + label: "Global Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: stopAll + label: Stop All + description: "Stops All Running pods and hibernates cnpg" + schema: + type: boolean + default: false + + - variable: workload + group: "Workload Settings" + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "" + schema: + additional_attrs: true + type: dict + attrs: + + - variable: type + label: Type (Advanced) + schema: + type: string + default: Deployment + enum: + - value: Deployment + description: Deployment + - value: DaemonSet + description: DaemonSet + + - variable: replicas + label: Replicas (Advanced) + description: Set the number of Replicas + schema: + type: int + show_if: [["type", "!=", "DaemonSet"]] + default: 1 + + - variable: podSpec + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: containers + label: Containers + schema: + additional_attrs: true + type: dict + attrs: + + - variable: main + label: Main Container + schema: + additional_attrs: true + type: dict + attrs: + + - variable: envList + label: Extra Environment Variables + description: "Please be aware that some variables are set in the background, adding duplicates here might cause issues or prevent the app from starting..." + schema: + type: list + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: extraArgs + label: Extra Args + schema: + type: list + default: [] + items: + - variable: arg + label: Arg + schema: + type: string + + - variable: advanced + label: Show Advanced Settings + description: Advanced settings are not covered by TrueCharts Support + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: command + label: Command + schema: + type: list + default: [] + items: + - variable: param + label: Param + schema: + type: string + + - variable: 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: admin + group: "App Configuration" + label: "Admin Credentials" + schema: + additional_attrs: true + type: dict + attrs: + - variable: username + label: "username" + schema: + type: string + valid_chars: '^(?!^admin$).*$' + required: true + - variable: password + label: "password" + schema: + type: string + required: true + private: true + min_length: 8 + - variable: email + label: "email" + schema: + type: string + required: true + - variable: config + group: "App Configuration" + label: "Admin Configuration" + schema: + additional_attrs: true + type: dict + attrs: + - variable: APP_NAME + label: "APP_NAME" + schema: + type: string + default: "Gitea" + required: true + - variable: RUN_MODE + label: "RUN_MODE" + schema: + type: string + default: "prod" + enum: + - value: "prod" + description: "Production" + - value: "dev" + description: "Development" + - value: "test" + description: "Testing" + - variable: ALLOWED_HOST_LIST + label: "ALLOWED_HOST_LIST" + schema: + type: string + default: "127.0.0.1" + required: true + - variable: nodeIP + label: Node IP + description: Used to generate configuration, when installed without ingress + schema: + type: string + required: true + $ref: + - "definitions/nodeIP" + - variable: customConfig + group: "App Configuration" + label: "Custom Configuration parameters" + schema: + type: list + default: [] + items: + # Do not fix this typo, it will break + # current installations + - variable: catagoryItem + label: "Category" + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: "Config Category Name" + schema: + type: string + required: true + - variable: keys + label: "Configuration Parameters" + schema: + type: list + default: [] + items: + - variable: configItem + label: "parameter" + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: "Parameter Name" + schema: + type: string + required: true + - variable: value + label: "Parameter Value" + schema: + type: string + required: true + - 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: 10037 + required: true + - variable: ssh + label: "SSH Service" + description: "The SSH service" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Service + schema: + type: boolean + default: true + hidden: true + - variable: type + label: Service Type + description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: LoadBalancer + enum: + - value: LoadBalancer + description: LoadBalancer (Expose Ports) + - value: ClusterIP + description: ClusterIP (Do Not Expose Ports) + + - variable: loadBalancerIP + label: LoadBalancer IP + description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: ports + label: "Service's Port(s) Configuration" + schema: + additional_attrs: true + type: dict + attrs: + + - variable: ssh + label: "SSH 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: 2222 + 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: data + label: "App data 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: 1000 + - variable: runAsGroup + label: "runAsGroup" + description: "The groupID of the user running the application" + schema: + type: int + default: 1000 + # 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: 1000 + - variable: resources + group: Resources and Devices + label: "Resource Limits" + schema: + additional_attrs: true + type: dict + attrs: + - variable: limits + label: Advanced Limit Resource Consumption + schema: + additional_attrs: true + type: dict + attrs: + - variable: cpu + label: CPU + description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" + schema: + type: string + default: 4000m + valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' + - variable: memory + label: RAM + description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" + schema: + type: string + default: 8Gi + valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' + - variable: 'gpu.intel.com/i915' + label: Add Intel i915 GPUs + schema: + type: int + default: 0 + - variable: 'nvidia.com/gpu' + label: Add NVIDIA GPUs (Experimental) + schema: + type: int + default: 0 + - variable: 'amd.com/gpu' + label: Add AMD GPUs + schema: + type: int + default: 0 + - variable: requests + label: "Minimum Resources Required (request)" + schema: + additional_attrs: true + type: dict + hidden: true + attrs: + - variable: cpu + label: CPU + description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" + schema: + type: string + default: 10m + hidden: true + valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' + - variable: memory + label: "RAM" + description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" + schema: + type: string + default: 50Mi + hidden: true + valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' + - variable: deviceList + label: Mount USB Devices + group: Resources and Devices + schema: + type: list + default: [] + items: + - variable: deviceListEntry + label: Device + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Storage + schema: + type: boolean + default: true + - variable: type + label: (Advanced) Type of Storage + description: Sets the persistence type + schema: + type: string + default: device + hidden: true + - variable: readOnly + label: readOnly + schema: + type: boolean + default: false + - variable: hostPath + label: Host Device Path + description: Path to the device on the host system + schema: + type: path + - variable: mountPath + label: Container Device Path + description: Path inside the container the device is mounted + schema: + type: string + default: "/dev/ttyACM0" + + - variable: cnpg + group: Postgresql + label: "CloudNative-PG (CNPG)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "Main Postgresql Database" + schema: + additional_attrs: true + type: dict + attrs: + - variable: hibernate + label: Hibernate + description: "enable to safely hibernate and shutdown the postgresql cluster" + schema: + type: boolean + default: false + - variable: mode + label: Mode + description: 'Cluster mode of operation. Available modes: standalone - default mode. Creates new or updates an existing CNPG cluster. recovery - Same as standalone but creates a cluster from a backup, object store or via pg_basebackup replica - Creates a replica cluster from an existing CNPG cluster. # TODO.' + schema: + type: string + default: "standalone" + enum: + - value: standalone + description: standalone + - value: replica + description: replica + - value: recovery + description: recovery + - variable: cluster + label: "Cluster Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: instances + label: Instances + schema: + type: int + default: 1 + - variable: singleNode + label: singleNode + schema: + type: boolean + default: true + hidden: true + - variable: storage + label: "Storage" + schema: + additional_attrs: true + type: dict + attrs: + - variable: size + label: Size + schema: + type: string + default: "256Gi" + - variable: walStorage + label: "WAL Storage" + schema: + additional_attrs: true + type: dict + attrs: + - variable: size + label: Size + schema: + type: string + default: "256Gi" + - variable: monitoring + label: "Monitoring Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enablePodMonitor + label: "enablePodMonitor" + schema: + type: boolean + default: true + - variable: disableDefaultQueries + label: "disableDefaultQueries" + schema: + type: boolean + default: false + - variable: pooler + label: "Pooler Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + - variable: instances + label: Instances + schema: + type: int + show_if: [["enabled", "=", true]] + default: 1 + - variable: createRO + label: "Create ReadOnly Instance" + schema: + type: boolean + show_if: [["enabled", "=", true]] + default: false + - variable: backups + label: "Backup Settings (Experimental)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: "enabled" + schema: + type: boolean + default: false + - variable: serverName + label: "serverName" + schema: + type: string + default: "" + - variable: revision + label: "revision" + schema: + type: string + default: "" + - variable: endpointURL + label: "endpointURL" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: destinationPath + label: "destinationPath" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: retentionPolicy + label: "retentionPolicy" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "30d" + - variable: provider + label: "provider" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "s3" + enum: + - value: s3 + description: S3 + - value: azure + description: Azure + - value: google + description: Google + - variable: s3 + label: "s3" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "s3"]] + attrs: + - variable: region + label: "region" + schema: + type: string + default: "" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: accessKey + label: "accessKey" + schema: + type: string + default: "" + - variable: secretKey + label: "secretKey" + schema: + type: string + default: "" + - variable: azure + label: "azure (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "azure"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: connectionString + label: "connectionString" + schema: + type: string + default: "" + - variable: storageAccount + label: "storageAccount" + schema: + type: string + default: "" + - variable: storageKey + label: "storageKey" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: storageSasToken + label: "storageSasToken" + schema: + type: string + default: "" + - variable: containerName + label: "containerName" + schema: + type: string + default: "" + - variable: serviceName + label: "serviceName" + schema: + type: string + default: "blob" + - variable: inheritFromAzureAD + label: "inheritFromAzureAD" + schema: + type: boolean + default: false + - variable: google + label: "google (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "google"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: gkeEnvironment + label: "gkeEnvironment" + schema: + type: string + default: "" + - variable: applicationCredentials + label: "applicationCredentials" + schema: + type: string + default: "" + - variable: recovery + label: "Recovery Settings (Experimental)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: "enabled" + schema: + type: boolean + default: false + - variable: serverName + label: "serverName" + schema: + type: string + default: "" + - variable: revision + label: "revision" + schema: + type: string + default: "" + - variable: endpointURL + label: "endpointURL" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: method + label: "method" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "object_store" + - variable: backupName + label: "backupName" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: provider + label: "provider" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "s3" + enum: + - value: s3 + description: S3 + - value: azure + description: Azure + - value: google + description: Google + - variable: s3 + label: "s3" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "s3"]] + attrs: + - variable: region + label: "region" + schema: + type: string + default: "" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: accessKey + label: "accessKey" + schema: + type: string + default: "" + - variable: secretKey + label: "secretKey" + schema: + type: string + default: "" + - variable: azure + label: "azure (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "azure"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: connectionString + label: "connectionString" + schema: + type: string + default: "" + - variable: storageAccount + label: "storageAccount" + schema: + type: string + default: "" + - variable: storageKey + label: "storageKey" + schema: + type: string + default: "" + - variable: storageSasToken + label: "storageSasToken" + schema: + type: string + default: "" + - variable: containerName + label: "containerName" + schema: + type: string + default: "" + - variable: serviceName + label: "serviceName" + schema: + type: string + default: "blob" + - variable: inheritFromAzureAD + label: "inheritFromAzureAD" + schema: + type: boolean + default: false + - variable: google + label: "google (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "google"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: gkeEnvironment + label: "gkeEnvironment" + schema: + type: string + default: "" + - variable: applicationCredentials + label: "applicationCredentials" + schema: + type: string + default: "" + +# - variable: 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/gitea/18.14.6/templates/NOTES.txt b/stable/gitea/18.14.6/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/gitea/18.14.6/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/gitea/18.14.6/templates/_configmap.tpl b/stable/gitea/18.14.6/templates/_configmap.tpl new file mode 100644 index 0000000..7605060 --- /dev/null +++ b/stable/gitea/18.14.6/templates/_configmap.tpl @@ -0,0 +1,15 @@ +{{/* Define the configmap */}} +{{- define "gitea.configmap" -}} +enabled: true +data: + GITEA_APP_INI: "/data/gitea/conf/app.ini" + GITEA_CUSTOM: "/data/gitea" + GITEA_WORK_DIR: "/data" + GITEA_TEMP: "/tmp/gitea" + GITEA_ADMIN_USERNAME: {{ .Values.admin.username | quote }} + GITEA_ADMIN_PASSWORD: {{ .Values.admin.password | quote }} + SSH_PORT: {{ .Values.service.ssh.ports.ssh.port | quote }} + SSH_LISTEN_PORT: {{ .Values.service.ssh.ports.ssh.targetPort | quote }} + TMPDIR: "/tmp/gitea" + GNUPGHOME: "/data/git/.gnupg" +{{- end -}} diff --git a/stable/gitea/18.14.6/templates/_secrets.tpl b/stable/gitea/18.14.6/templates/_secrets.tpl new file mode 100644 index 0000000..215287c --- /dev/null +++ b/stable/gitea/18.14.6/templates/_secrets.tpl @@ -0,0 +1,233 @@ +{{/* Define the secrets */}} +{{- define "gitea.secrets" -}} + +{{ $DOMAIN := .Values.config.nodeIP | quote -}} +{{ $URL := (printf "http://%s:%v/" .Values.config.nodeIP .Values.service.main.ports.main.port) }} +{{- $pgHost := printf "%v-cnpg-main-rw" (include "tc.v1.common.lib.chart.names.fullname" $) -}} + +{{- if and (.Values.ingress.main.enabled) (gt (len .Values.ingress.main.hosts) 0) -}} + {{- $DOMAIN = (index .Values.ingress.main.hosts 0).host -}} + {{- $URL = (printf "https://%s/" (index .Values.ingress.main.hosts 0).host) -}} +{{- end -}} + +secret: + enabled: true + data: + app.ini: |- + APP_NAME = {{ .Values.config.APP_NAME }} + RUN_MODE = {{ .Values.config.RUN_MODE }} + + [cache] + ADAPTER = memcache + ENABLED = true + HOST = {{ printf "%v-%v:%v" .Release.Name "memcached" "11211" }} + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "cache" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + [database] + DB_TYPE = postgres + HOST = {{ printf "%v:5432" $pgHost }} + NAME = {{ .Values.cnpg.main.database }} + PASSWD = {{ .Values.cnpg.main.creds.password }} + USER = {{ .Values.cnpg.main.user }} + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "database" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + [metrics] + ENABLED = {{ .Values.metrics.main.enabled }} + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "metrics" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + [repository] + ROOT = /data/git/gitea-repositories + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "repository" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + + [security] + INSTALL_LOCK = true + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "security" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + [webhook] + ALLOWED_HOST_LIST = {{ .Values.config.ALLOWED_HOST_LIST }} + + [server] + APP_DATA_PATH = /data + DOMAIN = {{ $DOMAIN }} + ENABLE_PPROF = false + HTTP_PORT = {{ .Values.service.main.ports.main.targetPort }} + PROTOCOL = http + ROOT_URL = {{ $URL }} + SSH_DOMAIN = {{ $DOMAIN }} + SSH_LISTEN_PORT = {{ .Values.service.ssh.ports.ssh.targetPort }} + SSH_PORT = {{ .Values.service.ssh.ports.ssh.port }} + START_SSH_SERVER = true + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "server" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if not ( or ( eq $catvalue.name "server" ) ( eq $catvalue.name "server" ) ( eq $catvalue.name "security" ) ( eq $catvalue.name "repository" ) ( eq $catvalue.name "metrics" ) ( eq $catvalue.name "database" ) ( eq $catvalue.name "cache" ) ) }} + [{{ $catvalue.name }}] + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + +init: + enabled: true + data: + init_directory_structure.sh: |- + #!/usr/bin/env bash + + set -euo pipefail + + {{- if .Values.initPreScript }} + # BEGIN: initPreScript + {{- with .Values.initPreScript -}} + {{ . | nindent 4}} + {{- end -}} + # END: initPreScript + {{- end }} + + set -x + + mkdir -p /data/git/.ssh + chmod -R 700 /data/git/.ssh + [ ! -d /data/gitea ] && mkdir -p /data/gitea/conf + + # prepare temp directory structure + mkdir -p "${GITEA_TEMP}" + chown -Rf {{ .Values.securityContext.container.runAsUser }}:{{ .Values.securityContext.pod.fsGroup }} "${GITEA_TEMP}" + chmod ug+rwx "${GITEA_TEMP}" + + # Copy config file to writable volume + cp /etc/gitea/conf/app.ini /data/gitea/conf/app.ini + chown -Rf {{ .Values.securityContext.container.runAsUser }}:{{ .Values.securityContext.pod.fsGroup }} "/data" + chmod a+rwx /data/gitea/conf/app.ini + + # Patch dockercontainer for dynamic users + chown -Rf {{ .Values.securityContext.container.runAsUser }}:{{ .Values.securityContext.pod.fsGroup }} "/var/lib/gitea" + + configure_gitea.sh: |- + #!/usr/bin/env bash + + set -euo pipefail + + + # Connection retry inspired by https://gist.github.com/dublx/e99ea94858c07d2ca6de + function test_db_connection() { + local RETRY=0 + local MAX=30 + + echo 'Wait for database to become avialable...' + until [ "${RETRY}" -ge "${MAX}" ]; do + nc -vz -w2 {{ $pgHost }} 5432 && break + RETRY=$[${RETRY}+1] + echo "...not ready yet (${RETRY}/${MAX})" + done + + if [ "${RETRY}" -ge "${MAX}" ]; then + echo "Database not reachable after '${MAX}' attempts!" + exit 1 + fi + } + + test_db_connection + + + echo '==== BEGIN GITEA MIGRATION ====' + + gitea migrate + + echo '==== BEGIN GITEA CONFIGURATION ====' + + {{- if or .Values.admin.existingSecret (and .Values.admin.username .Values.admin.password) }} + function configure_admin_user() { + local ACCOUNT_ID=$(gitea admin user list --admin | grep -e "\s\+${GITEA_ADMIN_USERNAME}\|{{ .Values.admin.email }}\s\+" | awk -F " " "{printf \$1}") + if [[ -z "${ACCOUNT_ID}" ]]; then + echo "No admin user '${GITEA_ADMIN_USERNAME}' found, neither email '{{ .Values.admin.email }}' is assigned to an admin. Creating now..." + gitea admin user create --admin --username "${GITEA_ADMIN_USERNAME}" --password "${GITEA_ADMIN_PASSWORD}" --email {{ .Values.admin.email | quote }} --must-change-password=false + echo '...created.' + else + echo "Admin account '${GITEA_ADMIN_USERNAME}' or email {{ .Values.admin.email }} already exist. Running update to sync password..." + gitea admin user change-password --username "${GITEA_ADMIN_USERNAME}" --password "${GITEA_ADMIN_PASSWORD}" + echo '...password sync done.' + fi + } + + configure_admin_user + {{- end }} + + {{- if .Values.ldap.enabled }} + function configure_ldap() { + local LDAP_NAME={{ (printf "%s" .Values.ldap.name) | squote }} + local GITEA_AUTH_ID=$(gitea admin auth list --vertical-bars | grep -E "\|${LDAP_NAME}\s+\|" | grep -iE '\|LDAP \(via BindDN\)\s+\|' | awk -F " " "{print \$1}") + + if [[ -z "${GITEA_AUTH_ID}" ]]; then + echo "No ldap configuration found with name '${LDAP_NAME}'. Installing it now..." + gitea admin auth add-ldap {{- include "gitea.ldap_settings" . | indent 1 }} + echo '...installed.' + else + echo "Existing ldap configuration with name '${LDAP_NAME}': '${GITEA_AUTH_ID}'. Running update to sync settings..." + gitea admin auth update-ldap --id "${GITEA_AUTH_ID}" {{- include "gitea.ldap_settings" . | indent 1 }} + echo '...sync settings done.' + fi + } + + configure_ldap + {{- end }} + + {{- if .Values.oauth.enabled }} + function configure_oauth() { + local OAUTH_NAME={{ (printf "%s" .Values.oauth.name) | squote }} + local AUTH_ID=$(gitea admin auth list --vertical-bars | grep -E "\|${OAUTH_NAME}\s+\|" | grep -iE '\|OAuth2\s+\|' | awk -F " " "{print \$1}") + + if [[ -z "${AUTH_ID}" ]]; then + echo "No oauth configuration found with name '${OAUTH_NAME}'. Installing it now..." + gitea admin auth add-oauth {{- include "gitea.oauth_settings" . | indent 1 }} + echo '...installed.' + else + echo "Existing oauth configuration with name '${OAUTH_NAME}': '${AUTH_ID}'. Running update to sync settings..." + gitea admin auth update-oauth --id "${AUTH_ID}" {{- include "gitea.oauth_settings" . | indent 1 }} + echo '...sync settings done.' + fi + } + + configure_oauth + {{- end }} + + echo '==== END GITEA CONFIGURATION ====' + +{{- end -}} diff --git a/stable/gitea/18.14.6/templates/common.yaml b/stable/gitea/18.14.6/templates/common.yaml new file mode 100644 index 0000000..ebc9e98 --- /dev/null +++ b/stable/gitea/18.14.6/templates/common.yaml @@ -0,0 +1,52 @@ +{{/* Make sure all variables are set properly */}} +{{- include "tc.v1.common.loader.init" . }} + +{{/* Render secrets for gitea */}} +{{- $secrets := include "gitea.secrets" . | fromYaml -}} +{{- if $secrets -}} + {{- $_ := mustMergeOverwrite .Values.secret $secrets -}} +{{- end -}} + +{{/* Render configmap for gitea */}} +{{- $configmap := include "gitea.configmap" . | fromYaml -}} +{{- if $configmap -}} + {{- $_ := set .Values.configmap "gitea-env" $configmap -}} +{{- end -}} + +{{/* Append the general secret volumes to the volumes */}} +{{- define "gitea.initvolume" -}} +enabled: true +readOnly: true +type: secret +objectName: init +defaultMode: "0777" +targetSelector: + main: + main: + mountPath: /secrets/ini + 1-init-directories: + mountPath: "/usr/sbin" + 2-configure-gitea: + mountPath: "/usr/sbin" +{{- end -}} + +{{/* Append the general secret volumes to the volumes */}} +{{- define "gitea.configvolume" -}} +enabled: true +readOnly: true +type: secret +objectName: secret +targetSelector: + main: + main: + mountPath: /secrets/config + 1-init-directories: + mountPath: /etc/gitea/conf +{{- end -}} + +{{- $_ := set .Values.persistence "init" (include "gitea.initvolume" . | fromYaml) -}} +{{- $_ := set .Values.persistence "config" (include "gitea.configvolume" . | fromYaml) -}} + + +{{/* Render the templates */}} +{{ include "tc.v1.common.loader.apply" . }} diff --git a/stable/gitea/18.14.6/values.yaml b/stable/gitea/18.14.6/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/gitea/18.14.7/.helmignore b/stable/gitea/18.14.7/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/gitea/18.14.7/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/gitea/18.14.7/CHANGELOG.md b/stable/gitea/18.14.7/CHANGELOG.md new file mode 100644 index 0000000..55a04a0 --- /dev/null +++ b/stable/gitea/18.14.7/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + +## [gitea-18.14.7](https://github.com/truecharts/charts/compare/gitea-18.11.0...gitea-18.14.7) (2024-03-25) + +### Chore + + + +- 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 memcached to v12.8.3[@0d3a9c4](https://github.com/0d3a9c4) by renovate ([#19694](https://github.com/truecharts/charts/issues/19694)) + +- 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 gitea/gitea to v1.21.9[@5f9b30b](https://github.com/5f9b30b) by renovate ([#19627](https://github.com/truecharts/charts/issues/19627)) + +- update container image memcached to v12.8.2[@498f00f](https://github.com/498f00f) by renovate ([#19535](https://github.com/truecharts/charts/issues/19535)) + +- update container image memcached to v12.8.1[@18f10eb](https://github.com/18f10eb) by renovate ([#19442](https://github.com/truecharts/charts/issues/19442)) + +- 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 ([#19390](https://github.com/truecharts/charts/issues/19390)) + +- update container image memcached to v12.8.0[@ac16683](https://github.com/ac16683) by renovate ([#19394](https://github.com/truecharts/charts/issues/19394)) + +- update container image memcached to v12.7.0[@e63a46e](https://github.com/e63a46e) by renovate ([#19363](https://github.com/truecharts/charts/issues/19363)) + +- 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 gitea/gitea to v1.21.8[@e7ee046](https://github.com/e7ee046) by renovate ([#19311](https://github.com/truecharts/charts/issues/19311)) + +- update container image memcached to v12.6.4[@23b2892](https://github.com/23b2892) by renovate ([#19319](https://github.com/truecharts/charts/issues/19319)) + + +## [gitea-18.14.7](https://github.com/truecharts/charts/compare/gitea-18.11.0...gitea-18.14.7) (2024-03-25) + +### Chore + + + +- 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 memcached to v12.8.3[@0d3a9c4](https://github.com/0d3a9c4) by renovate ([#19694](https://github.com/truecharts/charts/issues/19694)) + +- 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 gitea/gitea to v1.21.9[@5f9b30b](https://github.com/5f9b30b) by renovate ([#19627](https://github.com/truecharts/charts/issues/19627)) + +- update container image memcached to v12.8.2[@498f00f](https://github.com/498f00f) by renovate ([#19535](https://github.com/truecharts/charts/issues/19535)) + +- update container image memcached to v12.8.1[@18f10eb](https://github.com/18f10eb) by renovate ([#19442](https://github.com/truecharts/charts/issues/19442)) + +- 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 ([#19390](https://github.com/truecharts/charts/issues/19390)) + +- update container image memcached to v12.8.0[@ac16683](https://github.com/ac16683) by renovate ([#19394](https://github.com/truecharts/charts/issues/19394)) + +- update container image memcached to v12.7.0[@e63a46e](https://github.com/e63a46e) by renovate ([#19363](https://github.com/truecharts/charts/issues/19363)) + +- 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 gitea/gitea to v1.21.8[@e7ee046](https://github.com/e7ee046) by renovate ([#19311](https://github.com/truecharts/charts/issues/19311)) + +- update container image memcached to v12.6.4[@23b2892](https://github.com/23b2892) by renovate ([#19319](https://github.com/truecharts/charts/issues/19319)) + + +## [gitea-18.14.6](https://github.com/truecharts/charts/compare/gitea-18.11.0...gitea-18.14.6) (2024-03-23) + +### Chore + + + +- update container image memcached to v12.8.3[@0d3a9c4](https://github.com/0d3a9c4) by renovate ([#19694](https://github.com/truecharts/charts/issues/19694)) + +- 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 gitea/gitea to v1.21.9[@5f9b30b](https://github.com/5f9b30b) by renovate ([#19627](https://github.com/truecharts/charts/issues/19627)) + +- update container image memcached to v12.8.2[@498f00f](https://github.com/498f00f) by renovate ([#19535](https://github.com/truecharts/charts/issues/19535)) + +- update container image memcached to v12.8.1[@18f10eb](https://github.com/18f10eb) by renovate ([#19442](https://github.com/truecharts/charts/issues/19442)) + +- 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 ([#19390](https://github.com/truecharts/charts/issues/19390)) + +- update container image memcached to v12.8.0[@ac16683](https://github.com/ac16683) by renovate ([#19394](https://github.com/truecharts/charts/issues/19394)) + +- update container image memcached to v12.7.0[@e63a46e](https://github.com/e63a46e) by renovate ([#19363](https://github.com/truecharts/charts/issues/19363)) diff --git a/stable/gitea/18.14.7/Chart.yaml b/stable/gitea/18.14.7/Chart.yaml new file mode 100644 index 0000000..9e48f75 --- /dev/null +++ b/stable/gitea/18.14.7/Chart.yaml @@ -0,0 +1,49 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: GIT + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.11" + truecharts.org/train: stable +apiVersion: v2 +appVersion: 1.21.9 +dependencies: + - name: common + version: 20.2.4 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] + - name: memcached + version: 12.8.3 + repository: oci://tccr.io/truecharts + condition: memcached.enabled + alias: "" + tags: [] + import-values: [] +deprecated: false +description: Self hosted GIT repositories +home: https://truecharts.org/charts/stable/gitea +icon: https://truecharts.org/img/hotlink-ok/chart-icons/gitea.png +keywords: + - git + - issue tracker + - code review + - wiki + - gitea + - gogs +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: gitea +sources: + - https://gitea.com/gitea/helm-chart + - https://github.com/go-gitea/gitea + - https://github.com/truecharts/charts/tree/master/charts/stable/gitea + - https://hub.docker.com/r/gitea/gitea +type: application +version: 18.14.7 diff --git a/stable/gitea/18.14.7/README.md b/stable/gitea/18.14.7/README.md new file mode 100644 index 0000000..1d7e1d4 --- /dev/null +++ b/stable/gitea/18.14.7/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/gitea) + +**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/gitea/18.14.7/app-changelog.md b/stable/gitea/18.14.7/app-changelog.md new file mode 100644 index 0000000..64fa907 --- /dev/null +++ b/stable/gitea/18.14.7/app-changelog.md @@ -0,0 +1,33 @@ + + +## [gitea-18.14.7](https://github.com/truecharts/charts/compare/gitea-18.11.0...gitea-18.14.7) (2024-03-25) + +### Chore + + + +- 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 memcached to v12.8.3[@0d3a9c4](https://github.com/0d3a9c4) by renovate ([#19694](https://github.com/truecharts/charts/issues/19694)) + +- 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 gitea/gitea to v1.21.9[@5f9b30b](https://github.com/5f9b30b) by renovate ([#19627](https://github.com/truecharts/charts/issues/19627)) + +- update container image memcached to v12.8.2[@498f00f](https://github.com/498f00f) by renovate ([#19535](https://github.com/truecharts/charts/issues/19535)) + +- update container image memcached to v12.8.1[@18f10eb](https://github.com/18f10eb) by renovate ([#19442](https://github.com/truecharts/charts/issues/19442)) + +- 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 ([#19390](https://github.com/truecharts/charts/issues/19390)) + +- update container image memcached to v12.8.0[@ac16683](https://github.com/ac16683) by renovate ([#19394](https://github.com/truecharts/charts/issues/19394)) + +- update container image memcached to v12.7.0[@e63a46e](https://github.com/e63a46e) by renovate ([#19363](https://github.com/truecharts/charts/issues/19363)) + +- 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 gitea/gitea to v1.21.8[@e7ee046](https://github.com/e7ee046) by renovate ([#19311](https://github.com/truecharts/charts/issues/19311)) + +- update container image memcached to v12.6.4[@23b2892](https://github.com/23b2892) by renovate ([#19319](https://github.com/truecharts/charts/issues/19319)) \ No newline at end of file diff --git a/stable/gitea/18.14.7/app-readme.md b/stable/gitea/18.14.7/app-readme.md new file mode 100644 index 0000000..e8603ad --- /dev/null +++ b/stable/gitea/18.14.7/app-readme.md @@ -0,0 +1,8 @@ +Self hosted GIT repositories + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/gitea](https://truecharts.org/charts/stable/gitea) + +--- + +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/gitea/18.14.7/charts/common-20.2.4.tgz b/stable/gitea/18.14.7/charts/common-20.2.4.tgz new file mode 100644 index 0000000000000000000000000000000000000000..e02a4ec419295564ee54731f20fe2563fa9e2f00 GIT binary patch literal 101809 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 literal 0 HcmV?d00001 diff --git a/stable/gitea/18.14.7/charts/memcached-12.8.3.tgz b/stable/gitea/18.14.7/charts/memcached-12.8.3.tgz new file mode 100644 index 0000000000000000000000000000000000000000..51c01f914706c2cd49ae7ea277a97c4bb5e9ab70 GIT binary patch literal 109420 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

F>uE#WQKvy=c3#ymZlOaNG4D-e@N0M`7w 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π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 A=Kufz literal 0 HcmV?d00001 diff --git a/stable/gitea/18.14.7/ix_values.yaml b/stable/gitea/18.14.7/ix_values.yaml new file mode 100644 index 0000000..875b7e5 --- /dev/null +++ b/stable/gitea/18.14.7/ix_values.yaml @@ -0,0 +1,132 @@ +image: + repository: gitea/gitea + tag: 1.21.9-rootless@sha256:5f9b30b9b2599ead2ae4bb293bb65097a227c233a29c756940260a38e5c0d998 + pullPolicy: IfNotPresent +service: + main: + ports: + main: + port: 10037 + targetPort: 3000 + ssh: + enabled: true + ports: + ssh: + enabled: true + port: 2222 + targetPort: 2222 +persistence: + data: + enabled: true + mountPath: "/data" + targetSelectAll: true + varlib: + enabled: true + mountPath: "/var/lib/gitea" + type: emptyDir +# Configure commit/action signing prerequisites +signing: + enabled: true + gpgHome: /data/git/.gnupg +admin: + username: giteaadmin + password: r8sA8CPHD9!bt6d + email: "gitea@local.domain" +metrics: + main: + enabled: true + type: "servicemonitor" + endpoints: + - port: main + path: /metrics +ldap: + enabled: false + # name: + # securityProtocol: + # host: + # port: + # userSearchBase: + # userFilter: + # adminFilter: + # emailAttribute: + # bindDn: + # bindPassword: + # usernameAttribute: + # sshPublicKeyAttribute: +oauth: + enabled: false + # name: + # provider: + # key: + # secret: + # autoDiscoverUrl: + # useCustomUrls: + # customAuthUrl: + # customTokenUrl: + # customProfileUrl: + # customEmailUrl: +config: + APP_NAME: "Gitea: Git with a cup of tea" + RUN_MODE: dev + ALLOWED_HOST_LIST: "127.0.0.1" + nodeIP: 127.0.0.1 +customConfig: [] +# - name: test +# keys: +# - name: testkey +# value: testvalue + +# Enabled postgres +cnpg: + main: + enabled: true + user: gitea + database: gitea +# -- memcached dependency settings +memcached: + enabled: true +portal: + open: + enabled: true +securityContext: + container: + runAsUser: 1000 + runAsGroup: 1000 + fsGroup: 1000 +workload: + main: + podSpec: + initContainers: + 1-init-directories: + enabled: true + imageSelector: image + type: init + command: + - "/usr/sbin/init_directory_structure.sh" + securityContext: + runAsUser: 0 + runAsNonRoot: false + envFrom: + - configMapRef: + name: gitea-env + 2-configure-gitea: + enabled: true + imageSelector: image + type: init + command: + - "/usr/sbin/configure_gitea.sh" + envFrom: + - configMapRef: + name: gitea-env + containers: + main: + probes: + liveness: + type: tcp + readiness: + type: tcp + startup: + type: tcp + envFrom: + - configMapRef: + name: gitea-env diff --git a/stable/gitea/18.14.7/questions.yaml b/stable/gitea/18.14.7/questions.yaml new file mode 100644 index 0000000..c1fdbc4 --- /dev/null +++ b/stable/gitea/18.14.7/questions.yaml @@ -0,0 +1,3425 @@ +groups: + - name: Container Image + description: Image to be used for container + - name: General Settings + description: General Deployment Settings + - name: Workload Settings + description: Workload Settings + - name: App Configuration + description: App Specific Config Options + - name: Networking and Services + description: Configure Network and Services for Container + - name: Storage and Persistence + description: Persist and Share Data that is Separate from the Container + - name: Ingress + description: Ingress Configuration + - name: Security and Permissions + description: Configure Security Context and Permissions + - name: Resources and Devices + description: "Specify Resources/Devices to be Allocated to Workload" + - name: Middlewares + description: Traefik Middlewares + - name: Metrics + description: Metrics + - name: Addons + description: Addon Configuration + - name: Backup Configuration + description: Configure Velero Backup Schedule + - name: Advanced + description: Advanced Configuration + - name: Postgresql + description: Postgresql + - name: Documentation + description: Documentation + +portals: + open: + protocols: + - "$kubernetes-resource_configmap_tcportal-open_protocol" + host: + - "$kubernetes-resource_configmap_tcportal-open_host" + ports: + - "$kubernetes-resource_configmap_tcportal-open_port" + +questions: + - variable: global + group: General Settings + label: "Global Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: stopAll + label: Stop All + description: "Stops All Running pods and hibernates cnpg" + schema: + type: boolean + default: false + + - variable: workload + group: "Workload Settings" + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "" + schema: + additional_attrs: true + type: dict + attrs: + + - variable: type + label: Type (Advanced) + schema: + type: string + default: Deployment + enum: + - value: Deployment + description: Deployment + - value: DaemonSet + description: DaemonSet + + - variable: replicas + label: Replicas (Advanced) + description: Set the number of Replicas + schema: + type: int + show_if: [["type", "!=", "DaemonSet"]] + default: 1 + + - variable: podSpec + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: containers + label: Containers + schema: + additional_attrs: true + type: dict + attrs: + + - variable: main + label: Main Container + schema: + additional_attrs: true + type: dict + attrs: + + - variable: envList + label: Extra Environment Variables + description: "Please be aware that some variables are set in the background, adding duplicates here might cause issues or prevent the app from starting..." + schema: + type: list + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: extraArgs + label: Extra Args + schema: + type: list + default: [] + items: + - variable: arg + label: Arg + schema: + type: string + + - variable: advanced + label: Show Advanced Settings + description: Advanced settings are not covered by TrueCharts Support + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: command + label: Command + schema: + type: list + default: [] + items: + - variable: param + label: Param + schema: + type: string + + - variable: 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: admin + group: "App Configuration" + label: "Admin Credentials" + schema: + additional_attrs: true + type: dict + attrs: + - variable: username + label: "username" + schema: + type: string + valid_chars: '^(?!^admin$).*$' + required: true + - variable: password + label: "password" + schema: + type: string + required: true + private: true + min_length: 8 + - variable: email + label: "email" + schema: + type: string + required: true + - variable: config + group: "App Configuration" + label: "Admin Configuration" + schema: + additional_attrs: true + type: dict + attrs: + - variable: APP_NAME + label: "APP_NAME" + schema: + type: string + default: "Gitea" + required: true + - variable: RUN_MODE + label: "RUN_MODE" + schema: + type: string + default: "prod" + enum: + - value: "prod" + description: "Production" + - value: "dev" + description: "Development" + - value: "test" + description: "Testing" + - variable: ALLOWED_HOST_LIST + label: "ALLOWED_HOST_LIST" + schema: + type: string + default: "127.0.0.1" + required: true + - variable: nodeIP + label: Node IP + description: Used to generate configuration, when installed without ingress + schema: + type: string + required: true + $ref: + - "definitions/nodeIP" + - variable: customConfig + group: "App Configuration" + label: "Custom Configuration parameters" + schema: + type: list + default: [] + items: + # Do not fix this typo, it will break + # current installations + - variable: catagoryItem + label: "Category" + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: "Config Category Name" + schema: + type: string + required: true + - variable: keys + label: "Configuration Parameters" + schema: + type: list + default: [] + items: + - variable: configItem + label: "parameter" + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: "Parameter Name" + schema: + type: string + required: true + - variable: value + label: "Parameter Value" + schema: + type: string + required: true + - 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: 10037 + required: true + - variable: ssh + label: "SSH Service" + description: "The SSH service" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Service + schema: + type: boolean + default: true + hidden: true + - variable: type + label: Service Type + description: "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer" + schema: + type: string + default: LoadBalancer + enum: + - value: LoadBalancer + description: LoadBalancer (Expose Ports) + - value: ClusterIP + description: ClusterIP (Do Not Expose Ports) + + - variable: loadBalancerIP + label: LoadBalancer IP + description: "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB" + schema: + show_if: [["type", "=", "LoadBalancer"]] + type: string + default: "" + - variable: ports + label: "Service's Port(s) Configuration" + schema: + additional_attrs: true + type: dict + attrs: + + - variable: ssh + label: "SSH 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: 2222 + 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: data + label: "App data 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: 1000 + - variable: runAsGroup + label: "runAsGroup" + description: "The groupID of the user running the application" + schema: + type: int + default: 1000 + # 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: 1000 + - variable: resources + group: Resources and Devices + label: "Resource Limits" + schema: + additional_attrs: true + type: dict + attrs: + - variable: limits + label: Advanced Limit Resource Consumption + schema: + additional_attrs: true + type: dict + attrs: + - variable: cpu + label: CPU + description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" + schema: + type: string + default: 4000m + valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' + - variable: memory + label: RAM + description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" + schema: + type: string + default: 8Gi + valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' + - variable: 'gpu.intel.com/i915' + label: Add Intel i915 GPUs + schema: + type: int + default: 0 + - variable: 'nvidia.com/gpu' + label: Add NVIDIA GPUs (Experimental) + schema: + type: int + default: 0 + - variable: 'amd.com/gpu' + label: Add AMD GPUs + schema: + type: int + default: 0 + - variable: requests + label: "Minimum Resources Required (request)" + schema: + additional_attrs: true + type: dict + hidden: true + attrs: + - variable: cpu + label: CPU + description: "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation" + schema: + type: string + default: 10m + hidden: true + valid_chars: '^(?!^0(\.0|m|)$)([0-9]+)(\.[0-9]|m?)$' + - variable: memory + label: "RAM" + description: "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation" + schema: + type: string + default: 50Mi + hidden: true + valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' + - variable: deviceList + label: Mount USB Devices + group: Resources and Devices + schema: + type: list + default: [] + items: + - variable: deviceListEntry + label: Device + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enable the Storage + schema: + type: boolean + default: true + - variable: type + label: (Advanced) Type of Storage + description: Sets the persistence type + schema: + type: string + default: device + hidden: true + - variable: readOnly + label: readOnly + schema: + type: boolean + default: false + - variable: hostPath + label: Host Device Path + description: Path to the device on the host system + schema: + type: path + - variable: mountPath + label: Container Device Path + description: Path inside the container the device is mounted + schema: + type: string + default: "/dev/ttyACM0" + + - variable: cnpg + group: Postgresql + label: "CloudNative-PG (CNPG)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "Main Postgresql Database" + schema: + additional_attrs: true + type: dict + attrs: + - variable: hibernate + label: Hibernate + description: "enable to safely hibernate and shutdown the postgresql cluster" + schema: + type: boolean + default: false + - variable: mode + label: Mode + description: 'Cluster mode of operation. Available modes: standalone - default mode. Creates new or updates an existing CNPG cluster. recovery - Same as standalone but creates a cluster from a backup, object store or via pg_basebackup replica - Creates a replica cluster from an existing CNPG cluster. # TODO.' + schema: + type: string + default: "standalone" + enum: + - value: standalone + description: standalone + - value: replica + description: replica + - value: recovery + description: recovery + - variable: cluster + label: "Cluster Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: instances + label: Instances + schema: + type: int + default: 1 + - variable: singleNode + label: singleNode + schema: + type: boolean + default: true + hidden: true + - variable: storage + label: "Storage" + schema: + additional_attrs: true + type: dict + attrs: + - variable: size + label: Size + schema: + type: string + default: "256Gi" + - variable: walStorage + label: "WAL Storage" + schema: + additional_attrs: true + type: dict + attrs: + - variable: size + label: Size + schema: + type: string + default: "256Gi" + - variable: monitoring + label: "Monitoring Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enablePodMonitor + label: "enablePodMonitor" + schema: + type: boolean + default: true + - variable: disableDefaultQueries + label: "disableDefaultQueries" + schema: + type: boolean + default: false + - variable: pooler + label: "Pooler Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: Enabled + schema: + type: boolean + default: false + - variable: instances + label: Instances + schema: + type: int + show_if: [["enabled", "=", true]] + default: 1 + - variable: createRO + label: "Create ReadOnly Instance" + schema: + type: boolean + show_if: [["enabled", "=", true]] + default: false + - variable: backups + label: "Backup Settings (Experimental)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: "enabled" + schema: + type: boolean + default: false + - variable: serverName + label: "serverName" + schema: + type: string + default: "" + - variable: revision + label: "revision" + schema: + type: string + default: "" + - variable: endpointURL + label: "endpointURL" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: destinationPath + label: "destinationPath" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: retentionPolicy + label: "retentionPolicy" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "30d" + - variable: provider + label: "provider" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "s3" + enum: + - value: s3 + description: S3 + - value: azure + description: Azure + - value: google + description: Google + - variable: s3 + label: "s3" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "s3"]] + attrs: + - variable: region + label: "region" + schema: + type: string + default: "" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: accessKey + label: "accessKey" + schema: + type: string + default: "" + - variable: secretKey + label: "secretKey" + schema: + type: string + default: "" + - variable: azure + label: "azure (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "azure"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: connectionString + label: "connectionString" + schema: + type: string + default: "" + - variable: storageAccount + label: "storageAccount" + schema: + type: string + default: "" + - variable: storageKey + label: "storageKey" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: storageSasToken + label: "storageSasToken" + schema: + type: string + default: "" + - variable: containerName + label: "containerName" + schema: + type: string + default: "" + - variable: serviceName + label: "serviceName" + schema: + type: string + default: "blob" + - variable: inheritFromAzureAD + label: "inheritFromAzureAD" + schema: + type: boolean + default: false + - variable: google + label: "google (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "google"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: gkeEnvironment + label: "gkeEnvironment" + schema: + type: string + default: "" + - variable: applicationCredentials + label: "applicationCredentials" + schema: + type: string + default: "" + - variable: recovery + label: "Recovery Settings (Experimental)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: "enabled" + schema: + type: boolean + default: false + - variable: serverName + label: "serverName" + schema: + type: string + default: "" + - variable: revision + label: "revision" + schema: + type: string + default: "" + - variable: endpointURL + label: "endpointURL" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: method + label: "method" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "object_store" + - variable: backupName + label: "backupName" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "" + - variable: provider + label: "provider" + schema: + type: string + show_if: [["enabled", "=", true]] + default: "s3" + enum: + - value: s3 + description: S3 + - value: azure + description: Azure + - value: google + description: Google + - variable: s3 + label: "s3" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "s3"]] + attrs: + - variable: region + label: "region" + schema: + type: string + default: "" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: accessKey + label: "accessKey" + schema: + type: string + default: "" + - variable: secretKey + label: "secretKey" + schema: + type: string + default: "" + - variable: azure + label: "azure (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "azure"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: connectionString + label: "connectionString" + schema: + type: string + default: "" + - variable: storageAccount + label: "storageAccount" + schema: + type: string + default: "" + - variable: storageKey + label: "storageKey" + schema: + type: string + default: "" + - variable: storageSasToken + label: "storageSasToken" + schema: + type: string + default: "" + - variable: containerName + label: "containerName" + schema: + type: string + default: "" + - variable: serviceName + label: "serviceName" + schema: + type: string + default: "blob" + - variable: inheritFromAzureAD + label: "inheritFromAzureAD" + schema: + type: boolean + default: false + - variable: google + label: "google (EXTREMELY EXPERIMENTAL)" + schema: + additional_attrs: true + type: dict + show_if: [["provider", "=", "google"]] + attrs: + - variable: path + label: "path" + schema: + type: string + default: "/" + - variable: bucket + label: "bucket" + schema: + type: string + default: "" + - variable: gkeEnvironment + label: "gkeEnvironment" + schema: + type: string + default: "" + - variable: applicationCredentials + label: "applicationCredentials" + schema: + type: string + default: "" + +# - variable: 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/gitea/18.14.7/templates/NOTES.txt b/stable/gitea/18.14.7/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/gitea/18.14.7/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/gitea/18.14.7/templates/_configmap.tpl b/stable/gitea/18.14.7/templates/_configmap.tpl new file mode 100644 index 0000000..7605060 --- /dev/null +++ b/stable/gitea/18.14.7/templates/_configmap.tpl @@ -0,0 +1,15 @@ +{{/* Define the configmap */}} +{{- define "gitea.configmap" -}} +enabled: true +data: + GITEA_APP_INI: "/data/gitea/conf/app.ini" + GITEA_CUSTOM: "/data/gitea" + GITEA_WORK_DIR: "/data" + GITEA_TEMP: "/tmp/gitea" + GITEA_ADMIN_USERNAME: {{ .Values.admin.username | quote }} + GITEA_ADMIN_PASSWORD: {{ .Values.admin.password | quote }} + SSH_PORT: {{ .Values.service.ssh.ports.ssh.port | quote }} + SSH_LISTEN_PORT: {{ .Values.service.ssh.ports.ssh.targetPort | quote }} + TMPDIR: "/tmp/gitea" + GNUPGHOME: "/data/git/.gnupg" +{{- end -}} diff --git a/stable/gitea/18.14.7/templates/_secrets.tpl b/stable/gitea/18.14.7/templates/_secrets.tpl new file mode 100644 index 0000000..215287c --- /dev/null +++ b/stable/gitea/18.14.7/templates/_secrets.tpl @@ -0,0 +1,233 @@ +{{/* Define the secrets */}} +{{- define "gitea.secrets" -}} + +{{ $DOMAIN := .Values.config.nodeIP | quote -}} +{{ $URL := (printf "http://%s:%v/" .Values.config.nodeIP .Values.service.main.ports.main.port) }} +{{- $pgHost := printf "%v-cnpg-main-rw" (include "tc.v1.common.lib.chart.names.fullname" $) -}} + +{{- if and (.Values.ingress.main.enabled) (gt (len .Values.ingress.main.hosts) 0) -}} + {{- $DOMAIN = (index .Values.ingress.main.hosts 0).host -}} + {{- $URL = (printf "https://%s/" (index .Values.ingress.main.hosts 0).host) -}} +{{- end -}} + +secret: + enabled: true + data: + app.ini: |- + APP_NAME = {{ .Values.config.APP_NAME }} + RUN_MODE = {{ .Values.config.RUN_MODE }} + + [cache] + ADAPTER = memcache + ENABLED = true + HOST = {{ printf "%v-%v:%v" .Release.Name "memcached" "11211" }} + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "cache" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + [database] + DB_TYPE = postgres + HOST = {{ printf "%v:5432" $pgHost }} + NAME = {{ .Values.cnpg.main.database }} + PASSWD = {{ .Values.cnpg.main.creds.password }} + USER = {{ .Values.cnpg.main.user }} + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "database" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + [metrics] + ENABLED = {{ .Values.metrics.main.enabled }} + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "metrics" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + [repository] + ROOT = /data/git/gitea-repositories + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "repository" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + + [security] + INSTALL_LOCK = true + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "security" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + [webhook] + ALLOWED_HOST_LIST = {{ .Values.config.ALLOWED_HOST_LIST }} + + [server] + APP_DATA_PATH = /data + DOMAIN = {{ $DOMAIN }} + ENABLE_PPROF = false + HTTP_PORT = {{ .Values.service.main.ports.main.targetPort }} + PROTOCOL = http + ROOT_URL = {{ $URL }} + SSH_DOMAIN = {{ $DOMAIN }} + SSH_LISTEN_PORT = {{ .Values.service.ssh.ports.ssh.targetPort }} + SSH_PORT = {{ .Values.service.ssh.ports.ssh.port }} + START_SSH_SERVER = true + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if eq $catvalue.name "server" }} + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + + {{- range $catindex, $catvalue := .Values.customConfig }} + {{- if not ( or ( eq $catvalue.name "server" ) ( eq $catvalue.name "server" ) ( eq $catvalue.name "security" ) ( eq $catvalue.name "repository" ) ( eq $catvalue.name "metrics" ) ( eq $catvalue.name "database" ) ( eq $catvalue.name "cache" ) ) }} + [{{ $catvalue.name }}] + {{- range $index, $value := $catvalue.keys }} + {{ $value.name }} = {{ $value.value }} + {{- end }} + {{- end }} + {{- end }} + +init: + enabled: true + data: + init_directory_structure.sh: |- + #!/usr/bin/env bash + + set -euo pipefail + + {{- if .Values.initPreScript }} + # BEGIN: initPreScript + {{- with .Values.initPreScript -}} + {{ . | nindent 4}} + {{- end -}} + # END: initPreScript + {{- end }} + + set -x + + mkdir -p /data/git/.ssh + chmod -R 700 /data/git/.ssh + [ ! -d /data/gitea ] && mkdir -p /data/gitea/conf + + # prepare temp directory structure + mkdir -p "${GITEA_TEMP}" + chown -Rf {{ .Values.securityContext.container.runAsUser }}:{{ .Values.securityContext.pod.fsGroup }} "${GITEA_TEMP}" + chmod ug+rwx "${GITEA_TEMP}" + + # Copy config file to writable volume + cp /etc/gitea/conf/app.ini /data/gitea/conf/app.ini + chown -Rf {{ .Values.securityContext.container.runAsUser }}:{{ .Values.securityContext.pod.fsGroup }} "/data" + chmod a+rwx /data/gitea/conf/app.ini + + # Patch dockercontainer for dynamic users + chown -Rf {{ .Values.securityContext.container.runAsUser }}:{{ .Values.securityContext.pod.fsGroup }} "/var/lib/gitea" + + configure_gitea.sh: |- + #!/usr/bin/env bash + + set -euo pipefail + + + # Connection retry inspired by https://gist.github.com/dublx/e99ea94858c07d2ca6de + function test_db_connection() { + local RETRY=0 + local MAX=30 + + echo 'Wait for database to become avialable...' + until [ "${RETRY}" -ge "${MAX}" ]; do + nc -vz -w2 {{ $pgHost }} 5432 && break + RETRY=$[${RETRY}+1] + echo "...not ready yet (${RETRY}/${MAX})" + done + + if [ "${RETRY}" -ge "${MAX}" ]; then + echo "Database not reachable after '${MAX}' attempts!" + exit 1 + fi + } + + test_db_connection + + + echo '==== BEGIN GITEA MIGRATION ====' + + gitea migrate + + echo '==== BEGIN GITEA CONFIGURATION ====' + + {{- if or .Values.admin.existingSecret (and .Values.admin.username .Values.admin.password) }} + function configure_admin_user() { + local ACCOUNT_ID=$(gitea admin user list --admin | grep -e "\s\+${GITEA_ADMIN_USERNAME}\|{{ .Values.admin.email }}\s\+" | awk -F " " "{printf \$1}") + if [[ -z "${ACCOUNT_ID}" ]]; then + echo "No admin user '${GITEA_ADMIN_USERNAME}' found, neither email '{{ .Values.admin.email }}' is assigned to an admin. Creating now..." + gitea admin user create --admin --username "${GITEA_ADMIN_USERNAME}" --password "${GITEA_ADMIN_PASSWORD}" --email {{ .Values.admin.email | quote }} --must-change-password=false + echo '...created.' + else + echo "Admin account '${GITEA_ADMIN_USERNAME}' or email {{ .Values.admin.email }} already exist. Running update to sync password..." + gitea admin user change-password --username "${GITEA_ADMIN_USERNAME}" --password "${GITEA_ADMIN_PASSWORD}" + echo '...password sync done.' + fi + } + + configure_admin_user + {{- end }} + + {{- if .Values.ldap.enabled }} + function configure_ldap() { + local LDAP_NAME={{ (printf "%s" .Values.ldap.name) | squote }} + local GITEA_AUTH_ID=$(gitea admin auth list --vertical-bars | grep -E "\|${LDAP_NAME}\s+\|" | grep -iE '\|LDAP \(via BindDN\)\s+\|' | awk -F " " "{print \$1}") + + if [[ -z "${GITEA_AUTH_ID}" ]]; then + echo "No ldap configuration found with name '${LDAP_NAME}'. Installing it now..." + gitea admin auth add-ldap {{- include "gitea.ldap_settings" . | indent 1 }} + echo '...installed.' + else + echo "Existing ldap configuration with name '${LDAP_NAME}': '${GITEA_AUTH_ID}'. Running update to sync settings..." + gitea admin auth update-ldap --id "${GITEA_AUTH_ID}" {{- include "gitea.ldap_settings" . | indent 1 }} + echo '...sync settings done.' + fi + } + + configure_ldap + {{- end }} + + {{- if .Values.oauth.enabled }} + function configure_oauth() { + local OAUTH_NAME={{ (printf "%s" .Values.oauth.name) | squote }} + local AUTH_ID=$(gitea admin auth list --vertical-bars | grep -E "\|${OAUTH_NAME}\s+\|" | grep -iE '\|OAuth2\s+\|' | awk -F " " "{print \$1}") + + if [[ -z "${AUTH_ID}" ]]; then + echo "No oauth configuration found with name '${OAUTH_NAME}'. Installing it now..." + gitea admin auth add-oauth {{- include "gitea.oauth_settings" . | indent 1 }} + echo '...installed.' + else + echo "Existing oauth configuration with name '${OAUTH_NAME}': '${AUTH_ID}'. Running update to sync settings..." + gitea admin auth update-oauth --id "${AUTH_ID}" {{- include "gitea.oauth_settings" . | indent 1 }} + echo '...sync settings done.' + fi + } + + configure_oauth + {{- end }} + + echo '==== END GITEA CONFIGURATION ====' + +{{- end -}} diff --git a/stable/gitea/18.14.7/templates/common.yaml b/stable/gitea/18.14.7/templates/common.yaml new file mode 100644 index 0000000..ebc9e98 --- /dev/null +++ b/stable/gitea/18.14.7/templates/common.yaml @@ -0,0 +1,52 @@ +{{/* Make sure all variables are set properly */}} +{{- include "tc.v1.common.loader.init" . }} + +{{/* Render secrets for gitea */}} +{{- $secrets := include "gitea.secrets" . | fromYaml -}} +{{- if $secrets -}} + {{- $_ := mustMergeOverwrite .Values.secret $secrets -}} +{{- end -}} + +{{/* Render configmap for gitea */}} +{{- $configmap := include "gitea.configmap" . | fromYaml -}} +{{- if $configmap -}} + {{- $_ := set .Values.configmap "gitea-env" $configmap -}} +{{- end -}} + +{{/* Append the general secret volumes to the volumes */}} +{{- define "gitea.initvolume" -}} +enabled: true +readOnly: true +type: secret +objectName: init +defaultMode: "0777" +targetSelector: + main: + main: + mountPath: /secrets/ini + 1-init-directories: + mountPath: "/usr/sbin" + 2-configure-gitea: + mountPath: "/usr/sbin" +{{- end -}} + +{{/* Append the general secret volumes to the volumes */}} +{{- define "gitea.configvolume" -}} +enabled: true +readOnly: true +type: secret +objectName: secret +targetSelector: + main: + main: + mountPath: /secrets/config + 1-init-directories: + mountPath: /etc/gitea/conf +{{- end -}} + +{{- $_ := set .Values.persistence "init" (include "gitea.initvolume" . | fromYaml) -}} +{{- $_ := set .Values.persistence "config" (include "gitea.configvolume" . | fromYaml) -}} + + +{{/* Render the templates */}} +{{ include "tc.v1.common.loader.apply" . }} diff --git a/stable/gitea/18.14.7/values.yaml b/stable/gitea/18.14.7/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/gitea/app_versions.json b/stable/gitea/app_versions.json new file mode 100644 index 0000000..507452f --- /dev/null +++ b/stable/gitea/app_versions.json @@ -0,0 +1,42286 @@ +{ + "18.14.7": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/gitea/18.14.7", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/interface", + "definitions/nodeIP", + "normalize/interfaceConfiguration", + "definitions/timezone", + "definitions/certificate" + ], + "human_version": "1.21.9_18.14.7", + "version": "18.14.7", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "truecharts.org/category": "GIT", + "truecharts.org/max_helm_version": "3.14", + "truecharts.org/min_helm_version": "3.11", + "truecharts.org/train": "stable" + }, + "apiVersion": "v2", + "appVersion": "1.21.9", + "dependencies": [ + { + "name": "common", + "version": "20.2.4", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + }, + { + "name": "memcached", + "version": "12.8.3", + "repository": "oci://tccr.io/truecharts", + "condition": "memcached.enabled", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "Self hosted GIT repositories", + "home": "https://truecharts.org/charts/stable/gitea", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/gitea.png", + "keywords": [ + "git", + "issue tracker", + "code review", + "wiki", + "gitea", + "gogs" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "gitea", + "sources": [ + "https://gitea.com/gitea/helm-chart", + "https://github.com/go-gitea/gitea", + "https://github.com/truecharts/charts/tree/master/charts/stable/gitea", + "https://hub.docker.com/r/gitea/gitea" + ], + "type": "application", + "version": "18.14.7" + }, + "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": "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": "admin", + "group": "App Configuration", + "label": "Admin Credentials", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "username", + "label": "username", + "schema": { + "type": "string", + "valid_chars": "^(?!^admin$).*$", + "required": true + } + }, + { + "variable": "password", + "label": "password", + "schema": { + "type": "string", + "required": true, + "private": true, + "min_length": 8 + } + }, + { + "variable": "email", + "label": "email", + "schema": { + "type": "string", + "required": true + } + } + ] + } + }, + { + "variable": "config", + "group": "App Configuration", + "label": "Admin Configuration", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "APP_NAME", + "label": "APP_NAME", + "schema": { + "type": "string", + "default": "Gitea", + "required": true + } + }, + { + "variable": "RUN_MODE", + "label": "RUN_MODE", + "schema": { + "type": "string", + "default": "prod", + "enum": [ + { + "value": "prod", + "description": "Production" + }, + { + "value": "dev", + "description": "Development" + }, + { + "value": "test", + "description": "Testing" + } + ] + } + }, + { + "variable": "ALLOWED_HOST_LIST", + "label": "ALLOWED_HOST_LIST", + "schema": { + "type": "string", + "default": "127.0.0.1", + "required": true + } + }, + { + "variable": "nodeIP", + "label": "Node IP", + "description": "Used to generate configuration, when installed without ingress", + "schema": { + "type": "string", + "required": true, + "$ref": [ + "definitions/nodeIP" + ], + "default": "192.168.0.10" + } + } + ] + } + }, + { + "variable": "customConfig", + "group": "App Configuration", + "label": "Custom Configuration parameters", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "catagoryItem", + "label": "Category", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Config Category Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "keys", + "label": "Configuration Parameters", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "configItem", + "label": "parameter", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Parameter Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Parameter Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "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": 10037, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "ssh", + "label": "SSH Service", + "description": "The SSH service", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable the Service", + "schema": { + "type": "boolean", + "default": true, + "hidden": true + } + }, + { + "variable": "type", + "label": "Service Type", + "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", + "schema": { + "type": "string", + "default": "LoadBalancer", + "enum": [ + { + "value": "LoadBalancer", + "description": "LoadBalancer (Expose Ports)" + }, + { + "value": "ClusterIP", + "description": "ClusterIP (Do Not Expose Ports)" + } + ] + } + }, + { + "variable": "loadBalancerIP", + "label": "LoadBalancer IP", + "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", + "schema": { + "show_if": [ + [ + "type", + "=", + "LoadBalancer" + ] + ], + "type": "string", + "default": "" + } + }, + { + "variable": "ports", + "label": "Service's Port(s) Configuration", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "ssh", + "label": "SSH 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": 2222, + "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": "data", + "label": "App data 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": 1000 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID of the user running the application", + "schema": { + "type": "int", + "default": 1000 + } + }, + { + "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": 1000 + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources and Devices", + "label": "Resource Limits", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Advanced Limit Resource Consumption", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", + "schema": { + "type": "string", + "default": "4000m", + "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" + } + }, + { + "variable": "memory", + "label": "RAM", + "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", + "schema": { + "type": "string", + "default": "8Gi", + "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" + } + }, + { + "variable": "gpu.intel.com/i915", + "label": "Add Intel i915 GPUs", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "variable": "nvidia.com/gpu", + "label": "Add NVIDIA GPUs (Experimental)", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "variable": "amd.com/gpu", + "label": "Add AMD GPUs", + "schema": { + "type": "int", + "default": 0 + } + } + ] + } + }, + { + "variable": "requests", + "label": "Minimum Resources Required (request)", + "schema": { + "additional_attrs": true, + "type": "dict", + "hidden": true, + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", + "schema": { + "type": "string", + "default": "10m", + "hidden": true, + "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" + } + }, + { + "variable": "memory", + "label": "RAM", + "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", + "schema": { + "type": "string", + "default": "50Mi", + "hidden": true, + "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" + } + } + ] + } + } + ] + } + }, + { + "variable": "deviceList", + "label": "Mount USB Devices", + "group": "Resources and Devices", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "deviceListEntry", + "label": "Device", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable the Storage", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "type", + "label": "(Advanced) Type of Storage", + "description": "Sets the persistence type", + "schema": { + "type": "string", + "default": "device", + "hidden": true + } + }, + { + "variable": "readOnly", + "label": "readOnly", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "hostPath", + "label": "Host Device Path", + "description": "Path to the device on the host system", + "schema": { + "type": "path" + } + }, + { + "variable": "mountPath", + "label": "Container Device Path", + "description": "Path inside the container the device is mounted", + "schema": { + "type": "string", + "default": "/dev/ttyACM0" + } + } + ] + } + } + ] + } + }, + { + "variable": "cnpg", + "group": "Postgresql", + "label": "CloudNative-PG (CNPG)", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "main", + "label": "Main Postgresql Database", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "hibernate", + "label": "Hibernate", + "description": "enable to safely hibernate and shutdown the postgresql cluster", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "mode", + "label": "Mode", + "description": "Cluster mode of operation. Available modes: standalone - default mode. Creates new or updates an existing CNPG cluster. recovery - Same as standalone but creates a cluster from a backup, object store or via pg_basebackup replica - Creates a replica cluster from an existing CNPG cluster. # TODO.", + "schema": { + "type": "string", + "default": "standalone", + "enum": [ + { + "value": "standalone", + "description": "standalone" + }, + { + "value": "replica", + "description": "replica" + }, + { + "value": "recovery", + "description": "recovery" + } + ] + } + }, + { + "variable": "cluster", + "label": "Cluster Settings", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "instances", + "label": "Instances", + "schema": { + "type": "int", + "default": 1 + } + }, + { + "variable": "singleNode", + "label": "singleNode", + "schema": { + "type": "boolean", + "default": true, + "hidden": true + } + }, + { + "variable": "storage", + "label": "Storage", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "size", + "label": "Size", + "schema": { + "type": "string", + "default": "256Gi" + } + } + ] + } + }, + { + "variable": "walStorage", + "label": "WAL Storage", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "size", + "label": "Size", + "schema": { + "type": "string", + "default": "256Gi" + } + } + ] + } + } + ] + } + }, + { + "variable": "monitoring", + "label": "Monitoring Settings", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enablePodMonitor", + "label": "enablePodMonitor", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "disableDefaultQueries", + "label": "disableDefaultQueries", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "pooler", + "label": "Pooler Settings", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enabled", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "instances", + "label": "Instances", + "schema": { + "type": "int", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": 1 + } + }, + { + "variable": "createRO", + "label": "Create ReadOnly Instance", + "schema": { + "type": "boolean", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": false + } + } + ] + } + }, + { + "variable": "backups", + "label": "Backup Settings (Experimental)", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "enabled", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "serverName", + "label": "serverName", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "revision", + "label": "revision", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "endpointURL", + "label": "endpointURL", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "destinationPath", + "label": "destinationPath", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "retentionPolicy", + "label": "retentionPolicy", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "30d" + } + }, + { + "variable": "provider", + "label": "provider", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "s3", + "enum": [ + { + "value": "s3", + "description": "S3" + }, + { + "value": "azure", + "description": "Azure" + }, + { + "value": "google", + "description": "Google" + } + ] + } + }, + { + "variable": "s3", + "label": "s3", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "s3" + ] + ], + "attrs": [ + { + "variable": "region", + "label": "region", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "bucket", + "label": "bucket", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "accessKey", + "label": "accessKey", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "secretKey", + "label": "secretKey", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + }, + { + "variable": "azure", + "label": "azure (EXTREMELY EXPERIMENTAL)", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "azure" + ] + ], + "attrs": [ + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "connectionString", + "label": "connectionString", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageAccount", + "label": "storageAccount", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageKey", + "label": "storageKey", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "storageSasToken", + "label": "storageSasToken", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "containerName", + "label": "containerName", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "serviceName", + "label": "serviceName", + "schema": { + "type": "string", + "default": "blob" + } + }, + { + "variable": "inheritFromAzureAD", + "label": "inheritFromAzureAD", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "google", + "label": "google (EXTREMELY EXPERIMENTAL)", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "google" + ] + ], + "attrs": [ + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "bucket", + "label": "bucket", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "gkeEnvironment", + "label": "gkeEnvironment", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "applicationCredentials", + "label": "applicationCredentials", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + } + ] + } + }, + { + "variable": "recovery", + "label": "Recovery Settings (Experimental)", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "enabled", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "serverName", + "label": "serverName", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "revision", + "label": "revision", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "endpointURL", + "label": "endpointURL", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "method", + "label": "method", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "object_store" + } + }, + { + "variable": "backupName", + "label": "backupName", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "provider", + "label": "provider", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "s3", + "enum": [ + { + "value": "s3", + "description": "S3" + }, + { + "value": "azure", + "description": "Azure" + }, + { + "value": "google", + "description": "Google" + } + ] + } + }, + { + "variable": "s3", + "label": "s3", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "s3" + ] + ], + "attrs": [ + { + "variable": "region", + "label": "region", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "bucket", + "label": "bucket", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "accessKey", + "label": "accessKey", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "secretKey", + "label": "secretKey", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + }, + { + "variable": "azure", + "label": "azure (EXTREMELY EXPERIMENTAL)", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "azure" + ] + ], + "attrs": [ + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "connectionString", + "label": "connectionString", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageAccount", + "label": "storageAccount", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageKey", + "label": "storageKey", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageSasToken", + "label": "storageSasToken", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "containerName", + "label": "containerName", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "serviceName", + "label": "serviceName", + "schema": { + "type": "string", + "default": "blob" + } + }, + { + "variable": "inheritFromAzureAD", + "label": "inheritFromAzureAD", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "google", + "label": "google (EXTREMELY EXPERIMENTAL)", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "google" + ] + ], + "attrs": [ + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "bucket", + "label": "bucket", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "gkeEnvironment", + "label": "gkeEnvironment", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "applicationCredentials", + "label": "applicationCredentials", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "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": "

Self hosted GIT repositories

\n

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

\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

gitea-18.14.7 (2024-03-25)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.4@f245f5c by renovate (#19731)

    \n
  • \n
  • \n

    update container image memcached to v12.8.3@0d3a9c4 by renovate (#19694)

    \n
  • \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image gitea/gitea to v1.21.9@5f9b30b by renovate (#19627)

    \n
  • \n
  • \n

    update container image memcached to v12.8.2@498f00f by renovate (#19535)

    \n
  • \n
  • \n

    update container image memcached to v12.8.1@18f10eb by renovate (#19442)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19390)

    \n
  • \n
  • \n

    update container image memcached to v12.8.0@ac16683 by renovate (#19394)

    \n
  • \n
  • \n

    update container image memcached to v12.7.0@e63a46e by renovate (#19363)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image gitea/gitea to v1.21.8@e7ee046 by renovate (#19311)

    \n
  • \n
  • \n

    update container image memcached to v12.6.4@23b2892 by renovate (#19319)

    \n
  • \n
\n

gitea-18.14.7 (2024-03-25)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.4@f245f5c by renovate (#19731)

    \n
  • \n
  • \n

    update container image memcached to v12.8.3@0d3a9c4 by renovate (#19694)

    \n
  • \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image gitea/gitea to v1.21.9@5f9b30b by renovate (#19627)

    \n
  • \n
  • \n

    update container image memcached to v12.8.2@498f00f by renovate (#19535)

    \n
  • \n
  • \n

    update container image memcached to v12.8.1@18f10eb by renovate (#19442)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19390)

    \n
  • \n
  • \n

    update container image memcached to v12.8.0@ac16683 by renovate (#19394)

    \n
  • \n
  • \n

    update container image memcached to v12.7.0@e63a46e by renovate (#19363)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image gitea/gitea to v1.21.8@e7ee046 by renovate (#19311)

    \n
  • \n
  • \n

    update container image memcached to v12.6.4@23b2892 by renovate (#19319)

    \n
  • \n
\n

gitea-18.14.6 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image memcached to v12.8.3@0d3a9c4 by renovate (#19694)

    \n
  • \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image gitea/gitea to v1.21.9@5f9b30b by renovate (#19627)

    \n
  • \n
  • \n

    update container image memcached to v12.8.2@498f00f by renovate (#19535)

    \n
  • \n
  • \n

    update container image memcached to v12.8.1@18f10eb by renovate (#19442)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19390)

    \n
  • \n
  • \n

    update container image memcached to v12.8.0@ac16683 by renovate (#19394)

    \n
  • \n
  • \n

    update container image memcached to v12.7.0@e63a46e by renovate (#19363)

    \n
  • \n
" + }, + "18.14.6": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/gitea/18.14.6", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/interface", + "definitions/nodeIP", + "normalize/interfaceConfiguration", + "definitions/timezone", + "definitions/certificate" + ], + "human_version": "1.21.9_18.14.6", + "version": "18.14.6", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "truecharts.org/category": "GIT", + "truecharts.org/max_helm_version": "3.14", + "truecharts.org/min_helm_version": "3.11", + "truecharts.org/train": "stable" + }, + "apiVersion": "v2", + "appVersion": "1.21.9", + "dependencies": [ + { + "name": "common", + "version": "20.2.3", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + }, + { + "name": "memcached", + "version": "12.8.3", + "repository": "oci://tccr.io/truecharts", + "condition": "memcached.enabled", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "Self hosted GIT repositories", + "home": "https://truecharts.org/charts/stable/gitea", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/gitea.png", + "keywords": [ + "git", + "issue tracker", + "code review", + "wiki", + "gitea", + "gogs" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "gitea", + "sources": [ + "https://gitea.com/gitea/helm-chart", + "https://github.com/go-gitea/gitea", + "https://github.com/truecharts/charts/tree/master/charts/stable/gitea", + "https://hub.docker.com/r/gitea/gitea" + ], + "type": "application", + "version": "18.14.6" + }, + "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": "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": "admin", + "group": "App Configuration", + "label": "Admin Credentials", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "username", + "label": "username", + "schema": { + "type": "string", + "valid_chars": "^(?!^admin$).*$", + "required": true + } + }, + { + "variable": "password", + "label": "password", + "schema": { + "type": "string", + "required": true, + "private": true, + "min_length": 8 + } + }, + { + "variable": "email", + "label": "email", + "schema": { + "type": "string", + "required": true + } + } + ] + } + }, + { + "variable": "config", + "group": "App Configuration", + "label": "Admin Configuration", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "APP_NAME", + "label": "APP_NAME", + "schema": { + "type": "string", + "default": "Gitea", + "required": true + } + }, + { + "variable": "RUN_MODE", + "label": "RUN_MODE", + "schema": { + "type": "string", + "default": "prod", + "enum": [ + { + "value": "prod", + "description": "Production" + }, + { + "value": "dev", + "description": "Development" + }, + { + "value": "test", + "description": "Testing" + } + ] + } + }, + { + "variable": "ALLOWED_HOST_LIST", + "label": "ALLOWED_HOST_LIST", + "schema": { + "type": "string", + "default": "127.0.0.1", + "required": true + } + }, + { + "variable": "nodeIP", + "label": "Node IP", + "description": "Used to generate configuration, when installed without ingress", + "schema": { + "type": "string", + "required": true, + "$ref": [ + "definitions/nodeIP" + ], + "default": "192.168.0.10" + } + } + ] + } + }, + { + "variable": "customConfig", + "group": "App Configuration", + "label": "Custom Configuration parameters", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "catagoryItem", + "label": "Category", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Config Category Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "keys", + "label": "Configuration Parameters", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "configItem", + "label": "parameter", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Parameter Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Parameter Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "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": 10037, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "ssh", + "label": "SSH Service", + "description": "The SSH service", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable the Service", + "schema": { + "type": "boolean", + "default": true, + "hidden": true + } + }, + { + "variable": "type", + "label": "Service Type", + "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", + "schema": { + "type": "string", + "default": "LoadBalancer", + "enum": [ + { + "value": "LoadBalancer", + "description": "LoadBalancer (Expose Ports)" + }, + { + "value": "ClusterIP", + "description": "ClusterIP (Do Not Expose Ports)" + } + ] + } + }, + { + "variable": "loadBalancerIP", + "label": "LoadBalancer IP", + "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", + "schema": { + "show_if": [ + [ + "type", + "=", + "LoadBalancer" + ] + ], + "type": "string", + "default": "" + } + }, + { + "variable": "ports", + "label": "Service's Port(s) Configuration", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "ssh", + "label": "SSH 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": 2222, + "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": "data", + "label": "App data 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": 1000 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID of the user running the application", + "schema": { + "type": "int", + "default": 1000 + } + }, + { + "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": 1000 + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources and Devices", + "label": "Resource Limits", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Advanced Limit Resource Consumption", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", + "schema": { + "type": "string", + "default": "4000m", + "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" + } + }, + { + "variable": "memory", + "label": "RAM", + "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", + "schema": { + "type": "string", + "default": "8Gi", + "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" + } + }, + { + "variable": "gpu.intel.com/i915", + "label": "Add Intel i915 GPUs", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "variable": "nvidia.com/gpu", + "label": "Add NVIDIA GPUs (Experimental)", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "variable": "amd.com/gpu", + "label": "Add AMD GPUs", + "schema": { + "type": "int", + "default": 0 + } + } + ] + } + }, + { + "variable": "requests", + "label": "Minimum Resources Required (request)", + "schema": { + "additional_attrs": true, + "type": "dict", + "hidden": true, + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", + "schema": { + "type": "string", + "default": "10m", + "hidden": true, + "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" + } + }, + { + "variable": "memory", + "label": "RAM", + "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", + "schema": { + "type": "string", + "default": "50Mi", + "hidden": true, + "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" + } + } + ] + } + } + ] + } + }, + { + "variable": "deviceList", + "label": "Mount USB Devices", + "group": "Resources and Devices", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "deviceListEntry", + "label": "Device", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable the Storage", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "type", + "label": "(Advanced) Type of Storage", + "description": "Sets the persistence type", + "schema": { + "type": "string", + "default": "device", + "hidden": true + } + }, + { + "variable": "readOnly", + "label": "readOnly", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "hostPath", + "label": "Host Device Path", + "description": "Path to the device on the host system", + "schema": { + "type": "path" + } + }, + { + "variable": "mountPath", + "label": "Container Device Path", + "description": "Path inside the container the device is mounted", + "schema": { + "type": "string", + "default": "/dev/ttyACM0" + } + } + ] + } + } + ] + } + }, + { + "variable": "cnpg", + "group": "Postgresql", + "label": "CloudNative-PG (CNPG)", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "main", + "label": "Main Postgresql Database", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "hibernate", + "label": "Hibernate", + "description": "enable to safely hibernate and shutdown the postgresql cluster", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "mode", + "label": "Mode", + "description": "Cluster mode of operation. Available modes: standalone - default mode. Creates new or updates an existing CNPG cluster. recovery - Same as standalone but creates a cluster from a backup, object store or via pg_basebackup replica - Creates a replica cluster from an existing CNPG cluster. # TODO.", + "schema": { + "type": "string", + "default": "standalone", + "enum": [ + { + "value": "standalone", + "description": "standalone" + }, + { + "value": "replica", + "description": "replica" + }, + { + "value": "recovery", + "description": "recovery" + } + ] + } + }, + { + "variable": "cluster", + "label": "Cluster Settings", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "instances", + "label": "Instances", + "schema": { + "type": "int", + "default": 1 + } + }, + { + "variable": "singleNode", + "label": "singleNode", + "schema": { + "type": "boolean", + "default": true, + "hidden": true + } + }, + { + "variable": "storage", + "label": "Storage", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "size", + "label": "Size", + "schema": { + "type": "string", + "default": "256Gi" + } + } + ] + } + }, + { + "variable": "walStorage", + "label": "WAL Storage", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "size", + "label": "Size", + "schema": { + "type": "string", + "default": "256Gi" + } + } + ] + } + } + ] + } + }, + { + "variable": "monitoring", + "label": "Monitoring Settings", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enablePodMonitor", + "label": "enablePodMonitor", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "disableDefaultQueries", + "label": "disableDefaultQueries", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "pooler", + "label": "Pooler Settings", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enabled", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "instances", + "label": "Instances", + "schema": { + "type": "int", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": 1 + } + }, + { + "variable": "createRO", + "label": "Create ReadOnly Instance", + "schema": { + "type": "boolean", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": false + } + } + ] + } + }, + { + "variable": "backups", + "label": "Backup Settings (Experimental)", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "enabled", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "serverName", + "label": "serverName", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "revision", + "label": "revision", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "endpointURL", + "label": "endpointURL", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "destinationPath", + "label": "destinationPath", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "retentionPolicy", + "label": "retentionPolicy", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "30d" + } + }, + { + "variable": "provider", + "label": "provider", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "s3", + "enum": [ + { + "value": "s3", + "description": "S3" + }, + { + "value": "azure", + "description": "Azure" + }, + { + "value": "google", + "description": "Google" + } + ] + } + }, + { + "variable": "s3", + "label": "s3", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "s3" + ] + ], + "attrs": [ + { + "variable": "region", + "label": "region", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "bucket", + "label": "bucket", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "accessKey", + "label": "accessKey", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "secretKey", + "label": "secretKey", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + }, + { + "variable": "azure", + "label": "azure (EXTREMELY EXPERIMENTAL)", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "azure" + ] + ], + "attrs": [ + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "connectionString", + "label": "connectionString", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageAccount", + "label": "storageAccount", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageKey", + "label": "storageKey", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "storageSasToken", + "label": "storageSasToken", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "containerName", + "label": "containerName", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "serviceName", + "label": "serviceName", + "schema": { + "type": "string", + "default": "blob" + } + }, + { + "variable": "inheritFromAzureAD", + "label": "inheritFromAzureAD", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "google", + "label": "google (EXTREMELY EXPERIMENTAL)", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "google" + ] + ], + "attrs": [ + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "bucket", + "label": "bucket", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "gkeEnvironment", + "label": "gkeEnvironment", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "applicationCredentials", + "label": "applicationCredentials", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + } + ] + } + }, + { + "variable": "recovery", + "label": "Recovery Settings (Experimental)", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "enabled", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "serverName", + "label": "serverName", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "revision", + "label": "revision", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "endpointURL", + "label": "endpointURL", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "method", + "label": "method", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "object_store" + } + }, + { + "variable": "backupName", + "label": "backupName", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "provider", + "label": "provider", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "s3", + "enum": [ + { + "value": "s3", + "description": "S3" + }, + { + "value": "azure", + "description": "Azure" + }, + { + "value": "google", + "description": "Google" + } + ] + } + }, + { + "variable": "s3", + "label": "s3", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "s3" + ] + ], + "attrs": [ + { + "variable": "region", + "label": "region", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "bucket", + "label": "bucket", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "accessKey", + "label": "accessKey", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "secretKey", + "label": "secretKey", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + }, + { + "variable": "azure", + "label": "azure (EXTREMELY EXPERIMENTAL)", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "azure" + ] + ], + "attrs": [ + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "connectionString", + "label": "connectionString", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageAccount", + "label": "storageAccount", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageKey", + "label": "storageKey", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageSasToken", + "label": "storageSasToken", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "containerName", + "label": "containerName", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "serviceName", + "label": "serviceName", + "schema": { + "type": "string", + "default": "blob" + } + }, + { + "variable": "inheritFromAzureAD", + "label": "inheritFromAzureAD", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "google", + "label": "google (EXTREMELY EXPERIMENTAL)", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "google" + ] + ], + "attrs": [ + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "bucket", + "label": "bucket", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "gkeEnvironment", + "label": "gkeEnvironment", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "applicationCredentials", + "label": "applicationCredentials", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "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": "

Self hosted GIT repositories

\n

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

\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

gitea-18.14.6 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image memcached to v12.8.3@0d3a9c4 by renovate (#19694)

    \n
  • \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image gitea/gitea to v1.21.9@5f9b30b by renovate (#19627)

    \n
  • \n
  • \n

    update container image memcached to v12.8.2@498f00f by renovate (#19535)

    \n
  • \n
  • \n

    update container image memcached to v12.8.1@18f10eb by renovate (#19442)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19390)

    \n
  • \n
  • \n

    update container image memcached to v12.8.0@ac16683 by renovate (#19394)

    \n
  • \n
  • \n

    update container image memcached to v12.7.0@e63a46e by renovate (#19363)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image gitea/gitea to v1.21.8@e7ee046 by renovate (#19311)

    \n
  • \n
  • \n

    update container image memcached to v12.6.4@23b2892 by renovate (#19319)

    \n
  • \n
\n

gitea-18.14.6 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image memcached to v12.8.3@0d3a9c4 by renovate (#19694)

    \n
  • \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image gitea/gitea to v1.21.9@5f9b30b by renovate (#19627)

    \n
  • \n
  • \n

    update container image memcached to v12.8.2@498f00f by renovate (#19535)

    \n
  • \n
  • \n

    update container image memcached to v12.8.1@18f10eb by renovate (#19442)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19390)

    \n
  • \n
  • \n

    update container image memcached to v12.8.0@ac16683 by renovate (#19394)

    \n
  • \n
  • \n

    update container image memcached to v12.7.0@e63a46e by renovate (#19363)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image gitea/gitea to v1.21.8@e7ee046 by renovate (#19311)

    \n
  • \n
  • \n

    update container image memcached to v12.6.4@23b2892 by renovate (#19319)

    \n
  • \n
\n

gitea-18.14.6 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image memcached to v12.8.3@0d3a9c4 by renovate (#19694)

    \n
  • \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image gitea/gitea to v1.21.9@5f9b30b by renovate (#19627)

    \n
  • \n
  • \n

    update container image memcached to v12.8.2@498f00f by renovate (#19535)

    \n
  • \n
  • \n

    update container image memcached to v12.8.1@18f10eb by renovate (#19442)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19390)

    \n
  • \n
  • \n

    update container image memcached to v12.8.0@ac16683 by renovate (#19394)

    \n
  • \n
  • \n

    update container image memcached to v12.7.0@e63a46e by renovate (#19363)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image gitea/gitea to v1.21.8@e7ee046 by renovate (#19311)

    \n
  • \n
" + }, + "18.14.5": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/gitea/18.14.5", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/interface", + "definitions/nodeIP", + "normalize/interfaceConfiguration", + "definitions/timezone", + "definitions/certificate" + ], + "human_version": "1.21.9_18.14.5", + "version": "18.14.5", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "truecharts.org/category": "GIT", + "truecharts.org/max_helm_version": "3.14", + "truecharts.org/min_helm_version": "3.11", + "truecharts.org/train": "stable" + }, + "apiVersion": "v2", + "appVersion": "1.21.9", + "dependencies": [ + { + "name": "common", + "version": "20.2.3", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + }, + { + "name": "memcached", + "version": "12.8.2", + "repository": "oci://tccr.io/truecharts", + "condition": "memcached.enabled", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "Self hosted GIT repositories", + "home": "https://truecharts.org/charts/stable/gitea", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/gitea.png", + "keywords": [ + "git", + "issue tracker", + "code review", + "wiki", + "gitea", + "gogs" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "gitea", + "sources": [ + "https://gitea.com/gitea/helm-chart", + "https://github.com/go-gitea/gitea", + "https://github.com/truecharts/charts/tree/master/charts/stable/gitea", + "https://hub.docker.com/r/gitea/gitea" + ], + "type": "application", + "version": "18.14.5" + }, + "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": "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": "admin", + "group": "App Configuration", + "label": "Admin Credentials", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "username", + "label": "username", + "schema": { + "type": "string", + "valid_chars": "^(?!^admin$).*$", + "required": true + } + }, + { + "variable": "password", + "label": "password", + "schema": { + "type": "string", + "required": true, + "private": true, + "min_length": 8 + } + }, + { + "variable": "email", + "label": "email", + "schema": { + "type": "string", + "required": true + } + } + ] + } + }, + { + "variable": "config", + "group": "App Configuration", + "label": "Admin Configuration", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "APP_NAME", + "label": "APP_NAME", + "schema": { + "type": "string", + "default": "Gitea", + "required": true + } + }, + { + "variable": "RUN_MODE", + "label": "RUN_MODE", + "schema": { + "type": "string", + "default": "prod", + "enum": [ + { + "value": "prod", + "description": "Production" + }, + { + "value": "dev", + "description": "Development" + }, + { + "value": "test", + "description": "Testing" + } + ] + } + }, + { + "variable": "ALLOWED_HOST_LIST", + "label": "ALLOWED_HOST_LIST", + "schema": { + "type": "string", + "default": "127.0.0.1", + "required": true + } + }, + { + "variable": "nodeIP", + "label": "Node IP", + "description": "Used to generate configuration, when installed without ingress", + "schema": { + "type": "string", + "required": true, + "$ref": [ + "definitions/nodeIP" + ], + "default": "192.168.0.10" + } + } + ] + } + }, + { + "variable": "customConfig", + "group": "App Configuration", + "label": "Custom Configuration parameters", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "catagoryItem", + "label": "Category", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Config Category Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "keys", + "label": "Configuration Parameters", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "configItem", + "label": "parameter", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Parameter Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Parameter Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "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": 10037, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "ssh", + "label": "SSH Service", + "description": "The SSH service", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable the Service", + "schema": { + "type": "boolean", + "default": true, + "hidden": true + } + }, + { + "variable": "type", + "label": "Service Type", + "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", + "schema": { + "type": "string", + "default": "LoadBalancer", + "enum": [ + { + "value": "LoadBalancer", + "description": "LoadBalancer (Expose Ports)" + }, + { + "value": "ClusterIP", + "description": "ClusterIP (Do Not Expose Ports)" + } + ] + } + }, + { + "variable": "loadBalancerIP", + "label": "LoadBalancer IP", + "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", + "schema": { + "show_if": [ + [ + "type", + "=", + "LoadBalancer" + ] + ], + "type": "string", + "default": "" + } + }, + { + "variable": "ports", + "label": "Service's Port(s) Configuration", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "ssh", + "label": "SSH 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": 2222, + "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": "data", + "label": "App data 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": 1000 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID of the user running the application", + "schema": { + "type": "int", + "default": 1000 + } + }, + { + "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": 1000 + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources and Devices", + "label": "Resource Limits", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Advanced Limit Resource Consumption", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", + "schema": { + "type": "string", + "default": "4000m", + "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" + } + }, + { + "variable": "memory", + "label": "RAM", + "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", + "schema": { + "type": "string", + "default": "8Gi", + "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" + } + }, + { + "variable": "gpu.intel.com/i915", + "label": "Add Intel i915 GPUs", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "variable": "nvidia.com/gpu", + "label": "Add NVIDIA GPUs (Experimental)", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "variable": "amd.com/gpu", + "label": "Add AMD GPUs", + "schema": { + "type": "int", + "default": 0 + } + } + ] + } + }, + { + "variable": "requests", + "label": "Minimum Resources Required (request)", + "schema": { + "additional_attrs": true, + "type": "dict", + "hidden": true, + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", + "schema": { + "type": "string", + "default": "10m", + "hidden": true, + "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" + } + }, + { + "variable": "memory", + "label": "RAM", + "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", + "schema": { + "type": "string", + "default": "50Mi", + "hidden": true, + "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" + } + } + ] + } + } + ] + } + }, + { + "variable": "deviceList", + "label": "Mount USB Devices", + "group": "Resources and Devices", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "deviceListEntry", + "label": "Device", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable the Storage", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "type", + "label": "(Advanced) Type of Storage", + "description": "Sets the persistence type", + "schema": { + "type": "string", + "default": "device", + "hidden": true + } + }, + { + "variable": "readOnly", + "label": "readOnly", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "hostPath", + "label": "Host Device Path", + "description": "Path to the device on the host system", + "schema": { + "type": "path" + } + }, + { + "variable": "mountPath", + "label": "Container Device Path", + "description": "Path inside the container the device is mounted", + "schema": { + "type": "string", + "default": "/dev/ttyACM0" + } + } + ] + } + } + ] + } + }, + { + "variable": "cnpg", + "group": "Postgresql", + "label": "CloudNative-PG (CNPG)", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "main", + "label": "Main Postgresql Database", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "hibernate", + "label": "Hibernate", + "description": "enable to safely hibernate and shutdown the postgresql cluster", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "mode", + "label": "Mode", + "description": "Cluster mode of operation. Available modes: standalone - default mode. Creates new or updates an existing CNPG cluster. recovery - Same as standalone but creates a cluster from a backup, object store or via pg_basebackup replica - Creates a replica cluster from an existing CNPG cluster. # TODO.", + "schema": { + "type": "string", + "default": "standalone", + "enum": [ + { + "value": "standalone", + "description": "standalone" + }, + { + "value": "replica", + "description": "replica" + }, + { + "value": "recovery", + "description": "recovery" + } + ] + } + }, + { + "variable": "cluster", + "label": "Cluster Settings", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "instances", + "label": "Instances", + "schema": { + "type": "int", + "default": 1 + } + }, + { + "variable": "singleNode", + "label": "singleNode", + "schema": { + "type": "boolean", + "default": true, + "hidden": true + } + }, + { + "variable": "storage", + "label": "Storage", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "size", + "label": "Size", + "schema": { + "type": "string", + "default": "256Gi" + } + } + ] + } + }, + { + "variable": "walStorage", + "label": "WAL Storage", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "size", + "label": "Size", + "schema": { + "type": "string", + "default": "256Gi" + } + } + ] + } + } + ] + } + }, + { + "variable": "monitoring", + "label": "Monitoring Settings", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enablePodMonitor", + "label": "enablePodMonitor", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "disableDefaultQueries", + "label": "disableDefaultQueries", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "pooler", + "label": "Pooler Settings", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enabled", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "instances", + "label": "Instances", + "schema": { + "type": "int", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": 1 + } + }, + { + "variable": "createRO", + "label": "Create ReadOnly Instance", + "schema": { + "type": "boolean", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": false + } + } + ] + } + }, + { + "variable": "backups", + "label": "Backup Settings (Experimental)", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "enabled", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "serverName", + "label": "serverName", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "revision", + "label": "revision", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "endpointURL", + "label": "endpointURL", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "destinationPath", + "label": "destinationPath", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "retentionPolicy", + "label": "retentionPolicy", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "30d" + } + }, + { + "variable": "provider", + "label": "provider", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "s3", + "enum": [ + { + "value": "s3", + "description": "S3" + }, + { + "value": "azure", + "description": "Azure" + }, + { + "value": "google", + "description": "Google" + } + ] + } + }, + { + "variable": "s3", + "label": "s3", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "s3" + ] + ], + "attrs": [ + { + "variable": "region", + "label": "region", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "bucket", + "label": "bucket", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "accessKey", + "label": "accessKey", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "secretKey", + "label": "secretKey", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + }, + { + "variable": "azure", + "label": "azure (EXTREMELY EXPERIMENTAL)", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "azure" + ] + ], + "attrs": [ + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "connectionString", + "label": "connectionString", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageAccount", + "label": "storageAccount", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageKey", + "label": "storageKey", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "storageSasToken", + "label": "storageSasToken", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "containerName", + "label": "containerName", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "serviceName", + "label": "serviceName", + "schema": { + "type": "string", + "default": "blob" + } + }, + { + "variable": "inheritFromAzureAD", + "label": "inheritFromAzureAD", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "google", + "label": "google (EXTREMELY EXPERIMENTAL)", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "google" + ] + ], + "attrs": [ + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "bucket", + "label": "bucket", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "gkeEnvironment", + "label": "gkeEnvironment", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "applicationCredentials", + "label": "applicationCredentials", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + } + ] + } + }, + { + "variable": "recovery", + "label": "Recovery Settings (Experimental)", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "enabled", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "serverName", + "label": "serverName", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "revision", + "label": "revision", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "endpointURL", + "label": "endpointURL", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "method", + "label": "method", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "object_store" + } + }, + { + "variable": "backupName", + "label": "backupName", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "provider", + "label": "provider", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "s3", + "enum": [ + { + "value": "s3", + "description": "S3" + }, + { + "value": "azure", + "description": "Azure" + }, + { + "value": "google", + "description": "Google" + } + ] + } + }, + { + "variable": "s3", + "label": "s3", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "s3" + ] + ], + "attrs": [ + { + "variable": "region", + "label": "region", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "bucket", + "label": "bucket", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "accessKey", + "label": "accessKey", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "secretKey", + "label": "secretKey", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + }, + { + "variable": "azure", + "label": "azure (EXTREMELY EXPERIMENTAL)", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "azure" + ] + ], + "attrs": [ + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "connectionString", + "label": "connectionString", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageAccount", + "label": "storageAccount", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageKey", + "label": "storageKey", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageSasToken", + "label": "storageSasToken", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "containerName", + "label": "containerName", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "serviceName", + "label": "serviceName", + "schema": { + "type": "string", + "default": "blob" + } + }, + { + "variable": "inheritFromAzureAD", + "label": "inheritFromAzureAD", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "google", + "label": "google (EXTREMELY EXPERIMENTAL)", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "google" + ] + ], + "attrs": [ + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "bucket", + "label": "bucket", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "gkeEnvironment", + "label": "gkeEnvironment", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "applicationCredentials", + "label": "applicationCredentials", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "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": "

Self hosted GIT repositories

\n

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

\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

gitea-18.14.5 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image gitea/gitea to v1.21.9@5f9b30b by renovate (#19627)

    \n
  • \n
  • \n

    update container image memcached to v12.8.2@498f00f by renovate (#19535)

    \n
  • \n
  • \n

    update container image memcached to v12.8.1@18f10eb by renovate (#19442)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19390)

    \n
  • \n
  • \n

    update container image memcached to v12.8.0@ac16683 by renovate (#19394)

    \n
  • \n
  • \n

    update container image memcached to v12.7.0@e63a46e by renovate (#19363)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image gitea/gitea to v1.21.8@e7ee046 by renovate (#19311)

    \n
  • \n
  • \n

    update container image memcached to v12.6.4@23b2892 by renovate (#19319)

    \n
  • \n
\n

gitea-18.14.5 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image gitea/gitea to v1.21.9@5f9b30b by renovate (#19627)

    \n
  • \n
  • \n

    update container image memcached to v12.8.2@498f00f by renovate (#19535)

    \n
  • \n
  • \n

    update container image memcached to v12.8.1@18f10eb by renovate (#19442)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19390)

    \n
  • \n
  • \n

    update container image memcached to v12.8.0@ac16683 by renovate (#19394)

    \n
  • \n
  • \n

    update container image memcached to v12.7.0@e63a46e by renovate (#19363)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image gitea/gitea to v1.21.8@e7ee046 by renovate (#19311)

    \n
  • \n
  • \n

    update container image memcached to v12.6.4@23b2892 by renovate (#19319)

    \n
  • \n
\n

gitea-18.14.4 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image gitea/gitea to v1.21.9@5f9b30b by renovate (#19627)

    \n
  • \n
  • \n

    update container image memcached to v12.8.2@498f00f by renovate (#19535)

    \n
  • \n
  • \n

    update container image memcached to v12.8.1@18f10eb by renovate (#19442)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19390)

    \n
  • \n
  • \n

    update container image memcached to v12.8.0@ac16683 by renovate (#19394)

    \n
  • \n
  • \n

    update container image memcached to v12.7.0@e63a46e by renovate (#19363)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image gitea/gitea to v1.21.8@e7ee046 by renovate (#19311)

    \n
  • \n
  • \n

    update container image memcached to v12.6.4@23b2892 by renovate (#19319)

    \n
  • \n
\n

gitea-18.14.4 (2024-03-23)

\n

Chore

" + }, + "18.14.4": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/gitea/18.14.4", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/interface", + "definitions/nodeIP", + "normalize/interfaceConfiguration", + "definitions/timezone", + "definitions/certificate" + ], + "human_version": "1.21.9_18.14.4", + "version": "18.14.4", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "truecharts.org/category": "GIT", + "truecharts.org/max_helm_version": "3.14", + "truecharts.org/min_helm_version": "3.11", + "truecharts.org/train": "stable" + }, + "apiVersion": "v2", + "appVersion": "1.21.9", + "dependencies": [ + { + "name": "common", + "version": "20.2.2", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + }, + { + "name": "memcached", + "version": "12.8.2", + "repository": "oci://tccr.io/truecharts", + "condition": "memcached.enabled", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "Self hosted GIT repositories", + "home": "https://truecharts.org/charts/stable/gitea", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/gitea.png", + "keywords": [ + "git", + "issue tracker", + "code review", + "wiki", + "gitea", + "gogs" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "gitea", + "sources": [ + "https://gitea.com/gitea/helm-chart", + "https://github.com/go-gitea/gitea", + "https://github.com/truecharts/charts/tree/master/charts/stable/gitea", + "https://hub.docker.com/r/gitea/gitea" + ], + "type": "application", + "version": "18.14.4" + }, + "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": "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": "admin", + "group": "App Configuration", + "label": "Admin Credentials", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "username", + "label": "username", + "schema": { + "type": "string", + "valid_chars": "^(?!^admin$).*$", + "required": true + } + }, + { + "variable": "password", + "label": "password", + "schema": { + "type": "string", + "required": true, + "private": true, + "min_length": 8 + } + }, + { + "variable": "email", + "label": "email", + "schema": { + "type": "string", + "required": true + } + } + ] + } + }, + { + "variable": "config", + "group": "App Configuration", + "label": "Admin Configuration", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "APP_NAME", + "label": "APP_NAME", + "schema": { + "type": "string", + "default": "Gitea", + "required": true + } + }, + { + "variable": "RUN_MODE", + "label": "RUN_MODE", + "schema": { + "type": "string", + "default": "prod", + "enum": [ + { + "value": "prod", + "description": "Production" + }, + { + "value": "dev", + "description": "Development" + }, + { + "value": "test", + "description": "Testing" + } + ] + } + }, + { + "variable": "ALLOWED_HOST_LIST", + "label": "ALLOWED_HOST_LIST", + "schema": { + "type": "string", + "default": "127.0.0.1", + "required": true + } + }, + { + "variable": "nodeIP", + "label": "Node IP", + "description": "Used to generate configuration, when installed without ingress", + "schema": { + "type": "string", + "required": true, + "$ref": [ + "definitions/nodeIP" + ], + "default": "192.168.0.10" + } + } + ] + } + }, + { + "variable": "customConfig", + "group": "App Configuration", + "label": "Custom Configuration parameters", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "catagoryItem", + "label": "Category", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Config Category Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "keys", + "label": "Configuration Parameters", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "configItem", + "label": "parameter", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Parameter Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Parameter Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "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": 10037, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "ssh", + "label": "SSH Service", + "description": "The SSH service", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable the Service", + "schema": { + "type": "boolean", + "default": true, + "hidden": true + } + }, + { + "variable": "type", + "label": "Service Type", + "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", + "schema": { + "type": "string", + "default": "LoadBalancer", + "enum": [ + { + "value": "LoadBalancer", + "description": "LoadBalancer (Expose Ports)" + }, + { + "value": "ClusterIP", + "description": "ClusterIP (Do Not Expose Ports)" + } + ] + } + }, + { + "variable": "loadBalancerIP", + "label": "LoadBalancer IP", + "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", + "schema": { + "show_if": [ + [ + "type", + "=", + "LoadBalancer" + ] + ], + "type": "string", + "default": "" + } + }, + { + "variable": "ports", + "label": "Service's Port(s) Configuration", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "ssh", + "label": "SSH 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": 2222, + "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": "data", + "label": "App data 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": 1000 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID of the user running the application", + "schema": { + "type": "int", + "default": 1000 + } + }, + { + "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": 1000 + } + } + ] + } + }, + { + "variable": "resources", + "group": "Resources and Devices", + "label": "Resource Limits", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "limits", + "label": "Advanced Limit Resource Consumption", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", + "schema": { + "type": "string", + "default": "4000m", + "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" + } + }, + { + "variable": "memory", + "label": "RAM", + "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", + "schema": { + "type": "string", + "default": "8Gi", + "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" + } + }, + { + "variable": "gpu.intel.com/i915", + "label": "Add Intel i915 GPUs", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "variable": "nvidia.com/gpu", + "label": "Add NVIDIA GPUs (Experimental)", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "variable": "amd.com/gpu", + "label": "Add AMD GPUs", + "schema": { + "type": "int", + "default": 0 + } + } + ] + } + }, + { + "variable": "requests", + "label": "Minimum Resources Required (request)", + "schema": { + "additional_attrs": true, + "type": "dict", + "hidden": true, + "attrs": [ + { + "variable": "cpu", + "label": "CPU", + "description": "1000m means 1 hyperthread. Detailed info: https://truecharts.org/manual/SCALE/validation", + "schema": { + "type": "string", + "default": "10m", + "hidden": true, + "valid_chars": "^(?!^0(\\.0|m|)$)([0-9]+)(\\.[0-9]|m?)$" + } + }, + { + "variable": "memory", + "label": "RAM", + "description": "1Gi means 1 Gibibyte RAM. Detailed info: https://truecharts.org/manual/SCALE/validation", + "schema": { + "type": "string", + "default": "50Mi", + "hidden": true, + "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" + } + } + ] + } + } + ] + } + }, + { + "variable": "deviceList", + "label": "Mount USB Devices", + "group": "Resources and Devices", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "deviceListEntry", + "label": "Device", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable the Storage", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "type", + "label": "(Advanced) Type of Storage", + "description": "Sets the persistence type", + "schema": { + "type": "string", + "default": "device", + "hidden": true + } + }, + { + "variable": "readOnly", + "label": "readOnly", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "hostPath", + "label": "Host Device Path", + "description": "Path to the device on the host system", + "schema": { + "type": "path" + } + }, + { + "variable": "mountPath", + "label": "Container Device Path", + "description": "Path inside the container the device is mounted", + "schema": { + "type": "string", + "default": "/dev/ttyACM0" + } + } + ] + } + } + ] + } + }, + { + "variable": "cnpg", + "group": "Postgresql", + "label": "CloudNative-PG (CNPG)", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "main", + "label": "Main Postgresql Database", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "hibernate", + "label": "Hibernate", + "description": "enable to safely hibernate and shutdown the postgresql cluster", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "mode", + "label": "Mode", + "description": "Cluster mode of operation. Available modes: standalone - default mode. Creates new or updates an existing CNPG cluster. recovery - Same as standalone but creates a cluster from a backup, object store or via pg_basebackup replica - Creates a replica cluster from an existing CNPG cluster. # TODO.", + "schema": { + "type": "string", + "default": "standalone", + "enum": [ + { + "value": "standalone", + "description": "standalone" + }, + { + "value": "replica", + "description": "replica" + }, + { + "value": "recovery", + "description": "recovery" + } + ] + } + }, + { + "variable": "cluster", + "label": "Cluster Settings", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "instances", + "label": "Instances", + "schema": { + "type": "int", + "default": 1 + } + }, + { + "variable": "singleNode", + "label": "singleNode", + "schema": { + "type": "boolean", + "default": true, + "hidden": true + } + }, + { + "variable": "storage", + "label": "Storage", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "size", + "label": "Size", + "schema": { + "type": "string", + "default": "256Gi" + } + } + ] + } + }, + { + "variable": "walStorage", + "label": "WAL Storage", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "size", + "label": "Size", + "schema": { + "type": "string", + "default": "256Gi" + } + } + ] + } + } + ] + } + }, + { + "variable": "monitoring", + "label": "Monitoring Settings", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enablePodMonitor", + "label": "enablePodMonitor", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "disableDefaultQueries", + "label": "disableDefaultQueries", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "pooler", + "label": "Pooler Settings", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enabled", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "instances", + "label": "Instances", + "schema": { + "type": "int", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": 1 + } + }, + { + "variable": "createRO", + "label": "Create ReadOnly Instance", + "schema": { + "type": "boolean", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": false + } + } + ] + } + }, + { + "variable": "backups", + "label": "Backup Settings (Experimental)", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "enabled", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "serverName", + "label": "serverName", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "revision", + "label": "revision", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "endpointURL", + "label": "endpointURL", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "destinationPath", + "label": "destinationPath", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "retentionPolicy", + "label": "retentionPolicy", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "30d" + } + }, + { + "variable": "provider", + "label": "provider", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "s3", + "enum": [ + { + "value": "s3", + "description": "S3" + }, + { + "value": "azure", + "description": "Azure" + }, + { + "value": "google", + "description": "Google" + } + ] + } + }, + { + "variable": "s3", + "label": "s3", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "s3" + ] + ], + "attrs": [ + { + "variable": "region", + "label": "region", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "bucket", + "label": "bucket", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "accessKey", + "label": "accessKey", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "secretKey", + "label": "secretKey", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + }, + { + "variable": "azure", + "label": "azure (EXTREMELY EXPERIMENTAL)", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "azure" + ] + ], + "attrs": [ + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "connectionString", + "label": "connectionString", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageAccount", + "label": "storageAccount", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageKey", + "label": "storageKey", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "storageSasToken", + "label": "storageSasToken", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "containerName", + "label": "containerName", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "serviceName", + "label": "serviceName", + "schema": { + "type": "string", + "default": "blob" + } + }, + { + "variable": "inheritFromAzureAD", + "label": "inheritFromAzureAD", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "google", + "label": "google (EXTREMELY EXPERIMENTAL)", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "google" + ] + ], + "attrs": [ + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "bucket", + "label": "bucket", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "gkeEnvironment", + "label": "gkeEnvironment", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "applicationCredentials", + "label": "applicationCredentials", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + } + ] + } + }, + { + "variable": "recovery", + "label": "Recovery Settings (Experimental)", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "enabled", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "serverName", + "label": "serverName", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "revision", + "label": "serverName", + "schema": { + "type": "int" + } + }, + { + "variable": "endpointURL", + "label": "endpointURL", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "method", + "label": "method", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "object_store" + } + }, + { + "variable": "backupName", + "label": "backupName", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "provider", + "label": "provider", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "s3", + "enum": [ + { + "value": "s3", + "description": "S3" + }, + { + "value": "azure", + "description": "Azure" + }, + { + "value": "google", + "description": "Google" + } + ] + } + }, + { + "variable": "s3", + "label": "s3", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "s3" + ] + ], + "attrs": [ + { + "variable": "region", + "label": "region", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "bucket", + "label": "bucket", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "accessKey", + "label": "accessKey", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "secretKey", + "label": "secretKey", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + }, + { + "variable": "azure", + "label": "azure (EXTREMELY EXPERIMENTAL)", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "azure" + ] + ], + "attrs": [ + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "connectionString", + "label": "connectionString", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageAccount", + "label": "storageAccount", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageKey", + "label": "storageKey", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageSasToken", + "label": "storageSasToken", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "containerName", + "label": "containerName", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "serviceName", + "label": "serviceName", + "schema": { + "type": "string", + "default": "blob" + } + }, + { + "variable": "inheritFromAzureAD", + "label": "inheritFromAzureAD", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "google", + "label": "google (EXTREMELY EXPERIMENTAL)", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "google" + ] + ], + "attrs": [ + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "bucket", + "label": "bucket", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "gkeEnvironment", + "label": "gkeEnvironment", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "applicationCredentials", + "label": "applicationCredentials", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "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": "

Self hosted GIT repositories

\n

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

\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

gitea-18.14.4 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image gitea/gitea to v1.21.9@5f9b30b by renovate (#19627)

    \n
  • \n
  • \n

    update container image memcached to v12.8.2@498f00f by renovate (#19535)

    \n
  • \n
  • \n

    update container image memcached to v12.8.1@18f10eb by renovate (#19442)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19390)

    \n
  • \n
  • \n

    update container image memcached to v12.8.0@ac16683 by renovate (#19394)

    \n
  • \n
  • \n

    update container image memcached to v12.7.0@e63a46e by renovate (#19363)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image gitea/gitea to v1.21.8@e7ee046 by renovate (#19311)

    \n
  • \n
  • \n

    update container image memcached to v12.6.4@23b2892 by renovate (#19319)

    \n
  • \n
\n

gitea-18.14.4 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image gitea/gitea to v1.21.9@5f9b30b by renovate (#19627)

    \n
  • \n
  • \n

    update container image memcached to v12.8.2@498f00f by renovate (#19535)

    \n
  • \n
  • \n

    update container image memcached to v12.8.1@18f10eb by renovate (#19442)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19390)

    \n
  • \n
  • \n

    update container image memcached to v12.8.0@ac16683 by renovate (#19394)

    \n
  • \n
  • \n

    update container image memcached to v12.7.0@e63a46e by renovate (#19363)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image gitea/gitea to v1.21.8@e7ee046 by renovate (#19311)

    \n
  • \n
  • \n

    update container image memcached to v12.6.4@23b2892 by renovate (#19319)

    \n
  • \n
\n

gitea-18.14.4 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image gitea/gitea to v1.21.9@5f9b30b by renovate (#19627)

    \n
  • \n
  • \n

    update container image memcached to v12.8.2@498f00f by renovate (#19535)

    \n
  • \n
  • \n

    update container image memcached to v12.8.1@18f10eb by renovate (#19442)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19390)

    \n
  • \n
  • \n

    update container image memcached to v12.8.0@ac16683 by renovate (#19394)

    \n
  • \n
  • \n

    update container image memcached to v12.7.0@e63a46e by renovate (#19363)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image gitea/gitea to v1.21.8@e7ee046 by renovate (#19311)

    \n
  • \n
  • \n

    update container image memcached to v12.6.4@23b2892 by renovate (#19319)

    \n
  • \n
\n

gitea-18.14.4 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image gitea/gitea to v1.21.9@5f9b30b by renovate (#19627)

    \n
  • \n
  • \n

    update container image memcached to v12.8.2@498f00f by renovate (#19535)

    \n
  • \n
" + }, + "17.4.0": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/gitea/17.4.0", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/interface", + "definitions/nodeIP", + "normalize/interfaceConfiguration", + "definitions/gpuConfiguration", + "definitions/timezone", + "definitions/certificate" + ], + "human_version": "1.21.5_17.4.0", + "version": "17.4.0", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "truecharts.org/category": "GIT", + "truecharts.org/max_helm_version": "3.14", + "truecharts.org/min_helm_version": "3.12", + "truecharts.org/train": "stable" + }, + "apiVersion": "v2", + "appVersion": "1.21.5", + "dependencies": [ + { + "name": "common", + "version": "17.5.0", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + }, + { + "name": "memcached", + "version": "11.2.1", + "repository": "oci://tccr.io/truecharts", + "condition": "memcached.enabled", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "Self hosted GIT repositories", + "home": "https://truecharts.org/charts/stable/gitea", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/gitea.png", + "keywords": [ + "git", + "issue tracker", + "code review", + "wiki", + "gitea", + "gogs" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "gitea", + "sources": [ + "https://gitea.com/gitea/helm-chart", + "https://github.com/go-gitea/gitea", + "https://github.com/truecharts/charts/tree/master/charts/stable/gitea", + "https://hub.docker.com/r/gitea/gitea" + ], + "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": "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": "admin", + "group": "App Configuration", + "label": "Admin Credentials", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "username", + "label": "username", + "schema": { + "type": "string", + "valid_chars": "^(?!^admin$).*$", + "required": true + } + }, + { + "variable": "password", + "label": "password", + "schema": { + "type": "string", + "required": true, + "private": true, + "min_length": 8 + } + }, + { + "variable": "email", + "label": "email", + "schema": { + "type": "string", + "required": true + } + } + ] + } + }, + { + "variable": "config", + "group": "App Configuration", + "label": "Admin Configuration", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "APP_NAME", + "label": "APP_NAME", + "schema": { + "type": "string", + "default": "Gitea", + "required": true + } + }, + { + "variable": "RUN_MODE", + "label": "RUN_MODE", + "schema": { + "type": "string", + "default": "prod", + "enum": [ + { + "value": "prod", + "description": "Production" + }, + { + "value": "dev", + "description": "Development" + }, + { + "value": "test", + "description": "Testing" + } + ] + } + }, + { + "variable": "ALLOWED_HOST_LIST", + "label": "ALLOWED_HOST_LIST", + "schema": { + "type": "string", + "default": "127.0.0.1", + "required": true + } + }, + { + "variable": "nodeIP", + "label": "Node IP", + "description": "Used to generate configuration, when installed without ingress", + "schema": { + "type": "string", + "required": true, + "$ref": [ + "definitions/nodeIP" + ], + "default": "192.168.0.10" + } + } + ] + } + }, + { + "variable": "customConfig", + "group": "App Configuration", + "label": "Custom Configuration parameters", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "catagoryItem", + "label": "Category", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Config Category Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "keys", + "label": "Configuration Parameters", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "configItem", + "label": "parameter", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Parameter Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Parameter Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "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": 10037, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "ssh", + "label": "SSH Service", + "description": "The SSH service", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable the Service", + "schema": { + "type": "boolean", + "default": true, + "hidden": true + } + }, + { + "variable": "type", + "label": "Service Type", + "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", + "schema": { + "type": "string", + "default": "LoadBalancer", + "enum": [ + { + "value": "LoadBalancer", + "description": "LoadBalancer (Expose Ports)" + }, + { + "value": "ClusterIP", + "description": "ClusterIP (Do Not Expose Ports)" + } + ] + } + }, + { + "variable": "loadBalancerIP", + "label": "LoadBalancer IP", + "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", + "schema": { + "show_if": [ + [ + "type", + "=", + "LoadBalancer" + ] + ], + "type": "string", + "default": "" + } + }, + { + "variable": "ports", + "label": "Service's Port(s) Configuration", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "ssh", + "label": "SSH 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": 2222, + "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": "data", + "label": "App data 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": 1000 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID of the user running the application", + "schema": { + "type": "int", + "default": 1000 + } + }, + { + "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": 1000 + } + } + ] + } + }, + { + "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": "cnpg", + "group": "Postgresql", + "label": "CloudNative-PG (CNPG)", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "main", + "label": "Main Postgresql Database", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "hibernate", + "label": "Hibernate", + "description": "enable to safely hibernate and shutdown the postgresql cluster", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "mode", + "label": "Mode", + "description": "Cluster mode of operation. Available modes: standalone - default mode. Creates new or updates an existing CNPG cluster. recovery - Same as standalone but creates a cluster from a backup, object store or via pg_basebackup replica - Creates a replica cluster from an existing CNPG cluster. # TODO.", + "schema": { + "type": "string", + "default": "standalone", + "enum": [ + { + "value": "standalone", + "description": "standalone" + }, + { + "value": "replica", + "description": "replica" + }, + { + "value": "recovery", + "description": "recovery" + } + ] + } + }, + { + "variable": "cluster", + "label": "Cluster Settings", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "instances", + "label": "Instances", + "schema": { + "type": "int", + "default": 1 + } + }, + { + "variable": "singleNode", + "label": "singleNode", + "schema": { + "type": "boolean", + "default": true, + "hidden": true + } + }, + { + "variable": "storage", + "label": "Storage", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "size", + "label": "Size", + "schema": { + "type": "string", + "default": "256Gi" + } + } + ] + } + }, + { + "variable": "walStorage", + "label": "WAL Storage", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "size", + "label": "Size", + "schema": { + "type": "string", + "default": "256Gi" + } + } + ] + } + } + ] + } + }, + { + "variable": "monitoring", + "label": "Monitoring Settings", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enablePodMonitor", + "label": "enablePodMonitor", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "disableDefaultQueries", + "label": "disableDefaultQueries", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "pooler", + "label": "Pooler Settings", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "instances", + "label": "Instances", + "schema": { + "type": "int", + "default": 1 + } + }, + { + "variable": "createRO", + "label": "Create ReadOnly Instance", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "recovery", + "label": "Recovery Settings (Experimental)", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "enabled", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "endpointURL", + "label": "endpointURL", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "method", + "label": "method", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "object_store" + } + }, + { + "variable": "backupName", + "label": "backupName", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "provider", + "label": "provider", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "s3", + "enum": [ + { + "value": "s3", + "description": "S3" + }, + { + "value": "azure", + "description": "Azure" + }, + { + "value": "google", + "description": "Google" + } + ] + } + }, + { + "variable": "s3", + "label": "s3", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "s3" + ] + ], + "attrs": [ + { + "variable": "region", + "label": "region", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "bucket", + "label": "bucket", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "accessKey", + "label": "accessKey", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "secretKey", + "label": "secretKey", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + }, + { + "variable": "azure", + "label": "azure (EXTREMELY EXPERIMENTAL)", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "azure" + ] + ], + "attrs": [ + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "connectionString", + "label": "connectionString", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageAccount", + "label": "storageAccount", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageKey", + "label": "storageKey", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageSasToken", + "label": "storageSasToken", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "containerName", + "label": "containerName", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "serviceName", + "label": "serviceName", + "schema": { + "type": "string", + "default": "blob" + } + }, + { + "variable": "inheritFromAzureAD", + "label": "inheritFromAzureAD", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "google", + "label": "google (EXTREMELY EXPERIMENTAL)", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "google" + ] + ], + "attrs": [ + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "bucket", + "label": "bucket", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "gkeEnvironment", + "label": "gkeEnvironment", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "applicationCredentials", + "label": "applicationCredentials", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + } + ] + } + }, + { + "variable": "backups", + "label": "Backup Settings (Experimental)", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "enabled", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "endpointURL", + "label": "endpointURL", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "destinationPath", + "label": "destinationPath", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "retentionPolicy", + "label": "retentionPolicy", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "30d" + } + }, + { + "variable": "provider", + "label": "provider", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "s3", + "enum": [ + { + "value": "s3", + "description": "S3" + }, + { + "value": "azure", + "description": "Azure" + }, + { + "value": "google", + "description": "Google" + } + ] + } + }, + { + "variable": "s3", + "label": "s3", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "s3" + ] + ], + "attrs": [ + { + "variable": "region", + "label": "region", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "bucket", + "label": "bucket", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "accessKey", + "label": "accessKey", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "secretKey", + "label": "secretKey", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + }, + { + "variable": "azure", + "label": "azure (EXTREMELY EXPERIMENTAL)", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "azure" + ] + ], + "attrs": [ + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "connectionString", + "label": "connectionString", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageAccount", + "label": "storageAccount", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageKey", + "label": "storageKey", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "storageSasToken", + "label": "storageSasToken", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "containerName", + "label": "containerName", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "serviceName", + "label": "serviceName", + "schema": { + "type": "string", + "default": "blob" + } + }, + { + "variable": "inheritFromAzureAD", + "label": "inheritFromAzureAD", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "google", + "label": "google (EXTREMELY EXPERIMENTAL)", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "google" + ] + ], + "attrs": [ + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "bucket", + "label": "bucket", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "gkeEnvironment", + "label": "gkeEnvironment", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "applicationCredentials", + "label": "applicationCredentials", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + }, + { + "variable": "scheduledBackups", + "label": "ScheduledBackups", + "schema": { + "type": "list", + "default": [], + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "items": [ + { + "variable": "backupschedule", + "label": "BackupSchedule", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "name", + "schema": { + "type": "string", + "default": "daily-backup", + "required": true + } + }, + { + "variable": "schedule", + "label": "schedule", + "schema": { + "type": "string", + "required": true, + "default": "0 0 0 * * *" + } + }, + { + "variable": "backupOwnerReference", + "label": "backupOwnerReference", + "schema": { + "type": "string", + "required": true, + "default": "self" + } + }, + { + "variable": "immediate", + "label": "immediate", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "suspend", + "label": "suspend", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + } + ] + } + }, + { + "variable": "manualBackups", + "label": "manualBackups", + "schema": { + "type": "list", + "default": [], + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "items": [ + { + "variable": "backup", + "label": "Backup", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "name", + "schema": { + "type": "string", + "default": "", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "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": "

Self hosted GIT repositories

\n

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

\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

gitea-17.1.18 (2024-02-03)

\n

Chore

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

gitea-17.1.17 (2024-02-02)

\n

Chore

\n
    \n
  • update container image gitea/gitea to v1.21.5@874a8d8 by renovate (#17787)
  • \n
\n

gitea-17.1.16 (2024-01-27)

\n

Chore

\n
    \n
  • update helm general non-major by renovate (#17525)
  • \n
\n

gitea-17.1.15 (2024-01-26)

\n

Chore

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

gitea-17.1.14 (2024-01-21)

\n

Chore

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

gitea-17.1.13 (2024-01-21)

\n

Chore

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

gitea-17.1.12 (2024-01-21)

\n

Chore

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

gitea-17.1.11 (2024-01-21)

\n

Chore

\n
    \n
  • update container image gitea/gitea to v1.21.4@600f1f1 by renovate (#17304)
  • \n
\n

gitea-17.1.10 (2024-01-09)

\n

Chore

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

gitea-17.1.9 (2024-01-02)

" + }, + "17.3.0": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/gitea/17.3.0", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/interface", + "definitions/nodeIP", + "normalize/interfaceConfiguration", + "definitions/gpuConfiguration", + "definitions/timezone", + "definitions/certificate" + ], + "human_version": "1.21.5_17.3.0", + "version": "17.3.0", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "truecharts.org/category": "GIT", + "truecharts.org/max_helm_version": "3.14", + "truecharts.org/min_helm_version": "3.12", + "truecharts.org/train": "stable" + }, + "apiVersion": "v2", + "appVersion": "1.21.5", + "dependencies": [ + { + "name": "common", + "version": "17.4.2", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + }, + { + "name": "memcached", + "version": "11.2.1", + "repository": "oci://tccr.io/truecharts", + "condition": "memcached.enabled", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "Self hosted GIT repositories", + "home": "https://truecharts.org/charts/stable/gitea", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/gitea.png", + "keywords": [ + "git", + "issue tracker", + "code review", + "wiki", + "gitea", + "gogs" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "gitea", + "sources": [ + "https://gitea.com/gitea/helm-chart", + "https://github.com/go-gitea/gitea", + "https://github.com/truecharts/charts/tree/master/charts/stable/gitea", + "https://hub.docker.com/r/gitea/gitea" + ], + "type": "application", + "version": "17.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": "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": "admin", + "group": "App Configuration", + "label": "Admin Credentials", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "username", + "label": "username", + "schema": { + "type": "string", + "valid_chars": "^(?!^admin$).*$", + "required": true + } + }, + { + "variable": "password", + "label": "password", + "schema": { + "type": "string", + "required": true, + "private": true, + "min_length": 8 + } + }, + { + "variable": "email", + "label": "email", + "schema": { + "type": "string", + "required": true + } + } + ] + } + }, + { + "variable": "config", + "group": "App Configuration", + "label": "Admin Configuration", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "APP_NAME", + "label": "APP_NAME", + "schema": { + "type": "string", + "default": "Gitea", + "required": true + } + }, + { + "variable": "RUN_MODE", + "label": "RUN_MODE", + "schema": { + "type": "string", + "default": "prod", + "enum": [ + { + "value": "prod", + "description": "Production" + }, + { + "value": "dev", + "description": "Development" + }, + { + "value": "test", + "description": "Testing" + } + ] + } + }, + { + "variable": "ALLOWED_HOST_LIST", + "label": "ALLOWED_HOST_LIST", + "schema": { + "type": "string", + "default": "127.0.0.1", + "required": true + } + }, + { + "variable": "nodeIP", + "label": "Node IP", + "description": "Used to generate configuration, when installed without ingress", + "schema": { + "type": "string", + "required": true, + "$ref": [ + "definitions/nodeIP" + ], + "default": "192.168.0.10" + } + } + ] + } + }, + { + "variable": "customConfig", + "group": "App Configuration", + "label": "Custom Configuration parameters", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "catagoryItem", + "label": "Category", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Config Category Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "keys", + "label": "Configuration Parameters", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "configItem", + "label": "parameter", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Parameter Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Parameter Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "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": 10037, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "ssh", + "label": "SSH Service", + "description": "The SSH service", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable the Service", + "schema": { + "type": "boolean", + "default": true, + "hidden": true + } + }, + { + "variable": "type", + "label": "Service Type", + "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", + "schema": { + "type": "string", + "default": "LoadBalancer", + "enum": [ + { + "value": "LoadBalancer", + "description": "LoadBalancer (Expose Ports)" + }, + { + "value": "ClusterIP", + "description": "ClusterIP (Do Not Expose Ports)" + } + ] + } + }, + { + "variable": "loadBalancerIP", + "label": "LoadBalancer IP", + "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", + "schema": { + "show_if": [ + [ + "type", + "=", + "LoadBalancer" + ] + ], + "type": "string", + "default": "" + } + }, + { + "variable": "ports", + "label": "Service's Port(s) Configuration", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "ssh", + "label": "SSH 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": 2222, + "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": "data", + "label": "App data 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": 1000 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID of the user running the application", + "schema": { + "type": "int", + "default": 1000 + } + }, + { + "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": 1000 + } + } + ] + } + }, + { + "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": "cnpg", + "group": "Postgresql", + "label": "CloudNative-PG (CNPG)", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "main", + "label": "Main Postgresql Database", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "hibernate", + "label": "Hibernate", + "description": "enable to safely hibernate and shutdown the postgresql cluster", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "mode", + "label": "Mode", + "description": "Cluster mode of operation. Available modes: standalone - default mode. Creates new or updates an existing CNPG cluster. recovery - Same as standalone but creates a cluster from a backup, object store or via pg_basebackup replica - Creates a replica cluster from an existing CNPG cluster. # TODO.", + "schema": { + "type": "string", + "default": "standalone", + "enum": [ + { + "value": "standalone", + "description": "standalone" + }, + { + "value": "replica", + "description": "replica" + }, + { + "value": "recovery", + "description": "recovery" + } + ] + } + }, + { + "variable": "cluster", + "label": "Cluster Settings", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "instances", + "label": "Instances", + "schema": { + "type": "int", + "default": 1 + } + }, + { + "variable": "singleNode", + "label": "singleNode", + "schema": { + "type": "boolean", + "default": true, + "hidden": true + } + }, + { + "variable": "storage", + "label": "Storage", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "size", + "label": "Size", + "schema": { + "type": "string", + "default": "256Gi" + } + } + ] + } + }, + { + "variable": "walStorage", + "label": "WAL Storage", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "size", + "label": "Size", + "schema": { + "type": "string", + "default": "256Gi" + } + } + ] + } + } + ] + } + }, + { + "variable": "monitoring", + "label": "Monitoring Settings", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enablePodMonitor", + "label": "enablePodMonitor", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "disableDefaultQueries", + "label": "disableDefaultQueries", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "pooler", + "label": "Pooler Settings", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "instances", + "label": "Instances", + "schema": { + "type": "int", + "default": 1 + } + }, + { + "variable": "createRO", + "label": "Create ReadOnly Instance", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "recovery", + "label": "Recovery Settings (Experimental)", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "enabled", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "endpointURL", + "label": "endpointURL", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "method", + "label": "method", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "object_store" + } + }, + { + "variable": "backupName", + "label": "backupName", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "provider", + "label": "provider", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "s3", + "enum": [ + { + "value": "s3", + "description": "S3" + }, + { + "value": "azure", + "description": "Azure" + }, + { + "value": "google", + "description": "Google" + } + ] + } + }, + { + "variable": "s3", + "label": "s3", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "s3" + ] + ], + "attrs": [ + { + "variable": "region", + "label": "region", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "bucket", + "label": "bucket", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "accessKey", + "label": "accessKey", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "secretKey", + "label": "secretKey", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + }, + { + "variable": "azure", + "label": "azure (EXTREMELY EXPERIMENTAL)", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "azure" + ] + ], + "attrs": [ + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "connectionString", + "label": "connectionString", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageAccount", + "label": "storageAccount", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageKey", + "label": "storageKey", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageSasToken", + "label": "storageSasToken", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "containerName", + "label": "containerName", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "serviceName", + "label": "serviceName", + "schema": { + "type": "string", + "default": "blob" + } + }, + { + "variable": "inheritFromAzureAD", + "label": "inheritFromAzureAD", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "google", + "label": "google (EXTREMELY EXPERIMENTAL)", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "google" + ] + ], + "attrs": [ + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "bucket", + "label": "bucket", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "gkeEnvironment", + "label": "gkeEnvironment", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "applicationCredentials", + "label": "applicationCredentials", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + } + ] + } + }, + { + "variable": "backups", + "label": "Backup Settings (Experimental)", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "enabled", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "endpointURL", + "label": "endpointURL", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "destinationPath", + "label": "destinationPath", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "retentionPolicy", + "label": "retentionPolicy", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "30d" + } + }, + { + "variable": "provider", + "label": "provider", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "s3", + "enum": [ + { + "value": "s3", + "description": "S3" + }, + { + "value": "azure", + "description": "Azure" + }, + { + "value": "google", + "description": "Google" + } + ] + } + }, + { + "variable": "s3", + "label": "s3", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "s3" + ] + ], + "attrs": [ + { + "variable": "region", + "label": "region", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "bucket", + "label": "bucket", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "accessKey", + "label": "accessKey", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "secretKey", + "label": "secretKey", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + }, + { + "variable": "azure", + "label": "azure (EXTREMELY EXPERIMENTAL)", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "azure" + ] + ], + "attrs": [ + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "connectionString", + "label": "connectionString", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageAccount", + "label": "storageAccount", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageKey", + "label": "storageKey", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "storageSasToken", + "label": "storageSasToken", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "containerName", + "label": "containerName", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "serviceName", + "label": "serviceName", + "schema": { + "type": "string", + "default": "blob" + } + }, + { + "variable": "inheritFromAzureAD", + "label": "inheritFromAzureAD", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "google", + "label": "google (EXTREMELY EXPERIMENTAL)", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "google" + ] + ], + "attrs": [ + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "bucket", + "label": "bucket", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "gkeEnvironment", + "label": "gkeEnvironment", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "applicationCredentials", + "label": "applicationCredentials", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + }, + { + "variable": "scheduledBackups", + "label": "ScheduledBackups", + "schema": { + "type": "list", + "default": [], + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "items": [ + { + "variable": "backupschedule", + "label": "BackupSchedule", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "name", + "schema": { + "type": "string", + "default": "daily-backup", + "required": true + } + }, + { + "variable": "schedule", + "label": "schedule", + "schema": { + "type": "string", + "required": true, + "default": "0 0 0 * * *" + } + }, + { + "variable": "backupOwnerReference", + "label": "backupOwnerReference", + "schema": { + "type": "string", + "required": true, + "default": "self" + } + }, + { + "variable": "immediate", + "label": "immediate", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "suspend", + "label": "suspend", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + } + ] + } + }, + { + "variable": "manualBackups", + "label": "manualBackups", + "schema": { + "type": "list", + "default": [], + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "items": [ + { + "variable": "backup", + "label": "Backup", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "name", + "schema": { + "type": "string", + "default": "", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "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": "

Self hosted GIT repositories

\n

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

\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

gitea-17.1.18 (2024-02-03)

\n

Chore

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

gitea-17.1.17 (2024-02-02)

\n

Chore

\n
    \n
  • update container image gitea/gitea to v1.21.5@874a8d8 by renovate (#17787)
  • \n
\n

gitea-17.1.16 (2024-01-27)

\n

Chore

\n
    \n
  • update helm general non-major by renovate (#17525)
  • \n
\n

gitea-17.1.15 (2024-01-26)

\n

Chore

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

gitea-17.1.14 (2024-01-21)

\n

Chore

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

gitea-17.1.13 (2024-01-21)

\n

Chore

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

gitea-17.1.12 (2024-01-21)

\n

Chore

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

gitea-17.1.11 (2024-01-21)

\n

Chore

\n
    \n
  • update container image gitea/gitea to v1.21.4@600f1f1 by renovate (#17304)
  • \n
\n

gitea-17.1.10 (2024-01-09)

\n

Chore

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

gitea-17.1.9 (2024-01-02)

" + }, + "17.2.0": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/gitea/17.2.0", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/interface", + "definitions/nodeIP", + "normalize/interfaceConfiguration", + "definitions/gpuConfiguration", + "definitions/timezone", + "definitions/certificate" + ], + "human_version": "1.21.5_17.2.0", + "version": "17.2.0", + "chart_metadata": { + "annotations": { + "max_scale_version": "23.10.2", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "truecharts.org/category": "GIT", + "truecharts.org/max_helm_version": "3.14", + "truecharts.org/min_helm_version": "3.12", + "truecharts.org/train": "stable" + }, + "apiVersion": "v2", + "appVersion": "1.21.5", + "dependencies": [ + { + "name": "common", + "version": "17.4.2", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + }, + { + "name": "memcached", + "version": "11.1.18", + "repository": "oci://tccr.io/truecharts", + "condition": "memcached.enabled", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "Self hosted GIT repositories", + "home": "https://truecharts.org/charts/stable/gitea", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/gitea.png", + "keywords": [ + "git", + "issue tracker", + "code review", + "wiki", + "gitea", + "gogs" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "gitea", + "sources": [ + "https://gitea.com/gitea/helm-chart", + "https://github.com/go-gitea/gitea", + "https://github.com/truecharts/charts/tree/master/charts/stable/gitea", + "https://hub.docker.com/r/gitea/gitea" + ], + "type": "application", + "version": "17.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": "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": "admin", + "group": "App Configuration", + "label": "Admin Credentials", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "username", + "label": "username", + "schema": { + "type": "string", + "valid_chars": "^(?!^admin$).*$", + "required": true + } + }, + { + "variable": "password", + "label": "password", + "schema": { + "type": "string", + "required": true, + "private": true, + "min_length": 8 + } + }, + { + "variable": "email", + "label": "email", + "schema": { + "type": "string", + "required": true + } + } + ] + } + }, + { + "variable": "config", + "group": "App Configuration", + "label": "Admin Configuration", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "APP_NAME", + "label": "APP_NAME", + "schema": { + "type": "string", + "default": "Gitea", + "required": true + } + }, + { + "variable": "RUN_MODE", + "label": "RUN_MODE", + "schema": { + "type": "string", + "default": "prod", + "enum": [ + { + "value": "prod", + "description": "Production" + }, + { + "value": "dev", + "description": "Development" + }, + { + "value": "test", + "description": "Testing" + } + ] + } + }, + { + "variable": "ALLOWED_HOST_LIST", + "label": "ALLOWED_HOST_LIST", + "schema": { + "type": "string", + "default": "127.0.0.1", + "required": true + } + }, + { + "variable": "nodeIP", + "label": "Node IP", + "description": "Used to generate configuration, when installed without ingress", + "schema": { + "type": "string", + "required": true, + "$ref": [ + "definitions/nodeIP" + ], + "default": "192.168.0.10" + } + } + ] + } + }, + { + "variable": "customConfig", + "group": "App Configuration", + "label": "Custom Configuration parameters", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "catagoryItem", + "label": "Category", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Config Category Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "keys", + "label": "Configuration Parameters", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "configItem", + "label": "parameter", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "Parameter Name", + "schema": { + "type": "string", + "required": true + } + }, + { + "variable": "value", + "label": "Parameter Value", + "schema": { + "type": "string", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "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": 10037, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "ssh", + "label": "SSH Service", + "description": "The SSH service", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable the Service", + "schema": { + "type": "boolean", + "default": true, + "hidden": true + } + }, + { + "variable": "type", + "label": "Service Type", + "description": "ClusterIP's are only internally available and Loadbalancer exposes the service using the system loadbalancer", + "schema": { + "type": "string", + "default": "LoadBalancer", + "enum": [ + { + "value": "LoadBalancer", + "description": "LoadBalancer (Expose Ports)" + }, + { + "value": "ClusterIP", + "description": "ClusterIP (Do Not Expose Ports)" + } + ] + } + }, + { + "variable": "loadBalancerIP", + "label": "LoadBalancer IP", + "description": "MetalLB Only: Selects the Loadbalancer IP to expose on. Required when using PortalButton with MetalLB", + "schema": { + "show_if": [ + [ + "type", + "=", + "LoadBalancer" + ] + ], + "type": "string", + "default": "" + } + }, + { + "variable": "ports", + "label": "Service's Port(s) Configuration", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "ssh", + "label": "SSH 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": 2222, + "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": "data", + "label": "App data 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": 1000 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID of the user running the application", + "schema": { + "type": "int", + "default": 1000 + } + }, + { + "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": 1000 + } + } + ] + } + }, + { + "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": "cnpg", + "group": "Postgresql", + "label": "CloudNative-PG (CNPG)", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "main", + "label": "Main Postgresql Database", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "hibernate", + "label": "Hibernate", + "description": "enable to safely hibernate and shutdown the postgresql cluster", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "mode", + "label": "Mode", + "description": "Cluster mode of operation. Available modes: standalone - default mode. Creates new or updates an existing CNPG cluster. recovery - Same as standalone but creates a cluster from a backup, object store or via pg_basebackup replica - Creates a replica cluster from an existing CNPG cluster. # TODO.", + "schema": { + "type": "string", + "default": "standalone", + "enum": [ + { + "value": "standalone", + "description": "standalone" + }, + { + "value": "replica", + "description": "replica" + }, + { + "value": "recovery", + "description": "recovery" + } + ] + } + }, + { + "variable": "cluster", + "label": "Cluster Settings", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "instances", + "label": "Instances", + "schema": { + "type": "int", + "default": 1 + } + }, + { + "variable": "singleNode", + "label": "singleNode", + "schema": { + "type": "boolean", + "default": true, + "hidden": true + } + }, + { + "variable": "storage", + "label": "Storage", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "size", + "label": "Size", + "schema": { + "type": "string", + "default": "256Gi" + } + } + ] + } + }, + { + "variable": "walStorage", + "label": "WAL Storage", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "size", + "label": "Size", + "schema": { + "type": "string", + "default": "256Gi" + } + } + ] + } + } + ] + } + }, + { + "variable": "monitoring", + "label": "Monitoring Settings", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enablePodMonitor", + "label": "enablePodMonitor", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "variable": "disableDefaultQueries", + "label": "disableDefaultQueries", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "pooler", + "label": "Pooler Settings", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "instances", + "label": "Instances", + "schema": { + "type": "int", + "default": 1 + } + }, + { + "variable": "createRO", + "label": "Create ReadOnly Instance", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "recovery", + "label": "Recovery Settings (Experimental)", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "enabled", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "endpointURL", + "label": "endpointURL", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "method", + "label": "method", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "object_store" + } + }, + { + "variable": "backupName", + "label": "backupName", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "provider", + "label": "provider", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "s3", + "enum": [ + { + "value": "s3", + "description": "S3" + }, + { + "value": "azure", + "description": "Azure" + }, + { + "value": "google", + "description": "Google" + } + ] + } + }, + { + "variable": "s3", + "label": "s3", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "s3" + ] + ], + "attrs": [ + { + "variable": "region", + "label": "region", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "bucket", + "label": "bucket", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "accessKey", + "label": "accessKey", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "secretKey", + "label": "secretKey", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + }, + { + "variable": "azure", + "label": "azure (EXTREMELY EXPERIMENTAL)", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "azure" + ] + ], + "attrs": [ + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "connectionString", + "label": "connectionString", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageAccount", + "label": "storageAccount", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageKey", + "label": "storageKey", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageSasToken", + "label": "storageSasToken", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "containerName", + "label": "containerName", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "serviceName", + "label": "serviceName", + "schema": { + "type": "string", + "default": "blob" + } + }, + { + "variable": "inheritFromAzureAD", + "label": "inheritFromAzureAD", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "google", + "label": "google (EXTREMELY EXPERIMENTAL)", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "google" + ] + ], + "attrs": [ + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "bucket", + "label": "bucket", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "gkeEnvironment", + "label": "gkeEnvironment", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "applicationCredentials", + "label": "applicationCredentials", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + } + ] + } + }, + { + "variable": "backups", + "label": "Backup Settings (Experimental)", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "enabled", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "endpointURL", + "label": "endpointURL", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "destinationPath", + "label": "destinationPath", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "retentionPolicy", + "label": "retentionPolicy", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "30d" + } + }, + { + "variable": "provider", + "label": "provider", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "s3", + "enum": [ + { + "value": "s3", + "description": "S3" + }, + { + "value": "azure", + "description": "Azure" + }, + { + "value": "google", + "description": "Google" + } + ] + } + }, + { + "variable": "s3", + "label": "s3", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "s3" + ] + ], + "attrs": [ + { + "variable": "region", + "label": "region", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "bucket", + "label": "bucket", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "accessKey", + "label": "accessKey", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "secretKey", + "label": "secretKey", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + }, + { + "variable": "azure", + "label": "azure (EXTREMELY EXPERIMENTAL)", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "azure" + ] + ], + "attrs": [ + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "connectionString", + "label": "connectionString", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageAccount", + "label": "storageAccount", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "storageKey", + "label": "storageKey", + "schema": { + "type": "string", + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "default": "" + } + }, + { + "variable": "storageSasToken", + "label": "storageSasToken", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "containerName", + "label": "containerName", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "serviceName", + "label": "serviceName", + "schema": { + "type": "string", + "default": "blob" + } + }, + { + "variable": "inheritFromAzureAD", + "label": "inheritFromAzureAD", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + }, + { + "variable": "google", + "label": "google (EXTREMELY EXPERIMENTAL)", + "schema": { + "additional_attrs": true, + "type": "dict", + "show_if": [ + [ + "provider", + "=", + "google" + ] + ], + "attrs": [ + { + "variable": "path", + "label": "path", + "schema": { + "type": "string", + "default": "/" + } + }, + { + "variable": "bucket", + "label": "bucket", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "gkeEnvironment", + "label": "gkeEnvironment", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "applicationCredentials", + "label": "applicationCredentials", + "schema": { + "type": "string", + "default": "" + } + } + ] + } + }, + { + "variable": "scheduledBackups", + "label": "ScheduledBackups", + "schema": { + "type": "list", + "default": [], + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "items": [ + { + "variable": "backupschedule", + "label": "BackupSchedule", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "name", + "schema": { + "type": "string", + "default": "daily-backup", + "required": true + } + }, + { + "variable": "schedule", + "label": "schedule", + "schema": { + "type": "string", + "required": true, + "default": "0 0 0 * * *" + } + }, + { + "variable": "backupOwnerReference", + "label": "backupOwnerReference", + "schema": { + "type": "string", + "required": true, + "default": "self" + } + }, + { + "variable": "immediate", + "label": "immediate", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "suspend", + "label": "suspend", + "schema": { + "type": "boolean", + "default": false + } + } + ] + } + } + ] + } + }, + { + "variable": "manualBackups", + "label": "manualBackups", + "schema": { + "type": "list", + "default": [], + "show_if": [ + [ + "enabled", + "=", + true + ] + ], + "items": [ + { + "variable": "backup", + "label": "Backup", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "name", + "label": "name", + "schema": { + "type": "string", + "default": "", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "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": "

Self hosted GIT repositories

\n

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

\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

gitea-10.0.0 (2022-11-10)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Major Change to GUI
  • \n
  • update helm general non-major (#4342)
  • \n
  • update helm general non-major (#4349)
  • \n
  • update helm general non-major (#4329)
  • \n
\n

gitea-9.0.33 (2022-11-08)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#4342)
  • \n
  • update helm general non-major (#4349)
  • \n
  • update helm general non-major (#4329)
  • \n
\n

gitea-9.0.32 (2022-11-08)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#4342)
  • \n
  • update helm general non-major (#4329)
  • \n
\n

gitea-9.0.32 (2022-11-08)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#4342)
  • \n
  • update helm general non-major (#4329)
  • \n
\n

gitea-9.0.32 (2022-11-08)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#4342)
  • \n
  • update helm general non-major (#4329)
  • \n
\n

gitea-9.0.31 (2022-11-07)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#4329)
  • \n
\n

gitea-9.0.31 (2022-11-06)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#4329)
  • \n
\n

gitea-9.0.30 (2022-11-06)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#4317)
  • \n
\n

gitea-9.0.29 (2022-11-05)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#4308)
  • \n
\n

gitea-9.0.28 (2022-11-02)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#4261)
  • \n
\n

gitea-9.0.27 (2022-10-25)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major
  • \n
\n

gitea-9.0.26 (2022-10-25)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#4182)
  • \n
\n

gitea-9.0.25 (2022-10-19)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#4122)
  • \n
\n

gitea-9.0.24 (2022-10-16)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update docker general non-major (#4108)
  • \n
\n

gitea-9.0.23 (2022-10-12)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#4071)
  • \n
\n

gitea-9.0.22 (2022-10-07)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major
  • \n
\n

gitea-9.0.22 (2022-10-07)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major
  • \n
\n

gitea-9.0.21 (2022-10-05)

\n

Chore

\n
    \n
  • split addons in smaller templates (#3979)
  • \n
  • update helm general non-major
  • \n
\n

gitea-9.0.19 (2022-09-27)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#3918)
  • \n
\n

gitea-9.0.18 (2022-09-25)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#3898)
  • \n
\n

gitea-9.0.17 (2022-09-22)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • refactor Services SCALE GUI
  • \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

gitea-9.0.17 (2022-09-21)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • refactor Services SCALE GUI
  • \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

gitea-9.0.17 (2022-09-21)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • refactor Services SCALE GUI
  • \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

gitea-9.0.17 (2022-09-20)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • refactor Services SCALE GUI
  • \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

gitea-9.0.17 (2022-09-20)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • refactor Services SCALE GUI
  • \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

gitea-9.0.17 (2022-09-19)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • refactor Services SCALE GUI
  • \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

gitea-9.0.17 (2022-09-19)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • refactor Services SCALE GUI
  • \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

gitea-9.0.17 (2022-09-19)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • refactor Services SCALE GUI
  • \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

gitea-9.0.17 (2022-09-17)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • refactor Services SCALE GUI
  • \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

gitea-9.0.17 (2022-09-18)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

gitea-9.0.17 (2022-09-16)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

gitea-9.0.17 (2022-09-16)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

gitea-9.0.17 (2022-09-15)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

gitea-9.0.17 (2022-09-15)

\n

Chore

\n
    \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

gitea-9.0.16 (2022-09-13)

\n

Chore

\n
    \n
  • update helm chart memcached to v3.0.75 (#3759)
  • \n
\n

gitea-9.0.15 (2022-09-13)

\n

Chore

\n
    \n
  • update helm general non-major (#3756)
  • \n
\n

gitea-9.0.14 (2022-09-12)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#3711)
  • \n
\n

gitea-9.0.14 (2022-09-12)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#3711)
  • \n
\n

gitea-9.0.14 (2022-09-11)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#3711)
  • \n
\n

gitea-9.0.14 (2022-09-11)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#3711)
  • \n
\n

gitea-9.0.14 (2022-09-11)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#3711)
  • \n
\n

gitea-9.0.14 (2022-09-11)

\n

Chore

\n
    \n
  • update helm general non-major (#3711)
  • \n
\n

gitea-9.0.13 (2022-09-10)

\n

Chore

\n
    \n
  • update docker general non-major (#3727)
  • \n
\n

gitea-9.0.12 (2022-08-30)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#3639)
  • \n
  • update helm chart common to v10.5.5 (#3626)
  • \n
\n

gitea-9.0.11 (2022-08-30)

\n

Chore

\n
    \n
  • update helm chart common to v10.5.5 (#3626)
  • \n
\n

gitea-9.0.10 (2022-08-30)

\n

Chore

\n
    \n
  • update helm general non-major (#3624)
  • \n
\n

gitea-9.0.9 (2022-08-29)

\n

Chore

\n
    \n
  • update helm general non-major (#3621)
  • \n
  • update helm general non-major (#3619)
  • \n
\n

gitea-9.0.7 (2022-08-23)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#3545)
  • \n
\n

gitea-9.0.6 (2022-08-20)

\n

Chore

\n
    \n
  • update docker general non-major docker tags (#3518)
  • \n
\n

gitea-9.0.5 (2022-08-17)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#3484)
  • \n
\n

gitea-9.0.4 (2022-08-13)

\n

Fix

\n
    \n
  • Add WebHook config (#3463)
  • \n
\n

gitea-9.0.3 (2022-08-12)

\n

Chore

\n
    \n
  • add documentation checkbox/section to all SCALE Apps
  • \n
  • update helm general non-major helm releases (#3456)
  • \n
\n

Fix

\n
    \n
  • move extraArgs from .Values.controller to .Values (#3447)
  • \n
\n

gitea-9.0.2 (2022-08-09)

\n

Chore

\n
    \n
  • update helm general non-major helm releases to v10.4.9 (#3413)
  • \n
\n

gitea-9.0.1 (2022-08-08)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#3376)
  • \n
  • update docker general non-major (#3356)
  • \n
  • replace questions parts with templates (#3402)
  • \n
\n

gitea-8.0.27 (2022-07-26)

\n

Chore

\n
    \n
  • update home links (#3291)
  • \n
  • update helm general non-major helm releases (#3302)
  • \n
\n

gitea-8.0.26 (2022-07-25)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update docker general non-major (#3295)
  • \n
\n

gitea-8.0.26 (2022-07-25)

\n

Chore

\n
    \n
  • update docker general non-major (#3295)
  • \n
\n

gitea-8.0.25 (2022-07-23)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major helm releases (#3280)
  • \n
\n

gitea-8.0.25 (2022-07-23)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major helm releases (#3280)
  • \n
\n

gitea-8.0.25 (2022-07-23)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#3280)
  • \n
\n

gitea-8.0.24 (2022-07-23)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#3274)
  • \n
\n

gitea-8.0.23 (2022-07-22)

\n

Chore

\n
    \n
  • Bump all charts to generate config and container references due to huge increase of repository
  • \n
  • update helm general non-major helm releases (#3268)
  • \n
\n

gitea-8.0.21 (2022-07-19)

\n

Chore

\n
    \n
  • Update Readme and Description on SCALE
  • \n
\n

gitea-8.0.20 (2022-07-14)

\n

Fix

\n
    \n
  • regenerate catalog and update template
  • \n
\n

gitea-8.0.19 (2022-07-14)

\n

Fix

\n
    \n
  • bump to ensure .helmignore is present on all Charts
  • \n
\n

gitea-8.0.17 (2022-07-13)

\n

Chore

\n
    \n
  • update docker general non-major (#3157)
  • \n
\n

gitea-8.0.16 (2022-07-12)

\n

Chore

\n
    \n
  • update icons (#3156)
  • \n
  • bump to cleanup old docs and use correct icon urls
  • \n
\n

gitea-8.0.14 (2022-07-12)

\n

Chore

\n
    \n
  • bump to regenerate documentation
  • \n
\n

\n

gitea-8.0.13 (2022-07-12)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#3147)
  • \n
\n

\n

gitea-8.0.12 (2022-07-11)

\n

Chore

\n
    \n
  • move icons into the apps folder (#3139)
  • \n
\n

\n

gitea-8.0.11 (2022-07-09)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#3113)
  • \n
\n

\n

gitea-8.0.10 (2022-07-05)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#3075)
  • \n
\n

\n

gitea-8.0.9 (2022-07-04)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#3066)
  • \n
\n

\n

gitea-8.0.8 (2022-06-29)

\n

Chore

\n
    \n
  • update helm general non-major Helm releases (#3003)
  • \n
\n

\n

gitea-8.0.7 (2022-06-26)

\n

Gitea

\n
    \n
  • change questions.yaml admin password to private (#2991)
  • \n
\n

\n

gitea-8.0.6 (2022-06-25)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2977)
  • \n
\n

\n

gitea-8.0.5 (2022-06-22)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2948)
  • \n
\n

\n

gitea-8.0.4 (2022-06-21)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2943)
  • \n
\n

\n

gitea-8.0.3 (2022-06-14)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2887)
  • \n
\n

\n

gitea-8.0.2 (2022-06-14)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2886)
  • \n
\n

\n

gitea-8.0.1 (2022-06-11)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2854)
  • \n
\n

\n

gitea-8.0.0 (2022-06-07)

\n

Chore

\n
    \n
  • update helm general major helm releases (#2804)
  • \n
\n

Fix

\n
    \n
  • hotpatch to disable HPA and networkPolicy in SCALE interface, due to incompatible format.
  • \n
\n

\n

gitea-7.0.1 (2022-06-07)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • sync all apps persistence configuration and always default to PVC
  • \n
  • update helm general non-major helm releases (#2838)
  • \n
\n

Fix

\n
    \n
  • remove malfunctioning SCALE migration script
  • \n
\n

Refactor

\n
    \n
  • BREAKING CHANGE (#2836)
  • \n
\n

\n

gitea-7.0.0 (2022-06-07)

\n

Chore

\n
    \n
  • sync all apps persistence configuration and always default to PVC
  • \n
\n

Refactor

\n
    \n
  • BREAKING CHANGE (#2836)
  • \n
\n

\n

gitea-6.0.29 (2022-05-31)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2803)
  • \n
\n

\n

gitea-6.0.28 (2022-05-26)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major helm releases (#2759)
  • \n
\n

\n

gitea-6.0.28 (2022-05-26)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2759)
  • \n
\n

\n

gitea-6.0.27 (2022-05-24)

\n

Chore

\n
    \n
  • update helm general non-major helm releases
  • \n
\n

\n

gitea-6.0.26 (2022-05-17)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major helm releases
  • \n
\n

\n

gitea-6.0.26 (2022-05-17)

\n

Chore

\n
    \n
  • update helm general non-major helm releases
  • \n
\n

\n

gitea-6.0.25 (2022-05-17)

\n

Chore

\n
    \n
  • update docker general non-major (#2695)
  • \n
  • update helm general non-major helm releases
  • \n
\n

\n

gitea-6.0.24 (2022-05-10)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2649)
  • \n
\n

\n

gitea-6.0.23 (2022-05-05)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2612)
  • \n
\n

\n

gitea-6.0.22 (2022-05-04)

\n

Chore

\n
    \n
  • update docker general non-major (#2606)
  • \n
\n

\n

gitea-6.0.21 (2022-05-04)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2605)
  • \n
\n

\n

gitea-6.0.20 (2022-04-26)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2573)
  • \n
\n

\n

gitea-6.0.19 (2022-04-26)

\n

Chore

\n
    \n
  • update docker general non-major (#2571)
  • \n
\n

\n

gitea-6.0.18 (2022-04-20)

\n

Chore

\n
    \n
  • add missing quote on description (#2515)
  • \n
  • update helm general non-major helm releases (#2524)
  • \n
\n

\n

gitea-6.0.17 (2022-04-12)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2480)
  • \n
\n

\n

gitea-6.0.16 (2022-04-03)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2410)
  • \n
\n

\n

gitea-6.0.15 (2022-03-31)

\n

Fix

\n
    \n
  • set user and group to 1000 (#2356)
  • \n
\n

\n

gitea-6.0.14 (2022-03-31)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2362)
  • \n
\n

\n

gitea-6.0.13 (2022-03-31)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2361)
  • \n
\n

\n

gitea-6.0.12 (2022-03-30)

\n

Chore

\n
    \n
  • Use new repo (#2337)
  • \n
  • update helm general non-major helm releases (#2354)
  • \n
\n

\n

gitea-6.0.11 (2022-03-26)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2290)
  • \n
\n

\n

gitea-6.0.10 (2022-03-26)

\n

Chore

\n
    \n
  • bump all apps to trigger ci
  • \n
\n

\n

gitea-6.0.8 (2022-03-24)

\n

Chore

\n
    \n
  • update docker general non-major
  • \n
\n

\n

gitea-6.0.5 (2022-03-17)

\n

Chore

\n
    \n
  • update docker general non-major (#2198)
  • \n
  • update docker general non-major (#2196)
  • \n
\n

\n

gitea-6.0.3 (2022-03-08)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2116)
  • \n
\n

\n

gitea-6.0.2 (2022-03-07)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2111)
  • \n
\n

\n

gitea-6.0.1 (2022-03-07)

\n

Chore

\n
    \n
  • update docker general non-major (#2046)
  • \n
  • Remove -icon string from icon png's (#2040)
  • \n
\n

\n

gitea-6.0.0 (2022-03-03)

\n

Chore

\n
    \n
  • remove fixed env from questions.yaml
  • \n
  • remove empty env var declaration from questions.yaml
  • \n
  • update helm general major helm releases (#2021)
  • \n
\n

Fix

\n
    \n
  • BREAKING CHANGE Move some env-vars outside of env section (#2010)
  • \n
\n

\n

gitea-5.0.45 (2022-03-02)

\n

Chore

\n
    \n
  • rename web_portal to open (#1957)
  • \n
  • update helm general non-major helm releases (#1999)
  • \n
\n

\n

gitea-5.0.44 (2022-02-21)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1927)
  • \n
\n

\n

gitea-5.0.43 (2022-02-15)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1901)
  • \n
  • remove dups from configmap (#1878)
  • \n
\n

\n

gitea-5.0.42 (2022-02-12)

\n

Fix

\n\n

\n

gitea-5.0.41 (2022-02-10)

\n

Chore

\n
    \n
  • update docker general non-major (#1876)
  • \n
\n

\n

gitea-5.0.40 (2022-02-08)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1871)
  • \n
\n

\n

gitea-5.0.39 (2022-02-06)

\n

Chore

\n
    \n
  • update helm chart common to v8.15.0 (#1859)
  • \n
\n

\n

gitea-5.0.38 (2022-02-05)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1852)
  • \n
\n

\n

gitea-5.0.37 (2022-02-02)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1828)
  • \n
\n

\n

gitea-5.0.36 (2022-01-31)

\n

Chore

\n
    \n
  • update docker general non-major docker tags (#1823)
  • \n
\n

\n

gitea-5.0.35 (2022-01-25)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1791)
  • \n
\n

\n

gitea-5.0.34 (2022-01-24)

\n

Fix

\n\n

\n

gitea-5.0.33 (2022-01-22)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1766)
  • \n
\n

\n

gitea-5.0.32 (2022-01-22)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1763)
  • \n
  • update helm general non-major helm releases (#1759)
  • \n
\n

Fix

\n
    \n
  • set additional_attrs: true on all dicts (#1750)
  • \n
\n

\n

gitea-5.0.31 (2022-01-21)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1759)
  • \n
\n

Fix

\n
    \n
  • set additional_attrs: true on all dicts (#1750)
  • \n
\n

\n

gitea-5.0.30 (2022-01-18)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1732)
  • \n
\n

\n

gitea-5.0.29 (2022-01-17)

\n

Chore

\n
    \n
  • update docker general non-major (#1728)
  • \n
\n

\n

gitea-5.0.28 (2022-01-13)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1712)
  • \n
\n

Feat

\n
    \n
  • expose capabilities in GUI (#1709)
  • \n
\n

\n

gitea-5.0.27 (2022-01-12)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1704)
  • \n
\n

\n

gitea-5.0.26 (2022-01-11)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1693)
  • \n
\n

\n

gitea-5.0.25 (2022-01-10)

\n

Chore

\n
    \n
  • update docker general non-major (#1677)
  • \n
\n

\n

gitea-5.0.24 (2022-01-04)

\n

Chore

\n
    \n
  • update helm general non-major helm releases
  • \n
\n

\n

gitea-5.0.23 (2022-01-03)

\n

Chore

\n
    \n
  • update docker general non-major (#1646)
  • \n
\n

\n

gitea-5.0.22 (2021-12-28)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1623)
  • \n
\n

\n

gitea-5.0.21 (2021-12-24)

\n

Chore

\n
    \n
  • update docker general non-major docker tags (#1609)
  • \n
\n

\n

gitea-5.0.20 (2021-12-21)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1596)
  • \n
\n

\n

gitea-5.0.19 (2021-12-19)

\n

Chore

\n
    \n
  • Last patch bump before RC2 branch-off
  • \n
  • remove editable: true as this is the default (#1576)
  • \n
\n

\n

gitea-5.0.18 (2021-12-19)

\n

Chore

\n
    \n
  • completely remove mountPath reference from GUI (#1572)
  • \n
  • update helm general non-major helm releases (#1571)
  • \n
\n

\n

gitea-5.0.17 (2021-12-18)

\n

Chore

\n
    \n
  • cleanup questions by removing hidden dicts (#1558)
  • \n
  • App-Icon Organization (#1539)
  • \n
\n

\n

gitea-5.0.16 (2021-12-14)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1535)
  • \n
\n

\n

gitea-5.0.15 (2021-12-13)

\n

Chore

\n
    \n
  • move incubator apps to stable and bump everything
  • \n
\n

\n

gitea-5.0.14 (2021-12-11)

\n

Chore

\n
    \n
  • update general helm non-major helm releases (#1509)
  • \n
\n

\n

gitea-5.0.13 (2021-12-11)

\n

Chore

\n
    \n
  • update non-major docker (#1507)
  • \n
\n

\n

gitea-5.0.12 (2021-12-07)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1481)
  • \n
\n

\n

gitea-5.0.11 (2021-12-05)

\n

Chore

\n
    \n
  • fix some remaining issues after refactor work
  • \n
\n

\n

gitea-5.0.10 (2021-12-05)

\n

Chore

\n
    \n
  • bump apps to generate security page
  • \n
  • move all container references to TCCR (#1448)
  • \n
  • ensure container references are prefixed with v
  • \n
  • update non-major deps helm releases (#1468)
  • \n
  • update non-major deps helm releases (#1453)
  • \n
  • update non-major (#1449)
  • \n
  • update non-major deps helm releases (#1471)
  • \n
  • update non-major deps helm releases (#1432)
  • \n
\n

Fix

\n
    \n
  • fix typo in theme selection (#1428)
  • \n
\n

\n

gitea-5.0.9 (2021-12-05)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1468)
  • \n
\n

\n

gitea-5.0.8 (2021-12-04)

\n

Chore

\n
    \n
  • bump apps to generate security page
  • \n
\n

\n

gitea-5.0.7 (2021-12-04)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1453)
  • \n
\n

\n

gitea-5.0.6 (2021-12-03)

\n

Chore

\n
    \n
  • ensure container references are prefixed with v
  • \n
  • move all container references to TCCR (#1448)
  • \n
  • update non-major (#1449)
  • \n
\n

\n

gitea-5.0.5 (2021-11-30)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1432)
  • \n
\n

Fix

\n
    \n
  • correct some ports mistakes (#1416)
  • \n
  • move conflicting ports to 10xxx range (#1415)
  • \n
\n

\n

gitea-5.0.4 (2021-11-23)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1386)
  • \n
\n

\n

gitea-5.0.3 (2021-11-22)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1383)
  • \n
\n

\n

gitea-5.0.2 (2021-11-16)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1345)
  • \n
\n

\n

gitea-5.0.1 (2021-11-16)

\n

Chore

\n
    \n
  • bump postgresql again
  • \n
\n

\n

gitea-5.0.0 (2021-11-16)

\n

Chore

\n
    \n
  • bump postgresql on some Apps
  • \n
\n

\n

gitea-4.0.15 (2021-11-15)

\n

Chore

\n
    \n
  • persistence cleanup and small bugfixes (#1329)
  • \n
  • update non-major deps helm releases (#1338)
  • \n
\n

\n

gitea-4.0.14 (2021-11-14)

\n

Chore

\n
    \n
  • fixes around the GUI refactor (#1316)
  • \n
  • move port above advanced in GUI (#1326)
  • \n
  • clean up Chart.yaml (#1322)
  • \n
  • update non-major deps helm releases (#1328)
  • \n
\n

\n

gitea-4.0.13 (2021-11-12)

\n

Feat

\n
    \n
  • move gitea to our own memcached chart (#1313)
  • \n
\n

Fix

\n
    \n
  • Allow spaces in paths (#1306)
  • \n
\n

\n

gitea-4.0.12 (2021-11-09)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1297)
  • \n
\n

\n

gitea-4.0.11 (2021-11-08)

\n

\n

gitea-4.0.10 (2021-11-08)

\n

Fix

\n
    \n
  • Correctly enable ports by default on some more Apps
  • \n
\n

\n

gitea-4.0.9 (2021-11-07)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1295)
  • \n
\n

\n

gitea-4.0.8 (2021-11-07)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1291)
  • \n
\n

Chore

\n
    \n
  • Simplify GUI for deployment, persistence and securityContext (#1289)
  • \n
\n

Feat

\n
    \n
  • Simplify the Services GUI (#1290)
  • \n
\n

\n

gitea-4.0.7 (2021-11-02)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1267)
  • \n
\n

\n

gitea-4.0.6 (2021-11-01)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1264)
  • \n
\n

\n

gitea-4.0.5 (2021-11-01)

\n

Chore

\n
    \n
  • update non-major (#1263)
  • \n
\n

\n

gitea-4.0.4 (2021-10-26)

\n

Chore

\n
    \n
  • update helm chart postgresql to v5.1.4 (#1249)
  • \n
\n

\n

gitea-4.0.3 (2021-10-26)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1247)
  • \n
\n

\n

gitea-4.0.2 (2021-10-26)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1245)
  • \n
\n

\n

gitea-4.0.1 (2021-10-26)

\n

Chore

\n
    \n
  • update helm chart common to v8.3.15 (#1240)
  • \n
\n

\n

gitea-4.0.0 (2021-10-26)

\n

Chore

\n
    \n
  • update helm chart postgresql to v5 (#1234)
  • \n
  • update non-major (#1232)
  • \n
  • update helm chart postgresql to v4.1.0 (#1237)
  • \n
\n

\n

gitea-3.0.1 (2021-10-26)

\n

Chore

\n
    \n
  • update non-major deps helm releases
  • \n
\n

\n

gitea-3.0.0 (2021-10-25)

\n

Chore

\n
    \n
  • Adapt for TrueNAS SCALE RC1
  • \n
\n

\n

gitea-2.0.3 (2021-10-20)

\n

Chore

\n
    \n
  • bump apps, remove duplicates and move incubator to stable for RC1
  • \n
\n

\n

gitea-2.0.0 (2021-10-20)

\n

Chore

\n
    \n
  • update helm chart postgresql to v4 (#1214)
  • \n
\n

Fix

\n
    \n
  • use correct PVC storageClass when using postgresql as a dependency on SCALE (#1212)
  • \n
\n

\n

gitea-1.0.17 (2021-10-20)

\n

Chore

\n
    \n
  • bump versions to rerelease and fix icons
  • \n
\n

\n

gitea-1.0.16 (2021-10-19)

\n

Chore

\n
    \n
  • update helm chart common to v8.3.13 (#1184)
  • \n
\n

\n

gitea-1.0.15 (2021-10-19)

\n

Change

\n
    \n
  • Project-Eclipse 3, Automatically generate item.yaml (#1178)
  • \n
\n

Chore

\n
    \n
  • Project-Eclipse 5, move app-readme to automatic generation script (#1181)
  • \n
  • update helm chart memcached to v5.15.6 (#1179)
  • \n
\n

Feat

\n
    \n
  • Project-Eclipse 4, Add App grading annotations to Chart.yaml (#1180)
  • \n
\n

Refactor

\n
    \n
  • Project Eclipse Part 6, move questions.yaml to root App folder (#1182)
  • \n
\n

\n

gitea-1.0.14 (2021-10-19)

\n

Chore

\n
    \n
  • Project-Eclipse part 2, adapting and cleaning changelog (#1173)
  • \n
  • update helm chart postgresql to v3.0.20 (#1177)
  • \n
\n

\n

gitea-1.0.13 (2021-10-19)

\n

Fix

\n
    \n
  • fix previous SCALE bugfix not correctly being applied
  • \n
\n

\n

gitea-1.0.12 (2021-10-19)

\n

Fix

\n
    \n
  • Solve issues regarding ix_values.yaml not containing the image and tag definitions. (#1176)
  • \n
\n

\n

gitea-1.0.11 (2021-10-18)

\n

Refactor

\n
    \n
  • Project Eclipse - part 1 - remove ix_values.yaml (#1168)
  • \n
\n

\n

gitea-1.0.10 (2021-10-17)

\n

Chore

\n
    \n
  • update helm chart common to v8.3.10 (#1160)
  • \n
\n

Fix

\n
    \n
  • force users using correct / prefix for mounPath (#1156)
  • \n
\n

\n

gitea-1.0.9 (2021-10-13)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1133)
  • \n
\n

\n

gitea-1.0.8 (2021-10-12)

\n

Chore

\n
    \n
  • update helm chart postgresql to v3.0.15 (#1127)
  • \n
\n

\n

gitea-1.0.7 (2021-10-12)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1126)
  • \n
\n

\n

gitea-1.0.6 (2021-10-12)

\n

Chore

\n
    \n
  • update non-major (#1122)
  • \n
\n

\n

gitea-1.0.5 (2021-10-12)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1123)
  • \n
\n

\n

gitea-1.0.4 (2021-10-09)

\n

\n

gitea-1.0.3 (2021-10-05)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1099)
  • \n
\n

\n

gitea-1.0.2 (2021-10-05)

\n

Chore

\n
    \n
  • update non-major (#1098)
  • \n
\n

\n

gitea-1.0.1 (2021-10-01)

\n

\n

gitea-1.0.0 (2021-10-01)

\n

\n

gitea-0.0.5 (2021-10-01)

\n

\n

gitea-0.0.4 (2021-10-01)

\n

\n

gitea-0.0.2 (2021-10-01)

\n

\n

gitea-0.0.1 (2021-10-01)

" + } +} \ No newline at end of file diff --git a/stable/gitea/item.yaml b/stable/gitea/item.yaml new file mode 100644 index 0000000..5b723d3 --- /dev/null +++ b/stable/gitea/item.yaml @@ -0,0 +1,4 @@ +icon_url: https://truecharts.org/img/hotlink-ok/chart-icons/gitea.png +categories: + - GIT +screenshots: [] diff --git a/stable/jellyfin/17.2.0/.helmignore b/stable/jellyfin/17.2.0/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/jellyfin/17.2.0/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/jellyfin/17.2.0/CHANGELOG.md b/stable/jellyfin/17.2.0/CHANGELOG.md new file mode 100644 index 0000000..269fe73 --- /dev/null +++ b/stable/jellyfin/17.2.0/CHANGELOG.md @@ -0,0 +1,1396 @@ +--- +title: Changelog +--- + +## [jellyfin-12.0.0](https://github.com/truecharts/charts/compare/jellyfin-11.0.46...jellyfin-12.0.0) (2022-11-10) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Major Change to GUI +- update helm general non-major ([#4342](https://github.com/truecharts/charts/issues/4342)) +- update helm general non-major ([#4349](https://github.com/truecharts/charts/issues/4349)) +- update helm general non-major ([#4329](https://github.com/truecharts/charts/issues/4329)) + +### Fix + +- change container config label + +## [jellyfin-11.0.49](https://github.com/truecharts/charts/compare/jellyfin-11.0.46...jellyfin-11.0.49) (2022-11-08) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major ([#4342](https://github.com/truecharts/charts/issues/4342)) +- update helm general non-major ([#4349](https://github.com/truecharts/charts/issues/4349)) +- update helm general non-major ([#4329](https://github.com/truecharts/charts/issues/4329)) + +## [jellyfin-11.0.48](https://github.com/truecharts/charts/compare/jellyfin-11.0.46...jellyfin-11.0.48) (2022-11-08) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major ([#4342](https://github.com/truecharts/charts/issues/4342)) +- update helm general non-major ([#4329](https://github.com/truecharts/charts/issues/4329)) + +## [jellyfin-11.0.48](https://github.com/truecharts/charts/compare/jellyfin-11.0.46...jellyfin-11.0.48) (2022-11-08) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major ([#4342](https://github.com/truecharts/charts/issues/4342)) +- update helm general non-major ([#4329](https://github.com/truecharts/charts/issues/4329)) + +## [jellyfin-11.0.48](https://github.com/truecharts/charts/compare/jellyfin-11.0.46...jellyfin-11.0.48) (2022-11-08) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major ([#4342](https://github.com/truecharts/charts/issues/4342)) +- update helm general non-major ([#4329](https://github.com/truecharts/charts/issues/4329)) + +## [jellyfin-11.0.47](https://github.com/truecharts/charts/compare/jellyfin-11.0.46...jellyfin-11.0.47) (2022-11-07) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major ([#4329](https://github.com/truecharts/charts/issues/4329)) + +## [jellyfin-11.0.47](https://github.com/truecharts/charts/compare/jellyfin-11.0.46...jellyfin-11.0.47) (2022-11-06) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major ([#4329](https://github.com/truecharts/charts/issues/4329)) + +## [jellyfin-11.0.46](https://github.com/truecharts/charts/compare/jellyfin-11.0.45...jellyfin-11.0.46) (2022-11-06) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major ([#4317](https://github.com/truecharts/charts/issues/4317)) + +## [jellyfin-11.0.45](https://github.com/truecharts/charts/compare/jellyfin-11.0.44...jellyfin-11.0.45) (2022-11-05) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major ([#4308](https://github.com/truecharts/charts/issues/4308)) + +## [jellyfin-11.0.44](https://github.com/truecharts/charts/compare/jellyfin-11.0.43...jellyfin-11.0.44) (2022-11-02) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major ([#4261](https://github.com/truecharts/charts/issues/4261)) +- update docker general non-major ([#4280](https://github.com/truecharts/charts/issues/4280)) + +## [jellyfin-11.0.43](https://github.com/truecharts/charts/compare/jellyfin-11.0.42...jellyfin-11.0.43) (2022-10-29) + +### Chore + +- Auto-update chart README [skip ci] +- update docker general non-major ([#4230](https://github.com/truecharts/charts/issues/4230)) + +## [jellyfin-11.0.42](https://github.com/truecharts/charts/compare/jellyfin-11.0.41...jellyfin-11.0.42) (2022-10-25) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major ([#4182](https://github.com/truecharts/charts/issues/4182)) + +## [jellyfin-11.0.41](https://github.com/truecharts/charts/compare/jellyfin-11.0.40...jellyfin-11.0.41) (2022-10-19) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major ([#4122](https://github.com/truecharts/charts/issues/4122)) + +## [jellyfin-11.0.40](https://github.com/truecharts/charts/compare/jellyfin-11.0.39...jellyfin-11.0.40) (2022-10-12) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major ([#4071](https://github.com/truecharts/charts/issues/4071)) + +## [jellyfin-11.0.39](https://github.com/truecharts/charts/compare/jellyfin-11.0.38...jellyfin-11.0.39) (2022-10-07) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major + +## [jellyfin-11.0.39](https://github.com/truecharts/charts/compare/jellyfin-11.0.38...jellyfin-11.0.39) (2022-10-07) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major + +## [jellyfin-11.0.38](https://github.com/truecharts/charts/compare/jellyfin-11.0.37...jellyfin-11.0.38) (2022-10-05) + +### Chore + +- Auto-update chart README [skip ci] +- split addons in smaller templates ([#3979](https://github.com/truecharts/charts/issues/3979)) +- update helm general non-major + +## [jellyfin-11.0.37](https://github.com/truecharts/charts/compare/jellyfin-11.0.36...jellyfin-11.0.37) (2022-09-27) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major ([#3918](https://github.com/truecharts/charts/issues/3918)) + +## [jellyfin-11.0.36](https://github.com/truecharts/charts/compare/jellyfin-11.0.35...jellyfin-11.0.36) (2022-09-26) + +### Chore + +- Auto-update chart README [skip ci] +- update docker general non-major ([#3906](https://github.com/truecharts/charts/issues/3906)) + +## [jellyfin-11.0.35](https://github.com/truecharts/charts/compare/jellyfin-11.0.34...jellyfin-11.0.35) (2022-09-25) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major ([#3898](https://github.com/truecharts/charts/issues/3898)) + +## [jellyfin-11.0.34](https://github.com/truecharts/charts/compare/jellyfin-11.0.33...jellyfin-11.0.34) (2022-09-22) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- refactor Services SCALE GUI +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [jellyfin-11.0.34](https://github.com/truecharts/charts/compare/jellyfin-11.0.33...jellyfin-11.0.34) (2022-09-21) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- refactor Services SCALE GUI +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [jellyfin-11.0.34](https://github.com/truecharts/charts/compare/jellyfin-11.0.33...jellyfin-11.0.34) (2022-09-21) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- refactor Services SCALE GUI +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [jellyfin-11.0.34](https://github.com/truecharts/charts/compare/jellyfin-11.0.33...jellyfin-11.0.34) (2022-09-20) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- refactor Services SCALE GUI +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [jellyfin-11.0.34](https://github.com/truecharts/charts/compare/jellyfin-11.0.33...jellyfin-11.0.34) (2022-09-20) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- refactor Services SCALE GUI +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [jellyfin-11.0.34](https://github.com/truecharts/charts/compare/jellyfin-11.0.33...jellyfin-11.0.34) (2022-09-19) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- refactor Services SCALE GUI +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [jellyfin-11.0.34](https://github.com/truecharts/charts/compare/jellyfin-11.0.33...jellyfin-11.0.34) (2022-09-19) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- refactor Services SCALE GUI +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [jellyfin-11.0.34](https://github.com/truecharts/charts/compare/jellyfin-11.0.33...jellyfin-11.0.34) (2022-09-19) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- refactor Services SCALE GUI +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [jellyfin-11.0.34](https://github.com/truecharts/charts/compare/jellyfin-11.0.33...jellyfin-11.0.34) (2022-09-17) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- refactor Services SCALE GUI +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [jellyfin-11.0.34](https://github.com/truecharts/charts/compare/jellyfin-11.0.33...jellyfin-11.0.34) (2022-09-18) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [jellyfin-11.0.34](https://github.com/truecharts/charts/compare/jellyfin-11.0.33...jellyfin-11.0.34) (2022-09-16) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [jellyfin-11.0.34](https://github.com/truecharts/charts/compare/jellyfin-11.0.33...jellyfin-11.0.34) (2022-09-16) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [jellyfin-11.0.34](https://github.com/truecharts/charts/compare/jellyfin-11.0.33...jellyfin-11.0.34) (2022-09-15) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [jellyfin-11.0.34](https://github.com/truecharts/charts/compare/jellyfin-11.0.33...jellyfin-11.0.34) (2022-09-15) + +### Chore + +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [jellyfin-11.0.33](https://github.com/truecharts/charts/compare/jellyfin-11.0.32...jellyfin-11.0.33) (2022-09-12) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major ([#3711](https://github.com/truecharts/charts/issues/3711)) + +## [jellyfin-11.0.33](https://github.com/truecharts/charts/compare/jellyfin-11.0.32...jellyfin-11.0.33) (2022-09-12) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major ([#3711](https://github.com/truecharts/charts/issues/3711)) + +## [jellyfin-11.0.33](https://github.com/truecharts/charts/compare/jellyfin-11.0.32...jellyfin-11.0.33) (2022-09-11) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major ([#3711](https://github.com/truecharts/charts/issues/3711)) + +## [jellyfin-11.0.33](https://github.com/truecharts/charts/compare/jellyfin-11.0.32...jellyfin-11.0.33) (2022-09-11) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major ([#3711](https://github.com/truecharts/charts/issues/3711)) + +## [jellyfin-11.0.33](https://github.com/truecharts/charts/compare/jellyfin-11.0.32...jellyfin-11.0.33) (2022-09-11) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major ([#3711](https://github.com/truecharts/charts/issues/3711)) + +## [jellyfin-11.0.33](https://github.com/truecharts/charts/compare/jellyfin-11.0.32...jellyfin-11.0.33) (2022-09-11) + +### Chore + +- update helm general non-major ([#3711](https://github.com/truecharts/charts/issues/3711)) + +## [jellyfin-11.0.32](https://github.com/truecharts/charts/compare/jellyfin-11.0.30...jellyfin-11.0.32) (2022-08-30) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major ([#3639](https://github.com/truecharts/charts/issues/3639)) +- update helm chart common to v10.5.5 ([#3626](https://github.com/truecharts/charts/issues/3626)) + +## [jellyfin-11.0.31](https://github.com/truecharts/charts/compare/jellyfin-11.0.30...jellyfin-11.0.31) (2022-08-30) + +### Chore + +- update helm chart common to v10.5.5 ([#3626](https://github.com/truecharts/charts/issues/3626)) + +## [jellyfin-11.0.30](https://github.com/truecharts/charts/compare/jellyfin-11.0.29...jellyfin-11.0.30) (2022-08-29) + +### Chore + +- update helm general non-major ([#3619](https://github.com/truecharts/charts/issues/3619)) + +## [jellyfin-11.0.29](https://github.com/truecharts/charts/compare/jellyfin-11.0.28...jellyfin-11.0.29) (2022-08-23) + +### Chore + +- update helm general non-major helm releases ([#3545](https://github.com/truecharts/charts/issues/3545)) + +## [jellyfin-11.0.28](https://github.com/truecharts/charts/compare/jellyfin-11.0.27...jellyfin-11.0.28) (2022-08-17) + +### Chore + +- update docker general non-major ([#3478](https://github.com/truecharts/charts/issues/3478)) + +## [jellyfin-11.0.27](https://github.com/truecharts/charts/compare/jellyfin-11.0.26...jellyfin-11.0.27) (2022-08-12) + +### Chore + +- add documentation checkbox/section to all SCALE Apps +- update helm general non-major helm releases ([#3456](https://github.com/truecharts/charts/issues/3456)) + +### Fix + +- move extraArgs from .Values.controller to .Values ([#3447](https://github.com/truecharts/charts/issues/3447)) + +## [jellyfin-11.0.26](https://github.com/truecharts/charts/compare/jellyfin-11.0.25...jellyfin-11.0.26) (2022-08-09) + +### Chore + +- update docker general non-major ([#3377](https://github.com/truecharts/charts/issues/3377)) + +## [jellyfin-11.0.25](https://github.com/truecharts/charts/compare/jellyfin-11.0.24...jellyfin-11.0.25) (2022-08-08) + +### Chore + +- update helm general non-major helm releases ([#3376](https://github.com/truecharts/charts/issues/3376)) +- replace questions parts with templates ([#3402](https://github.com/truecharts/charts/issues/3402)) + +## [jellyfin-11.0.24](https://github.com/truecharts/apps/compare/jellyfin-11.0.23...jellyfin-11.0.24) (2022-07-26) + +### Chore + +- update home links ([#3291](https://github.com/truecharts/apps/issues/3291)) +- update helm general non-major helm releases ([#3302](https://github.com/truecharts/apps/issues/3302)) + +## [jellyfin-11.0.23](https://github.com/truecharts/apps/compare/jellyfin-11.0.22...jellyfin-11.0.23) (2022-07-25) + +### Chore + +- Auto-update chart README [skip ci] +- update docker general non-major ([#3295](https://github.com/truecharts/apps/issues/3295)) + +## [jellyfin-11.0.23](https://github.com/truecharts/apps/compare/jellyfin-11.0.22...jellyfin-11.0.23) (2022-07-25) + +### Chore + +- update docker general non-major ([#3295](https://github.com/truecharts/apps/issues/3295)) + +## [jellyfin-11.0.22](https://github.com/truecharts/apps/compare/jellyfin-11.0.21...jellyfin-11.0.22) (2022-07-23) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major helm releases ([#3280](https://github.com/truecharts/apps/issues/3280)) + +## [jellyfin-11.0.22](https://github.com/truecharts/apps/compare/jellyfin-11.0.21...jellyfin-11.0.22) (2022-07-23) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major helm releases ([#3280](https://github.com/truecharts/apps/issues/3280)) + +## [jellyfin-11.0.22](https://github.com/truecharts/apps/compare/jellyfin-11.0.21...jellyfin-11.0.22) (2022-07-23) + +### Chore + +- update helm general non-major helm releases ([#3280](https://github.com/truecharts/apps/issues/3280)) + +## [jellyfin-11.0.21](https://github.com/truecharts/apps/compare/jellyfin-11.0.19...jellyfin-11.0.21) (2022-07-22) + +### Chore + +- Bump all charts to generate config and container references due to huge increase of repository +- update helm general non-major helm releases ([#3268](https://github.com/truecharts/apps/issues/3268)) + +## [jellyfin-11.0.19](https://github.com/truecharts/apps/compare/jellyfin-11.0.18...jellyfin-11.0.19) (2022-07-19) + +### Chore + +- Update Readme and Description on SCALE + +## [jellyfin-11.0.18](https://github.com/truecharts/apps/compare/jellyfin-11.0.17...jellyfin-11.0.18) (2022-07-14) + +### Fix + +- regenerate catalog and update template + +## [jellyfin-11.0.17](https://github.com/truecharts/apps/compare/jellyfin-11.0.15...jellyfin-11.0.17) (2022-07-14) + +### Fix + +- bump to ensure .helmignore is present on all Charts + +## [jellyfin-11.0.15](https://github.com/truecharts/apps/compare/jellyfin-11.0.13...jellyfin-11.0.15) (2022-07-12) + +### Chore + +- update icons ([#3156](https://github.com/truecharts/apps/issues/3156)) +- bump to cleanup old docs and use correct icon urls + +## [jellyfin-11.0.13](https://github.com/truecharts/apps/compare/jellyfin-11.0.12...jellyfin-11.0.13) (2022-07-12) + +### Chore + +- bump to regenerate documentation + + + +### [jellyfin-11.0.12](https://github.com/truecharts/apps/compare/jellyfin-11.0.11...jellyfin-11.0.12) (2022-07-12) + +#### Chore + +- update helm general non-major helm releases ([#3147](https://github.com/truecharts/apps/issues/3147)) + + + +### [jellyfin-11.0.11](https://github.com/truecharts/apps/compare/jellyfin-11.0.10...jellyfin-11.0.11) (2022-07-11) + +#### Chore + +- move icons into the apps folder ([#3139](https://github.com/truecharts/apps/issues/3139)) + + + +### [jellyfin-11.0.10](https://github.com/truecharts/apps/compare/jellyfin-11.0.9...jellyfin-11.0.10) (2022-07-09) + +#### Chore + +- update helm general non-major helm releases ([#3113](https://github.com/truecharts/apps/issues/3113)) + + + +### [jellyfin-11.0.9](https://github.com/truecharts/apps/compare/jellyfin-11.0.8...jellyfin-11.0.9) (2022-07-04) + +#### Chore + +- update helm general non-major helm releases ([#3066](https://github.com/truecharts/apps/issues/3066)) + + + +### [jellyfin-11.0.8](https://github.com/truecharts/apps/compare/jellyfin-11.0.7...jellyfin-11.0.8) (2022-06-27) + +#### Chore + +- update docker general non-major ([#2999](https://github.com/truecharts/apps/issues/2999)) + + + +### [jellyfin-11.0.7](https://github.com/truecharts/apps/compare/jellyfin-11.0.6...jellyfin-11.0.7) (2022-06-25) + +#### Chore + +- update helm general non-major helm releases ([#2977](https://github.com/truecharts/apps/issues/2977)) + + + +### [jellyfin-11.0.6](https://github.com/truecharts/apps/compare/jellyfin-11.0.5...jellyfin-11.0.6) (2022-06-22) + +#### Chore + +- update helm general non-major helm releases ([#2948](https://github.com/truecharts/apps/issues/2948)) + + + +### [jellyfin-11.0.5](https://github.com/truecharts/apps/compare/jellyfin-11.0.4...jellyfin-11.0.5) (2022-06-21) + +#### Chore + +- update helm general non-major helm releases ([#2943](https://github.com/truecharts/apps/issues/2943)) + + + +### [jellyfin-11.0.4](https://github.com/truecharts/apps/compare/jellyfin-11.0.3...jellyfin-11.0.4) (2022-06-14) + +#### Chore + +- update helm general non-major helm releases ([#2886](https://github.com/truecharts/apps/issues/2886)) + + + +### [jellyfin-11.0.3](https://github.com/truecharts/apps/compare/jellyfin-11.0.2...jellyfin-11.0.3) (2022-06-11) + +#### Chore + +- update helm general non-major helm releases ([#2854](https://github.com/truecharts/apps/issues/2854)) +- update docker general non-major ([#2856](https://github.com/truecharts/apps/issues/2856)) + + + +### [jellyfin-11.0.2](https://github.com/truecharts/apps/compare/jellyfin-11.0.1...jellyfin-11.0.2) (2022-06-07) + +#### Fix + +- hotpatch to disable HPA and networkPolicy in SCALE interface, due to incompatible format. + + + +### [jellyfin-11.0.1](https://github.com/truecharts/apps/compare/jellyfin-10.0.19...jellyfin-11.0.1) (2022-06-07) + +#### Chore + +- Auto-update chart README [skip ci] +- sync all apps persistence configuration and always default to PVC + +#### Fix + +- remove malfunctioning SCALE migration script + +#### Refactor + +- BREAKING CHANGE ([#2836](https://github.com/truecharts/apps/issues/2836)) + + + +### [jellyfin-11.0.0](https://github.com/truecharts/apps/compare/jellyfin-10.0.19...jellyfin-11.0.0) (2022-06-07) + +#### Chore + +- sync all apps persistence configuration and always default to PVC + +#### Refactor + +- BREAKING CHANGE ([#2836](https://github.com/truecharts/apps/issues/2836)) + + + +### [jellyfin-10.0.19](https://github.com/truecharts/apps/compare/jellyfin-10.0.18...jellyfin-10.0.19) (2022-05-31) + +#### Chore + +- update helm general non-major helm releases ([#2803](https://github.com/truecharts/apps/issues/2803)) + + + +### [jellyfin-10.0.18](https://github.com/truecharts/apps/compare/jellyfin-10.0.17...jellyfin-10.0.18) (2022-05-26) + +#### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major helm releases ([#2759](https://github.com/truecharts/apps/issues/2759)) + + + +### [jellyfin-10.0.18](https://github.com/truecharts/apps/compare/jellyfin-10.0.17...jellyfin-10.0.18) (2022-05-26) + +#### Chore + +- update helm general non-major helm releases ([#2759](https://github.com/truecharts/apps/issues/2759)) + + + +### [jellyfin-10.0.17](https://github.com/truecharts/apps/compare/jellyfin-10.0.16...jellyfin-10.0.17) (2022-05-24) + +#### Chore + +- update helm general non-major helm releases + + + +### [jellyfin-10.0.16](https://github.com/truecharts/apps/compare/jellyfin-10.0.15...jellyfin-10.0.16) (2022-05-17) + +#### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major helm releases + + + +### [jellyfin-10.0.16](https://github.com/truecharts/apps/compare/jellyfin-10.0.15...jellyfin-10.0.16) (2022-05-17) + +#### Chore + +- update helm general non-major helm releases + + + +### [jellyfin-10.0.15](https://github.com/truecharts/apps/compare/jellyfin-10.0.14...jellyfin-10.0.15) (2022-05-17) + +#### Chore + +- update helm general non-major helm releases + + + +### [jellyfin-10.0.14](https://github.com/truecharts/apps/compare/jellyfin-10.0.13...jellyfin-10.0.14) (2022-05-10) + +#### Chore + +- update helm general non-major helm releases ([#2649](https://github.com/truecharts/apps/issues/2649)) + + + +### [jellyfin-10.0.13](https://github.com/truecharts/apps/compare/jellyfin-10.0.12...jellyfin-10.0.13) (2022-05-05) + +#### Chore + +- update helm general non-major helm releases ([#2612](https://github.com/truecharts/apps/issues/2612)) + + + +### [jellyfin-10.0.12](https://github.com/truecharts/apps/compare/jellyfin-10.0.11...jellyfin-10.0.12) (2022-04-26) + +#### Chore + +- update helm general non-major helm releases ([#2573](https://github.com/truecharts/apps/issues/2573)) + + + +### [jellyfin-10.0.11](https://github.com/truecharts/apps/compare/jellyfin-10.0.10...jellyfin-10.0.11) (2022-04-20) + +#### Chore + +- add missing quote on description ([#2515](https://github.com/truecharts/apps/issues/2515)) +- update helm general non-major helm releases ([#2524](https://github.com/truecharts/apps/issues/2524)) + + + +### [jellyfin-10.0.10](https://github.com/truecharts/apps/compare/jellyfin-10.0.9...jellyfin-10.0.10) (2022-04-12) + +#### Chore + +- update helm general non-major helm releases ([#2480](https://github.com/truecharts/apps/issues/2480)) + + + +### [jellyfin-10.0.9](https://github.com/truecharts/apps/compare/jellyfin-10.0.8...jellyfin-10.0.9) (2022-04-03) + +#### Chore + +- update helm general non-major helm releases ([#2410](https://github.com/truecharts/apps/issues/2410)) + + + +### [jellyfin-10.0.8](https://github.com/truecharts/apps/compare/jellyfin-10.0.7...jellyfin-10.0.8) (2022-03-31) + +#### Chore + +- update helm general non-major helm releases ([#2361](https://github.com/truecharts/apps/issues/2361)) + + + +### [jellyfin-10.0.7](https://github.com/truecharts/apps/compare/jellyfin-10.0.6...jellyfin-10.0.7) (2022-03-30) + +#### Chore + +- update helm general non-major helm releases ([#2354](https://github.com/truecharts/apps/issues/2354)) + + + +### [jellyfin-10.0.6](https://github.com/truecharts/apps/compare/jellyfin-10.0.5...jellyfin-10.0.6) (2022-03-26) + +#### Chore + +- bump all apps to trigger ci + + + +### [jellyfin-10.0.1](https://github.com/truecharts/apps/compare/jellyfin-10.0.0...jellyfin-10.0.1) (2022-03-07) + +#### Chore + +- update helm general non-major helm releases ([#2111](https://github.com/truecharts/apps/issues/2111)) +- Remove `-icon` string from icon png's ([#2040](https://github.com/truecharts/apps/issues/2040)) + + + +### [jellyfin-10.0.0](https://github.com/truecharts/apps/compare/jellyfin-9.0.44...jellyfin-10.0.0) (2022-03-03) + +#### Chore + +- remove fixed env from questions.yaml +- update helm general major helm releases ([#2021](https://github.com/truecharts/apps/issues/2021)) + +#### Fix + +- BREAKING CHANGE Move some env-vars outside of env section ([#2010](https://github.com/truecharts/apps/issues/2010)) + + + +### [jellyfin-9.0.44](https://github.com/truecharts/apps/compare/jellyfin-9.0.43...jellyfin-9.0.44) (2022-03-02) + +#### Chore + +- rename `web_portal` to `open` ([#1957](https://github.com/truecharts/apps/issues/1957)) +- update helm general non-major helm releases ([#1999](https://github.com/truecharts/apps/issues/1999)) + + + +### [jellyfin-9.0.43](https://github.com/truecharts/apps/compare/jellyfin-9.0.42...jellyfin-9.0.43) (2022-02-21) + +#### Chore + +- update helm general non-major helm releases ([#1927](https://github.com/truecharts/apps/issues/1927)) + + + +### [jellyfin-9.0.42](https://github.com/truecharts/apps/compare/jellyfin-9.0.41...jellyfin-9.0.42) (2022-02-15) + +#### Chore + +- update helm general non-major helm releases ([#1901](https://github.com/truecharts/apps/issues/1901)) + + + +### [jellyfin-9.0.41](https://github.com/truecharts/apps/compare/jellyfin-9.0.40...jellyfin-9.0.41) (2022-02-08) + +#### Chore + +- update helm general non-major helm releases ([#1871](https://github.com/truecharts/apps/issues/1871)) + + + +### [jellyfin-9.0.40](https://github.com/truecharts/apps/compare/jellyfin-9.0.39...jellyfin-9.0.40) (2022-02-06) + +#### Chore + +- update helm chart common to v8.15.0 ([#1859](https://github.com/truecharts/apps/issues/1859)) + + + +### [jellyfin-9.0.39](https://github.com/truecharts/apps/compare/jellyfin-9.0.38...jellyfin-9.0.39) (2022-02-06) + +#### Chore + +- Mount cache to emptyDir and add PublishedServerURL var ([#1853](https://github.com/truecharts/apps/issues/1853)) + + + +### [jellyfin-9.0.38](https://github.com/truecharts/apps/compare/jellyfin-9.0.37...jellyfin-9.0.38) (2022-02-05) + +#### Chore + +- update helm general non-major helm releases ([#1852](https://github.com/truecharts/apps/issues/1852)) + + + +### [jellyfin-9.0.37](https://github.com/truecharts/apps/compare/jellyfin-9.0.36...jellyfin-9.0.37) (2022-02-02) + +#### Chore + +- update helm general non-major helm releases ([#1828](https://github.com/truecharts/apps/issues/1828)) + + + +### [jellyfin-9.0.36](https://github.com/truecharts/apps/compare/jellyfin-9.0.35...jellyfin-9.0.36) (2022-01-25) + +#### Chore + +- update helm general non-major helm releases ([#1791](https://github.com/truecharts/apps/issues/1791)) + + + +### [jellyfin-9.0.35](https://github.com/truecharts/apps/compare/jellyfin-9.0.34...jellyfin-9.0.35) (2022-01-22) + +#### Chore + +- update helm general non-major helm releases ([#1766](https://github.com/truecharts/apps/issues/1766)) + + + +### [jellyfin-9.0.34](https://github.com/truecharts/apps/compare/jellyfin-9.0.33...jellyfin-9.0.34) (2022-01-21) + +#### Chore + +- update helm general non-major helm releases ([#1759](https://github.com/truecharts/apps/issues/1759)) + +#### Fix + +- set additional_attrs: true on all dicts ([#1750](https://github.com/truecharts/apps/issues/1750)) + + + +### [jellyfin-9.0.33](https://github.com/truecharts/apps/compare/jellyfin-9.0.32...jellyfin-9.0.33) (2022-01-18) + +#### Chore + +- update helm general non-major helm releases ([#1732](https://github.com/truecharts/apps/issues/1732)) + + + +### [jellyfin-9.0.32](https://github.com/truecharts/apps/compare/jellyfin-9.0.31...jellyfin-9.0.32) (2022-01-13) + +#### Chore + +- update helm general non-major helm releases ([#1712](https://github.com/truecharts/apps/issues/1712)) + +#### Feat + +- expose capabilities in GUI ([#1709](https://github.com/truecharts/apps/issues/1709)) + + + +### [jellyfin-9.0.31](https://github.com/truecharts/apps/compare/jellyfin-9.0.30...jellyfin-9.0.31) (2022-01-12) + +#### Chore + +- update helm general non-major helm releases ([#1704](https://github.com/truecharts/apps/issues/1704)) + + + +### [jellyfin-9.0.30](https://github.com/truecharts/apps/compare/jellyfin-9.0.29...jellyfin-9.0.30) (2022-01-11) + +#### Chore + +- update helm general non-major helm releases ([#1693](https://github.com/truecharts/apps/issues/1693)) + + + +### [jellyfin-9.0.29](https://github.com/truecharts/apps/compare/jellyfin-9.0.28...jellyfin-9.0.29) (2022-01-04) + +#### Chore + +- update helm general non-major helm releases + + + +### [jellyfin-9.0.28](https://github.com/truecharts/apps/compare/jellyfin-9.0.27...jellyfin-9.0.28) (2021-12-28) + +#### Chore + +- update helm general non-major helm releases ([#1623](https://github.com/truecharts/apps/issues/1623)) + + + +### [jellyfin-9.0.27](https://github.com/truecharts/apps/compare/jellyfin-9.0.26...jellyfin-9.0.27) (2021-12-21) + +#### Chore + +- update helm general non-major helm releases ([#1596](https://github.com/truecharts/apps/issues/1596)) + + + +### [jellyfin-9.0.26](https://github.com/truecharts/apps/compare/jellyfin-9.0.25...jellyfin-9.0.26) (2021-12-19) + +#### Chore + +- Last patch bump before RC2 branch-off +- remove `editable: true` as this is the default ([#1576](https://github.com/truecharts/apps/issues/1576)) + + + +### [jellyfin-9.0.25](https://github.com/truecharts/apps/compare/jellyfin-9.0.24...jellyfin-9.0.25) (2021-12-19) + +#### Chore + +- completely remove mountPath reference from GUI ([#1572](https://github.com/truecharts/apps/issues/1572)) +- update helm general non-major helm releases ([#1571](https://github.com/truecharts/apps/issues/1571)) + + + +### [jellyfin-9.0.24](https://github.com/truecharts/apps/compare/jellyfin-9.0.23...jellyfin-9.0.24) (2021-12-18) + +#### Chore + +- cleanup questions by removing hidden dicts ([#1558](https://github.com/truecharts/apps/issues/1558)) +- App-Icon Organization ([#1539](https://github.com/truecharts/apps/issues/1539)) + + + +### [jellyfin-9.0.23](https://github.com/truecharts/apps/compare/jellyfin-9.0.22...jellyfin-9.0.23) (2021-12-14) + +#### Chore + +- update helm general non-major helm releases ([#1535](https://github.com/truecharts/apps/issues/1535)) + + + +### [jellyfin-9.0.22](https://github.com/truecharts/apps/compare/jellyfin-9.0.21...jellyfin-9.0.22) (2021-12-13) + +#### Chore + +- move incubator apps to stable and bump everything + + + +### [jellyfin-9.0.21](https://github.com/truecharts/apps/compare/jellyfin-9.0.20...jellyfin-9.0.21) (2021-12-11) + +#### Chore + +- update general helm non-major helm releases ([#1509](https://github.com/truecharts/apps/issues/1509)) + + + +### [jellyfin-9.0.20](https://github.com/truecharts/apps/compare/jellyfin-9.0.19...jellyfin-9.0.20) (2021-12-11) + +#### Chore + +- update non-major docker ([#1507](https://github.com/truecharts/apps/issues/1507)) + + + +### [jellyfin-9.0.19](https://github.com/truecharts/apps/compare/jellyfin-9.0.18...jellyfin-9.0.19) (2021-12-07) + +#### Chore + +- update non-major deps helm releases ([#1481](https://github.com/truecharts/apps/issues/1481)) + + + +### jellyfin-9.0.18 (2021-12-05) + +#### Chore + +- bump apps to generate security page +- move all container references to TCCR ([#1448](https://github.com/truecharts/apps/issues/1448)) +- update non-major deps helm releases ([#1471](https://github.com/truecharts/apps/issues/1471)) +- update non-major deps helm releases ([#1468](https://github.com/truecharts/apps/issues/1468)) +- update non-major deps helm releases ([#1453](https://github.com/truecharts/apps/issues/1453)) +- update non-major ([#1449](https://github.com/truecharts/apps/issues/1449)) +- update non-major deps helm releases ([#1432](https://github.com/truecharts/apps/issues/1432)) + +#### Fix + +- fix typo in theme selection ([#1428](https://github.com/truecharts/apps/issues/1428)) + + + +### [jellyfin-9.0.17](https://github.com/truecharts/apps/compare/jellyfin-9.0.16...jellyfin-9.0.17) (2021-12-05) + +#### Chore + +- update non-major deps helm releases ([#1468](https://github.com/truecharts/apps/issues/1468)) + + + +### [jellyfin-9.0.16](https://github.com/truecharts/apps/compare/jellyfin-9.0.15...jellyfin-9.0.16) (2021-12-04) + +#### Chore + +- bump apps to generate security page + + + +### [jellyfin-9.0.15](https://github.com/truecharts/apps/compare/jellyfin-9.0.14...jellyfin-9.0.15) (2021-12-04) + +#### Chore + +- update non-major deps helm releases ([#1453](https://github.com/truecharts/apps/issues/1453)) + + + +### [jellyfin-9.0.14](https://github.com/truecharts/apps/compare/jellyfin-9.0.13...jellyfin-9.0.14) (2021-12-03) + +#### Chore + +- move all container references to TCCR ([#1448](https://github.com/truecharts/apps/issues/1448)) +- update non-major ([#1449](https://github.com/truecharts/apps/issues/1449)) + + + +### [jellyfin-9.0.13](https://github.com/truecharts/apps/compare/jellyfin-9.0.12...jellyfin-9.0.13) (2021-11-30) + +#### Chore + +- update non-major deps helm releases ([#1432](https://github.com/truecharts/apps/issues/1432)) + + + +### [jellyfin-9.0.12](https://github.com/truecharts/apps/compare/jellyfin-9.0.11...jellyfin-9.0.12) (2021-11-23) + +#### Chore + +- update non-major deps helm releases ([#1386](https://github.com/truecharts/apps/issues/1386)) + + + +### [jellyfin-9.0.11](https://github.com/truecharts/apps/compare/jellyfin-9.0.10...jellyfin-9.0.11) (2021-11-22) + +#### Chore + +- update non-major deps helm releases ([#1383](https://github.com/truecharts/apps/issues/1383)) + + + +### [jellyfin-9.0.10](https://github.com/truecharts/apps/compare/jellyfin-9.0.9...jellyfin-9.0.10) (2021-11-16) + +#### Chore + +- update non-major deps helm releases ([#1345](https://github.com/truecharts/apps/issues/1345)) + + + +### [jellyfin-9.0.9](https://github.com/truecharts/apps/compare/jellyfin-9.0.8...jellyfin-9.0.9) (2021-11-15) + +#### Chore + +- persistence cleanup and small bugfixes ([#1329](https://github.com/truecharts/apps/issues/1329)) +- update non-major deps helm releases ([#1338](https://github.com/truecharts/apps/issues/1338)) + + + +### [jellyfin-9.0.8](https://github.com/truecharts/apps/compare/jellyfin-9.0.7...jellyfin-9.0.8) (2021-11-14) + +#### Chore + +- fixes around the GUI refactor ([#1316](https://github.com/truecharts/apps/issues/1316)) +- move port above advanced in GUI ([#1326](https://github.com/truecharts/apps/issues/1326)) +- clean up Chart.yaml ([#1322](https://github.com/truecharts/apps/issues/1322)) +- update non-major deps helm releases ([#1328](https://github.com/truecharts/apps/issues/1328)) + +#### Fix + +- split udp and tcp ports ([#1321](https://github.com/truecharts/apps/issues/1321)) +- Allow spaces in paths ([#1306](https://github.com/truecharts/apps/issues/1306)) + + + +### [jellyfin-9.0.7](https://github.com/truecharts/apps/compare/jellyfin-9.0.6...jellyfin-9.0.7) (2021-11-09) + +#### Chore + +- update non-major deps helm releases ([#1297](https://github.com/truecharts/apps/issues/1297)) + + + +### [jellyfin-9.0.6](https://github.com/truecharts/apps/compare/jellyfin-9.0.5...jellyfin-9.0.6) (2021-11-07) + +#### Chore + +- update non-major deps helm releases ([#1295](https://github.com/truecharts/apps/issues/1295)) + + + +### [jellyfin-9.0.5](https://github.com/truecharts/apps/compare/jellyfin-9.0.4...jellyfin-9.0.5) (2021-11-07) + +#### Chore + +- update non-major deps helm releases ([#1291](https://github.com/truecharts/apps/issues/1291)) + +#### Chore + +- Simplify GUI for deployment, persistence and securityContext ([#1289](https://github.com/truecharts/apps/issues/1289)) + +#### Feat + +- Simplify the Services GUI ([#1290](https://github.com/truecharts/apps/issues/1290)) + + + +### [jellyfin-9.0.4](https://github.com/truecharts/apps/compare/jellyfin-9.0.3...jellyfin-9.0.4) (2021-11-02) + +#### Chore + +- update non-major deps helm releases ([#1267](https://github.com/truecharts/apps/issues/1267)) + + + +### [jellyfin-9.0.3](https://github.com/truecharts/apps/compare/jellyfin-9.0.2...jellyfin-9.0.3) (2021-11-01) + +#### Chore + +- update non-major deps helm releases ([#1264](https://github.com/truecharts/apps/issues/1264)) + + + +### [jellyfin-9.0.2](https://github.com/truecharts/apps/compare/jellyfin-9.0.1...jellyfin-9.0.2) (2021-10-26) + +#### Chore + +- update non-major deps helm releases ([#1245](https://github.com/truecharts/apps/issues/1245)) + + + +### [jellyfin-9.0.1](https://github.com/truecharts/apps/compare/jellyfin-9.0.0...jellyfin-9.0.1) (2021-10-26) + +#### Chore + +- update helm chart common to v8.3.15 ([#1240](https://github.com/truecharts/apps/issues/1240)) + + + +### [jellyfin-9.0.0](https://github.com/truecharts/apps/compare/jellyfin-8.0.16...jellyfin-9.0.0) (2021-10-25) + +#### Chore + +- Adapt for TrueNAS SCALE RC1 + + + +### [jellyfin-8.0.16](https://github.com/truecharts/apps/compare/jellyfin-8.0.15...jellyfin-8.0.16) (2021-10-20) + +#### Chore + +- bump apps, remove duplicates and move incubator to stable for RC1 + + + +### [jellyfin-8.0.13](https://github.com/truecharts/apps/compare/jellyfin-8.0.12...jellyfin-8.0.13) (2021-10-20) + +#### Chore + +- bump versions to rerelease and fix icons + + + +### [jellyfin-8.0.12](https://github.com/truecharts/apps/compare/jellyfin-8.0.11...jellyfin-8.0.12) (2021-10-19) + +#### Change + +- Project-Eclipse 3, Automatically generate item.yaml ([#1178](https://github.com/truecharts/apps/issues/1178)) + +#### Chore + +- Project-Eclipse 5, move app-readme to automatic generation script ([#1181](https://github.com/truecharts/apps/issues/1181)) +- Project-Eclipse part 2, adapting and cleaning changelog ([#1173](https://github.com/truecharts/apps/issues/1173)) +- update helm chart common to v8.3.13 ([#1184](https://github.com/truecharts/apps/issues/1184)) + +#### Feat + +- Project-Eclipse 4, Add App grading annotations to Chart.yaml ([#1180](https://github.com/truecharts/apps/issues/1180)) + +#### Refactor + +- Project Eclipse Part 6, move questions.yaml to root App folder ([#1182](https://github.com/truecharts/apps/issues/1182)) + + + +### [jellyfin-8.0.11](https://github.com/truecharts/apps/compare/jellyfin-8.0.10...jellyfin-8.0.11) (2021-10-19) + +#### Fix + +- fix previous SCALE bugfix not correctly being applied + + + +### [jellyfin-8.0.10](https://github.com/truecharts/apps/compare/jellyfin-8.0.9...jellyfin-8.0.10) (2021-10-19) + +#### Fix + +- Solve issues regarding ix_values.yaml not containing the image and tag definitions. ([#1176](https://github.com/truecharts/apps/issues/1176)) + + + +### [jellyfin-8.0.9](https://github.com/truecharts/apps/compare/jellyfin-8.0.8...jellyfin-8.0.9) (2021-10-18) + +#### Chore + +- Add description on persistence ([#1172](https://github.com/truecharts/apps/issues/1172)) + +#### Refactor + +- Project Eclipse - part 1 - remove ix_values.yaml ([#1168](https://github.com/truecharts/apps/issues/1168)) + + + +### [jellyfin-8.0.8](https://github.com/truecharts/apps/compare/jellyfin-8.0.7...jellyfin-8.0.8) (2021-10-17) + +#### Chore + +- update helm chart common to v8.3.10 ([#1160](https://github.com/truecharts/apps/issues/1160)) + +#### Fix + +- force users using correct / prefix for mounPath ([#1156](https://github.com/truecharts/apps/issues/1156)) + + + +### [jellyfin-8.0.7](https://github.com/truecharts/apps/compare/jellyfin-8.0.6...jellyfin-8.0.7) (2021-10-13) + +#### Chore + +- update non-major deps helm releases ([#1133](https://github.com/truecharts/apps/issues/1133)) + + + +### [jellyfin-8.0.6](https://github.com/truecharts/apps/compare/jellyfin-8.0.5...jellyfin-8.0.6) (2021-10-12) + +#### Chore + +- update non-major deps helm releases ([#1126](https://github.com/truecharts/apps/issues/1126)) + + + +### [jellyfin-8.0.5](https://github.com/truecharts/apps/compare/jellyfin-8.0.4...jellyfin-8.0.5) (2021-10-12) + +#### Chore + +- update non-major deps helm releases ([#1123](https://github.com/truecharts/apps/issues/1123)) + + + +### [jellyfin-8.0.4](https://github.com/truecharts/apps/compare/jellyfin-8.0.3...jellyfin-8.0.4) (2021-10-05) + +#### Chore + +- update non-major deps helm releases ([#1099](https://github.com/truecharts/apps/issues/1099)) + + + +### [jellyfin-8.0.3](https://github.com/truecharts/apps/compare/jellyfin-8.0.2...jellyfin-8.0.3) (2021-09-29) + +#### Chore + +- update helm chart common to v8.0.13 ([#1060](https://github.com/truecharts/apps/issues/1060)) + + + +### [jellyfin-8.0.1](https://github.com/truecharts/apps/compare/jellyfin-8.0.0...jellyfin-8.0.1) (2021-09-26) + + + +### [jellyfin-8.0.0](https://github.com/truecharts/apps/compare/jellyfin-7.0.2...jellyfin-8.0.0) (2021-09-26) + + + +### [jellyfin-7.0.2](https://github.com/truecharts/apps/compare/jellyfin-7.0.1...jellyfin-7.0.2) (2021-09-21) + +#### Chore + +- update non-major deps helm releases ([#1014](https://github.com/truecharts/apps/issues/1014)) + + + +### [jellyfin-7.0.1](https://github.com/truecharts/apps/compare/jellyfin-6.11.16...jellyfin-7.0.1) (2021-09-13) + +#### Chore + +- move more dockerhub containers to GHCR mirror ([#958](https://github.com/truecharts/apps/issues/958)) +- update non-major ([#962](https://github.com/truecharts/apps/issues/962)) + +#### Feat + +- add new GUI and VPN support to all Apps ([#977](https://github.com/truecharts/apps/issues/977)) +- Add VPN addon and move some config to includes ([#973](https://github.com/truecharts/apps/issues/973)) +- pin all container references to digests ([#963](https://github.com/truecharts/apps/issues/963)) +- Move some common containers to our own containers + +#### Fix + +- make sure podSecurityContext is included in both SCALE and Helm installs ([#956](https://github.com/truecharts/apps/issues/956)) + + + +## [jellyfin-6.11.16](https://github.com/truecharts/apps/compare/jellyfin-6.11.15...jellyfin-6.11.16) (2021-09-08) + +### Fix + +- repair Hyperion and some misplaced GUI elements ([#922](https://github.com/truecharts/apps/issues/922)) diff --git a/stable/jellyfin/17.2.0/Chart.yaml b/stable/jellyfin/17.2.0/Chart.yaml new file mode 100644 index 0000000..9cb1934 --- /dev/null +++ b/stable/jellyfin/17.2.0/Chart.yaml @@ -0,0 +1,39 @@ +annotations: + max_scale_version: 23.10.2 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + 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: 10.8.13 +dependencies: + - name: common + version: 17.4.2 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: Jellyfin is a Free Software Media System +home: https://truecharts.org/charts/stable/jellyfin +icon: https://truecharts.org/img/hotlink-ok/chart-icons/jellyfin.png +keywords: + - jellyfin + - plex + - emby +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: jellyfin +sources: + - https://github.com/jellyfin/jellyfin + - https://github.com/truecharts/charts/tree/master/charts/stable/jellyfin + - https://hub.docker.com/r/alpine/socat + - https://hub.docker.com/r/jellyfin/jellyfin +type: application +version: 17.2.0 diff --git a/stable/jellyfin/17.2.0/README.md b/stable/jellyfin/17.2.0/README.md new file mode 100644 index 0000000..e146166 --- /dev/null +++ b/stable/jellyfin/17.2.0/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/jellyfin) + +**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/jellyfin/17.2.0/app-readme.md b/stable/jellyfin/17.2.0/app-readme.md new file mode 100644 index 0000000..73fdb17 --- /dev/null +++ b/stable/jellyfin/17.2.0/app-readme.md @@ -0,0 +1,8 @@ +Jellyfin is a Free Software Media System + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/jellyfin](https://truecharts.org/charts/stable/jellyfin) + +--- + +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/jellyfin/17.2.0/charts/common-17.4.2.tgz b/stable/jellyfin/17.2.0/charts/common-17.4.2.tgz new file mode 100644 index 0000000000000000000000000000000000000000..31f3a104561f859f297067776ab86a1503525be4 GIT binary patch literal 100097 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 l8bLay74+E3;;+DksJU3 literal 0 HcmV?d00001 diff --git a/stable/jellyfin/17.2.0/ix_values.yaml b/stable/jellyfin/17.2.0/ix_values.yaml new file mode 100644 index 0000000..c472e59 --- /dev/null +++ b/stable/jellyfin/17.2.0/ix_values.yaml @@ -0,0 +1,98 @@ +image: + repository: docker.io/jellyfin/jellyfin + pullPolicy: IfNotPresent + tag: 10.8.13@sha256:05a9734d7e83086b957c5b7a16cbb5a60b5bb8d113ffb953e57547359dd05140 +broadcastProxyImage: + repository: docker.io/alpine/socat + pullPolicy: IfNotPresent + tag: 1.8.0.0@sha256:74e6801bf2b555d0660cbb1997c3c451af6d1bd397a4b8a8e43d8fcc85d6c473 +service: + main: + ports: + main: + port: 8096 + targetPort: 8096 + autodiscovery: + enabled: true + ports: + autodiscovery: + enabled: true + protocol: udp + port: 7359 + targetPort: 7359 +persistence: + config: + enabled: true + mountPath: "/config" + cache: + enabled: true + mountPath: "/cache" + type: "emptyDir" + transcode: + enabled: true + mountPath: "/config/transcodes" + type: "emptyDir" +portal: + open: + enabled: true +securityContext: + container: + readOnlyRootFilesystem: false +workload: + main: + podSpec: + containers: + main: + env: + JELLYFIN_PublishedServerUrl: "{{ $.Values.chartContext.appUrl }}" + broadcastproxy: + enabled: false + type: DaemonSet + podSpec: + hostNetwork: true + # Proxy doesn't seem to respect the TERM signal, so by default + # this ends up just hanging until the default grace period ends. + # This is unnecesary since this workload only proxies autodiscovery + # messages. + terminationGracePeriodSeconds: 3 + containers: + broadcastproxy: + enabled: true + primary: true + imageSelector: broadcastProxyImage + securityContext: + readOnlyRootFilesystem: true + command: ["/bin/sh"] + # Quite a lot going on here: + # - Resolve Jellyfin's autodiscovery service IP from its FQDN via getent hosts + # - Export the IP to `$TARGET_IP` + # - Check `$TARGET_IP` is not empty (so we can crash if it is - will help to detect templating errors) + # - Touch `/tmp/healty` to use with the readiness, liveness and startup probes + # - Start socat in proxy mode + # - On exit remove `/tmp/healthy` + args: + - "-c" + - 'export TARGET_IP=$(getent hosts ''{{ printf "%v-autodiscovery" (include "tc.v1.common.lib.chart.names.fullname" $) }}'' | awk ''{ print $1 }'') && [[ ! -z $TARGET_IP ]] && touch /tmp/healthy && socat UDP-LISTEN:7359,fork,reuseaddr,rcvbuf=8096 UDP4-SENDTO:${TARGET_IP}:7359,rcvbuf=8096 ; rm -rf /tmp/healthy' + probes: + readiness: + enabled: true + type: exec + command: + - cat + - /tmp/healthy + liveness: + enabled: true + type: exec + command: + - cat + - /tmp/healthy + startup: + enabled: true + type: exec + command: + - cat + - /tmp/healthy +# -- enable Jellyfin autodiscovery on LAN +autodiscovery: + enabled: false +updated: true diff --git a/stable/jellyfin/17.2.0/questions.yaml b/stable/jellyfin/17.2.0/questions.yaml new file mode 100644 index 0000000..e784423 --- /dev/null +++ b/stable/jellyfin/17.2.0/questions.yaml @@ -0,0 +1,3154 @@ +groups: + - name: Container Image + description: Image to be used for container + - name: General Settings + description: General Deployment Settings + - name: Workload Settings + description: Workload Settings + - name: App Configuration + description: App Specific Config Options + - name: Networking and Services + description: Configure Network and Services for Container + - name: Storage and Persistence + description: Persist and Share Data that is Separate from the Container + - name: Ingress + description: Ingress Configuration + - name: Security and Permissions + description: Configure Security Context and Permissions + - name: Resources and Devices + description: "Specify Resources/Devices to be Allocated to Workload" + - name: Middlewares + description: Traefik Middlewares + - name: Metrics + description: Metrics + - name: Addons + description: Addon Configuration + - name: Backup Configuration + description: Configure Velero Backup Schedule + - name: Advanced + description: Advanced Configuration + - name: Postgresql + description: Postgresql + - name: Documentation + description: Documentation + +portals: + open: + protocols: + - "$kubernetes-resource_configmap_tcportal-open_protocol" + host: + - "$kubernetes-resource_configmap_tcportal-open_host" + ports: + - "$kubernetes-resource_configmap_tcportal-open_port" + +questions: + - variable: global + group: General Settings + label: "Global Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: stopAll + label: Stop All + description: "Stops All Running pods and hibernates cnpg" + schema: + type: boolean + default: false + + - variable: workload + group: "Workload Settings" + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "" + schema: + additional_attrs: true + type: dict + attrs: + + - variable: type + label: Type (Advanced) + schema: + type: string + default: Deployment + enum: + - value: Deployment + description: Deployment + - value: DaemonSet + description: DaemonSet + + - variable: replicas + label: Replicas (Advanced) + description: Set the number of Replicas + schema: + type: int + show_if: [["type", "!=", "DaemonSet"]] + default: 1 + + - variable: podSpec + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: containers + label: Containers + schema: + additional_attrs: true + type: dict + attrs: + + - variable: main + label: Main Container + schema: + additional_attrs: true + type: dict + attrs: + + - variable: envList + label: Extra Environment Variables + description: "Please be aware that some variables are set in the background, adding duplicates here might cause issues or prevent the app from starting..." + schema: + type: list + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: extraArgs + label: Extra Args + schema: + type: list + default: [] + items: + - variable: arg + label: Arg + schema: + type: string + + - variable: advanced + label: Show Advanced Settings + description: Advanced settings are not covered by TrueCharts Support + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: command + label: Command + schema: + type: list + default: [] + items: + - variable: param + label: Param + schema: + type: string + + - variable: autodiscovery + group: "App Configuration" + label: "Autodiscovery" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: "Enable Autodiscovery on LAN" + 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: 8096 + 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: transcode + label: "App Transcode Storage" + description: "Storage for transcode, best to be set to emptyDir and if enough RAM, to Memory type." + 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/jellyfin/17.2.0/templates/NOTES.txt b/stable/jellyfin/17.2.0/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/jellyfin/17.2.0/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/jellyfin/17.2.0/templates/common.yaml b/stable/jellyfin/17.2.0/templates/common.yaml new file mode 100644 index 0000000..754fc72 --- /dev/null +++ b/stable/jellyfin/17.2.0/templates/common.yaml @@ -0,0 +1,8 @@ +{{- include "tc.v1.common.loader.init" . }} + +{{- if .Values.autodiscovery.enabled -}} +{{/* Add proxy workload */}} +{{- $_ := set .Values.workload.broadcastproxy "enabled" true -}} +{{- end -}} + +{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/jellyfin/17.2.0/values.yaml b/stable/jellyfin/17.2.0/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/jellyfin/17.2.1/.helmignore b/stable/jellyfin/17.2.1/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/jellyfin/17.2.1/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/jellyfin/17.2.1/CHANGELOG.md b/stable/jellyfin/17.2.1/CHANGELOG.md new file mode 100644 index 0000000..c1c100a --- /dev/null +++ b/stable/jellyfin/17.2.1/CHANGELOG.md @@ -0,0 +1,100 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + + + + + + + + + + + + + + + + +## [jellyfin-17.1.18](https://github.com/truecharts/charts/compare/jellyfin-17.1.17...jellyfin-17.1.18) (2024-02-12) + +### Chore + + + +- update container image docker.io/alpine/socat to 1.8.0.0[@74e6801](https://github.com/74e6801) by renovate ([#18039](https://github.com/truecharts/charts/issues/18039)) + + +## [jellyfin-17.1.17](https://github.com/truecharts/charts/compare/jellyfin-17.1.16...jellyfin-17.1.17) (2024-02-05) + +### Chore + + + +- update container image docker.io/alpine/socat to 1.8.0.0[@8bbbacd](https://github.com/8bbbacd) by renovate ([#17827](https://github.com/truecharts/charts/issues/17827)) + + +## [jellyfin-17.1.16](https://github.com/truecharts/charts/compare/jellyfin-17.1.15...jellyfin-17.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)) + + +## [jellyfin-17.1.15](https://github.com/truecharts/charts/compare/jellyfin-17.1.14...jellyfin-17.1.15) (2024-01-29) + +### Chore + + + +- update container image docker.io/alpine/socat to 1.8.0.0[@9be350f](https://github.com/9be350f) by renovate ([#17587](https://github.com/truecharts/charts/issues/17587)) + + +## [jellyfin-17.1.14](https://github.com/truecharts/charts/compare/jellyfin-17.1.13...jellyfin-17.1.14) (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)) + + +## [jellyfin-17.1.13](https://github.com/truecharts/charts/compare/jellyfin-17.1.12...jellyfin-17.1.13) (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)) + + +## [jellyfin-17.1.12](https://github.com/truecharts/charts/compare/jellyfin-17.1.11...jellyfin-17.1.12) (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)) + + +## [jellyfin-17.1.11](https://github.com/truecharts/charts/compare/jellyfin-17.1.10...jellyfin-17.1.11) (2024-01-21) + +### Chore + + + +- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) + + +## [jellyfin-17.1.10](https://github.com/truecharts/charts/compare/jellyfin-17.1.9...jellyfin-17.1.10) (2024-01-21) + +### Chore \ No newline at end of file diff --git a/stable/jellyfin/17.2.1/Chart.yaml b/stable/jellyfin/17.2.1/Chart.yaml new file mode 100644 index 0000000..1004836 --- /dev/null +++ b/stable/jellyfin/17.2.1/Chart.yaml @@ -0,0 +1,39 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + 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: 10.8.13 +dependencies: + - name: common + version: 17.4.2 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: Jellyfin is a Free Software Media System +home: https://truecharts.org/charts/stable/jellyfin +icon: https://truecharts.org/img/hotlink-ok/chart-icons/jellyfin.png +keywords: + - jellyfin + - plex + - emby +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: jellyfin +sources: + - https://github.com/jellyfin/jellyfin + - https://github.com/truecharts/charts/tree/master/charts/stable/jellyfin + - https://hub.docker.com/r/alpine/socat + - https://hub.docker.com/r/jellyfin/jellyfin +type: application +version: 17.2.1 diff --git a/stable/jellyfin/17.2.1/README.md b/stable/jellyfin/17.2.1/README.md new file mode 100644 index 0000000..e146166 --- /dev/null +++ b/stable/jellyfin/17.2.1/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/jellyfin) + +**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/jellyfin/17.2.1/app-readme.md b/stable/jellyfin/17.2.1/app-readme.md new file mode 100644 index 0000000..73fdb17 --- /dev/null +++ b/stable/jellyfin/17.2.1/app-readme.md @@ -0,0 +1,8 @@ +Jellyfin is a Free Software Media System + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/jellyfin](https://truecharts.org/charts/stable/jellyfin) + +--- + +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/jellyfin/17.2.1/charts/common-17.4.2.tgz b/stable/jellyfin/17.2.1/charts/common-17.4.2.tgz new file mode 100644 index 0000000000000000000000000000000000000000..31f3a104561f859f297067776ab86a1503525be4 GIT binary patch literal 100097 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 l8bLay74+E3;;+DksJU3 literal 0 HcmV?d00001 diff --git a/stable/jellyfin/17.2.1/ix_values.yaml b/stable/jellyfin/17.2.1/ix_values.yaml new file mode 100644 index 0000000..874a909 --- /dev/null +++ b/stable/jellyfin/17.2.1/ix_values.yaml @@ -0,0 +1,98 @@ +image: + repository: docker.io/jellyfin/jellyfin + pullPolicy: IfNotPresent + tag: 10.8.13@sha256:05a9734d7e83086b957c5b7a16cbb5a60b5bb8d113ffb953e57547359dd05140 +broadcastProxyImage: + repository: docker.io/alpine/socat + pullPolicy: IfNotPresent + tag: 1.8.0.0@sha256:c83895a815b89c42eb121a7e9f4b7e23b91b3a461eb7d77c9a2f210fb7ef922b +service: + main: + ports: + main: + port: 8096 + targetPort: 8096 + autodiscovery: + enabled: true + ports: + autodiscovery: + enabled: true + protocol: udp + port: 7359 + targetPort: 7359 +persistence: + config: + enabled: true + mountPath: "/config" + cache: + enabled: true + mountPath: "/cache" + type: "emptyDir" + transcode: + enabled: true + mountPath: "/config/transcodes" + type: "emptyDir" +portal: + open: + enabled: true +securityContext: + container: + readOnlyRootFilesystem: false +workload: + main: + podSpec: + containers: + main: + env: + JELLYFIN_PublishedServerUrl: "{{ $.Values.chartContext.appUrl }}" + broadcastproxy: + enabled: false + type: DaemonSet + podSpec: + hostNetwork: true + # Proxy doesn't seem to respect the TERM signal, so by default + # this ends up just hanging until the default grace period ends. + # This is unnecesary since this workload only proxies autodiscovery + # messages. + terminationGracePeriodSeconds: 3 + containers: + broadcastproxy: + enabled: true + primary: true + imageSelector: broadcastProxyImage + securityContext: + readOnlyRootFilesystem: true + command: ["/bin/sh"] + # Quite a lot going on here: + # - Resolve Jellyfin's autodiscovery service IP from its FQDN via getent hosts + # - Export the IP to `$TARGET_IP` + # - Check `$TARGET_IP` is not empty (so we can crash if it is - will help to detect templating errors) + # - Touch `/tmp/healty` to use with the readiness, liveness and startup probes + # - Start socat in proxy mode + # - On exit remove `/tmp/healthy` + args: + - "-c" + - 'export TARGET_IP=$(getent hosts ''{{ printf "%v-autodiscovery" (include "tc.v1.common.lib.chart.names.fullname" $) }}'' | awk ''{ print $1 }'') && [[ ! -z $TARGET_IP ]] && touch /tmp/healthy && socat UDP-LISTEN:7359,fork,reuseaddr,rcvbuf=8096 UDP4-SENDTO:${TARGET_IP}:7359,rcvbuf=8096 ; rm -rf /tmp/healthy' + probes: + readiness: + enabled: true + type: exec + command: + - cat + - /tmp/healthy + liveness: + enabled: true + type: exec + command: + - cat + - /tmp/healthy + startup: + enabled: true + type: exec + command: + - cat + - /tmp/healthy +# -- enable Jellyfin autodiscovery on LAN +autodiscovery: + enabled: false +updated: true diff --git a/stable/jellyfin/17.2.1/questions.yaml b/stable/jellyfin/17.2.1/questions.yaml new file mode 100644 index 0000000..e784423 --- /dev/null +++ b/stable/jellyfin/17.2.1/questions.yaml @@ -0,0 +1,3154 @@ +groups: + - name: Container Image + description: Image to be used for container + - name: General Settings + description: General Deployment Settings + - name: Workload Settings + description: Workload Settings + - name: App Configuration + description: App Specific Config Options + - name: Networking and Services + description: Configure Network and Services for Container + - name: Storage and Persistence + description: Persist and Share Data that is Separate from the Container + - name: Ingress + description: Ingress Configuration + - name: Security and Permissions + description: Configure Security Context and Permissions + - name: Resources and Devices + description: "Specify Resources/Devices to be Allocated to Workload" + - name: Middlewares + description: Traefik Middlewares + - name: Metrics + description: Metrics + - name: Addons + description: Addon Configuration + - name: Backup Configuration + description: Configure Velero Backup Schedule + - name: Advanced + description: Advanced Configuration + - name: Postgresql + description: Postgresql + - name: Documentation + description: Documentation + +portals: + open: + protocols: + - "$kubernetes-resource_configmap_tcportal-open_protocol" + host: + - "$kubernetes-resource_configmap_tcportal-open_host" + ports: + - "$kubernetes-resource_configmap_tcportal-open_port" + +questions: + - variable: global + group: General Settings + label: "Global Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: stopAll + label: Stop All + description: "Stops All Running pods and hibernates cnpg" + schema: + type: boolean + default: false + + - variable: workload + group: "Workload Settings" + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "" + schema: + additional_attrs: true + type: dict + attrs: + + - variable: type + label: Type (Advanced) + schema: + type: string + default: Deployment + enum: + - value: Deployment + description: Deployment + - value: DaemonSet + description: DaemonSet + + - variable: replicas + label: Replicas (Advanced) + description: Set the number of Replicas + schema: + type: int + show_if: [["type", "!=", "DaemonSet"]] + default: 1 + + - variable: podSpec + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: containers + label: Containers + schema: + additional_attrs: true + type: dict + attrs: + + - variable: main + label: Main Container + schema: + additional_attrs: true + type: dict + attrs: + + - variable: envList + label: Extra Environment Variables + description: "Please be aware that some variables are set in the background, adding duplicates here might cause issues or prevent the app from starting..." + schema: + type: list + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: extraArgs + label: Extra Args + schema: + type: list + default: [] + items: + - variable: arg + label: Arg + schema: + type: string + + - variable: advanced + label: Show Advanced Settings + description: Advanced settings are not covered by TrueCharts Support + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: command + label: Command + schema: + type: list + default: [] + items: + - variable: param + label: Param + schema: + type: string + + - variable: autodiscovery + group: "App Configuration" + label: "Autodiscovery" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: "Enable Autodiscovery on LAN" + 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: 8096 + 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: transcode + label: "App Transcode Storage" + description: "Storage for transcode, best to be set to emptyDir and if enough RAM, to Memory type." + 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/jellyfin/17.2.1/templates/NOTES.txt b/stable/jellyfin/17.2.1/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/jellyfin/17.2.1/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/jellyfin/17.2.1/templates/common.yaml b/stable/jellyfin/17.2.1/templates/common.yaml new file mode 100644 index 0000000..754fc72 --- /dev/null +++ b/stable/jellyfin/17.2.1/templates/common.yaml @@ -0,0 +1,8 @@ +{{- include "tc.v1.common.loader.init" . }} + +{{- if .Values.autodiscovery.enabled -}} +{{/* Add proxy workload */}} +{{- $_ := set .Values.workload.broadcastproxy "enabled" true -}} +{{- end -}} + +{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/jellyfin/17.2.1/values.yaml b/stable/jellyfin/17.2.1/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/jellyfin/17.3.0/.helmignore b/stable/jellyfin/17.3.0/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/jellyfin/17.3.0/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/jellyfin/17.3.0/CHANGELOG.md b/stable/jellyfin/17.3.0/CHANGELOG.md new file mode 100644 index 0000000..f447052 --- /dev/null +++ b/stable/jellyfin/17.3.0/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + + + + + + + + + + + + + + + + + +## [jellyfin-17.1.18](https://github.com/truecharts/charts/compare/jellyfin-17.1.17...jellyfin-17.1.18) (2024-02-12) + +### Chore + + + +- update container image docker.io/alpine/socat to 1.8.0.0[@74e6801](https://github.com/74e6801) by renovate ([#18039](https://github.com/truecharts/charts/issues/18039)) + + +## [jellyfin-17.1.17](https://github.com/truecharts/charts/compare/jellyfin-17.1.16...jellyfin-17.1.17) (2024-02-05) + +### Chore + + + +- update container image docker.io/alpine/socat to 1.8.0.0[@8bbbacd](https://github.com/8bbbacd) by renovate ([#17827](https://github.com/truecharts/charts/issues/17827)) + + +## [jellyfin-17.1.16](https://github.com/truecharts/charts/compare/jellyfin-17.1.15...jellyfin-17.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)) + + +## [jellyfin-17.1.15](https://github.com/truecharts/charts/compare/jellyfin-17.1.14...jellyfin-17.1.15) (2024-01-29) + +### Chore + + + +- update container image docker.io/alpine/socat to 1.8.0.0[@9be350f](https://github.com/9be350f) by renovate ([#17587](https://github.com/truecharts/charts/issues/17587)) + + +## [jellyfin-17.1.14](https://github.com/truecharts/charts/compare/jellyfin-17.1.13...jellyfin-17.1.14) (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)) + + +## [jellyfin-17.1.13](https://github.com/truecharts/charts/compare/jellyfin-17.1.12...jellyfin-17.1.13) (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)) + + +## [jellyfin-17.1.12](https://github.com/truecharts/charts/compare/jellyfin-17.1.11...jellyfin-17.1.12) (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)) + + +## [jellyfin-17.1.11](https://github.com/truecharts/charts/compare/jellyfin-17.1.10...jellyfin-17.1.11) (2024-01-21) + +### Chore + + + +- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) + + +## [jellyfin-17.1.10](https://github.com/truecharts/charts/compare/jellyfin-17.1.9...jellyfin-17.1.10) (2024-01-21) diff --git a/stable/jellyfin/17.3.0/Chart.yaml b/stable/jellyfin/17.3.0/Chart.yaml new file mode 100644 index 0000000..3874d0f --- /dev/null +++ b/stable/jellyfin/17.3.0/Chart.yaml @@ -0,0 +1,39 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + 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: 10.8.13 +dependencies: + - name: common + version: 17.5.0 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: Jellyfin is a Free Software Media System +home: https://truecharts.org/charts/stable/jellyfin +icon: https://truecharts.org/img/hotlink-ok/chart-icons/jellyfin.png +keywords: + - jellyfin + - plex + - emby +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: jellyfin +sources: + - https://github.com/jellyfin/jellyfin + - https://github.com/truecharts/charts/tree/master/charts/stable/jellyfin + - https://hub.docker.com/r/jellyfin/jellyfin + - https://hub.docker.com/r/alpine/socat +type: application +version: 17.3.0 diff --git a/stable/jellyfin/17.3.0/README.md b/stable/jellyfin/17.3.0/README.md new file mode 100644 index 0000000..e146166 --- /dev/null +++ b/stable/jellyfin/17.3.0/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/jellyfin) + +**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/jellyfin/17.3.0/app-readme.md b/stable/jellyfin/17.3.0/app-readme.md new file mode 100644 index 0000000..73fdb17 --- /dev/null +++ b/stable/jellyfin/17.3.0/app-readme.md @@ -0,0 +1,8 @@ +Jellyfin is a Free Software Media System + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/jellyfin](https://truecharts.org/charts/stable/jellyfin) + +--- + +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/jellyfin/17.3.0/charts/common-17.5.0.tgz b/stable/jellyfin/17.3.0/charts/common-17.5.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..3a5534883aaac1a331bf10ad166cff7fe5d2dd75 GIT binary patch literal 100452 zcmV)QK(xOfiwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PMZ(avQnPFuK2a6)0*`vG#}*zbP?s>Xjv}SMSP_9#QrtCvQpt zXFw9sa46i(P#jT?nZaRBeNL^_m8JA zX7vS}1>bG{X*3#*UZ*4eZ8RF$f1AyAnnV$anRo|45(fh?Wh|nD{e2%( zkHmi6BeQ)R&M`y#>;t{J`RSJ%7FS?|KcJXm5)Qz;Re@1teg=>s$|^phUW_9q-u;+_ z9{&pjcof5U0mdW-H*tc*{HK*E;n?V=Cs-iOTV`>BJW*yJMiJd-F+%$@NEwRv)qA;; zD%j%5M!(yw+@ZxiiG4b#)Ii!;rKT~hi5Ha` zP|e&WBV@Yz=fAyf)?1x=qt^IyWd?D`AP!M1fT0=00Uy6H`ClpEI*BJ0pr~&VAVd62 z1zB8Sz!ni2X!I&`jZ3p%@75cYFFmif&w7vI|8p25h(6N>u$2EdTa9KT$N&4y?w0?* z#IplxHSjhdBNzZV2`Urui|+>F;}9_beIIka2?HR%f&h+C!1;yzV*oyVUS7f4X!xdJ zZ9Cbjx(4SqG=d%yUvDl?E(hQ^iDMM9U;!wZAwWj|K^~*PCmVAqs5F+Fwe|L>$IPB99jsiphiGh!){F_Y?7~_w~2Q%#Z0lJ4VFA)M51OSJV z7*VSFu>+1_2u28yIf~;XKt702tP6=ENVM=HhxaZ8=OA$uMFB?CYL55oQLT-$?I;;Q zO9tK);;=S?6np9m2YVUG$+ZVY3*e(MOacb(aS#9&F90J}(P}`*T@qCVmCTF)BS?|Y zX{2A9D%n{hCf^h}wB@~xqF@2=n0K4pACs8BolF7*FjX}4<(TU4OM1z?8i`Qok(ky* zkH1h~#oT>|Lp)1nAS6Dz;>$_!1-^c8c%j}6z+t1&&^6?w6my%A2+Rm&AR;~mF!TWz zc%(Q2aOeezkHZP@!e}CD`vg(3cI7t&D1)J2g8>PVfKdSg=ur?1z!(M;RVrh?ilKLR zB8fo_t2#kr93lXDjTlbQaR4d3fHMTx6e^;P5J)&Vxa7xY?A3>3S}C2XS09cg0tTGj zm>7yECL;v6G*kid$BmGTxD1sos}?u7iU}hg2{>%|O26TAp|skKY(!O&%^U{_mqO33 za(Hoxj4~8@DR${ASvi_}*=pB_kCy6qH236hP5VsYs}ILuh<`(}DF15!nvKR=oGtj_ z_(m6;du&O;s}INfyzr6dAxgnJ;tO5^#ZU2TpfrbT1pQxP%+O`%%Ladbo zqkc;eT!{%0HH#64m|+;4pa3q0$RnXoIg;vYgkntm{Cm}g`OsDG#}EfejBcheqEiz1 z=@*)a&RAcX;!BL6kG~FtTH*_rj93yq3Y~5VHmy=@dW|LYsYpKaF$%DU#r7{Gg_Otf z<;=HzAk-B=!eCKxxmyL#-~{o`#3&*ZGojb2J$nCsO5lvo#wZDbD-vLDF#u=d3&O5q zL{Z3fQwApkFmKkIje7Hc(J5?odxPExjm8HZuW{HMb$!_JJFV8iXnb(k=yuvY)NXsQ z-EYFN*BiG-ez!Gh_6}O3PQ&l_Myjre#8Ny3(C;U5--Glc@^V14$uUhQV#}DYVVo_@ztz8 z`}SLkJdezxtC);&fb_JLdg^r&@~No!gZSjZ2##=o8BRB3==%fk&wr_3eoV~l=Pc*w z{Jf&~+F!Wr#%CcT5`{g0)fNL2MrM#<4+g=)RDiw@j(@uR{GdJmi&9p7GlIK93;J2^G=Y&5~;#rZ#g5E~8kIh84Z6kK0k-e|<7XgKU0!-(1> z5_93|{n<(JsIN8dKmbTbRKR@y?r8Y)lYj~c15j-=S}h}sToJ!~!Yc8g1bRe#xq##d zj~daNn)-w ztn72Fi*oz|Ji~fl@}gt_I*mqSCVtM)OmM0Lv029G*91|gXfso=+jxg771NNEA4P?W z4`(N5N4LjES3|vv!XQwnt8y-Nm(VsMz6DxJyh>0xmo`2gg86^)n-*8c@$tsk)9S@Y#yQjd5kE|c$bV&93qBj9g}?+d(#1^ z!kORen0fx5i=>PI6pl&kaS?Vx_|%U$yA(rmf}(&d_%xJa^^ie^#z`c)7!$F*Xvtc=k0pD} zz80L2Bq7sUt>^JyH{=dk{G6e9hC|Wz+ZcN2$`vJg4K+hw`NX69d>RD=`uo?XMob41qTg|P&$zg1X|lexw?r|XLAmX#H*$AKi7Q_EqhBCqc0J+`Bjo9Mk+QdRcSxI+ zPrh*_C*@F3(iN9Z%)F65ooZx+sNFzbfL+ye+TZG@PoVxm+WeF@QRf|~Ms`YvxqHDuoR301HFQ5Isp5!vMebEN^%Tg z9Z@jmFb>FsKC*#1jQ4qUB~kb|nGL`@Az7?yHBL&0XN^YVBz$O_Y!*GTK{ksX+L({# zbUJ%vdp?@))9LJCZSDYosYmgE|CMcYCv8;}k}rzd6d!Crx;?(eVZi0bdZXT|H@ky& ztJlzFBJq{W0)N&8dZNIe_kelRmv8gxE{aKQglZ#5dtTBB3<$gGY&!dVoc zfwHI7xnNYM3)-xIT>PeM21z&o28}V5mMZj-b->PLwiVv3vyh>9ECfN#ukr;dlLJq zg#KC0!#LCEWq_IY1yHkfa__4){wJ7vT!vqKb3K@QY}E>wdn`Zy6|39@~4ux{}eC+{{YXyKi9P+Wc(mM|OK!QYw<#=WWKn*$ih$+M2 zLME^Q#bJoY(y@|PJ$(T2iY{B0voXQMBIJe`f6fV`O2L`ZA$ll)=6 zCBnRD7>s#ez^80tcnM`>_C@F+n>KjHWRCehV!BbcUZo_6@!XVwFtM#I_@+*-CB zAuaClw^i^;%Nn~CTeeO`av!-OdI4-fo`UzXQtn$(`Lyg#ai3GfH4T<^Qce^@8M~LV zGId!!*Z~pt?f?nRu&3vHHs3cbL~~DU?_66^hprRE01Oz4k-ux8WU!R}YPrFXl7du! z&cgp7k0Bq7V=@E7Ia>$tqK11`fr`r5^4jAC&lDdsEwc>0lXK_M_goU+Fyu`>Gq z^Iy;1hA<>|27>^H6Y%L1 zs7qgL;kNMkGZ-x_|IE6u7fV(l?KzD61I_|t)=_38T|&0^=~E5hu`%M{ze~-J7nbHgsdVajuQ_rnhW zGVqFj5MV!l-mL&ICWKitZwH(ZFA;}X99?;u7a&Lx@TQ1wCkYcHna(-j+cf}DMxGKE zVe#!ULZPIpm^y^>HzC%8d(5VCN=#7@?SV+OO+t!&6l)JYK7&#WmNmFfBN9>)tL2IR zF3*#xG~97%23WqW$`wl4HY#S?sinKKvr`fOZ+CwfA&>I`a7_pUm(t@<7TeiT%}U23 z>4~R+i*dT2Vs8p0#}tl!!gXwfzyyUTh79=?S)6x~ucwTCDLuFq=Wp0Ir`pCYseVrh zW#$`+)!&hj+>{%eEwkyPDWIM4Oey1DWW7=5-EJF={q{k_hYi?obPi#oF>3V>JFw#)G-W)8?d*`>!T7PMyG_Z)kx}+ z2Fpgh*-EkOA_$v@z1GOcCFl zZ#KHE-e}xvF2#~T9Eg2rHJYZV<HbZuZ9q4X-!uH@odIYWri) z^SiClfrokr?QyT&^hRCO9XH{)-RQUB!68CzG+v6QM|`CTu11uXt;xa$)lR+DOr3Aq z-M;U2x(FUL`u_N^b=d5++6RXXzuoK}HelBqx7+>xVW-!Dt!}5;9gRB8mhX+czSkWg z)LM!v3?dw^K~GuEnwrhS6hr8vMx)n7%|qlv*ctZ@8*RVS>mbx`^cvk}vk5x~?ZZyD z-Sg4turqEqN4;LN)$8;doo@GFDTdUGA@ioIQB(yrjxsXFte%6`Xf*1K#|MY4{z0eJ zXpK;R)I}Y1*cl&m+MRK$dw9_AAC6$d>osA&)jw<(FnH4j^idJ=o+W4*DZLaSx&2fbG%vuyN2s zqvce*pP)4sH!o!^m`1v;TVAU-9(Oy)?~IUth&tmYJnT2yt!DFZ1Y50fzuRv%dfl$y zIPf}+#>hkCX4m%`2jfH3@RzUa#jggnC5~w})-!yE#xRD{{l%{u;ZD6{t(wEb1LU`0 z7j^o*QLl~sMz7cP4o05W@4!(9wwi~2V>}u+4i9^ro3>kBc;I!r{y}Rr_C~ErB_fpZ zUE?^wC|rYh{-|~jF{|l%wl7^u$PVhD?&xsb?!&I%@DBXLhTrdWeAH_D&4X^g(LZb) zcE_Vpx9hhKJ00X5HvNNktJ56!8twjaHa>$fhW_ZG7^`Z<2=`hC-Gk9V^N_FER=?Tv z4>|{(#`wTL9JRfJUa#93H~Zb*L9f|8^t!EHA2z*%Uc>Kq$L+%de<{K-^6`TSEGiWv ziw--@*1=)ZI~?`A!``^rY5bdtUbBDL z=rvl0W7rw>#;vZ`Z+c4+Rvu3%{BU&vsFv_N+bmGo0sl*%Ckdekfe{MGeT9oX^C*>C zq)a4WEQAE83II=#!?<#kl0%iR$@1$$utebvg&5 z19&j<(P0}MpneykZfo3aAGTVfCLD1Aso6g`K&ZPm2AsYi5(HjN?O$+=-X<{iA4>0g z9HR-ZSWfX2_DW(KXluZ+Ni3LttI=vU4x1gr0S?-ugHgZZ_d00gH~Qnl!)~|P>37?Q z2knm6;?uD)MyT8LTd>_5!+vjc2uHAYaL9$g@j5s>h{)Qog#;)QjicP7k@Ak7q8QaH zJK!jd(n^bZ(%}#KKJvMk4}B4_0fCQ2>@18I;0`SS#WNhhm@70K@}FlAhkw>^>ZPNp z^$o|N!-^uwhc@Mdll+`Z>pOU-%o9Qdldc@PCU_-u6C5fpsy!eKGkX9ruU@b3))kyH zVZ?|<1dmX)*%XGLsln`l8E=J3>O$#co_-d!V0?#s0I5cyUgDjiI;>z}Y6F47ZBci% zuDqsyO>ms;IQkgD(3dKyG|*-}ePc4mKC;8{WW1izOlNSx$67;|Z8;Hr<$&y{wk6Q= zk$zUJpEbO~8ZPOIX{t=x#L?q)EgPWVXX982{`R_AZyr`Gjn*=+r-58LWQfmNJxi3n zE4(W8I}?q*Q>ZrYi2oTy*($AOwfL`PT(cG>*VNMmX-{tP#d1I20X0Rdp9mE(m4XW3 zClt&8L$ippeZ5{INU5f|L`0YbhoewbVATpLr`S=97@be8o!BnHB2}{`ML)>&;HBQ2-}8qqeIVd}GHe_o132xq0JBXn4PzE@P@D{kmi12h~%qCPH{f^k@VFD(4852CBH?C0<1<`hBc^gHcAsDNIk}Z zj-=GC_6psa)of;-*H}Q!f|LOQd?Jky@W^b0L*5$Zcxyv{TG&g?{t^i*40I{1T*b7K zX~u;m*L%gHeyw!5TKPB33gj)mgCU%txWKtF-3pd>D-*s9N*yE(_vFm;9*sm?2C^!# zco7ldQf|4Q)(VTR2r&jK)|u~*l#jc$jqpi95i{k4!~D(pFpq6aA__))ewr9`9|)4> z!j9$Sv%_|Q9lD#P=1ytcvK-3g(aYeWalPPi(Y>-_KAxFBGn?*a$5D%3VLw~ctaD1c z#DnnH6&{SgtXPEqR5*D|(8_6V=B#26`S53lD!JlT_83#h$tY7?IV4~blO!_VCNlPD zSyR}v+K^dftm60BpCC4HXyXFNkWM*+SBq-!1*`>5&V)e2DkT!YIQ7(NqV+~dKfo|Xd1q{ILPQn1w4-kjbX4Kf1Q1Tu6F7a%4HTSswI<({Us z2_PJ>It%2GWLgIl zEWka9?}U>025~ewAyoJ-4EF^S@kCr6SK7qEa>CmX8!br~2aP>sjt^D(kAxzSgaMz` z3zC3)7>b$Bq;3cqh%vpZ?0|p%Ge+Zo{p*#<^CU@LgAuM%JfZcw0}-iZ1SYyqBjoMx zsDkxS2D9OCqKf{hHJ&$N5KUogw^Z{LM1FwYE6Oj`dbJ8AN($#s_3Z-;u&<-p03XP= z*H_2ayx1Q2>E`B2{dse2{yHD3zuuq7cLJ1jC^a>nRUzD%vg$4<9cO7#3Ni-0smSA@ z6m%G)kX@s($u7W!Q_i!sXM>sx%z)GCjN8S0t zfk($9NgD~TmxgX;!H%GJheBV7dNBebz?btL9Z?JDlq7-Arx-;ctD9{}RZM4xgrDEi z_3$bE&w6hUP9fESqj$;Y9^uK9>Ff|7tF3z^lr3$X>J8HIm)Xu$MsYJv-!8A?;3wo1i;iVvkE5p;2cdNFyfODN_D)oGl zuTsTHzWtfY6!OmxMi9vuZ&I_&42MT^hy#v=ylZRH+~ri2L9XwG>m6yi=< z2UIkIDOi!iC_w1xK1C)9&m}y1mgCy+dJVsem0vSA48^#2zP89b+6nFcfgfF#fXbDU<2tJB6SeaN)wQl>Ij}q?=u|lHDFER<3MP?kW?Q= z@gM7(uy^?5i9gPK+HsbULO~E>w6IB>;RES3vU!0Gj_dkD=T*5XsNH~=wzB&PwO1v_ z(~Ov9WYA=&6(8N#1^*Xb$8bdEDTC&0$VbBCkRzp4w|yPk0>&5xzTCEiS8$du$!4q_ zc871W6DtyT2LRgsk;ES2Qt6N_0_1#p9|zX&yBYl%EzbOb4NfXDGCffG{$`56*@+pN zWMpI#O;bKm#Wywmp^RbJ;}gfnW2JD3s1ISnkw+W<-~aRfQU_ceygK@gZ^$GJ7P}Vi zRv8Cl)t(NSNIyi$D8QcEV_Tbhdwi9icFNkCnVKV^(j{&AC|IaupvmL&v15M`yjmq_ z0az?Qwh%!N2nvl@4!Wi$pSfckp!zG0Zk8r)v`G3vG90n{+~LT!(pfwYkXYuL9P{SI znZ)o8M>prg4`LfpM+<6caM5f}jht|Lq1Z>7>r!cYNf8(aa8d_9l3256Rq2?_X5!od z-yzLN6^*5sJ3@Pz_W_yE)LR_-zBGXaZ~|&Ijd+dsv&I5ilUrblNnzIpm7OwK@q-iZ z^>krzUI_1T(xMx-n2L+VZCLVRRy_Q#&1Yq8puuJZMEzb`&PKvQ$>1Hz2{JjMv|g{5 zpjH?tST5FO^uo1dy=<>m$#}oBjk1`ubpT#zVPyZvpTp3zV;wiLeJ*d}Yu{7FOM6ch zFJOdKw$y=LDz{aN_e-`)xuP;tGp~C+e9t@^Yd=C>8wQkUQc&=3my#tjLl&w#o%**N zR?21e+^#Io@(Xrl@d1ZktkMKpZ)xFD-%;z43+n@}#J^Fyu1dKk)|^x%>lO1-4cQUz zt1(jn9D)E-kri)|nY* z6b0iweKLfs9I|@;DEQ2runjUvO7V!iK@u< zr1Jv^izkB5rsB~!2ooP<(qmjjC5XT z`-AJ9CLO+%-P!3snISes3B69zjI)Kl2ose$^wVd{1%MBrJV$VxHg@ES=G>hxSLd5N z<*;2gtQwqJ>J9`Yq{+jSIfi0I$l&w0@6XIhDw(60>-1ACe&<_E&*QRf?|}2-R%K^F zLN!#=u&SBDRCGyOtQo%yL!Ih3MxBbCa+#+7?#f+4?#)va%p{AVwn9l_MK%(ln2T4m zqW?0k@8Wg|2uvitW_Y?F|IK%FzIEDJv7tD_*QF}J6w0J`7b*irKDb9h#@8}Nic>b< zHW!r5;l7GzN4~P%$Toyu)m$kfdCms(0nj^mC!7bu+L$Dv-R2a=er*hKpwC74-2JHw?LdxW%6M~;KZVKBY)HjNxgvXpR zN$AT!eSP7G@&s80P2U$%0!_Q=tqCpVO=SSn66?bB0+RS4WO$Bh(WDHnTWW3CC}y>p zbZ0DuY?ZP6Xt?|-FEUcoQ7v;W7|c-&13tzz64E*^N{wT(788-L47_4S-=Rf$_yY8O z<$<}PW#fSJ;p##)Uk7Jwjix#1Y~xl8J6}bS?LT4%kMPF$##%3M0nzf^9#G-bdpfFT z516PJ&VTF(Vd()S2o8aT>ReeBh%fMxF?1Pj`3SWF^J+MguPk1Ck|+sV~2o zR0ud6lhi}107}tKZn}NzuTelo`&?9zHi)|ex*sQDoleymvMQIlNN^sUu&GoNi9UAF zY?#x^^#Onhn+ny|cnj=+Bfbha^*k7h-0?~$5>X`~lKG(HB;*2qLQ$-*LINremhy?T zoL+e=w>c8hJ721>lU?ybq=rC$qf;cG`6Rrrj+hf)}PKmSP|5>YIdm=;SBY$YYQnK zZ53!FPX20e*T4`b9CBCJnaboXK_r<>ts%|$qgq+bs#Xt=f&k26jHRcTQDUU+Ri8pi zM?h_ni$YDmOwxV1n8aC^o8@C{`X-~$tjzvnJkeK$$!&aYNwqt`B=-G^5jLu^8D)JD zC7B@<&dqz<7gf2Uru|x|)Hw2(&?uA(iya9|w#?=PEYph~PiaY@&TLx>HHl=E6eIwS z7n0N|6yVC*aD8$g<{|U9%VE2Yd&>O=|Au@qgwE2Fq%fw|)P5!{cw+487L|U)0m{t$ zbsHi9-%&G7ITMV}lkCL0$&8wvuSGasARka91QVo^Bkj0@!Z%2ZlA4K+q@mUyn38om z%@pQuV#J4pi%kl=B82Ep87V@OFjJc+`OHs=qU{xO>Z_tULzn|nD%JAhE{-)0C2@tw zqaFH%2@_P)JRVhf^&3qOD$;Kp7XSR=>Y~US%ed+ZEnR}QvY}a`M(At4E=t|uAQ;|b z=1r}g4tJn1r04TCAFnf(_rW2F>%I!sD%J@+eks z)qh@&?-0vs)iWo1Ap$U-2oz0_>aj^_C6#_qtMM&f_5&i>1Wt1dD{VdV9_Wa;6IqnxpSj|HyKNde$CjN#!hed7ql{_NJ^avm-GRx=uWU zRwR;h!$F>1l(!9*Ttkw%@4)&X?5WLGyVaD$u>$#X#0gD!(F3SsDPfH9aDqealbneRaKbI+`cMJV#7Fh=C~1(5d)Box7Gi_o1A>=r_yxhs=4vSbbZ)U_ zJAp3qEZcwqp5FsRBD~E!6)uH|^Bm81w4qY)jAB&N0vd^Jk2vW%h9VUDDD*I*U}uw9 zRlG2oJnArnOKJ&|r^g(KKG5VNGsS!+OP)U?zO15OW^y@L=f?6BLdZlgqb-ZwkGG=k zMXnUAgL2LJ1W^`~g+f+dv~2KY!q757VxHZb*CJ`HyjVcl>{2EB=*{r*{Qb@8`9HwP z>G0vCTI}|ZqK||H|^C`d*&V?8Vd+%50 z=-LC3;@?ssOSs-dbMMd8D*U6!I;>oD__X0-9-lipz3^4$D&*Jlc4O5$?c}as0MXWZ*bwm-d-@Z<-8rKS!qPfMU*mxOdHk> zeCwi0^X?sDQ>oj_l+S`SMw1x&C>NlIV(rxpK}=+xYsqM2dJtbk55qBEAbbZ?OoW0d zoFgzoC``vnUJX1>0>0@B7{0A>Jsz?cGBjCy6@4B6Z2GKjn?*i&m4q~jxLU%+A;ang1!gczU;tjF1yb|$sT6y~ ziMop`Rh_nkd|)>+uv%AD)XuGmLHP8Bft_>6eeylmMD^1#w3@dYHx6H_clw*wqEXCs zrjn+`!c6Cji?_YFR3y6e9?;ZfL?3QB1kpQa(d^PQXyDXHXV{HMtD_k3pFuz-AV6~z z>=kENm-dYTKyggsJ#Y_Wt_SSNLoq|SJ>a8JGT8$xPLGcQGCAjv2Xdi17-UVUlEWPz zsk8h*jJ4%no$|aPQn%jI!T!E`2CUqBQzOp4k}vmRgl|op{r--9gTircvvjgA*z8DL z#w=`W^1xG`uBg*a$1_6M3S=&O1crPR_(m@6p>jc+SQ;%Aiml%4?`ayVGshRzM2v}a zd_}D~*FtMIF%qKs(r%=uwt0v$b5dbfJb7)$o^%I8;%;hj&R&3ozh^MugUoojQ2@g` zl@UyxSm_nwkY%(mb}1|fc=7)Hyq=DXx))euC$IHaDv~MWjI?e?$=$>MIR_>Q^yVg- zmg1o|DP3&)!EC#H^ z)rf`sN5&Atsl;h9{Gan|@}uMH)1#YHaQgR~(~IHRb;z-+DIUlISE{NxI$YFR38 z%Ku4Fj8W!*U7k^yPmWKTxeO_q+kC`l2%4fc+?zp-`i>l%N zLJ-$qewBz+cb&@oEw4U2JwH9Z(Q5y#)_7j+a*@@CB4fiIpvmmj6v60r6x>mc@-Eot zGDYs~|CK2kBk1o6SfY>M$Lq^?TrCrKW|3RY8g7}eHvPrzzvYRVzT}fZ;gtOVglfj+ zW>7spdUJYSEhylIoZAsnzES_wAKB_P*?}d^zCC*X_H<>V$9&Mi6fDATQ&9y#6L;fzfu#Qw!#xJ28SynOg&Ukp&Z9JrUe=F4cHLw}M zcm_k)D3Ham#jgue~5SNulWvpvDW)aNd z8&N)8036x?RI3~d4j6~v`p4sTyM3ra5-h_*K1N@7stQa*_tFR}PBhsSG2hjI=&_PN z%}w*B1<5GEPz-eOlve|I;riO_WHM)(cqZdVqzz}<)!fNSldhFvJKcn7yZ%=hS@X9# zoWb8n2=8g#BQxVkrC_NWQNRv3M_dgO7YTC;q#o3|`C;4CdNAsdNYYx0Hf;~~_x~zG z*8lcbUifb*oA@n>E%D;7ZVc+*>VH+oVVtagt9v9y^?MxpQdhg`<_2U$ngk;BP|3o(SOD;?z#3t%`WE^Y^Hn1okU+ zfzE#VMjrM5>^SoQr3AQd1qOp9pweswLnb5-2cjF~Tkt7|gM2-N^oHCaw`=A|=pvi) z&>FV^7zJcxzTj|*V$6Pw$xMv?(McwvL5|y!4i*q}a)(aSL#AxHM(frf%js^ZNmcQY zyk%A8pC}H>06XGhGwq?{Ia#8TNLv(w#U7xNh25iH;SPYYjQrs!J?+P5$97lSOCbt4ErIT zOqrt*WTGK;JmkuH61*EMIRF#|W2YF_X`}M#Z~>qRjZo-10r1Jmc;C~o!D_qVTY^;$ zypuLo9af`wq82*E$K@1a#D@z9mE4h)d|mGRp+Sw%n8fJ4v=cuDWZ7+Z0T&t_n7aCL;w!-s%c{;nXh|vKB){h3iXqhZkO-J4)D;uTY%~pc)EWUXEV8#@9)yb2m;_ zdX9)Xsk;t}P5e09eKy35hZJ%%YkpU0;I`swJmjSN!<*WO*scUhaMZtsH zXfzs)UZ?Y&Ods3G{@ZQ$dfzoW-Cn2JZnvAA?;5RUtK0t$G@hl$nJ1wP#@{ub+*Y=8 z-^lan)BXjvS z|M_#})2EtBa0#l+tIwNtIT!1qxw;);R8z&jcS8)o;58RYaF~|BV{;Y0ghT80AyGG{06VV1hJG@=0ldCPW4+}kMerDd_5xmFhX96 z7IkCHa+qZ90|4U*oF7#I&(ZL-K-g@8$ zufeNgG6#56PZ$pL7+1k7AA6||Z$H(T5O&NyR>Ak6Dz{y(j#e#t3r^MC#)KuNB?(S;Bnz?{}O$kutYG&0CC!H?_^Sbu`O3RcE z(rf8i>O#|FoBy2~dA@%9{Nm9=Xswi`%TnJZ;4V*vwfdN!D5Y@9ro0QO>aLUO(uJcU zN(xBm(yqKUH7Zq?;zjgMVPuztyDr@Z9yUTcMrhp;(!oB3BcwjAGeWxEBHB7&iZ={d zh4+clWQNqGl_Pl%o^_QZQF(Dh?5`a-sQOzlTy7_FlS42QcL3}kyM-fKDOh@EiUJw_ z=x|6JP85g4;Up!i;q_T6J`0mv#wHC~Wi=I}R2?Z{l!_F^jB*L9RNZ%2<$BCAWtXN0 zh3v9))N%|nzl4`F(Ip(^tawyQr|4>qQZei095Fy6c+Yq7DU_+)v+^%S*Wj6#xRRC7PJxeCV=_LH_h<4Jl3pN82C7cC2`eeQp>d=;N1e zRK%d@tdB3zq{xtvUV~(DQE{ohDsW|8E^oD-DO^wQpyv&VWaF4Ej!DSSM{#fwC*cu& zF9PHm`lrkpoc_Kb;WZ)Fd2Fn%g5Ym|!~voU%Fs-IN8x->v7{4~(qXxvrwchsEtk!7 z^}5LSY<>y*1W<)Dg+6~CI4@<{|AJo=!c3hSKwO%#wz4tA0jR2L6?MiP4sc%r&?z?5 z$}0-MuCB4M2_x-NLYSh8fOmV~`?(-r+TlCX%emdNqJ}?zuE^XIDai8Xc}ZTQCT3L; zXz{UHtMS=e<$peD@>f+$r2x`w58%JXucf+Q&Gz<7bLZ!O%JzR9@Bie@fA#*~?Dezz zf1}&#ZukF}c%E_p*HdWu?ys`w@NJ_8_D49}7ikx3pyr8xXn;@za5%;xW{cIrg1wy- z?d#@5uW$>NU$eWV?uptfUuMSxz=IJS;Q%wN+9Y4^a>zw(9sr4HSSw!yFU$So!M(gU}xS?zc8l=1(06bjK_UNG=@-v8Zd{@>^} zS}y-@_B-w7mjA!RW8{C85qFFyLh4hQiH+bdv!|}dy62I;TxkZQBAMTZ3=T@|7QDJ@ zzMe!<=t`nGoesc%Ylfw978>Hv=ki}CD;KQ=+b8#-gwFqZ5d7Z{(_6a!)ja{nPqYB6 zSpV%tPXBKC`1 z$G~RkVzSn8G zLzSjmxDkLT#vvPn>YwI&f0|cQSR!kyq9vDSkIzo7OTN;%C%*1x)%yax3Nwk@-hw$S zi;&C}s#}d)y8OfN=q(X%=?voQk@$Bd`)r>T@}Ig4=egy-ez%>I|F-(y%RJ90|EbyYAo)+#`Gd=U*2&Rx z%W<3Be{=h20Z2V5^mSKD3z^h|0`iBei`%33H$RD;_Ejq6{Kb(8pW4?qFTwg9{cFy z9{66$K%9=I6)`y1m+x;*Z$Et!_mIfapqU=YmB?Pj{aq<e%>ZYD5St(ioSJAtkuEAzC4uYMISOBdciIuhu?$P|*r5`5xp4sUWO6+;FJ=XnnXM zX8I5@@bmjOr?-^3ziewyVA`$?LOVH#x^o841h2x;_z17j( zDpj8lgoSTbfS|mT1qMls)IwF~H8;astLG|3-p%lKczOIY|Ghtl@qV0yMK`4TbxOQD zRsQDa=JfXD>{?X`@W`qn`Ya1_UH$g*;`mgG+e@dbxw_ny!*7PS?}w+?!>gmUprn&N z3+3qe`1I=L_T*x?4l?G(^t@J3Dx;^>%Wpe3=$I3gpKflhZm+H{|Nf8L^Rwa2>4glu z$=e{-Ze3pMZdww0+wjRy)!pz0?8)iy=JxFB$#Cr(<_&N@BZu8veWv)tCej<}O#`QY zzqvlTJ-U9Y2~()JK8!%w>+eltH%DjZ!{ej#)05|DmoJ<p+nh#VAMrwZ!Aa_?#u@_J9>i&!Dn zJu34^UA<2$`Ab%$?5QFHWkS|!qu=jWE102Ks*9|2U98FLS%m*$MMvbyUj;`DYj`Uv zfXZdjfYiS&PLscn`%_u0rrc8;_i@eOIIENL^*jo-pe=6KmPxcZ=Q9Jhis7!9YjU7A zKh-4M4bL>83N7+>9!W8(VoFObW7!1dx{sJCx&bR9+`KBE zcKL?wwUZC7Ev{3xuxzCwHk`Wum*)bcA+OQcejKl`8s= zvhGRDxQ6Nk4bP)c#0~4}@*?jlFITO=gpn&0&#*}5>}DQT>aRB?_o4YEua%WPe3R6n z?~5$!l%5+|*I-NnAH|zr-V*K$Y$OkzDgrNCD%{j``07}DItQdV#V9Ch&>uRarhbvV zP!5J@=mf_bCx&UefFyZ~$0`kDz5b@N&vNgyr?KKQwa=er@Y)-$5s8mn2fE~|%uS<) zel6_$B0`{gk7G1RVC+}j18CDAZx1nV-z`|w@-MoC-Mrw+D{xT$M$0g;ixjo}R=F(M zEj#*i3hwt6w6Vcwx&FsT>xs(WYW=U@Z*{ZhzwO30|L==DW%0k9p?s0JU(M#UY|4x2 zJC~}Z?4*{afi0G2l?akD8#e%W9)iJ4*=I9UtQeoqtic|B-du)5&u$LuSh`^CX5I*+x2V^*9umP^20xDa0?xgzRuyb2k9|`tl}A- zX_XYj^n9IUeEcf0Y#z@-LIeMIN5mEK#6ww7c26m`EUuO@QZFX_5HZ6-b*ZG`fPav% zVQLDescH$RC8RAgJU&4GUuyp`Q}tQ>f7_jW{Aatp_5Xj7=NaQa3mM%??_X2vj~N3h zk9zX?JXSf$!XO~`S23RB08P*-=OXGxLVd2Z+;R5k{mI$Q?Jw77H>XRSX@{pb@6S%` zpKs4zGPrbjdUbStbaQz<0M)-#D*&8b-5k9+KONq_IXeFN^x|Xys^OSDAnOPKKcAhS z4}UqkIsR#&?&>Iw_v>WSk^E&d=}5pc#13}WiyiEg#SW%qxjp^+@%j6c)02zSn_n)k ze;(eRU47^jCjpsvvS~mb6l-Z6-F$PwmMaL>D|I|BCdG=hvfKE{uOoi)TYqx$pBF$% zHqpQ`RD^B;qfmp2xK&ho*{f!FHxby)Ui)# z)O}^8H+ZE#gv(7u6&wIAkn$fw3Pm5q{lvn8$oJ5CC9TI-b12-ycoo5(bWt;bE9nLG zypa66u$XggJuhp$D6AlYSw%_yS78y3lZZ)4QIsJnxx(O;G>5@pSIXGsLUxYQmZtr^ zqN4Cq*MD0ZYf3y(!ut97bEQ_RRbYfaa5a?+kMm~b4u}3gO_6sns>~3BzC(Jx8KhwJ zCgJwIbkYQPRM#Nurb5Bo(OoHzcU{%oS#h0+-X;FS_FY|8n9-&y^2qz`5Hy5T&R zcaML-6iiVpFMaoY06~cELBQF9(ZwGtq?GReF$w=eMw@W|SsDM)Z)fvA_nN)lcK?5g zNAB`53I8`4ZDjYC^X5hNeo<8Zmiw=?R3#MomM0Uht2$hLRZtyGv@RMnSa5fDcXxMp zcL)TRjk~)$!QEW~1b2sxTX1*Sm;cncRkv={JWSO*_VnttK5K0wSED7r)zMnp3jNZ_ z3GH2t1tQ}BzX2~ql5|w2F1vW*yWemBwitXs3Sawq>7us>*k<%=`#0+CH)O-#e_*}h zGp_IrJSL8n#!Vkoa(fIHtfn{$XYQg_!XO*o*ZSetjpa~p+~nemUR-y?mj;GABY^az z>d;FO&l(@6qK0Y?u>`qE+TB|Wx*C`2o-DN`MA>|65vvH*YY@=oomlE+S1T3<-m*+4 zCU$Y>ulrp{T^pXoCuCwjVT1p3qah0XlJJFz#>)IW+sCt*)oZ0HnZa5oxKG}ouja=}u%5%U z-SW37U0{Zwbd9kkm}P?3f~(ZIVcZ&mEfo%nxJ9(P+gdl_n=0@5#7Uh|_T{U_Sq)Qd zljXzG`K=Hb&UvHlX}YS4k-or3n)<@Aid4UExk4G=mfn? zbq0~tROLmLjow_6mJBxhd94do#aq|w(N#b@WfI``Y2c{K%1|*B09vRDI*kXpx~KrB ze#;=hCHrhDC0OFhnp|4mmPN*p98qFGpB{G>{7sly?5WbnSKuc9=qj4q|E`C29*}cn zRP1SW$gKWd^C}57N^B^hpx5+U3$s-|`aKXn3IHWCr#tVGxt4SMWeQ7LT27uXPYC6t zu53Aw5QBgHGt1n^88N>6>nYr4`~XA~dE-QG&fHG=sWKQbD)-9&1oFV`c+Y=d()maerHzrNnw44EQ(3uUP_Ip)aBk_~Fjgv~#ie|I z2ZF_$Vl!!$qNdJ2vIoVDDNsiC?Yw!|kQz2@|Lv#)dZ*_;97II-fmyKvJh>xY^a!RL=~fRc{2l zk}c7|>PERn6Ld62FxpKJI{r023D&Cgz-^K4eK|G53P)1Mm$p5nPd^sW9&`-l@XR? zrlxU?6}KFI4SnfUwN`@ptQdT~lZj+vQnxyKkqr5FTr%StIm0mlBRhG9H{e${r+tXb z=*)6(bvTd0RWxBk*YP;Rea~RpORM9ZwBk)}&a%5+e$QP2=_;95O9j*2gIVn$s-Crb zjVl5ENbF{-dsTC)paJJkUz^g~M%$u6F=TqKb3eR~nD3 zmlou$_k^9e44RKL%aitpd@ckzK{qvvlR2c6EBYU}MqHYLWm@`1B<4^9uW(CpL;FT9 zHt-u30$s>-B|u4c?U|s(tq>BGzLJ07yVI0pT`J!fUefkrWORUv`N_t!nqB{1<#m_p z^;v~fYqQVgx7zNOKP_NjKK9#bInR}1S%Au_FMT<9>)QBKPUCq~^&~Wv(McE0m zpF}KKJCd{(uBSw%EDWVyb}7Z;`v&Q(?gcNanoLucwk`M2-fWhk+gPMrZFjKJ<(b{J zEPgM2aDfzWwr8&;u=jBSJ=Azq8Y(Ub%y^uy=kJm`GB_S_xvFFl?8_4T&V+d&$^!I| zJu01KkMv>vK?L|+XLf^#ySO2W*$b$2)AY%?0i+^jnOK1# zmbWBB?_&1U!IDh87&t<4sS6Icy6}t<7@fr_g^POmq#E`nGWG(!f22T3W~}X32J#m< zhvNK1jUxk;s#Y+FR%?{kUcRZ4IE(nxn1J@TPN6BB+_~gdw0mu0p_?D6`ufXuF<=;q zU^6jPNq2t#QPBe=Vk#SMr@(p5aL09nICm)`A9^q&$rBRk%*>MwA)ELH2WkuOCsgC0 z*?o|bRA*3E0{woP0clgB?;Cq*uBgj=rv+#i$TYDi7tGL`FzRapF*KI(x8~jNCQL6L z^VeMxl*9J+(E~ZMTa{}g`9k*B^Q|=$=0)4RYDlqQQ}smLH!Pyb+ICqybS$xE8^1ep zP`$yQCt5uADF8pNfw)gXzxdYP^MQ|?pyLVtpbDpx%ka9Zt?-8{-)GS$0sHsbaHoU3 z@CyQDy{Tuqnd64BH-gqk=Kt^Mtu2!WWmDul?;c>WXQ8=x*z36xR$|xAg4QqGk3P3G ztD0g#zF(by_f;C=BPIGDi{yV3TWHx&Z4EIUR6T zsjY{P z_yewIl8xhQla~NfNyy7H z={iF8+o*WtAyOf?d@18F4_I=9Ud;&R@k~GZjo39>3*Ra3*S+MI6JlX(VzATL>hMMKvTQKEi++frQR2aNe8VP~@RaaHl8RTeSqB$nR6`f1 z{_O^-roOV#54pGqWL2MZwCIuRf%;Wr)qP^o@+SICZzBDWm@SVf&f(jVZ3`4nYJP*U ztSe`MT3_bO$x0EL#t&%v@!v*YNmC2r9v^gU19HZN6a|VLB@e(uLz?hS1$bt3w9LrQZwV38QifFkXI-#`?-o>`ECLT{_&&axspGHbYjl zn{Xd8dQt>cK>IZc-g_cS>uc9J*0_NeSC9Vt8!>~>uw*$9O_M;7jE|q5mh(E%&_EUe z&z-b}lP>ncq@1nS8O@=0_AJIAGW%NsN$zaFvwZ!UFz|}(D4qenn#;8s_k}0l)xjgNDW?tF*$ zZmPGGT+r7lWw4?*B9lv7Ds@6wYP?(ZWj=r$*t7LO@n3VL)L#wDdam7D)TzE|tG`R( zhnIM_Z@hxIjppddJV*53h8s&BAec#S2~QT9=mkQVoMMhUE8qF_CW_l3gk!LWcER3R zCG2St#3n?&aBJ zFNaOir_d5@`4$N}hQ+-e5?j^^5W!D1>}*96!Q|o`MQNkj_wlzU2VhjJ-@M# zl(P5-oNh5IlCBsg*vLvvpDs*%EtQ|_61kG}8{FD*9W<}0h0KQw8?Lz@!!{bJ(~?U; zMGrVPuHWkC*Gi6Ta;GK#{%KM$a6Gu@5HPL^Gwb9@`NQJJn3Au+L%#%y00i0OM7Uj3 z-cX&~Xa&~If_QuU6+vgMZ7%@B1JqLkao?}GNE-1`Qoa8j|Fx0VWUj=pk~~daTgr~U zLKlBtN7Yk<+)AYd2F4jPZr&9dO1gqM7P5Vu>yzObWQ0mo;t46y;*fE4CGqjXi4M~v zUGB=7z;=!`>TD>AlbO4bH?)J}I+xO{pYTAoeX#{UzyWC2J$QTSqk&6*I1Q`?C|P0P z;CxE3p=0n8U1H94E8|di2AG8XDdrgh$A^}FDOszVHy@5c)QR~MS>>W5(ex6vA_e~C zFdL*to1W0H<_^^&OKKXT*hL=*P{7g}63R78#9LV&nCQcsJeAY+i~CbRaSP%@GnFLt zI4rxXP6B1eDn5SZ8+zb@?nq~BcbzHA2JVJ#ORkBqN0T)-<~Yk`&Vla; znUjCh->lE%LEcqkqxt~2^bpyI*ndSyARAx~By+K0QGaeo=T6DqDMc=hja}VtMm%2~ zFnZvA4VQ%%)#~gt35=S|ba_A)o44*!HCoW$jG+vM5S(Y7eGuM-J6krWZ~M~eqtEal z@e#nWYI@FP`qBpOZ<5^?I}UFLXg$$&_ivl`ru0bX$8#-H4J|pT)Q@N+fwg;+<56aH zRC7eAn>ee{L@ei$@JB-jK6+T(6*%o_3zN{N&pz@S`w(6i9fOP7PcR_-t2Q-oV&bAU zB#A=JlE9%WInzAE9NlF4+n1Z{gMJptR9%Y%nLuoi_mw9!EVUTj5RhZH_-fhaArkOm z5p+yl?IU(9X}xiWWCHTWzMVJUDD%~; zy__{c^PSXKAiLZ8(qudPOT(WJzKG7);<;zhwIK8PR!vIg{Cz)b_<=Q*QB%_%BB_tTIPL3x8F)3kf=q*)S_&*Uq@XLIY%JtivC{RB;6q$;tYn1eA<3IRpstBM z+d5W7B6<}}V|2>4sn{v&0JH`~+1$k!P!V?dsT^R4y6)Opgkhz7y`82ilx)96*q469 z3YOl2Hhn7IjQC>RmqEo7ptW%j(>3}Ch!6&4hVuuM{x85@v?MrD9XzCq7TXYb*+7pHEHtO(1uDq^E=xa6222<@Ao^#wsSV&q>%BcOF-o~p>}elfF)x;1 zlbp86JEFhcC*lp9E|EWdDkKIuze=_)KV1jS}>itepkgIP`t{qP6M2Mlsjn z{WzLmw6V|M^;b9C&wQmUCc3L=n=bX86^iA=XEz-tX=rd6pl=300#c{gz9ct0p< zL{ZW`u2KfcN4ZrIR%aX1&XQr5hY5z3GE@)814b?-Z3dScho6HJxlkv#v0gv1ciUKGiYU%%A^MX& z&M+n>q}k6Jh@GemX?>S}1=@5iDj0#gMW812AGunSr7H7&;jr!iI=1^d4sL5@@99UM=KaDWs` z4Aw(SEi(E-t!)ty0l!xqPR+P9St~MH3%+!-=S)rJ#IMqn!k!_WQN`InsrLKJvcm|$ zqy*&^gr#8W;3%33+P)S3D<{TttNGjO=Py@Rw_HVNn*`73j0~;JlQ^91kwwWys<&=1 z%UZuWSwstPg+&TJpF!sWuHT)N2K8dpHUq}LZNVfCr1t*)%qE`bkq>4#4KJ)H()%4> z3uCbxGs>QqjdS@lkE1&4?_Z0Kt_vr`<)crmMQ#~pilfcS_O`x1DR(THJuNV$;8NmZ z2~p;x`H?9ccDXCM&GQecy`MO1FpZ6zq;W;^;o@PbK_9%U!|C7YD4>gn5%f!t{_XyA zXi+xY4e=+K;XjjZVnku$y^w%|Jkz<}*B`(d-Fo-jpKOkqs=@OYskHW%BmNwh8Jx)= zF;A1)imb!OW~=L7`uQlsb*wv*aCg)gmC@R{_Jg3pd!JKM?nK^=GNpei%?eT7jEt3NlS2ruTM1W(Q?-8wC^|n(_;*`X_G-_^_Y3j7ClJ9wIL0lY z&QnTOF6rou54rSrC7eR|T?Kq}49HWs*dkX*p}l#3++R8$9R9s?ET|`XjM-~+*}T|u zbax4RYx6#(v3wNC3_%B2Fu16QNyFVvr#J5j3?^6TwZNU;UZ91W@_(zFtt;K=WFss6 zBy~|JVH5fICE$nfTTKIn4$iNz(+{EhlybCl zP>&*2W^;4j?!0(bFe_)bUFf_1-RNkm-*t4BKo?!hA2A#q<4osKYxQ$p5}4qTik%P@ zGfss>k=yK&iRpe(k-^h**zzT(+cS=u5%`2tW0q)$$O!C3CWf68fPIdmZXLaa%w}RR z^P5uYcxU>)pREj*HUXM)FV0T}Wq;KCM?%VeribI=seq+O97D5%{o|-|KE}6D%9GmO zCk7*fLW}anVf)KP3oiboE~>N8wR~^0f8+S;(q@hKZ%<8dw8nr1`~V(uo${cmK(oB9^S%ROP`P^Th>Vh znoJTQ++EVI%B0qjBDqq19JlO19+z7-@1UlP@g%QDPOo}Yuw9}tOH4%@k$y%BT)en! z$)Tyy^c`;JF*;1GQj?JSSv1}-&lIJ%M3l~{+lXPMk8T~p|K;gpDT$$>C|Zag{GdyS zG@qJjqC0zc0>Kn)Lz*}Ol>qq$;Q7R~zSL&u^k8tq74G7`exD9g9Jvm&qc+~ld?#xn znWxepQP09tg{TL1nIW<=nl>Ru71^%45k<t*$?AXjTMW4RyF|gn{&v5Ib4>oPDtB z`rH;-xyXwf`ia~;U^tqcHVc_6-!BP^TDUvXzHLe4!}P@hB7h;rovm;4RyAm98O7bZ zOG~4dv8t=<<*>@?(QaSM%U#336E$kR^DG}wC=O#NhogkmUpj^qs^@+sDko9lN@OLp8 z8QWn5k}T!Kqos7Z6kcSz| zbkKII7nS1Voj*qg_ED?MBS|V_e5^Tb&HKYircEP8o*fm2hyu5{jDJszG^J0*CplPi z#PT>3TU*K|Z38`bz&uqpnIf3*aS1~`tZDnGr)#HgVY?F{ccOPbM`_}! zPx1b~iO3KCO!tFejVgp?Ms9oVS~pKy$Ei_Or|%{En+At(^2aTcrpcts4Zdcr6zilK z7i87`FjwwS3#RVU;veZVdkXBeuLa~Qvm>TNcbTm!&yF{7W@h1NjC2Efx;+EaD5!+t zb}Swh{HWr}+cFPVM-`I7i|_C=_&0LzHjdA{G;=`Zqmx!spsiD`rWd1Eprnt_=N($S z>u0f~Pw=tuVPX%{Daz60Ax50ZTH_f{#Gx%kO!vN!<0yfP8uv6*Y|R3-g8N8x);$X{ zPZq2B*Ez+k6P;mujmH}EZ|q|Ud$jdinNUF4{P7ING~7^-zPXQ_CGRF}tfraVrCU1Wh`g4#&-y!vcsH-G4ZUy?tot0UaW{8MUXf z>^FFX(V^gVaq(vdkllUCZ4nu|&>IH4jQb4DJw9G<&wMrOY@@T>a3|k_gtbONJ&IHw zAhY7WDbNFHd^4zGfY6Z=c2P=27?bT@)LrO5qERJ1CdCU-_MyMho5mO%3!|0h`r?DO z{S^u7e)k{ANP>=C#7JhYITEHKzR+ETNzx1V!!YV{*|&{j+b@*M1-)iO2zjq{*F7- z{J)gqd)dpW;4k;Oc)Ju4hqcEPqzA0klIP@&^8QX&jh^`pOzjSVj2gM>BZYRbgeejV~B9V=*j1?6`5g%b=7^Zh{{e-Yj~z%m_*(u3`}}&{mX*a=Z}HZ zl&+J<%u%ijbFaT8qBd*#P-AuxS_E&4n7JMdRcnrYnzfrQWgj2VGl?8nR~ z2tx4B9%A4c1ikCf~L#*cW2fb8WRuNtoYCPRxa8Xw#Zvo+~++w_a6#nr1vsNu_2O*6>ot67$pee z=h;6lNvJdb;v^tKMZu}nG2k^uv;;^YmB1$ke{{6Nz?ie-vU;;#(GUv6tEhtGZ(s#wP08&forY&%;~1b+xsQbc!D-;{bW*9@%$v@U~eK!-N+xACdjbr;Yyk z6zKJ%QoB7_)iMB1el+}@U*pM?iJ_oa^Zs|a?ZPSD;YZ{ykCARcWw_Otp%uRi7OZiIzYQU-YB)R6}MsX)*kLBiGx~XqEMQj9`5nxJbhah`MT*Y~Z z5_jUpYiiV(?cyI4cJW&~Bk||SL6#pM$~Hyy z^Qj68_YXa8^qqyjXr@{|fOVQq3|nknb&RF@rQ-m@omt+Id)GqB4d<0S^ahAz;tK`HVbt3ReW+<))MWVvSv4QGlJYIzv6x?O+UXYb&6 zRXYtxzjazI*Fen`2^6Lg|Gxeo3ER3el-#brS78}jbP39 zadOIi-3V!#=WmLhRPXKajS+}pFgpj&OG~I&6~#h3;H&FEvp&{22O2rTVdPIJAxPpu zPpBrj)%^l=uKGi@Sg+hh+BCadc?727{wCJ*9%%+A7RojQHM`Jb-jpYSgYU8*27*D~ zu|;SODC#3hx8tJ`R%CN44h+&Ze@_+le^PKf#>IaH3PPM&QhQ*gm5LhB=+)?!AmRU6Pmh$UQ69AVY;)gqmAqIJHN z5y&?r!s z@U`owvHBbED#}SI$5uXAn z+RM*-7<#!g0^k7s?n)~X(pPk+fZ1vh)DIyzPeca+OEf!GXq7O7RU#xDS}Ib8YhNXM63pCLf*jo$~I;2Tp%oSpYu&OMc+IEp7@fI zm3#1d?@vROZPozx%kIVrcKy?p$g0BnC}hhBb~Ev1gw4iWsLL0r^-=JO~_D?~F_Gqsz8Lq#W&u}{NL2rcgYbyobpwHvyOpJ9ZJdTpvMv@vEje1IuN-Uc*y5QOnL&sEfjX^A z@>9ViKNsp7X$~JuNAI8c@0>p=h|@=V!r&%-A-SabA^6@PeAMR7;7vQZkRUs|BDy+k zbbt6Ldg&GQ%QIA5jDyu}X)2*ASXU6jYD~7bX8;5|=UP2kVZB?Gn(e+d5w~{Tf>gz-Cf|op3m%{k zO`RE*Vdd?1C!`i_y|y`{%DU-VuUst(=K6b+Vh&}mKi$;e|G$A_Qpg@+> zfVN7bQH>)%)QWN14c|a4%OQW_Py$B3q8&p-$z}*s*0X0rZ2;}P1oL9kUD9{Gxm0P0?4Q@WEYmt){k!DLzuW>3fbswKNAKo^ zGi{sTWMqy&kK-5ZTr^1a4Q#tABM&o0+DH|X zFx*Wslw~gBZFWPGxJ25*fNnUv`Q5p_Dbq2={7+-=MUMJ=X&W%lUmK4hh{m=U4|7Ee zKW7J;EVSxTX^@R_qp@9oalsUM)0ZZfo&1VZbX&bFKb|#NThW&}60dL3&E?wo0u5;k zyQB1kI5Z&Two`oSK9i*Gy^qU~{BI)H{^T$(T95CSwrIQE=L)e=B=7ei*zF#1ogv?vZ?XFXdo3!7yq91U^8sHIm` zMy%#2RFh>tCaKs>2v>NqJa^ zEd4Xa4i6nkm*R&yyigB7HOR!sDpvcBEUd7N2P6CPgkPAGEi|A~<`31yl24JUw1XyA z+1i=6;Xz+W1m(BWTEM~ruVGncYZ5Bn331i+xKXY{F^ymVY zMZ=!mmdB4x@_z!UMSMkP?m3Xp3&MVCo8qUQ;12J&k1qgeFI}s%U1jyRwtZT=@@0jTbWXCWM`5ZU;~BUBKcBc^*d! zMQzoVq>6mY;+RUu1N&T;$!Hd4Zi|>8Eu&E#>W#-7Z zIO@;&p$N~?o{hbJa^!vQ5_2rkc=gR-Kfg-7swyiL zrN~dNFqX-LuWN98ziky6hn)i+j)nMq-rPU?E~bE~pKUSWkq)AahsF5ODu&Wf&YZEl ziqA@Txbu;!ZeKpk*0}5310^3xIqqZE(E}2S#K4$_L{EU4*|=3tf~4wJF-wa zMoWLRpogTGhkZ?iYATfKiGtmGjB9=crw07=sidY?X0DTFlq^aaXYeNJ&X^6Ss=G&Y zHAouQ-8!6i_8=Kz$$^^z=qx4fBcUt)p)sLM)ZLHkCwfvgCFxa=+?WS$)ZN0%wY#<%CoptM~!4N?%CjC`c7NcLJvRYr!`* zR-5)g=MD~E2006U`9>|vu;Ivew1WlN7u#1&_($&w%EoTPUPWIm3#-&sS5Zb;>6Oh! zp2{Wv^XRlLdP)2#XkKWj(xmgSYZ6TQSBCM$qUoYKie=E{<5fD z@ENncz<>Q!VD6+4;jf1Wmk1=t@3<5sO8QN*F1GepKk?v*Vke+Z+T)_aHj2tnT|#4rd5G?`F;;crQ|)1o1lM72GCS?)~~~ zV_OD7Gj!T}EsYrc31@aL( zQsqjUp$v{R2mSpTEOrm2+cS~)b`QEeIKaU`el70+4HNOQA>b#B**(~EmL;D7gs(F) z)vs+iwg?kZ-W|^r3ucm=gVOTJDmWDCNGgaR=m14?@B<1@Z1I7BUIJ42J-B{OpO>+l(H_?j(xjnZK_bhx5V`Vgx>%b(S4)tx@h0 zh8D479+Si4u~OUNJcW`Vt_83ePcZFtkcrcuN6_Xva83W;S5d%!0TAti%>w(MQV`qM zP>sEE|EWPJxx#9zx@u;Nt~t}+U|$C(H@w3h2jIIBtH3yENd?j=JdLp%II?$Px|io@ zl~0bImMFuIRwe(r+Bvv>L;2Ld-3A+>nRI@_q}R{!ve7v zRTEJ(v@?X?^X0Pdxlx-2y(Q=u#OTlWJgU5a9=BR^K|cXj0JC9G`VI4uKin9#9J6OM zAu*-A=PSc0^2s*MIP5pU5f!1`s$}Lv_as-T&eM}Gd1I3!wt6|{kGfzJ=5bP1RF+1* zSN@!J)9doLKhW@J?qNp+dMA|N%c^jhH*Si}B8xAb!F9=pB6~gUrjjQ;e+IMa6O$P%JEvjF( zr@y3?w?ME}1lNw@<{skLx>io|J@M&!D1#KQ@f_0-jvLtAu9)*QlU4-T5lPQEWNR79 zhP#xB&X9cNef zIhQJ;_*1%&1t!6)wP43N1wV?zF}33(Pa5q*2OJ~QD@!~bo?3{h4r9WaQlku&Vwo+p z8S1y30$3P$A;)tl6r-C2X6&qbJin)0a~V+^RbRdaP^9x8(U1H zfHxmH&`c>me|^U0V&+pWz8mc}y=Va&720tz8+1pBT#>ADGGlr-SFA-}R&w%dExqio zAED1OkaWbK>}!%4PEndE;YD`RDz9^#L~s#OL7vbi-ZAr$^$^-F+mPdzI=v~1RrR?D zwG0E9`g6^&{C^8_m6&PEoqvEmL7|Gqlv&T(ERCaC?vIQJ;h{l@s*!gx^3hwXp| zy+H|F)0CI=8-|7T${zEE%$;27_y484X=dPjSab_5)u)Bg3cgt2Kb9(Xh#ce^rS=4b2y>Eo6Zqw;aQd zGes+HsKytW?9Md|ikLUTiC2aI-{Y;$I(n(WO-2_LS3tevF;TTWnNLP9a2Mf_Q8~%@ zee?vM+5PKF72|>Y!!&|?jcO@ zJHm;PgyH6eoMAWo)PM(p+-_eYC9;<*+0&kQG?0UjhwDTfsI{%9B?**vqdo?>eK55U z27jEXaCT0otJQ1~|Ak~bFII0&) z%!qK?dY~>UvM-cWMIWC2-CC`sH|$WTq9aum(}98DTeJFJ44-hAEMB(yL?WHl{;5A` z-to?Lf3<5PI^Dz;Vu|!Ik;el7j2A$1}M`8D{Axk5)wy6DrYzh7P-j6WF=WUZve%i- zJUF$k$@^gHU|2P4`n=#N@;rsWrrBw$emz(}rHD6)u&@Ng9ay6{Q*MkYjVXKdKV|(N zh)FOhK%)X~cuFY1SBeB+)`7WKcy}&>I1Nq+^0Noo zzl%Go2rqcCPI3!twzy=QzzJi{aQ)Te76fKVe#%00ed$oUEtvG-VP)n~W()#q=Yp6H zcP)Xw-4*u^8ElqKZ?${JsgR$<@ZFrDumf5Z*e)p7&S)wd^itE#Sj4D*Q%kspBlngM2cbQKtnpPc@Bv58kV1XlB8 znYfluYh6ykO;g1oj@*lp^cRkhEwS=wm1>7i~POH}oEH7-wYXVfz~eHOPls}SdEV} z;O^WjStz;@$(CJGLav*t>ZKY{&Dn4~l$WoNiVxCSefc48MHjt%zVJxd1y2ay zgn?BMq8RaMRIu6ER^nU(zs)X)$6RN^?d0%%IVq3@KaQr~5Y-DPB>1xEj!8uOz z3lDXWMW?aJLe#f0KpgAGddrvD`OMFrwZ6LG`xJBMVJX4=K}<=Fz;Bsq9H-18Q=dLd zjrv=diHa6$5br1SE6tgxD+<2DRWJKe($dec{1@9^J{AW`{-AlS$TNCY;`nWzoAnIs zAZN$l#s$`j0mwQ(XdHR7*YqbM!fVGKomU3?3Y4?6vY$#0!Nmf*yvyY^H~K^8$cDKsDWWbE`lXnLQD`$ov5wkaGkKzyU&Q0(SlaMy+M6%oNZV2wqo?Pi3A9DlQ&W~S*? z<-TEwXL9Bmn_A^BSx<2d`!Hzae;!=Xu6ov!J#kfhDcc&;oS|1LeGeaHJ?NW?%~jC* z+|YRe&>!0j>YT7Mx7=khxP$p&Vm7cTlp2S?;VSA>grm&q(lYO6)yjywVot}2mbg!1 zfiXcXHyg*`wca@;kC?;I;q8YWImx5_Ze%em?`$Z`E2uhFA>sll&HF!T$^qZoZ;0Aj zJ>Wk9Z*(638YK=onfczlfepP7t3RvEuvm;?Cj&&OrOVMK+sKp{ija2RML*AGfwRf& zDprQK`*);+L2^h`aXo8PX+-b>UZmAN#g7@+Uz+z1} z!TBF&n+@hSri`ye?iOn=U>+yyFzQdkE~J`rKM|FnLC9Be8lG1Ezuviz0X`dD*`arR z7pd=kDP?(}a1Y&8C(Pl5=@6P$h>rQ><{2i|1tDC|*$S{04=lkEPBkUJ7$RlMuwGE!TJ#r3gr&!xi~2?2}%C9{VU;5Rg{wV_J zfTnQ9gTMk;7j9EcmPRW7iZhhI7wq`N^Vye@DEJqqi*G~EAdKZq=I|5cb*S&I!30bm zW#s0U!^ii1&j?XZY{`sEM7FlvqL}wE=7#K*EZ1|-*9vEw!&7e%;uS;}p`VAb+h&pT z{%6HY_5ezib(X!|Ju{quMTt7(g#|KUpVnam>Ri+TSqVl`$-+3!;$jriq$#8n>bgfw z1Zh0|JniG@?ItRJe;it*GGY^wl7p9*V5u2-aJ(dc}dZ z1B{=Tj%laN{G`6T4NKq*vH08jP;jz*Wmt_^244Iwwb5Uyn4THBOY>5`mD@wA(=iQQqos0AYxU4N6P3`ncTWcI^WAooUW!Z+ zGn^M`wy!0dbj-mkmf*MZ?2^V$9n{R!`aYyZEJ__~Bkar=0X4DALJzOnRIDayskzTn z;RQxj@g+u+B0B(wiaQU30!!^GJ8NCTMNAz2n^-z>DB=v%)1GIN3_Nl`=IZVAUzOS4 zd*!%}@EkJ;BkMcOX!wbJ=?c{`a4kxqpEEp1eA1278E4q_lA!I?tu@9W5Kw0rpf|48 zHy>^aas4mBNW);Csbrv~_=8>t_@Z%b#VU(pun=nBSiJ`8<{DwDqsI_J6NNTN+k(@^ z4+gQeH171OUJbBOw-kNeuLZ^Ky&AoI^$s@9pMR3BzJD~6QH97m7i?S)QK8a@W!_F| z#SJ=%OVWOLbg9pq;gqx_kqYGl?`=2oPic%m|HG_xwQ)ZXp=C@BfSpbQxSrsjKwO$H z`RRA;3HQU#cQ5t*C}l?)Hb`5ox6zV(VnR4CH%#wZ$;D=dD&pt|Lcb<{26xg9*OoJ& zJ#yAMS>|8}`<`(wG`-Rl+oOm-j4Q)WK^$vxjV_4WDNN5PR;=w*9KWBA<$HgEPHv1i z;a`keIo-LQwB7+YN&+B{`aEb)@Wc0xlZPvU{4Y{2XDuBHwXizJ3d!vfg^RyGaKgxX zI3lLZ_QOg{h{sCIT|)U=SKB91vHdrNddm-|t1G9CPa>bLs)w(t(Eu_kV)){jppMb zKg;t%VVcspV%lz$yZI&|79o?ueCf06N`%$a@3)&Otur=yEJLt%tGKwq-z@N?9U5mi zRBl(SuDZ==+20NmF0t7=Y8NAkT*AJN0_dQdjOeX4jPDVnV`U1R=&6HGq5WeCC-RjR zB_$FdDLMUjuZFu-sqq&yK#I(*C{_(yya(?28UJqBCa@cv+Kh-H#gV^$y5a)^>Jw!o zFy18k(e0cd`#DdJz7K!k5wZIEzBsEE{m^Rl)!cJuJ>W$j|=;qc#@ zoqJH#!f%p-sC>``%q74_2gXAh5@ZsZ`6mx-pYMQP( z$9#nnMX`OvL7IYSVj6msJd0!?L5DxBX?pUd(*1Gdh`#y9Ygnnl#94bH74WM6JXeB0 zS9~SmxZB(Sh1DR>)~o1c(2#^f=$|#B(!Zn4ffoTOg@xs$6d#}A>+0)udwOvGdVg}U zG*14=^e#^U+P%n(13NwFs~LQ`IvTk=efOZ5dA}vvG92^w^s#u+i`3r^9Sv>E7vCJ* zh$nHxh}7Y%{zk&Kx#s+11G0pQyKI4_~h#9_RY!PZ%Zid2-E6 zU@IB*ah`JdPwe~MTj2okc>aGo+xGeI#>UG3e>u-I@}IsB&oAq7cnA7@Q`bh!(?N6Y z!2f2PqXTRv2tWo2r&-l9mXmY39XP2YPfV)}oB;QQ)mA9Thqxl6{h2`3FuFzP(>Zf;JuS6?_^YqEv$-jw`3m zd7ozdpBNj!$!7wy#E-@7sof81`M(|iacg&be|7%9l*i=%y$lTjG=~>2ZCB`6E$h3) zg3@eG%|2~n@XN-We^)Y8r$&)mfyxB+oNJnrdcCY(C#|b-Dv0YpfWWQ<2VG>}TkQmM zKhyC4E8-`iAERVS7qA-szq7w*+kdw9ws%(ie;Lm#{2Hryu<*;EYf%!B@XisAZY@Qa zoF);u`fqkj7Dw3mS#DM}#g1}EijtC){~QlsaF0hrT;i2w1pg}P9l+z=DUStKQKu#} zm?fUeQ4;hsnk(t^VFiFrNuAv4q>;-pK#gEG1*i{cBfxqEX9I3}+CFyW4Hk zxMFYg#~%|+G8O}8`sSiO%x?P-1t^4Bk;LD=J>xU&`?8)G(_S1#8Y@9{qL@$GTtF}h zP$;5)Fl##d((tkFQ{V2orJ@{ULyx z@2cTPz0#$_%DBHBsD&xwI4}q1N!>d;wpNFz_7TfO|OcEI8#$Op_yv z8bO}R#F7>nRYe9qoiZYuNFlK^>*{cX$!|V(<_j?)PDg-`0>}*@2;4z{5|%GDPo3OH zg#Gfs`ae;W0PiL63N1RYS^)h9(H+bZpTH8Dl*{g_=9I)x^&~lbK!HO)DG-A;e%>o- zbpf4^5~_0t(2gn{^*~I(y56oT3ci9UAuX^uU9VMr+3P-wn4AGJ@Ds41cRgfYa20JY zpyxvr+9S^A+dC9OeZlBP2`__8>@W?7O;-{#Y-^1)m^Q-fYY>uxnPnk~Hf@X+Kucyz zbo0(k6U3?}RhfPd-jHF!FY006E62dqr+1v4e*Nc%)|7w}zGSkR7F;tRc z!qQ0fVOAzOc3Q=`p;KAwBFexzmHIkL!fS!`zVTvXYv-}MbO*@;gbCPWDY0ma1<|lm z5Ch#ktC~?|JF;akW-?pJWhY1UIdvB95Jfm$luJaJekef*EwOSnlrbLZA7;57cxnHZ zYQ@S+wW+9OyEByXo|4Jn>hwno=)%~I1-CX%Pg7?*C)=*`vvacLDQAKP&zcmoO>w8t zDQ}$>CIwxE?t5@7n0A$Ky=#}`etCvcz_$fDJu}#YS(|BGcST95YKB@Z8*Me(9E(vQ zKbkOS(h(#A<*1hJfI8ta*oU9Roq~fy;QjB%&GuhzK5n%Ca`WP2_%OU#V^e~k=^djq zf+6>~8l{+I&>!ZmJVi=gQsD1=5)90S8eDLgm#`K%Mqzef1sEcN#yNfG!EcI%Qfkv) zJUG2zl^8e{x8R0&;KGB-eR0GOT1`+Cz@>FJ)_Fj zCDaoMXhf0MLW$%Z87c$(dzby!>6Z&I^NjEVLN*a#G9~!(Kbw z)rLoH;n(M{&JV!*BqD%7Ofcx7Okyk2W?9a;MoO)kP!+D+OQIinA|%fUO+m-cPHfxK z6K<9*B$;Sav{%fuX+zfXY+9YFl4xhh$5=60k*8}}<@5D1XRK;lpR(sAQ+8>Sc7fCO zdz-j3OkFhH)SbzV;)i|e<-bSI|FF4l=l|N;*xgyhe_zT|FaJ3>^6sP>6#aRyf9preTGk;Fci+0sj~CK!xKEGDx&Euy!Wz(gco$=<0eNZ98JS9xBW; z{amf!>Sp?HBanSPj5jBLchsj0y1uT8s_uXw1GSfeDOfV68ibO~*p*cMnQ=m}&JIId z#A+Ge?BQ^1vbAPockYSvOS^>KmSmlrA|b;&KW<@nkJSa(2s15!An=g^yK#l%vqH#~ zOgP7Rii28j;H2exF9+PYYfML~H*n%2lhx2ds8lYeu;Zk{q9~co+-8-dlpQg2TCi_G||Z#TAC$x z1ipJSU1GRF7Orsa*! z0{QW*BC|7a+vg1PwxB{ z3)iAVS7uV9G}*rd+v!y$fsY&BjN&eb=~ReToPG6(rxE{`e_pYre>JT`P@Vm6cf&sa z+1}aPUGe{AJX0`D&iJK2(Dc%Ojki!S>4(L0wPYX#-g+S!AfKW@%u&z=XGk9RJop&& zqcKb>Y($2N;<-^;6 zQ=|RAxXz~11#9)cJ=_0xdt>GQyPRi={oloH7i9r-bKIqy0Q2q0vH{9VKnt(}*2Q6+ z`d(IA(z+3x-n_fLX1CczbROVUFDNMnOey<`6KG4G?cPcZkRbVkT5o^~IvP+Ib%L zX~h5MbOEp7{~P<8w*0@jwYNI|U&=EDJDkY_Toe*f{5toFy>LFtglx`8`JW}af>SRL zUbAwZY97SQ)yD%K-u8gU4??Ql%yT)|gjpq;v+SWcFMO__xz{@X%C0lY6g`3S_A3SR z`MG2H`p3ZlhNBpUobS(Z5x7qN+uhl<*Zlgi?_i8A5HWk%9LQ0UAi_AQ4av{HSeF~$`S%d`AVBGa z@)R3?^Rpb??0IoDMdH2l5JXTp4TJ)hb z9Zah&I@b8s-pVvkXn|=iTdJny$xXvsmsXQMtl&BY|DRb3tl|IL8+-Qo@7DJAO8#5Q z(}4e1EXHXs0y?5GIf5`*dgqm5M@0=(3&WJKxJ!}d0%>m(HvlFiKWnVei1o7}$J_WWn35dUjyZ*~5^lt;uO z6ypu@vwfM)m45c)7?44Pft)4>&%S)AQsN}MspIM7zYm@P!1d|_a6N$HZ>jp`Ej$B2 zQ<`~MU5j>AV24tyB-3n*MOfc!j*6UpT!26vntHhsF{4%kUR%>wBqjs~QpL&IM zD?Jfh2=HdrRzycQLW!SE^xbG&vKz4$SN;Z1`jqj1;ztS0y0?DT$8#P2H_88P=YQJV z-`v<<@&9E!BL6oTWeEm!uz8xy`ItYSJRJ(oVNk2s0=|8FCdzU4On*?mOyFmt*z~~9 zNJrl(SWyvcjd4%Tjz$=U^v?_?A&X_hSiHdPS%YllR!5qcj- zW&MqTA4VBDiqnDLYBkC7!~DhaX{>*9s`ND^FA^l`0eM_G=D^exkUtOX$%^j&Nt@(3 zm3XP*l-7*Rrq|n)!=YK7sd(@lGiWzl~3N?&PKI`-{b=345=qo^VIVd;OxLB(7Ig zkzbUg`$Vf%GN|yA(Q}VvBj`CtcP%1t$VjusX-~3fcs1(vqR+sS>*Xtm(Svrm(gG2R z?UtLx%sb({0eceY6=gm4gN<-WJ94rb$1`S;26Ht^1T&*TNhX~`Lhu~(jPu6T84s)n z{t(82kD=^|hN9iPW0i@X_RuH^?R+<8nSxXj7S5ua<9uJfe68jW*@dtYXm+a0+CItQ z;IJ1y9<)DfK%%5Vc5OP~ae0td{+JBGp3 zMp{!w$ak(>l#sCGivxSRV}Sx9*t$%8ik|z zDcZ`KLp^glA{IiD7m#?D}lU*u0>|CHiJ9<>zs7^ELl-HC36zol>7UfD2V-mJvG=*BE z5z`7aXO!Ufx`HvyYK-^8;3!T-NVMlxp>jtzeUwX7DuLIb<}K#JPmcq~kj(kqEEtNw zU(=v>r3JFEaI4ce1THhH98#Uo;>P8?hadnyN0@jD+1g$eRi_Fovs2Yq0ZfsW4nbBhPsj{Ka6bW`N$|kk6(&hS!`n42gH z`XDFCdCG2BblH7tP`5P4M~jyugY2 zupN$KWlgtQU>$y-K1638+k#RQ z>MVZk;&qXNML@;5!vi}Vr71;1yc4tX-UHtC|4cX%A$hB#Dwf@G;j0=qNEZEaC^R zZvd2meg=I4v(`)YE`yAD0+@_#d72F}%Cwy!mk>JHC^^FKG0fNimlt6?nUnmM*+i6VqFKH5%psn?(9o^INxM=6Ja9 ztTF>D8h-@@F+=7&@<`qOA4feHOoBPGzc+~gyuWYn|C^hu{O?P7jQw8?_F^`D1@5QV z@U`A7db1xObgwhLG=o=!sv%yAFu5XrMhsTRvXtr-;Aa?kz#9;fihr11o=oi zY-bdmm;4{GN3+0A1!I}XZfSARmDw)&Dx7Y>M+&9^Z`C=fXqo-n;2y8s-SS>`j0Dru zIo0U6vuxA$9rtn!ObY6#@L`^xm^}UURKyf5+bFr{%2tpV{`_WgZo)5gOUzcgSB)ad z1^mdFLuhDG(B^UO)t#^Ambi8bzJer5LYNS+Wp`8fE0>OxSccB^H(L)WjMvcRJojjw zv~MbuSfYO#)5q#*ApfN(Bl89Tt&9J&wYP2ie{FBA%Ucqb}1@O!t!k6k-E_oGwCRhPe2TxJREj-Y1(O({M$eIxbB1>zh)3JPddlm*A zQPPxNI6N|d8H45nrQ~YCc--)apYeWnQ&98W^x5>OQLT$CP?YrZaBYwl=ZGI81*lgKV zJQAcA86qe^v2L#*L0V?6Fsi4buDn#dZcspeEO#&L`Eh*b2lub|ceQs)oLcU%Zi z;N&j`u2ZbeID%C&8O8DRi);$VC-cy~`vP2#GUg0KaX5qI0cH09B`-llK)^hJutE>` zBZ7uLiKs?AVSYbE)Q$*CZV6DYm-~2RaEQi`F8pB!TtPx)I}8~7oW@ZQk(fCx(~g6O zD2|O#`N2^w)%avxkDUoh0) zzq;TohYcf3)Jf+{G8*2&tRvzh4j?VBk$|Ci2W3kf!=o4@+CJo1VY{oce?B{IVYFp% z&d#ra-|JB^TOW7M!CussPhtHW#(&Y3MZ0}4xK!uYO(StMh6%*j10LO?BJnq! zrDT+vZXgW6wdD(9SXHE{rJtpNCr;j5E+;?34##FeHP?1ILGX%INhr+#={f=0rl7$b zBdk1U5;0f0vnDPPf|a>K`5F)_j1i{&TVnrG{9O>cazd70tX5ETa?H>@j=@w;9(sHE zkDB;}YmqLr8U|R){wVTgGr(oyVx&onB_&G_DDt|N6qK(E*YR1wCYYDD;0SXW!^-I! zq%~CHKV4z}a?b`(X_YW#h<~>@JSZPa@tW5q(mpq9ap#y$@ z^c95ZF-j-y_^Ks4ri5XO4(|9rIE4YolR1rH_K-yc@=aEr9}{EdsBKog=GeZ2Ss&&Q z^3SgJN^ViG+&{U{9C16|D;WEeD;S_8q_Q*JYDXEo9%K*?P#jV@d=vx_WBrwAKChO- zEJC6D?Fhaj{{OuluaM}d zx%_;iC&Tc?>64x9ouR8xX)IVbkroUC%_y&HW zd(=PbQ)mCnL#8~|{jbffz0K{y{ja@M{NJTKhWK_V2YWG+o0>a6h190?X3>T~1-c-Q zl?HmMkhIJ)O0>vdyQQf7dlfL(u02(VuCe0`IH&BI7W9cVk-<+RhzUM;20)OG4n%l$ z2~B?P1nG#oCJo^bWs}l!{4>xGu+|D;p}u{4#{W8aX4-=6lA>8I(_Z)(M@b)SyyTuR z+`orSyNJ95L+CTlqfx@@=I3a#TOD`e?8^34cjiMuBU&XE%ZSESsX>2nMEF`q!-zOW z(FdLoy6C@9v(`&I{fkIpz+R_`DP9zCd_p zIjV4CH2`B$%<^LapkN=bBN-dSk?`W?Iam}CO(aTk1{Rz%^x%P_r==HATAE?p>DI6H z(CHVA8{YYFzi~M6zZ8GvZWbu)I$UCO`zv$&aNks^cI&U~Lg{f2c3(y@mZupFP5)A| z%9@xY*p#z)gEh4&NIH}C7M*J#4@+sTb=4TkO7ftyNQ4AkF{gg^#&i12PscHCz(?k{ zRzA!5YJMMHGj7pix1*(@ z-8d8qN~w$Y2Y?*~9(21I?8DES8?3o*)_t|}8ycNc~@HD?Cj#h)+@aN zL!u9v9Nb+kd(F%Kraxqy3kg7p-;rmj3y5__x+tF%g^;GJ*HM zTDA3$Cl}YR-@Uns{`M8JSO3xa+nVXZ0kaHc?{L2yH4VM>i`b76aGDURl8^RLbQqcQ-bMEq4aH9Qk#gdK-pZ-8ku9bg#RwyYIShWLvK( zWUExvy@BkrWKMaA#)d&x8pV1z8fZ)MT2p4R* z<0QMZV2ee$?~0~UOC)A6ylZSbUu!(HR1vCk`xJyA$|J%cW!rYURUN44#hM)sWZv#r zJt{WPU@xe0HnK-vjc?0sCOOt;jZKGwzmRT5P&KVX-ln5qA@V_HGcvI_E+teEqYpB% zkx+oyO(DLQ^W95I_@)oL1x}qeT~c29j#ZR6QRXTT(S#JE{gyj@VUyz*d!E=SW$Dh= zLvf5AXtO<(4Sj;$!PwZr6pz`$GptJfE3mh4b_iHi*V~G3rZ5sbiT$_E{%RFRB;|!0#@{^QF*&&H(GhO71x9 z-@ZNb>85g#MdK)jeRx9EW~Sg2K$I0^2jcQ|Sg4kNVrTO(2+%OS$WSkenJ*>XlnRy1 zV%#-VKhWTTQ7VgjZ&BdK1B8jktH$!TY`mt?l>ZBCSBAh({ktfRNCesGNp8If@;Q|k z=}<|V!SKWIz!q3*D*@21IJ5X-+*zj$fR8th`2W=yh8apZ1o~HF9P?_^Ajz62Vp%js z9Lt5dbgo^=6MlI9t@m!x$GlW_zQ`B6<4UNsl*0^1n7~8@h0@-XpE78LOq~Yi4*Ruv z_Ic6rB>VLqr#7lCAR@K4)ltoz)}G2P(}hU8uL1E|1+|PBUcJk|jFf@flc*h#~Y75$M7Uo-^<<@Dt!;9QCQ5$w}(cGwnq(;{iugtA4|5bOz*R z7WP`0<@coK7y2rFNUD1&F*qN?EQ>oijeV`&(Hi9ofsmj3EDl;%!XYM5kmjP;myv1%CkSFhoS3J3$ z2g4bMw!Ru)#~Y2y^R=!jG&L>jgsJGU)fLaJd@h33SQjzJwncLRjD&)=jI58vN!W&6 zs*pC_p$nZc!4$3rmtwRgG+_NG>T;BjXb8nU8PCwNz4u9g5)QR8ZAp#huG*bGgGsZl zH@_XGAwhEX3RK1a+u}@VEi6lU4mH?E98Lu!c@xp34w{=Ux%rjdDGR3?m zaG0JO`m9h(lzWm_9$8m~<|*+EGQ$_3j9fBK+R#qPbM+M^SP?0c!D?)%H2c}I)+BRo zQV4cp^Z?dldArDX-{Pm(mWGrI)en9`n4`#Dl!UC-ZPg2(`7V1!}DqZGb{1hc_0BS=y;?D)6y-_Jncr?jLQ3aL)e1-4V0Ynv`LC`Q=7 zi{aJY@r+sctN4QneVXmP5xV)#->i3aF({^36II(q1;W!T3pOL{gfG=qu1>C5p4}nsujjv?om@^==he~i?fHk3%gfVOB`bX4OT0v)W>vi~Lj}z{B5>%EhRwF?MPnQ@ z(;kDj@HM5$$+SOiX9Tq}7z)iCd06k=Zaa4H=gv$%IQ1 zhFvIXW{dqbilGO*Uq!%@YxEZN@p*ERWhiqU`&j|FN^`_cBNFHw)9CB829`WSY-%Kh zb<(%lpouvnds;GDZmU2JZuz^^>UpfEZvWSgs%H)XQRDx)yT83*@Be%IEC0`>JjVX7 z4fX=Fz-dr_3L(Jg&!UBZF^c(Ob6quF3s4BJU^a%?X+J?33=5ZGP|}O~LqGL^hhdOG z;sI|Q5a-31m79_GfjhGB!JNv)NOZgV0$jg+b$I|}EYkk~XNZ6g$Jb2UK_ddLuCEGr zgw$1G+cSwpPhZb(5|{WS@gZGL3U`coEW|6~6WANYSCCkaJ@PiEy39Fbt6j~TE{0hE zNp~Eui%xXHVK(6$;rUHeofnzC9Dt|adM@c#$pm+}CaHz;1G-;TxLWZpwTo_1IbSf1 zcKLgE^#wRf32vbiTx&K5(|tjuU^*Y{Yebf4svvo6@@cAs`qWWhN|XyHI6S&@0u%42 z0ma+TQ0n)k`szY3FW^#CbhERgXH_Pv3!TY29n2J*8?Q$1l1r84WPrWsGw`~e3!`c) zS_w)TBJ6TF@nwoCAM{Z6;AbJgv5yDfW49L7wKS)wy|6$WIKV@y> zGzt1iv3JTXq|k7&16JBRRV7im^VEE_O5_WV6_agPrQ~a1^q8Af3Jisn5kKs#d2Y^Y z0V+%~tq1wrYS3RQ!WK*`&>H)pepGMmfGo7E_0C;9mm@pHx6_HoC4R9o`J*ENlfGxM z&0TBI#q~?%#kO_G+r(8|UbPjz&X_77c|JTkd3>x;k9vH}Q~F+{26RTwXrtr#3d4{J_mH*^i$XLx76T4=gceEhaW*K}ZM7iqSAQex@VKNWITCff&qLd~Y z6DXo?Myx7c9T6F8wa7(Bam;hpinwnWPz^psA?|8U6m)X&>ULd~6m#g`Lx5p|Axlz8 z6$3{CD94Jh05WBzTAwi{m*{FCJW%%qxPk-(BTUc`uoZ(6=BJUuY#3q8ywgi!7wM{( zTVb&Pc`X;xw9tjtTEVbfU&oo5x}xKa7oFUeyX+;=O^#YF195+qT6pDwK)0ON0OMW4yI{4qZ-CHrc zT8-^&CV9Fq0J~wubq^sWGw(@$UFr@pu0}U^mQ*^0LDY+as*IRxJxGE946jNixYYqC z&Q2THRMtc`Gn|+>gC@FhE`uj(RYd1Tk!j zR7u@i_!$OG&x33Hzc#mbHm&pD?cM!V{Qspq#`!NDRKSOLF-N~OnYAh|sLK<&HU7tU zdl+o?a8akh^0=4vofQy&wktDtQVe}-7nm+0AC>Yx3NSY;rw#4c4fFWd2E*h%-@ZMg zrC5l5UNw)B(qxv1N{fjVzq9g5n&z36|M#QTTsV zddr_^6VOv=KK>?9whOQehI4KK6b9%2v`;nsUpG**#_c@F5}|zOvahME6_Dm{cv@Zl z_gayHV)vmq(k+J;Aw)>}8}vh%VS!ivq7dmb;XcwT5|8DO zqa6KYu=U~zMeV}lxmeUF3QTV7``d~*0O-C@xeFA17%W9&J#`F^1Egqfr($X7UG&sD z*XmisGpqckG`a>7V6FbYZ`*%&_BL1Y-%=j){;wR=l@VZe8Bpuy&t(Z9!NR1#$1(&c z+OMnu4Id}}4`E7|LlQ&~cW;9@3hoDJgyCuOPwp@=-9^wE{=c)gXY2o4JG(3Xzm!LW z*Sgj@JLtm%W-PY6Plex*`B`H8fHHnw4--7fAO;Zu!j%aFKgbZqV3e{Hd0iMrJnEU^ z#x=}TpL3mj%5~%|MkRknJs@u)YQ;>aKHFD(>}L`EZhD6^pNmAevrDG<9Jh0@K?XzY zfzBn2p^st5_Hz&K(hQCxG~(Aa5xO6xz#DJ!0OkyDqb^SU0O}1pVWBvj2Ao&G*MNHA zV}>0a$fGzN_-CUb*xhjWcV>{KKUQ7hq{lA-!&ik-PC^jEAe*Gb$bTliCp4NEY+PW% z?uLf&vtFU#YX>%wJr*6^mrMbvpN@>Nw=yNK( z`;98O`h*&{pO5W1q_u3`vp^Xs0yy~d=GL~Sfa~R{MyHjfTH`^t`+VF@^X=5GG|FOU zorCA&|NDH*{8k++EdTR8h8df^lE`^0mG!6$aOWE_nb-aq-UT``^!Gt9;C~9kN>{>5fD!Q16oU~bKXD(!n7_G?ud5>zB=FMMkC-FB z7!9F4yYB+jfZ;(+=LMC&xsa2X!DM4I4|}}MP40C*{b!{b8m2L1 zSxnf9m=O$}uoMKF$Oa6dIAxG-sm!yI@l&vVjD|y)5T0r>jr|GRXHg8Pm>r-jqdE%D zVn?E+-{Lb=>~IInf$bS&H*Ia66iugYwgF%0Oof zSuRCu1)`)c-qS%~??ze7Ur~CpH*7hxSByTDE^E`v29c0QO&c<&^1)$=a#|;7bih}3 zx9so!FxKFTNbeN1vCkByh#X~IqIg~qB8r=K%Yr|zXJ50Yf&3rd{q9GzW&Yz&wfw)e zy}P+*$A8(_Uitqm<*77ogfPXO2R|}Q8Jhf^!7wV`r{T5=Wm_m+h(-$>mIu~~t1n-F z#e6KffnH+ufU^4-`9*JR?O5gwoB-zKpTYomQ4$el48hK{>e@OltES&DEprQZgX)-& zfX9f@=9Dk(^|TppBz=Zd84B+fG;RXgYUKFH335Ez*rBA47B_Yr+G^~?*l}_^*4UL= zD`p)&U5EV1N3ii2YI5%*4I@Tzwx9u|pnm$HYdCO}77HD+wG84>Ov=+Ns&$#9eVgu% zOTs$L!lm^3=_9Mox#W|yKi7;|`w^y0^VOcD{l!e0W{Rj&WNjCebDp)ACvtig4gEfp z_xcV1t8^SkFd?V(%QGwbI91-YG|0Pqf0i#q!ejBKB(pJVUsO<8m&MESWX9Zf0DzvU zSiUPJC6;N4&2&f40I-w)>PdI?^tk}E!O`2d&tNj9FD_4BonGDkc7AouKXWzs4V+xU zo~%%2@8Dm#56qvwe5p~o8S#a_{q5VIMD2SxImm4x3ZaXmtE=D7FJC<&Qd|#^2AmwT z^ULc4;O%Yi|HXTzUAbukuX`6IT|DskuXe!y_{xB?Z+AW(fdBl@Kb@Ta%A11000Hmh zGYm!~O8Vf{FM!T&-05_9M8uCDK|2B7nn@K8+}wbF|946Qlo5{D@!QkeqxaXp9Tp1z z^_id-E&KNL!^t6|6n{;pQ4G8_`d*X_ksw0`af%WQ57*W;UPGrH8WGUOU>j_Ke`udL z$$~gC-U84bs4mc%=GmXqyocwPh0ke}^wo=&_$%sxkHA}#D0<-V5O^2oXRkeQ1HOKB ze0+O;^y>8NHMpcmf(Qf3ft6+2CqCtNQ38f=h_Z6l9~9H)DO^ z4PCOYAq-zq9!J}wj5KGMeiCxWLi%awM@jAjv5s46A^>*qGF{VjE8!(*yPZx4T*VMF zlVJ~KU~_{mEUg6qF#QfTH^hrxBxgjzn?5=JbtZ1D6xHeYwWzk@*ohk>jdTCojC3e!(kRe3!J>t=~1IDcd9>WR#6#L;YNsZ|#ddfZsgO zPPKOi{l0mOvnpo$@Bh9CkeK*ng#RjFhDflKtwk{sX*HRWk??9OMzTaka(?#ud|8Zy z4{rlTB9MA@bba*8(bdTT@Vd5@twavrN3-gUB3 za?BA~{|7sW{fF1`z*j!M@c^{j%*}u8i%$J-pxtJ&-`4)d=Dzk(Qh^ruG>Ra3v}J31 zTr^*~4}G{=uuEC6$8S%M-~4v|{_5oR;`HqGW3So58LYi*snlPx>in#a4_s@n*(zg` zO3r!EZj&s6_;3@n+c=Fvm;rC?i$#rZ-d}UQh_`Y~JMbIr0BC~*DQ!uUvbQMxP!eKI z$QBFBTvrZ=eh|Qvbs|7X!XqqWZ>H79O`WTC_kFIrtMj*)OW7sqG^pPq89K-3mnT=| z=EzL%^nb@FgP84!qVUPt(JyaLnDOD{?E3Wh==${htfVr})NnMSnl*_68FyL1I(qf) z^z8Qi)yd`A(YuopAj$`>P;pthK{+XzDP1W9i)UcM?om#7ZtR#qY+Eom>kCF%4BBmW z8KK=CVb1LwwEyNEm>)DDUw+^U!NH&Z^5^X??RZyyVDsmj*JZi{bBEN}r|jhwiZf7c zrf@M(lZEO`G#|%eU%yY3d(mv-6g!ESj-jUrlYRzQ=I>>&_9?XmOIP^v#k%&&PRR}q z%~LaVtin&8lC-Z5&cvr$X7c3=uPDRHSKKILce*G#xYHZOu?W_#A&~fUIBmXM=>AeiBoUlz^+BbQ0i|e;ogxZn%};) zvj@3C)BbIQ>BOFZ_InobpRvYo-#|NLKf_!Z1nq$XlC3)Jni3u#CKg1I4VCDU{-YBx zch$@DGTNLMX>tuCVwgPXD8Hj+ zcdG#~kvuX^&f9SKQ_MqdyDr5|3H;sU>c8I> zT3}~xi-1l)zxt&JpI4i;h3ZRxvgV?0{2B1nbf5KRog3PvSmqLHyZ6dw0ND-xhwKwYJr*e6xCFaui1F2JB)mE8{UVs?^5Q$&Rmxu>0fQmchwg@ zfZAulHuC~vP!@5GQci*S?@-#}`l2pSPT?B!Glpr^A@B33t&st{}A^ZYMaP--U?;RW^Z=zr`+-R#<5ef-bu{T*BX+u2&_e@l73NBxh76{^zy zT!Dw?)BW^IxJ%Of8mMXE-6>N7G`}m}b@qQHdVZxu^+z!Q-iG%b>Tl*X<_3BSi?k3% z%n7ih^GZ@TSUrn?omXvt`zFaSK_fu237wQ|*ntm{DCT{qQ~4o^WBCPxk4Y5YSovIY zu!q3&9H`f8Sj}RCYH zT6f{&x+u*>gC_butJY#bnkn#S5yC7nKZ{Ui(=FU^X45R(J)?`9!cvoEdRU_@cB&^& zD$|=RtR$3XF^pzWem5w^zbRVHc+#{m;hYb{{Gz$JfiFie*EaB%+0^+_`MyAY!90JB1nEVF2nrDQ z_gar5Oeh|yCo|r&fAZ+sUkdrhDQaBEbfs4{)o?1V=H<(Rnx_IK22b=&%CS8^j_>^7 zUPQT|f-R$_>_)yjh!T`#%Su2(e#ti-^_%V;d=SEXkI1r!`YzfL7URE9yCRK?=%@ZJwib2-b^fXj>LN9pUdqWxB-Him1xO^m>0Z@>+Pv zFV1xQM%kzbh9gXV^RZUVoP#>}Vgr0)+9(wJC$?61E_!DIf6<0`FIzMc_LtJePgMta zN$rK&*EPC)1u=TCp*Bn<@Kf*o|5msEGufoL{a8_ zceb{R@&EQ#_dk~M2+qjI8>j&XAJllyB?s6OsgutmB@k5Z{#5|4Kv2KCIzd2ygMbWt zBC}Ruw%Nuv)ZI|ZTk&KZH)=gcEN*`WD`Btl_ z8|FGyaaeW5%7mmTS5yjVq*|5WQm$m`l?MnD4Y8tzTZz4<<{E$+Xu3KQQR)xpX`9xc zp~()Jq;vII0jX+yjTX=a%W%LXOH6zc1%^y1jQ~nOa3ahB&N1b3w8d;g38ca~onnOv z_fHfhzRCsZ+d9gMRXGt(FOD^ykT^Qd%Uz-op%|5Q#CIOlQ+B~6)dmib*q3|FV^4i~ztOOI7! zY~d|Z1s9}VL5xnwf?4y8vM4=I*=r5h4Tuugh?mRXPW1Xdfe-#Csxr*x&Wz zl>b@UhKo@gb1(GnEsqM%_xy$5|K8f&Dct|w-rQcv|I2u|T+bNn&`%d6_FMC(lTV*I zp`V)vJRsCtK0@N4|^Lx+z2$O7brCgU)!gS@9KOzIV z=iTk?z$8E+K7iMQ5=E{;!(`< zPh&KMWDq5N5J&frt$m(v=8GVZXzD<{04x(UZ^L*Ew4pfw-kSRHQZJ%Lh89sjj3S)) z^gI8{_{eB~0K9bt|3HChfjb|=y`4N0l9WomJ^Ln>zgSt9kc=|Eh%DOr82lHOT+zK$ zzXF0-naB3oU*ywl|DVVDSMUF^w^xY&xwG2;m-8%T|DVI?_Y8p8zk@O6J30TmbT0?M zPZC79qR4A#FDj}%o~$sZxzN_Q3tJ)A<5(^=K$``E8DP%hx?W(@` z#BamO42A3En2bmickRuU|gMOw|X580uKN0+h6B7-n&1yjUx-A-_Q9gP&}SG z)_k#S`FW1(ruKTAWY%XVi7U>|)_1f1QZNZgSW_g2faG{5`QLBhMdHPmL@Du%STz%i z#G}ywx*Lst1c4%Q2ZIXf#8N z9vg*eOPa)wUjEaBI)+jl$@P(9a~WrFRW?!x|Cc4L{f+e2bsE5_p^aK1tL>=&xucC&QoLgIW| z(J|Rea{!&aQP_Xs>swD^a5cIWYxXi zxXaaOpP3uHSX7mpymEUtlj`LVTHw&3)~yi9kM}6LDdnA&R50F^?`&0X*G8;Hek`_2 z6lJuy$5JZO!XYdjUh>ym0vdRY7hyp z7n8*oEr{yDV6>Q5<&e%ayhm)cMoa z+?RWIn%vu$F(l-zbIpgt#AlJ`RI62=!i>1CZM=h;q2T-zRNXZJI7G9>od7mK4X2HkvE`WKK zUb?|#*04f5Jei?C`l%g&d@hv>WYURJ%eE*@WDhT3Kg%R`T8*E_GhZin{Nn0xEdLgp>dTSFPundp104~Gf(7ut7 zAv=b4r3!QnD=r#3(lEO_-fW|zq6tY6oTXn#ShJm6Cff;flF(7-$Pv3?fas8fFh-Xs zx5bqri=uhAHi^?a7!UF1OLo@2l;>|R$6Rx3;aAyrh)JpuTT37EIeL3> z18y!aetBh6-PTtr)Dp|u&lCgE6kj`XJ!(s?tYyD zNJ9zDAGt5E4|~-F+Z0}_XmxAJwI!l`(5@iER_)gIa_k!5ZX?mw0bVcF_5g5u`L^ZG z-w9Dp-(|wJqh#gZorB&5eZUsMaZ0A(S`AxP?TSmpDbU1oiwB5MmS>f z_V--FgftT*SBJ+%Fuzr$ytF5tnCj*QH_MTUmx{N%i|&MRLcwm)23MsGz^E&g;^bNr z<|L^ih}Ma98ZHLL2MJC!0sFnm>*1N9tG<>OhyCiT<#pt*n(lXpcius9>}g|9&%dT8 zspE0`be}>_Kg7t+Ux=hjx_WsE$*b~$yZr184JZNPYg4gt^=_|sTPI*%o?8lj*{@x` zgLO=UwUdxm)$p*#Jm&XW;~1Sul}LWU(_uMs@kJ8pT~(N}tMD^ZNVpHKsu9TY!2s;; zSgXb+4f{WW*KCJkm9>vs|K$iqkDBR+YS}R@XQH0Aq?$$9cWSq*CYi)`R~YTI3_qgx z=|f>R$(CEF{x-)sGEXDc=${LOKiV^|O@%(SyF&UY0QCj#De-clcdR;4IASE*gQQAI z_N_1dw5Rs|7bg@=WZ0ekPmH9$feDBk(j)-Dk*5jw-S-L>{49rB4 za0+u6Qj`;(%37vpmuVST+ot=V-s=mHqY3)_9%V5M(M24C;Gh5e$Nvt@Qh{X;PZhxS zQsN&p1n7+zEyzswP6O<{QE-~0v00M8@m>uTU$mt^R{8f`!ye5u(y4VVFPuevX-iO3 z!MN`bb^Hc9z6)*Mo99y7=zxu_^p8+C0Y8v^?kB-J+ZD}z0W`<6@*=vWL5Yrf*{KZC zprg+6EU@oze>YNj)YP+XTz^+?7LE1X3>ku4kb1|J8KRJf+~dA084S@9iE2Em%Yidf z439>zMK(*rAIOj_LLPWgjFTgmfxTm(!p}mQ4|@|tHL|wYFVwdl52GcT(;_bJSkV?& zY?&==)iPh?y|t`Schv!B0ljs=$h~TrlYW28!YrbwImy#`)=KoK?VLBGVpLZ2ToD$# zB)SMsrp`9(4vT0f0J}rOW2t^kDv-RBC<59FwZVw(;~I7-ucpJ9sfWE4dAG|umB7z z?!Z<+c$P+cqzJT7f@>3YUGiIfmP;P5Rz20N-W*aW@NM#yRePW3DljW=xG5RaGwX`P z5;wv*q3O&4&#~)oQLpS|VZCoVe`dr)$) zLw>cn#sLrS(Ib#!mYwxB?%MmQUUi_}^H66MX!nEjv(|*qtA!MHPs8p8PhN=hep?$t zRTEFY8ntPw`o<}ot^5`H8oSYGTlcF9kb1$0wxet2zOwRK@N&QCU=&^jSUt0qR1Q-# ztD)=$xzi6xtR5#xHf3pJfOwBoUX50$Xlo)_O{g^eUkCj!%^@1&`@ZwPjgChLZvMBk zt^Ri-PiK}TS3&>kU)gXi6H{gO`~g2S9jdMvR<#OMs(MkQLRE|1QJornzHkcGlibxW zq*ZszUPh1cXB54`Q52&Gm=?i8v_+H;^^JA?a7!h!0-M*?VH7WHNR7J>Ys1=8(zt)^3eHNi)4T zk%$cDfbUxr#$350wlFd?kP)Uy2&wtDx(WaEDq!aX<;G-IPSXBS7Xk z0uKm8X+lL5fM}k1pybkhgi!YCw>cv!vpJ!EPw;QXDi~P5+R6Br>Fkc@^j6zfUq8wn zAev_}w+ta3D{{TlCcR;truXx#kzr*pC(Rs?O<&ctF;bkwk3e)-TIRwW6!J?O zUD=vqhC`h0FGeuVrf?L1pe!xoncDXY!uq*{gPljnbC9DwNC=*Ylr{^PW43iF?36u# zxvz%2Wmj?M)_u{YwpS;&|0B3&v&1pHhaxb~>JTcAZsOeL!r_2g+#t`)+aG^PekbHB zEInz#E>Y7f#QknY5);<++J#m* zknT=4<20W^N}IQgng$#RY}FFIw>oBnz_*woD6xzQnBWCUL_l>O5Z7J9tli3)vAcay zUA$^d^4RWPplJRGXbQ$Si2(M2#&rZn{|P@FfJoGpO_e1~>t;c}#H@qY`Cg2wr_=416(CJIn}cSeq4Y9HPcO)GNp=aCZoZ{DzT8-Y~43lopzEiGtUh zh-gIIVTxWdW0E~@5i?=J|65)XhItfNb6#$OX440MZ%juskh=~h^NI4 zfdV|>bi5#HI(ar>VpgqiSrQXki`_9X^AfR6n5b11G@-+;+!IdhX1gQC0qk2Qq}x6l zeZ2R7>YTg(3C8h7$t;!(0^H#Ld2lka^S>XQZS((Z=8^8~r98k7*Gxi(QN(1&6u>x^ z@pH*4Ar=bdiMgf%umeIh$yGF=7&wTs7 zg?e`AZ%Y|8n{aSjWpDWf%1f|?W6(vG{VLwpgDrf&qrJOFvojT!PgGhGskvy(Ka5V) zR!#R1Y?D*0?P;L@=(7kbeU(s@k70&+|MB609slF#^l%&hVS{WY=kAh+3ZP5v>2I%woh78kIi>oD4||Gc2-NRwj+mGEK0u;+N8n z;$%|Z*U4I08g*e?jbrQEj1IF-u966ScFiqxLswSfxh(F@r5C~&y|SU#6a(_gSqtxf z5yuRN1W^Em&YmHR_vDxz4DE`R-qIL`c@JQG5(6>8dKD97!gwlFKw1dxHX8z7<_VfS(c7uzmLk zNETyC6-~jfRrOu`c~44BdrY3%I~aJ30z@PO7$FRYF>k7o12;6#oO6M(gL)3JDuh|)$f#_?QVh5lUVcns8z+Qo_L zePFFE_qtYJJ)T7=K2##h>lo%-Y?=4+g~~SYFi+FaAE=-}?s9WiTSXLN&z=!;@E|h= zm*afS@GF!aoF?duJXK5#gfNc9V$@i+6*Esq-q)|s?*EH$K9}HOn1o|~1VZ#7&F=}9 z_qD4-vtsq_(6^R<{_IbK{O{>3@%o?f5^Vt9{*Q%9 zxbxQ6b+o|0bSxdt0+5*Hlp= z=n+5u%0K&7W|;=~zCbRe`R=otbG{@RuD!3-iwL|m^d&C0v=!cNdT(FT#`M^>GF0L& zcI>G99!=2aH;{%?5d7bdaPQv-d;fjAySw)n_4nRi20yC52Y=ZyJqmVX#QsZ+m#0UA zx-hgq5U>Zz`O|Hcxz*ngyqOb~f-7sH{bXL9wJ=hlvWquue&me)p#Y!=Lx6T{M*aI4074 zBrQ@Wr3tva5~}$~q*%%43BZX+qy$I`9uP+ZxyPCCuY)+AyT;dDGCmDM++cw0Ozq+p zAf*gZ8EHS_&wIB(WKa{9@cjNWj=d?Ns;8yN2-&Y`H22bhr2Evu?k-T7lU0_xM#`97{Wl9465P;|_1Sw6^bP5&5rrJ+MmlZ?O>hGAve*axdJ|caQ^x~2aIkk#oRZsp;1wxwLp!}&Dwx_rr zp9cD0#-(534A?~fPfi^AKRVd@|7_$Dag5}A_moV(po;CYypp=%$OJtS;pHDlk|@N!`&$E7IlAxKt*GT7wEJnzg2=lt|e1 zWG!$?HDAY*73Ep*Wd-Zsg0qslgPC>LQeLIIb{}6(|aPQ<~UbCd3DG<6oUiUhUhAm|O z=0Wv+S5@?8h6ycvff7tHjPbuwneHH}M$s|58o)s>HrnJ5QFfYa{5JjN=)cpm%rw;#53OXa7Ue1nkzR zP>PMnYu*(39Xsc#HH6e1it-sw#A&ZHC|c#^0Qvg$*&ZkqNVcW3xc1=V<=?fmxjfyW z!r?GSSxPWX^GEF^g%hoT>v#tB;I<>+tdkK?h8QjW5&jZn|Z0Nk;Wkc`S5!>)h9 zq_$>76EYJevD&$AQ9|Nro8d;Z_ZBhL70s#h}fFpkY~ z(LDY0e=(4r)d1}TK^}qaSN9sV3#Zs~g8vmgyoEFLT>CB5w6;HlQgVjnGO=7*?G}c1 zqFZ&rStyv!UkLlimk4E-Y4+$e;e^UlY1`V_nvCahY}uPQ7M$ES!NIm;FDZI{0gOyT zD$SaSOHg50>CebgV#CPXW{ulhUNdg8AZSzD3ZChWT-dUmYk{<&P2|9;HVi{A(*s9y zgT7Qrsnp#D+oqPh|6J_)yGNj;N+;2j7l;tX;hd4U==IIdc{K27y#Z3q1(OJf*o3Q! z1W`o<-=`o2M9CUl4l{w_^A{kvjOT=+{58%AHAAZi)Stg7RRBv~^Lhi7X!o#DLgbVi z7oHNx((|Fxg`&1;xrB_S<=ASPZhg<|L`hMUdgW31+gy4$uRdoY?lA9P8$k)uF82VD zKNVI7=G2eDG$r({h`9+c0aDJA5kKby0ewmR1JmhWMFpcz*+{)K#n!*p+tQ+EA#SC) z3^`LI$f7y-ZdLFMz%Kf&gifTJ8w{*k@;<+)Q~u?j>YxH6wO+NXGFF+Hg=ep^RjV5f zUW%)q00eK-1lfMJrelzrZPj0$8Cz+=RxEC1za|4ffBb>C$-cChtYt5<<4V)K{U51#Cz>E66>1B-~dZN59Q+UMBGWUCTWyY70D+a*xT}kZBO~l4GpJ)RukgEO@YTc#GEdN zm{S8Ws;ACaQ583Z61CKL1^J`0Z`ONpq0eCuCu9c>t)tKtgYU_Vb4!7}NHu4zfKX=MkJ^Z;XKH0ONZzz2q z4LuXEaZ_Ix21~N`09kA4>nXn(``#r-(yFDJ!$U>k?~~(H(|>lXx`;6(XjMI6)BWGU z>5&`%WlR4z@)-1=9b$o;^HnLowtSu}$v4K(yEli#vlGCje;uDT4$G}UzFey=Zk65( zO#$>YAdmk;Y~RB)pZ0NfE6y4qO~6MD!rNis&wlRo$|@zE^ia*6vzk29kIa?S0s?L= zjkEG(gfr`4Re*DDDOof?n~sPp-6UC|O*H0**yRGknX1zc0RS9aL&?iRW(`@>(}gf zD}{e2Pc{87VyE4pFh_KK@!t{?L`>Y_{4hF2H}um+B? zlmgQm6GAvOQkYK=6@e`;;+Us!VKTCtr@Uy)u3~%T*vK@qWLY0ejO^*b8uot#uh{Vn zn-Hcs0}zVIu|Pz!eCgvD;}8XYxYOKqR5Ma>dIK}GYHDR9_?&F4SxZvt%v_pVs1hDd zGAECU3z4N!72@i{Nc1!;uU%j5Axv&Ot8FuesVDB^_b=wu@c#tU%U)tYHSqtlqhmY% z(`a@lHX3>NKLKl}eOW?b z9Jeh#&n7vHkSK0MmEtL*bzgY}vjnH?sc6KkKSTKhMdtW@2Vo0KE`4qj*vje5-~u~J zN?}EtqFPCY?Zh*vh<>GBivxS{(>S;5JoaKt*?P@lfGM~`VLC%h?hxHP=lmCfyEKh$ zW~v?zJGZ}2rRXF+wSNcNH zv;SyT_^keIP$w10u@xPwBz=7LeBd<18Y=}mvq`aknt~Qoj!BH9TPO(GqX|e=JcGU? zxEV)|l}{ZOF5PHo+u&x){r;&}fq zq{Su2Ys#A6*Ld5HLdw#EmiIM14PhmaxzztH0sj8gF5k^lt^Y~VsK_<6-uwTvqmgs} zf405<-^gR!|GZ5j1PUehidrCj{XALik2#3GwLWEj{S5^A)Q4i;2bExSj04aq48V&0 z7ukYq&Wdx2;~}AGb`i(=8IgyTv`;v}ONeG^a)TJJ`ug=*z;y$kF`+n_1m{v|!uuAw z5LXDfe-3sQTvJpI!F%%GS@@JIA}RmQy-K~$^$LrQf!hRpB1FIve6O1Rvw1Vm1M7+Z zH99#wb@D%)9vyD!|0W)T{$HmNP;(CCq_4^bnlmyz4Nl;Uqi1HID1}A9t!^181{o0g zPBw9VEvKjcZDr)!?o4NgpinK8b8!z_>H}L2r62ZUwQh5m0!jho8+m7R6d46- zIMB`{n_oncxE;_H-5O8$`TFnLWrK}^5XR`|>%VKzNehT6%8@WDP^<)qfYFhNz8i~~ zEz}(9&|Gw9nFF|dsNSkzx4NY-TV0dVTum7xhE5;b3w$lzqeq7CvY}w$cm?db z7jK@h)h^`C7EStu*524L!qLz{nwKU@e4RCx_nIm-(Ue9Ye6*#_a9t8pLnn%hl4Wq( z=IT;!#hGdz3Ejm5KY|D%;<-=NsY@+fb+?Qaz50lchq_mKtTdlTT(RN}yhnh{a|Du< zhbjXBo#JFd0v<%3i)IxW3fP9Kp(H(|DHvG$^mofuw_U@0jv{dgh z1igZxn2a6M)3$z{{9Z<`>u#gbKKYoE+%9#sbhlLIwp?1=OLf;q%Zu*;FnI#QrVZy1 z#&P;^o#O?L(FDC>qM^ve?iS5dsmSv&gc-cUF{T)iA&jD87w_`(gi}68FnX87kMGlz zzQ!>U7Yu{S;`8K!yiF5Ud{DL>Q?Of6m@NkI1>l4Zz-UlgR9yR&Wi3%|d8au>l?y@8 zSTE(3o+k4LWS(U)nxTZkSO|at*bUPpghs)kTTaSs$H!oFa5nHbuD9{Z6aec)f4wjp zqVCc#uM3war~fq=c+SSV5klFk-{vrGY=`l{zbE*&hJu5-ge%se`lDN&8{JId0)aG% zAHh7qzs-?|D@y9DZ`#4+!+4hF^gXAeEy>&z#Y_xvh};CxYt`0rd_w^#PIj=ongLBf;J?AR2v`|JB$y9Z7bdG zKwnj&fa#?dB!~`iwm2T*>{A8q0}$}#8)%Lpi@?V7pxe#9e%QbX_aZbm!B{W?p{U=b z=?%AV^cM*N&z`MOfXRxrO0U05GZ(ff3sV=R<22+_U%qxFqWBG8+%fpHer~BtzE3H|2aBy?thOD54QKen|RFoUpeJ~&v`GAK%7yJx@sQAQ_dme8l@y)Bhat6QK}7S26%?ivMwRWXJzI zI~{G~e{bY5=>K~$`)v3FY>PI5OGzq#8d}ACYWi3)= zcc=8a`%t0y#N)!(stw)m4>G?t<1Je7Ykp0u@fzZIp06c2w=o)zvZ9y#+#a9nmne(V zM|SWIbkkN4+)zl-cpeKw*F9Ucy31C+LQT=HHwFpyIjeTY#YfTEEf}Y{4PykFi3Qfyt>g<+vEr8Fbw`}-42r}H}wDFYyZWPgUEC`J!3NBehidbfXYHx3U@ zMyIFY(fGel?ndzLIE2UWzfVWUr~f?~kB*NHj-tCmv`_L-s~j1BXYqW36S99lze9O~ zC?cO?oXkJ(&nb?{Fnj!uUq+{<34}&rBtq-1)BlE02JT>Z{{ZudfH0k9kP5P2dO(=O z*iVIrCJ`ROD0<6#f3MLW&qZLP+eOjuaFWg0TiZ$%Q^p?v6s$~R9@=s#T0M889#!le z*_&nR%*Ma)K_RZ~q}57r5U_m}1STjhIG*)ewT6A`xMH)Fpc>e8hho~5H$_|=(go5h+qE7b|ES%d7VnbGcNTSUtQ zrtgjIV#D}kl6r!hPVfRH&jBO^PZB0HJ5D+4M@{7#^jQ6OA;Xno&$m8`eUqp9{7=Fu zisrGf(_W|ke{^(wZ0r9|4!7~YH}V+g{~I;sy`24x1@vSO{?;h^KJ^#Pum8%|7>RkF zEuq-lb#JfW7?rk!z5P=||547}5yCK?Cv+7i&_Mq=&A0TwCx_en-;F#b{TEXXojX z_STi0qGm8l=BVh+a`@dt7{1V7Cw`1r%(7CfN5EL9cuSO=@_x?du3E9b5L)X0BRn4{}F4UtgK zkPL>)iGWS#|I?!bJO9V_{(nP{DgUu42Xf9qG3hIdfWDRVbfrN5XnGd}ecfz6al97{ z%VXRRYHd<^f0YiphUF9bt~8>y?bR`_%JScWmsQh$it-swcu0z$a~Ps)lw%$eGEJgx zIpG`W|A}q?b$E8P_5az(W6=K(<&*8`@f^nmi}+#G3kFf z(2{JI@MLLJ4UCU;uLwn<%H zz&onIn`KZN*FAc?m{`@oBuwF&o zj)93(hw87EOO-?K2Gc6H`e0xUk(YiqHp(cR;zXoprKiUM2*z;=*!+M@5SGuvi`oV zzSv3pbs2A`B1V#XbGFR9h_)R}3$QhE?_Wv3KdH>*+h-F`-T5y|<8<*m%lNYhewa)E1wM0e6pXz@IH73Kn(9ttPEO2G({fD z^B4ABhF6qhtK7dcL}A1YHDo)YayYlFqnS8;-;!6U@_j5&;CsBcsGKc#psg6AJGU8G>KZ2Og5nRO1Z6 z7eLeh17|V#0unjO1K@1;t%Td=sh0m1X*{2yRdxUWt6Ba#J9YejPLEHHw({R59z*{7 zRZRJ+!k%0?Pgb-m;O|+GGYz!=plP-eGq;vpQtM2orGv-uVP+w8fUn8&ueTHw+*FNf z&kQ}VL#ooN0nOA{YC{?1&(*RM3(RL$t^v@(rreXc%C=}PoqpM$a8A<<*$HP9C;6PL{8A7cw)Z8`xr0QQ z>GK1t8`XlpW>nOi685&dbhO#j7{>7(4DVmcpj0~FVkeh@cV(d8K#(oMKz8b(4K2is zA#b5&RHaPMc=rX+9M6nHgtLlDiWuO}f|sobZrRKRVCD(iAf2uVbJ@%WU{(oFSAtkI zvH^ItWUVWKthKWNsLO1!D*;_LvjLcsFS3Unr-z5vHo$sGllIub`qTf7Ixv{7Q{NS5++k8f{fM|4xch zuBj?VZY6Zo(8`hG3np4Lu1|p1nr&BGDg)z}m>_=72;+J?u8I{@LcuLARRmw0m@A5= z0DZ=U2Gzj2W_{YqaU(m_WoxdDG%@gj;9b@dFLubr-_4M~+6E0&mB4HITJ3JQ(iD7D zwF^ZJ>!4au*)K@hu&VY-3(xmxfQKVXk+l(Wy+sw!7Ce6x%{2xHE1zKv%)*3e?(VN|~ZwyOx6tducgckce*FUQ{&~WbDVOk3;xGcH~ zD(*Ag-#$#-#c6o&qJl&L2&U|R$ztZs+17{^-ZDpv(MLDD@T#2<^HbT`YM617z2ThS zUO&FeFLMOBPh9aX0Ksb4exnMIDNtlAU(#;=AbO^Ig^%%%y7#bIP`Wp z`q9aBbOtC(A3RheLY^<=)N;z5V}XGI`IUiW*3-X!Ut(;t{HLz?)|UV6Xmotyh;kvIvvIkFyro5Xh<%Q8Z&wxzvI;XvXCa-=b+soHm^C%FQ}Z+1YM_oQ{_fJwy|>(DBdU zpTTn=nzfL`g?mK^lz1;88GvOakKc>LX=+dcar~p|?Ofjxs+=6L_$9hAzxc$>Vr$BG z?C)RLJctJLPZd*d0tSBnRt5~)XQiiE{!=pS+T_2(ldb&s%^pMkD~>t6%6~Q1qfbr# zD~GaG{jI9{)AVV7Jmp{W;I^urt!n2xc$)b?w?kfM{=bt$H~#0z*8g`ikHP=>RQJpL ztE||c8t0eeSijAun1f~5E3bL0aKN~beAB>!T>BQjyN*Ee?X6!e)M2O#)7 zCIJW%Iwsahd`Gr*UZFd3wLF{!$y!FQ%bC-OmTqmNbYn**7!tZ#6-lEwC21>nJiJbG z3ge|_UT?q|WX;T1LWF-ymRo|qB^~?s#4>cCiRVcNSxo~cp0@)>uF`m(@H;{u0G6Gj zW5wve$Xk;FEBmup@?U_A=T{>X!a1GZAmOC#F;(T?Ut$ub3zR=r7_+*=&|5V?)jt@1 zsV4&2hwzV;t|bgn(L;X#!IcARXUO^MivymS`0z{45u)= zDEE$7zWQde$`u=-ELrXilM|-7+0u@Gk0~8HcXuruE_%1Cx1&obtugQRJsO`Eb`a$@ z)?j+N$D=>|)8hOm9oE;T|2;lFu;YIo9G-0b|2FcN=RY~sJs$z9BOW}tQ(!TaKdJtg z;gq1|T@tnWQZknqZ4}P+o;`|S{d0{j*uI5U-IL{xJF50Az=_H^(QZ^e<+f@0G3KEW zJ+i%&JaP2-IoL_ke8xk+Mt{{>YBx-Id#|Hz_YM-|Yjx;q%?&uc;cUv$y{K)o`x#nv zT7;gw8iNM}CMjUj5#QeBh+z`3k5QUXFvdv)pa|RfTuif>B1GcCjI(Qr{EfJ^+j;?J zb3!k&3~?VW^;+QCgIJ&Z+R|}L-(K8UL3wE!%aYvk!3kvtA0{KLkh^&nCJy!*HrI)! z7f}PMbD8V!DyCdUT!}9t9_u4(cR|yBhi)%uwih&i+^1RoPsVG`|28^3IkWG74v)6+ z|2Og&^8ee{H~otK{&-7IP3q^PSpUsWwya%6R@hV|W75pfvI<*@%(0`W<=t6F6N;>Z z`9zy>crZv%&g8#ka44!a^xm46C1YZ<2Zdl(T!Zb<=Hum=Y*pCLp~?;r+E_bqj3@KB>+K`J|s*YxVXLw%22QY&M@cYf&yI`bf8I~b7`eC3ZOxE)Z`%;qySSM22?e{V&KJPrV1EHIN(Nx0 z6>hQZ(U8jkOHDO;(5X6i^0WXED$sc%E7p^U}vD%|#x9`(jBBiWlYT9jrKl zaJJVRwzz~F1X3?|-(mz3SYvyw2CdOlPk2@+^-zfwQR`{35175Xw1NO%2?Hl%k8)+} zIL%86H3YwEr3ipIQm%RThVIRzv5s3~o4`rkg&zMdYcB|u1X5B(iw&v(eDY&}K4;j- zbm~Omi%S|hbV~CqSabl*Kr+7oP7e;2G8=RnRAR@3Yj>F#2@~Er5#OB@w^fiWVKyk6 z>Oo83nZ#S|p z61&2nh5hXYPihcRZYim+gpuD?mInltrFjN35x7P#$(BW>a4n%}zV}gx7m@Rpx@u)L zZ~gFj)ihcuA*U6A`g9TXiUU*%sAG)c=sg+-AW#m2OsELo;mPpNa$;ex_X)g}!N8 zYNFBqP+YQbNLCgiI)I`H6P=+bRh+R%KcYjmj9?~#QBoLh)&R|k(Zc7;62fHvwZYHb znEvhze=qU;1!TUO(nQ?_y$s}UqWZc}+54KSNkYlT9;X4g?@$QlTec}IQ zU*2H$hN9RP{9mDCm8kPSkk%3Z1y;WA!2kRhz!(x07C`NSiF>pVWeNaU&Wssup}sdNhTa3L@B2CUZiIF9VZ%z-a+g@xlx{USi58<#ag=^~JkA z>c^hc1U@mBE#8lApSJ)LK5dVP0zAuNG(!oM`@FpRWyqF6-q&h*uzkLVr-l8;B3!fm z-_hvAwg213f7-}n*neFAdfBt(hc`Ftle76?qv+Y%V<%gLN}#SrC822!Cme!d0^1~w zeOs65suJzC241VqB|e-?E@OzT2%~BU4G}@xU(+itM#UoJT?&yYWPcV~j-ux+k6QI< zrvF0gu*Uo!C&!~xC;!LM*8XoJk3s)$_*D1H0xC@!o*EbEu6A;xP^(tx?I;=#I*M`c5S&hq%on zxy>WFwKU#Z8gDv}q#!@%(&t8nquHjC+@_M;`T@(Q>iqW-6PnNY68>o(O%UDx#LZW^ z*!puv|RFQLsXmFNO0R z@rNM)+ClFb05QBnF%d^T@po}9RN2di&j5f)l2YEQEUUfnR)~s&B*%wagrlYL%vd}8 z{tuA0v?QV)-k_KVrD!2AnHB1JeHwvsctDKL;QD4`%g9d^;8Y7V&Z)&}!7UKZ2~B6e z@TIfTaFub9+2eDdcc5^fAAx+UM3{H@L+&-obk*};HSX1hEnSYj>DV24YMx9HjOq08 zI*nc}aL78iPGcNeVM#Og4jaB{SL45mssf+@1Q+oGd?XifoIV83VcH1BvTG{92W1Bh z$F|1JR6U@Mv06%ih8>&_cH~jk7lf9Z!Ik)%;pAcgaSZRcSKkbN{(Az87y2Yh+lPD6 zu4re^Z-Swbyd6{8)uHnSpTc9{#1PbjxC=% zBoZhEVr;dGze$R%HJp=ZT4B3G3StC#7^%{hvctyKS0bD5%E+RgvHZCO^ffLppZ4nnpL)+xh^*!tHlQ@+j-Bay$P z4=BHu&;%fOixw!iBc>U#Y(zaj_jeKv)KxS=YhdRRLclkU8U4m;w0C*_yy+!?yZ+So5-%=c+aO z8={0ADxHWWg`<#JI?M44=C0kmg0$Zo)lHR9wc}xHltH^>>xvM&UQdW>Vtugli&gvJ^S;B2j+E!nA^u9YI zYu?x*3*0#fK$_dJZAkDOKtk{&;dDkVMT@X-YE;lz7nyBWv?B$(#nytK3XHW@P}u#s zW>1{bRw*PbY9w9hIMz`#1Q!DTtmK^FWCA{V_RsEJn#KqwgXhj#=Vy_@ZH?`eivMI) z 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 Wm9Bh-<^K-=0RR7ge;?HVjtl_2wPFzf literal 0 HcmV?d00001 diff --git a/stable/jellyfin/17.3.0/ix_values.yaml b/stable/jellyfin/17.3.0/ix_values.yaml new file mode 100644 index 0000000..874a909 --- /dev/null +++ b/stable/jellyfin/17.3.0/ix_values.yaml @@ -0,0 +1,98 @@ +image: + repository: docker.io/jellyfin/jellyfin + pullPolicy: IfNotPresent + tag: 10.8.13@sha256:05a9734d7e83086b957c5b7a16cbb5a60b5bb8d113ffb953e57547359dd05140 +broadcastProxyImage: + repository: docker.io/alpine/socat + pullPolicy: IfNotPresent + tag: 1.8.0.0@sha256:c83895a815b89c42eb121a7e9f4b7e23b91b3a461eb7d77c9a2f210fb7ef922b +service: + main: + ports: + main: + port: 8096 + targetPort: 8096 + autodiscovery: + enabled: true + ports: + autodiscovery: + enabled: true + protocol: udp + port: 7359 + targetPort: 7359 +persistence: + config: + enabled: true + mountPath: "/config" + cache: + enabled: true + mountPath: "/cache" + type: "emptyDir" + transcode: + enabled: true + mountPath: "/config/transcodes" + type: "emptyDir" +portal: + open: + enabled: true +securityContext: + container: + readOnlyRootFilesystem: false +workload: + main: + podSpec: + containers: + main: + env: + JELLYFIN_PublishedServerUrl: "{{ $.Values.chartContext.appUrl }}" + broadcastproxy: + enabled: false + type: DaemonSet + podSpec: + hostNetwork: true + # Proxy doesn't seem to respect the TERM signal, so by default + # this ends up just hanging until the default grace period ends. + # This is unnecesary since this workload only proxies autodiscovery + # messages. + terminationGracePeriodSeconds: 3 + containers: + broadcastproxy: + enabled: true + primary: true + imageSelector: broadcastProxyImage + securityContext: + readOnlyRootFilesystem: true + command: ["/bin/sh"] + # Quite a lot going on here: + # - Resolve Jellyfin's autodiscovery service IP from its FQDN via getent hosts + # - Export the IP to `$TARGET_IP` + # - Check `$TARGET_IP` is not empty (so we can crash if it is - will help to detect templating errors) + # - Touch `/tmp/healty` to use with the readiness, liveness and startup probes + # - Start socat in proxy mode + # - On exit remove `/tmp/healthy` + args: + - "-c" + - 'export TARGET_IP=$(getent hosts ''{{ printf "%v-autodiscovery" (include "tc.v1.common.lib.chart.names.fullname" $) }}'' | awk ''{ print $1 }'') && [[ ! -z $TARGET_IP ]] && touch /tmp/healthy && socat UDP-LISTEN:7359,fork,reuseaddr,rcvbuf=8096 UDP4-SENDTO:${TARGET_IP}:7359,rcvbuf=8096 ; rm -rf /tmp/healthy' + probes: + readiness: + enabled: true + type: exec + command: + - cat + - /tmp/healthy + liveness: + enabled: true + type: exec + command: + - cat + - /tmp/healthy + startup: + enabled: true + type: exec + command: + - cat + - /tmp/healthy +# -- enable Jellyfin autodiscovery on LAN +autodiscovery: + enabled: false +updated: true diff --git a/stable/jellyfin/17.3.0/questions.yaml b/stable/jellyfin/17.3.0/questions.yaml new file mode 100644 index 0000000..e784423 --- /dev/null +++ b/stable/jellyfin/17.3.0/questions.yaml @@ -0,0 +1,3154 @@ +groups: + - name: Container Image + description: Image to be used for container + - name: General Settings + description: General Deployment Settings + - name: Workload Settings + description: Workload Settings + - name: App Configuration + description: App Specific Config Options + - name: Networking and Services + description: Configure Network and Services for Container + - name: Storage and Persistence + description: Persist and Share Data that is Separate from the Container + - name: Ingress + description: Ingress Configuration + - name: Security and Permissions + description: Configure Security Context and Permissions + - name: Resources and Devices + description: "Specify Resources/Devices to be Allocated to Workload" + - name: Middlewares + description: Traefik Middlewares + - name: Metrics + description: Metrics + - name: Addons + description: Addon Configuration + - name: Backup Configuration + description: Configure Velero Backup Schedule + - name: Advanced + description: Advanced Configuration + - name: Postgresql + description: Postgresql + - name: Documentation + description: Documentation + +portals: + open: + protocols: + - "$kubernetes-resource_configmap_tcportal-open_protocol" + host: + - "$kubernetes-resource_configmap_tcportal-open_host" + ports: + - "$kubernetes-resource_configmap_tcportal-open_port" + +questions: + - variable: global + group: General Settings + label: "Global Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: stopAll + label: Stop All + description: "Stops All Running pods and hibernates cnpg" + schema: + type: boolean + default: false + + - variable: workload + group: "Workload Settings" + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "" + schema: + additional_attrs: true + type: dict + attrs: + + - variable: type + label: Type (Advanced) + schema: + type: string + default: Deployment + enum: + - value: Deployment + description: Deployment + - value: DaemonSet + description: DaemonSet + + - variable: replicas + label: Replicas (Advanced) + description: Set the number of Replicas + schema: + type: int + show_if: [["type", "!=", "DaemonSet"]] + default: 1 + + - variable: podSpec + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: containers + label: Containers + schema: + additional_attrs: true + type: dict + attrs: + + - variable: main + label: Main Container + schema: + additional_attrs: true + type: dict + attrs: + + - variable: envList + label: Extra Environment Variables + description: "Please be aware that some variables are set in the background, adding duplicates here might cause issues or prevent the app from starting..." + schema: + type: list + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: extraArgs + label: Extra Args + schema: + type: list + default: [] + items: + - variable: arg + label: Arg + schema: + type: string + + - variable: advanced + label: Show Advanced Settings + description: Advanced settings are not covered by TrueCharts Support + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: command + label: Command + schema: + type: list + default: [] + items: + - variable: param + label: Param + schema: + type: string + + - variable: autodiscovery + group: "App Configuration" + label: "Autodiscovery" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: "Enable Autodiscovery on LAN" + 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: 8096 + 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: transcode + label: "App Transcode Storage" + description: "Storage for transcode, best to be set to emptyDir and if enough RAM, to Memory type." + 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/jellyfin/17.3.0/templates/NOTES.txt b/stable/jellyfin/17.3.0/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/jellyfin/17.3.0/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/jellyfin/17.3.0/templates/common.yaml b/stable/jellyfin/17.3.0/templates/common.yaml new file mode 100644 index 0000000..754fc72 --- /dev/null +++ b/stable/jellyfin/17.3.0/templates/common.yaml @@ -0,0 +1,8 @@ +{{- include "tc.v1.common.loader.init" . }} + +{{- if .Values.autodiscovery.enabled -}} +{{/* Add proxy workload */}} +{{- $_ := set .Values.workload.broadcastproxy "enabled" true -}} +{{- end -}} + +{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/jellyfin/17.3.0/values.yaml b/stable/jellyfin/17.3.0/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/jellyfin/18.7.1/.helmignore b/stable/jellyfin/18.7.1/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/jellyfin/18.7.1/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/jellyfin/18.7.1/CHANGELOG.md b/stable/jellyfin/18.7.1/CHANGELOG.md new file mode 100644 index 0000000..e9f5d6a --- /dev/null +++ b/stable/jellyfin/18.7.1/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + +## [jellyfin-18.7.1](https://github.com/truecharts/charts/compare/jellyfin-18.6.0...jellyfin-18.7.1) (2024-03-22) + +### Chore + + + +- 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 docker.io/alpine/socat to 1.8.0.0[@2e782d6](https://github.com/2e782d6) by renovate ([#19222](https://github.com/truecharts/charts/issues/19222)) + + +## [jellyfin-18.7.1](https://github.com/truecharts/charts/compare/jellyfin-18.6.0...jellyfin-18.7.1) (2024-03-22) + +### Chore + + + +- 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 docker.io/alpine/socat to 1.8.0.0[@2e782d6](https://github.com/2e782d6) by renovate ([#19222](https://github.com/truecharts/charts/issues/19222)) + + +## [jellyfin-18.7.1](https://github.com/truecharts/charts/compare/jellyfin-18.6.0...jellyfin-18.7.1) (2024-03-22) + +### Chore + + + +- 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 docker.io/alpine/socat to 1.8.0.0[@2e782d6](https://github.com/2e782d6) by renovate ([#19222](https://github.com/truecharts/charts/issues/19222)) + + +## [jellyfin-18.7.1](https://github.com/truecharts/charts/compare/jellyfin-18.6.0...jellyfin-18.7.1) (2024-03-22) + +### Chore + + + +- 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 docker.io/alpine/socat to 1.8.0.0[@2e782d6](https://github.com/2e782d6) by renovate ([#19222](https://github.com/truecharts/charts/issues/19222)) + + +## [jellyfin-18.7.1](https://github.com/truecharts/charts/compare/jellyfin-18.6.0...jellyfin-18.7.1) (2024-03-22) + +### Chore + + + +- 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 docker.io/alpine/socat to 1.8.0.0[@2e782d6](https://github.com/2e782d6) by renovate ([#19222](https://github.com/truecharts/charts/issues/19222)) + + +## [jellyfin-18.7.1](https://github.com/truecharts/charts/compare/jellyfin-18.6.0...jellyfin-18.7.1) (2024-03-22) + +### Chore + + + +- 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 docker.io/alpine/socat to 1.8.0.0[@2e782d6](https://github.com/2e782d6) by renovate ([#19222](https://github.com/truecharts/charts/issues/19222)) + + +## [jellyfin-18.7.1](https://github.com/truecharts/charts/compare/jellyfin-18.6.0...jellyfin-18.7.1) (2024-03-22) + +### Chore + + + +- 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 docker.io/alpine/socat to 1.8.0.0[@2e782d6](https://github.com/2e782d6) by renovate ([#19222](https://github.com/truecharts/charts/issues/19222)) diff --git a/stable/jellyfin/18.7.1/Chart.yaml b/stable/jellyfin/18.7.1/Chart.yaml new file mode 100644 index 0000000..5662adf --- /dev/null +++ b/stable/jellyfin/18.7.1/Chart.yaml @@ -0,0 +1,39 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + 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: 10.8.13 +dependencies: + - name: common + version: 20.2.2 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: Jellyfin is a Free Software Media System +home: https://truecharts.org/charts/stable/jellyfin +icon: https://truecharts.org/img/hotlink-ok/chart-icons/jellyfin.png +keywords: + - jellyfin + - plex + - emby +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: jellyfin +sources: + - https://github.com/jellyfin/jellyfin + - https://github.com/truecharts/charts/tree/master/charts/stable/jellyfin + - https://hub.docker.com/r/jellyfin/jellyfin + - https://hub.docker.com/r/alpine/socat +type: application +version: 18.7.1 diff --git a/stable/jellyfin/18.7.1/README.md b/stable/jellyfin/18.7.1/README.md new file mode 100644 index 0000000..e146166 --- /dev/null +++ b/stable/jellyfin/18.7.1/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/jellyfin) + +**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/jellyfin/18.7.1/app-changelog.md b/stable/jellyfin/18.7.1/app-changelog.md new file mode 100644 index 0000000..e5c4736 --- /dev/null +++ b/stable/jellyfin/18.7.1/app-changelog.md @@ -0,0 +1,13 @@ + + +## [jellyfin-18.7.1](https://github.com/truecharts/charts/compare/jellyfin-18.6.0...jellyfin-18.7.1) (2024-03-22) + +### Chore + + + +- 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 docker.io/alpine/socat to 1.8.0.0[@2e782d6](https://github.com/2e782d6) by renovate ([#19222](https://github.com/truecharts/charts/issues/19222)) \ No newline at end of file diff --git a/stable/jellyfin/18.7.1/app-readme.md b/stable/jellyfin/18.7.1/app-readme.md new file mode 100644 index 0000000..73fdb17 --- /dev/null +++ b/stable/jellyfin/18.7.1/app-readme.md @@ -0,0 +1,8 @@ +Jellyfin is a Free Software Media System + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/jellyfin](https://truecharts.org/charts/stable/jellyfin) + +--- + +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/jellyfin/18.7.1/charts/common-20.2.2.tgz b/stable/jellyfin/18.7.1/charts/common-20.2.2.tgz new file mode 100644 index 0000000000000000000000000000000000000000..a03705c84630d53af93b6d6ffdf44b22f1a2597f GIT binary patch literal 101828 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 literal 0 HcmV?d00001 diff --git a/stable/jellyfin/18.7.1/ix_values.yaml b/stable/jellyfin/18.7.1/ix_values.yaml new file mode 100644 index 0000000..a6db744 --- /dev/null +++ b/stable/jellyfin/18.7.1/ix_values.yaml @@ -0,0 +1,98 @@ +image: + repository: docker.io/jellyfin/jellyfin + pullPolicy: IfNotPresent + tag: 10.8.13@sha256:05a9734d7e83086b957c5b7a16cbb5a60b5bb8d113ffb953e57547359dd05140 +broadcastProxyImage: + repository: docker.io/alpine/socat + pullPolicy: IfNotPresent + tag: 1.8.0.0@sha256:2e782d6294f302728ffd43de9d8e07d2e3f5112100f6640d9a209d30c003f057 +service: + main: + ports: + main: + port: 8096 + targetPort: 8096 + autodiscovery: + enabled: true + ports: + autodiscovery: + enabled: true + protocol: udp + port: 7359 + targetPort: 7359 +persistence: + config: + enabled: true + mountPath: "/config" + cache: + enabled: true + mountPath: "/cache" + type: "emptyDir" + transcode: + enabled: true + mountPath: "/config/transcodes" + type: "emptyDir" +portal: + open: + enabled: true +securityContext: + container: + readOnlyRootFilesystem: false +workload: + main: + podSpec: + containers: + main: + env: + JELLYFIN_PublishedServerUrl: "{{ $.Values.chartContext.appUrl }}" + broadcastproxy: + enabled: false + type: DaemonSet + podSpec: + hostNetwork: true + # Proxy doesn't seem to respect the TERM signal, so by default + # this ends up just hanging until the default grace period ends. + # This is unnecesary since this workload only proxies autodiscovery + # messages. + terminationGracePeriodSeconds: 3 + containers: + broadcastproxy: + enabled: true + primary: true + imageSelector: broadcastProxyImage + securityContext: + readOnlyRootFilesystem: true + command: ["/bin/sh"] + # Quite a lot going on here: + # - Resolve Jellyfin's autodiscovery service IP from its FQDN via getent hosts + # - Export the IP to `$TARGET_IP` + # - Check `$TARGET_IP` is not empty (so we can crash if it is - will help to detect templating errors) + # - Touch `/tmp/healty` to use with the readiness, liveness and startup probes + # - Start socat in proxy mode + # - On exit remove `/tmp/healthy` + args: + - "-c" + - 'export TARGET_IP=$(getent hosts ''{{ printf "%v-autodiscovery" (include "tc.v1.common.lib.chart.names.fullname" $) }}'' | awk ''{ print $1 }'') && [[ ! -z $TARGET_IP ]] && touch /tmp/healthy && socat UDP-LISTEN:7359,fork,reuseaddr,rcvbuf=8096 UDP4-SENDTO:${TARGET_IP}:7359,rcvbuf=8096 ; rm -rf /tmp/healthy' + probes: + readiness: + enabled: true + type: exec + command: + - cat + - /tmp/healthy + liveness: + enabled: true + type: exec + command: + - cat + - /tmp/healthy + startup: + enabled: true + type: exec + command: + - cat + - /tmp/healthy +# -- enable Jellyfin autodiscovery on LAN +autodiscovery: + enabled: false +updated: true diff --git a/stable/jellyfin/18.7.1/questions.yaml b/stable/jellyfin/18.7.1/questions.yaml new file mode 100644 index 0000000..d47750a --- /dev/null +++ b/stable/jellyfin/18.7.1/questions.yaml @@ -0,0 +1,3126 @@ +groups: + - name: Container Image + description: Image to be used for container + - name: General Settings + description: General Deployment Settings + - name: Workload Settings + description: Workload Settings + - name: App Configuration + description: App Specific Config Options + - name: Networking and Services + description: Configure Network and Services for Container + - name: Storage and Persistence + description: Persist and Share Data that is Separate from the Container + - name: Ingress + description: Ingress Configuration + - name: Security and Permissions + description: Configure Security Context and Permissions + - name: Resources and Devices + description: "Specify Resources/Devices to be Allocated to Workload" + - name: Middlewares + description: Traefik Middlewares + - name: Metrics + description: Metrics + - name: Addons + description: Addon Configuration + - name: Backup Configuration + description: Configure Velero Backup Schedule + - name: Advanced + description: Advanced Configuration + - name: Postgresql + description: Postgresql + - name: Documentation + description: Documentation + +portals: + open: + protocols: + - "$kubernetes-resource_configmap_tcportal-open_protocol" + host: + - "$kubernetes-resource_configmap_tcportal-open_host" + ports: + - "$kubernetes-resource_configmap_tcportal-open_port" + +questions: + - variable: global + group: General Settings + label: "Global Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: stopAll + label: Stop All + description: "Stops All Running pods and hibernates cnpg" + schema: + type: boolean + default: false + + - variable: workload + group: "Workload Settings" + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "" + schema: + additional_attrs: true + type: dict + attrs: + + - variable: type + label: Type (Advanced) + schema: + type: string + default: Deployment + enum: + - value: Deployment + description: Deployment + - value: DaemonSet + description: DaemonSet + + - variable: replicas + label: Replicas (Advanced) + description: Set the number of Replicas + schema: + type: int + show_if: [["type", "!=", "DaemonSet"]] + default: 1 + + - variable: podSpec + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: containers + label: Containers + schema: + additional_attrs: true + type: dict + attrs: + + - variable: main + label: Main Container + schema: + additional_attrs: true + type: dict + attrs: + + - variable: envList + label: Extra Environment Variables + description: "Please be aware that some variables are set in the background, adding duplicates here might cause issues or prevent the app from starting..." + schema: + type: list + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: extraArgs + label: Extra Args + schema: + type: list + default: [] + items: + - variable: arg + label: Arg + schema: + type: string + + - variable: advanced + label: Show Advanced Settings + description: Advanced settings are not covered by TrueCharts Support + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: command + label: Command + schema: + type: list + default: [] + items: + - variable: param + label: Param + schema: + type: string + + - variable: autodiscovery + group: "App Configuration" + label: "Autodiscovery" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: "Enable Autodiscovery on LAN" + 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: 8096 + 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: transcode + label: "App Transcode Storage" + description: "Storage for transcode, best to be set to emptyDir and if enough RAM, to Memory type." + 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: 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/jellyfin/18.7.1/templates/NOTES.txt b/stable/jellyfin/18.7.1/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/jellyfin/18.7.1/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/jellyfin/18.7.1/templates/common.yaml b/stable/jellyfin/18.7.1/templates/common.yaml new file mode 100644 index 0000000..754fc72 --- /dev/null +++ b/stable/jellyfin/18.7.1/templates/common.yaml @@ -0,0 +1,8 @@ +{{- include "tc.v1.common.loader.init" . }} + +{{- if .Values.autodiscovery.enabled -}} +{{/* Add proxy workload */}} +{{- $_ := set .Values.workload.broadcastproxy "enabled" true -}} +{{- end -}} + +{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/jellyfin/18.7.1/values.yaml b/stable/jellyfin/18.7.1/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/jellyfin/18.7.2/.helmignore b/stable/jellyfin/18.7.2/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/jellyfin/18.7.2/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/jellyfin/18.7.2/CHANGELOG.md b/stable/jellyfin/18.7.2/CHANGELOG.md new file mode 100644 index 0000000..e960984 --- /dev/null +++ b/stable/jellyfin/18.7.2/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + +## [jellyfin-18.7.2](https://github.com/truecharts/charts/compare/jellyfin-18.6.0...jellyfin-18.7.2) (2024-03-23) + +### Chore + + + +- update container image docker.io/alpine/socat to 1.8.0.0[@615f616](https://github.com/615f616) by renovate ([#19661](https://github.com/truecharts/charts/issues/19661)) + +- 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 docker.io/alpine/socat to 1.8.0.0[@2e782d6](https://github.com/2e782d6) by renovate ([#19222](https://github.com/truecharts/charts/issues/19222)) + + +## [jellyfin-18.7.2](https://github.com/truecharts/charts/compare/jellyfin-18.6.0...jellyfin-18.7.2) (2024-03-23) + +### Chore + + + +- update container image docker.io/alpine/socat to 1.8.0.0[@615f616](https://github.com/615f616) by renovate ([#19661](https://github.com/truecharts/charts/issues/19661)) + +- 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 docker.io/alpine/socat to 1.8.0.0[@2e782d6](https://github.com/2e782d6) by renovate ([#19222](https://github.com/truecharts/charts/issues/19222)) + + +## [jellyfin-18.7.2](https://github.com/truecharts/charts/compare/jellyfin-18.6.0...jellyfin-18.7.2) (2024-03-23) + +### Chore + + + +- update container image docker.io/alpine/socat to 1.8.0.0[@615f616](https://github.com/615f616) by renovate ([#19661](https://github.com/truecharts/charts/issues/19661)) + +- 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 docker.io/alpine/socat to 1.8.0.0[@2e782d6](https://github.com/2e782d6) by renovate ([#19222](https://github.com/truecharts/charts/issues/19222)) + + +## [jellyfin-18.7.2](https://github.com/truecharts/charts/compare/jellyfin-18.6.0...jellyfin-18.7.2) (2024-03-23) + +### Chore + + + +- update container image docker.io/alpine/socat to 1.8.0.0[@615f616](https://github.com/615f616) by renovate ([#19661](https://github.com/truecharts/charts/issues/19661)) + +- 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 docker.io/alpine/socat to 1.8.0.0[@2e782d6](https://github.com/2e782d6) by renovate ([#19222](https://github.com/truecharts/charts/issues/19222)) + + +## [jellyfin-18.7.2](https://github.com/truecharts/charts/compare/jellyfin-18.6.0...jellyfin-18.7.2) (2024-03-23) + +### Chore + + + +- update container image docker.io/alpine/socat to 1.8.0.0[@615f616](https://github.com/615f616) by renovate ([#19661](https://github.com/truecharts/charts/issues/19661)) + +- 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 docker.io/alpine/socat to 1.8.0.0[@2e782d6](https://github.com/2e782d6) by renovate ([#19222](https://github.com/truecharts/charts/issues/19222)) + + +## [jellyfin-18.7.2](https://github.com/truecharts/charts/compare/jellyfin-18.6.0...jellyfin-18.7.2) (2024-03-23) + +### Chore + + + +- update container image docker.io/alpine/socat to 1.8.0.0[@615f616](https://github.com/615f616) by renovate ([#19661](https://github.com/truecharts/charts/issues/19661)) + +- 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 docker.io/alpine/socat to 1.8.0.0[@2e782d6](https://github.com/2e782d6) by renovate ([#19222](https://github.com/truecharts/charts/issues/19222)) + diff --git a/stable/jellyfin/18.7.2/Chart.yaml b/stable/jellyfin/18.7.2/Chart.yaml new file mode 100644 index 0000000..aacd609 --- /dev/null +++ b/stable/jellyfin/18.7.2/Chart.yaml @@ -0,0 +1,39 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + 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: 10.8.13 +dependencies: + - name: common + version: 20.2.2 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: Jellyfin is a Free Software Media System +home: https://truecharts.org/charts/stable/jellyfin +icon: https://truecharts.org/img/hotlink-ok/chart-icons/jellyfin.png +keywords: + - jellyfin + - plex + - emby +kubeVersion: '>=1.24.0-0' +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: jellyfin +sources: + - https://github.com/jellyfin/jellyfin + - https://github.com/truecharts/charts/tree/master/charts/stable/jellyfin + - https://hub.docker.com/r/alpine/socat + - https://hub.docker.com/r/jellyfin/jellyfin +type: application +version: 18.7.2 diff --git a/stable/jellyfin/18.7.2/README.md b/stable/jellyfin/18.7.2/README.md new file mode 100644 index 0000000..e146166 --- /dev/null +++ b/stable/jellyfin/18.7.2/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/jellyfin) + +**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/jellyfin/18.7.2/app-changelog.md b/stable/jellyfin/18.7.2/app-changelog.md new file mode 100644 index 0000000..1796a6f --- /dev/null +++ b/stable/jellyfin/18.7.2/app-changelog.md @@ -0,0 +1,15 @@ + + +## [jellyfin-18.7.2](https://github.com/truecharts/charts/compare/jellyfin-18.6.0...jellyfin-18.7.2) (2024-03-23) + +### Chore + + + +- update container image docker.io/alpine/socat to 1.8.0.0[@615f616](https://github.com/615f616) by renovate ([#19661](https://github.com/truecharts/charts/issues/19661)) + +- 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 docker.io/alpine/socat to 1.8.0.0[@2e782d6](https://github.com/2e782d6) by renovate ([#19222](https://github.com/truecharts/charts/issues/19222)) \ No newline at end of file diff --git a/stable/jellyfin/18.7.2/app-readme.md b/stable/jellyfin/18.7.2/app-readme.md new file mode 100644 index 0000000..73fdb17 --- /dev/null +++ b/stable/jellyfin/18.7.2/app-readme.md @@ -0,0 +1,8 @@ +Jellyfin is a Free Software Media System + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/jellyfin](https://truecharts.org/charts/stable/jellyfin) + +--- + +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/jellyfin/18.7.2/charts/common-20.2.2.tgz b/stable/jellyfin/18.7.2/charts/common-20.2.2.tgz new file mode 100644 index 0000000000000000000000000000000000000000..a03705c84630d53af93b6d6ffdf44b22f1a2597f GIT binary patch literal 101828 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 literal 0 HcmV?d00001 diff --git a/stable/jellyfin/18.7.2/ix_values.yaml b/stable/jellyfin/18.7.2/ix_values.yaml new file mode 100644 index 0000000..8a4b92a --- /dev/null +++ b/stable/jellyfin/18.7.2/ix_values.yaml @@ -0,0 +1,98 @@ +image: + repository: docker.io/jellyfin/jellyfin + pullPolicy: IfNotPresent + tag: 10.8.13@sha256:05a9734d7e83086b957c5b7a16cbb5a60b5bb8d113ffb953e57547359dd05140 +broadcastProxyImage: + repository: docker.io/alpine/socat + pullPolicy: IfNotPresent + tag: 1.8.0.0@sha256:615f6161ed38e6daa676402658fef903d001acda7b855edf1007df57be43d7aa +service: + main: + ports: + main: + port: 8096 + targetPort: 8096 + autodiscovery: + enabled: true + ports: + autodiscovery: + enabled: true + protocol: udp + port: 7359 + targetPort: 7359 +persistence: + config: + enabled: true + mountPath: "/config" + cache: + enabled: true + mountPath: "/cache" + type: "emptyDir" + transcode: + enabled: true + mountPath: "/config/transcodes" + type: "emptyDir" +portal: + open: + enabled: true +securityContext: + container: + readOnlyRootFilesystem: false +workload: + main: + podSpec: + containers: + main: + env: + JELLYFIN_PublishedServerUrl: "{{ $.Values.chartContext.appUrl }}" + broadcastproxy: + enabled: false + type: DaemonSet + podSpec: + hostNetwork: true + # Proxy doesn't seem to respect the TERM signal, so by default + # this ends up just hanging until the default grace period ends. + # This is unnecesary since this workload only proxies autodiscovery + # messages. + terminationGracePeriodSeconds: 3 + containers: + broadcastproxy: + enabled: true + primary: true + imageSelector: broadcastProxyImage + securityContext: + readOnlyRootFilesystem: true + command: ["/bin/sh"] + # Quite a lot going on here: + # - Resolve Jellyfin's autodiscovery service IP from its FQDN via getent hosts + # - Export the IP to `$TARGET_IP` + # - Check `$TARGET_IP` is not empty (so we can crash if it is - will help to detect templating errors) + # - Touch `/tmp/healty` to use with the readiness, liveness and startup probes + # - Start socat in proxy mode + # - On exit remove `/tmp/healthy` + args: + - "-c" + - 'export TARGET_IP=$(getent hosts ''{{ printf "%v-autodiscovery" (include "tc.v1.common.lib.chart.names.fullname" $) }}'' | awk ''{ print $1 }'') && [[ ! -z $TARGET_IP ]] && touch /tmp/healthy && socat UDP-LISTEN:7359,fork,reuseaddr,rcvbuf=8096 UDP4-SENDTO:${TARGET_IP}:7359,rcvbuf=8096 ; rm -rf /tmp/healthy' + probes: + readiness: + enabled: true + type: exec + command: + - cat + - /tmp/healthy + liveness: + enabled: true + type: exec + command: + - cat + - /tmp/healthy + startup: + enabled: true + type: exec + command: + - cat + - /tmp/healthy +# -- enable Jellyfin autodiscovery on LAN +autodiscovery: + enabled: false +updated: true diff --git a/stable/jellyfin/18.7.2/questions.yaml b/stable/jellyfin/18.7.2/questions.yaml new file mode 100644 index 0000000..d47750a --- /dev/null +++ b/stable/jellyfin/18.7.2/questions.yaml @@ -0,0 +1,3126 @@ +groups: + - name: Container Image + description: Image to be used for container + - name: General Settings + description: General Deployment Settings + - name: Workload Settings + description: Workload Settings + - name: App Configuration + description: App Specific Config Options + - name: Networking and Services + description: Configure Network and Services for Container + - name: Storage and Persistence + description: Persist and Share Data that is Separate from the Container + - name: Ingress + description: Ingress Configuration + - name: Security and Permissions + description: Configure Security Context and Permissions + - name: Resources and Devices + description: "Specify Resources/Devices to be Allocated to Workload" + - name: Middlewares + description: Traefik Middlewares + - name: Metrics + description: Metrics + - name: Addons + description: Addon Configuration + - name: Backup Configuration + description: Configure Velero Backup Schedule + - name: Advanced + description: Advanced Configuration + - name: Postgresql + description: Postgresql + - name: Documentation + description: Documentation + +portals: + open: + protocols: + - "$kubernetes-resource_configmap_tcportal-open_protocol" + host: + - "$kubernetes-resource_configmap_tcportal-open_host" + ports: + - "$kubernetes-resource_configmap_tcportal-open_port" + +questions: + - variable: global + group: General Settings + label: "Global Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: stopAll + label: Stop All + description: "Stops All Running pods and hibernates cnpg" + schema: + type: boolean + default: false + + - variable: workload + group: "Workload Settings" + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "" + schema: + additional_attrs: true + type: dict + attrs: + + - variable: type + label: Type (Advanced) + schema: + type: string + default: Deployment + enum: + - value: Deployment + description: Deployment + - value: DaemonSet + description: DaemonSet + + - variable: replicas + label: Replicas (Advanced) + description: Set the number of Replicas + schema: + type: int + show_if: [["type", "!=", "DaemonSet"]] + default: 1 + + - variable: podSpec + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: containers + label: Containers + schema: + additional_attrs: true + type: dict + attrs: + + - variable: main + label: Main Container + schema: + additional_attrs: true + type: dict + attrs: + + - variable: envList + label: Extra Environment Variables + description: "Please be aware that some variables are set in the background, adding duplicates here might cause issues or prevent the app from starting..." + schema: + type: list + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: extraArgs + label: Extra Args + schema: + type: list + default: [] + items: + - variable: arg + label: Arg + schema: + type: string + + - variable: advanced + label: Show Advanced Settings + description: Advanced settings are not covered by TrueCharts Support + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: command + label: Command + schema: + type: list + default: [] + items: + - variable: param + label: Param + schema: + type: string + + - variable: autodiscovery + group: "App Configuration" + label: "Autodiscovery" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: "Enable Autodiscovery on LAN" + 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: 8096 + 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: transcode + label: "App Transcode Storage" + description: "Storage for transcode, best to be set to emptyDir and if enough RAM, to Memory type." + 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: 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/jellyfin/18.7.2/templates/NOTES.txt b/stable/jellyfin/18.7.2/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/jellyfin/18.7.2/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/jellyfin/18.7.2/templates/common.yaml b/stable/jellyfin/18.7.2/templates/common.yaml new file mode 100644 index 0000000..754fc72 --- /dev/null +++ b/stable/jellyfin/18.7.2/templates/common.yaml @@ -0,0 +1,8 @@ +{{- include "tc.v1.common.loader.init" . }} + +{{- if .Values.autodiscovery.enabled -}} +{{/* Add proxy workload */}} +{{- $_ := set .Values.workload.broadcastproxy "enabled" true -}} +{{- end -}} + +{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/jellyfin/18.7.2/values.yaml b/stable/jellyfin/18.7.2/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/jellyfin/18.7.3/.helmignore b/stable/jellyfin/18.7.3/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/jellyfin/18.7.3/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/jellyfin/18.7.3/CHANGELOG.md b/stable/jellyfin/18.7.3/CHANGELOG.md new file mode 100644 index 0000000..984c9f7 --- /dev/null +++ b/stable/jellyfin/18.7.3/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + +## [jellyfin-18.7.3](https://github.com/truecharts/charts/compare/jellyfin-18.6.0...jellyfin-18.7.3) (2024-03-25) + +### Chore + + + +- 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 docker.io/alpine/socat to 1.8.0.0[@615f616](https://github.com/615f616) by renovate ([#19661](https://github.com/truecharts/charts/issues/19661)) + +- 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 docker.io/alpine/socat to 1.8.0.0[@2e782d6](https://github.com/2e782d6) by renovate ([#19222](https://github.com/truecharts/charts/issues/19222)) + + +## [jellyfin-18.7.3](https://github.com/truecharts/charts/compare/jellyfin-18.6.0...jellyfin-18.7.3) (2024-03-25) + +### Chore + + + +- 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 docker.io/alpine/socat to 1.8.0.0[@615f616](https://github.com/615f616) by renovate ([#19661](https://github.com/truecharts/charts/issues/19661)) + +- 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 docker.io/alpine/socat to 1.8.0.0[@2e782d6](https://github.com/2e782d6) by renovate ([#19222](https://github.com/truecharts/charts/issues/19222)) + + +## [jellyfin-18.7.3](https://github.com/truecharts/charts/compare/jellyfin-18.6.0...jellyfin-18.7.3) (2024-03-25) + +### Chore + + + +- 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 docker.io/alpine/socat to 1.8.0.0[@615f616](https://github.com/615f616) by renovate ([#19661](https://github.com/truecharts/charts/issues/19661)) + +- 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 docker.io/alpine/socat to 1.8.0.0[@2e782d6](https://github.com/2e782d6) by renovate ([#19222](https://github.com/truecharts/charts/issues/19222)) + + +## [jellyfin-18.7.3](https://github.com/truecharts/charts/compare/jellyfin-18.6.0...jellyfin-18.7.3) (2024-03-24) + +### Chore + + + +- 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 docker.io/alpine/socat to 1.8.0.0[@615f616](https://github.com/615f616) by renovate ([#19661](https://github.com/truecharts/charts/issues/19661)) + +- 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 docker.io/alpine/socat to 1.8.0.0[@2e782d6](https://github.com/2e782d6) by renovate ([#19222](https://github.com/truecharts/charts/issues/19222)) + + +## [jellyfin-18.7.3](https://github.com/truecharts/charts/compare/jellyfin-18.6.0...jellyfin-18.7.3) (2024-03-24) + +### Chore + + + +- 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 docker.io/alpine/socat to 1.8.0.0[@615f616](https://github.com/615f616) by renovate ([#19661](https://github.com/truecharts/charts/issues/19661)) + +- 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 docker.io/alpine/socat to 1.8.0.0[@2e782d6](https://github.com/2e782d6) by renovate ([#19222](https://github.com/truecharts/charts/issues/19222)) + + +## [jellyfin-18.7.3](https://github.com/truecharts/charts/compare/jellyfin-18.6.0...jellyfin-18.7.3) (2024-03-24) + +### Chore + diff --git a/stable/jellyfin/18.7.3/Chart.yaml b/stable/jellyfin/18.7.3/Chart.yaml new file mode 100644 index 0000000..f1de90c --- /dev/null +++ b/stable/jellyfin/18.7.3/Chart.yaml @@ -0,0 +1,39 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + 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: 10.8.13 +dependencies: + - name: common + version: 20.2.3 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: Jellyfin is a Free Software Media System +home: https://truecharts.org/charts/stable/jellyfin +icon: https://truecharts.org/img/hotlink-ok/chart-icons/jellyfin.png +keywords: + - jellyfin + - plex + - emby +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: jellyfin +sources: + - https://github.com/jellyfin/jellyfin + - https://github.com/truecharts/charts/tree/master/charts/stable/jellyfin + - https://hub.docker.com/r/alpine/socat + - https://hub.docker.com/r/jellyfin/jellyfin +type: application +version: 18.7.3 diff --git a/stable/jellyfin/18.7.3/README.md b/stable/jellyfin/18.7.3/README.md new file mode 100644 index 0000000..e146166 --- /dev/null +++ b/stable/jellyfin/18.7.3/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/jellyfin) + +**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/jellyfin/18.7.3/app-changelog.md b/stable/jellyfin/18.7.3/app-changelog.md new file mode 100644 index 0000000..114ec16 --- /dev/null +++ b/stable/jellyfin/18.7.3/app-changelog.md @@ -0,0 +1,17 @@ + + +## [jellyfin-18.7.3](https://github.com/truecharts/charts/compare/jellyfin-18.6.0...jellyfin-18.7.3) (2024-03-25) + +### Chore + + + +- 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 docker.io/alpine/socat to 1.8.0.0[@615f616](https://github.com/615f616) by renovate ([#19661](https://github.com/truecharts/charts/issues/19661)) + +- 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 docker.io/alpine/socat to 1.8.0.0[@2e782d6](https://github.com/2e782d6) by renovate ([#19222](https://github.com/truecharts/charts/issues/19222)) \ No newline at end of file diff --git a/stable/jellyfin/18.7.3/app-readme.md b/stable/jellyfin/18.7.3/app-readme.md new file mode 100644 index 0000000..73fdb17 --- /dev/null +++ b/stable/jellyfin/18.7.3/app-readme.md @@ -0,0 +1,8 @@ +Jellyfin is a Free Software Media System + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/jellyfin](https://truecharts.org/charts/stable/jellyfin) + +--- + +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/jellyfin/18.7.3/charts/common-20.2.3.tgz b/stable/jellyfin/18.7.3/charts/common-20.2.3.tgz new file mode 100644 index 0000000000000000000000000000000000000000..701ca7141bec7a024c6a235eece1372f39cd79bb GIT binary patch literal 101772 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 pQu&l(J|9!^kf&Su#3jL{{R30|No + 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: transcode + label: "App Transcode Storage" + description: "Storage for transcode, best to be set to emptyDir and if enough RAM, to Memory type." + 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: 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/jellyfin/18.7.3/templates/NOTES.txt b/stable/jellyfin/18.7.3/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/jellyfin/18.7.3/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/jellyfin/18.7.3/templates/common.yaml b/stable/jellyfin/18.7.3/templates/common.yaml new file mode 100644 index 0000000..754fc72 --- /dev/null +++ b/stable/jellyfin/18.7.3/templates/common.yaml @@ -0,0 +1,8 @@ +{{- include "tc.v1.common.loader.init" . }} + +{{- if .Values.autodiscovery.enabled -}} +{{/* Add proxy workload */}} +{{- $_ := set .Values.workload.broadcastproxy "enabled" true -}} +{{- end -}} + +{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/jellyfin/18.7.3/values.yaml b/stable/jellyfin/18.7.3/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/jellyfin/18.7.4/.helmignore b/stable/jellyfin/18.7.4/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/jellyfin/18.7.4/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/jellyfin/18.7.4/CHANGELOG.md b/stable/jellyfin/18.7.4/CHANGELOG.md new file mode 100644 index 0000000..33f1a86 --- /dev/null +++ b/stable/jellyfin/18.7.4/CHANGELOG.md @@ -0,0 +1,100 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + +## [jellyfin-18.7.4](https://github.com/truecharts/charts/compare/jellyfin-18.6.0...jellyfin-18.7.4) (2024-03-25) + +### Chore + + + +- 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 docker.io/alpine/socat to 1.8.0.0[@615f616](https://github.com/615f616) by renovate ([#19661](https://github.com/truecharts/charts/issues/19661)) + +- 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 docker.io/alpine/socat to 1.8.0.0[@2e782d6](https://github.com/2e782d6) by renovate ([#19222](https://github.com/truecharts/charts/issues/19222)) + + +## [jellyfin-18.7.4](https://github.com/truecharts/charts/compare/jellyfin-18.6.0...jellyfin-18.7.4) (2024-03-25) + +### Chore + + + +- 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 docker.io/alpine/socat to 1.8.0.0[@615f616](https://github.com/615f616) by renovate ([#19661](https://github.com/truecharts/charts/issues/19661)) + +- 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 docker.io/alpine/socat to 1.8.0.0[@2e782d6](https://github.com/2e782d6) by renovate ([#19222](https://github.com/truecharts/charts/issues/19222)) + + +## [jellyfin-18.7.3](https://github.com/truecharts/charts/compare/jellyfin-18.6.0...jellyfin-18.7.3) (2024-03-25) + +### Chore + + + +- 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 docker.io/alpine/socat to 1.8.0.0[@615f616](https://github.com/615f616) by renovate ([#19661](https://github.com/truecharts/charts/issues/19661)) + +- 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 docker.io/alpine/socat to 1.8.0.0[@2e782d6](https://github.com/2e782d6) by renovate ([#19222](https://github.com/truecharts/charts/issues/19222)) + + +## [jellyfin-18.7.3](https://github.com/truecharts/charts/compare/jellyfin-18.6.0...jellyfin-18.7.3) (2024-03-25) + +### Chore + + + +- 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 docker.io/alpine/socat to 1.8.0.0[@615f616](https://github.com/615f616) by renovate ([#19661](https://github.com/truecharts/charts/issues/19661)) + +- 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 docker.io/alpine/socat to 1.8.0.0[@2e782d6](https://github.com/2e782d6) by renovate ([#19222](https://github.com/truecharts/charts/issues/19222)) + + +## [jellyfin-18.7.3](https://github.com/truecharts/charts/compare/jellyfin-18.6.0...jellyfin-18.7.3) (2024-03-25) + +### Chore + + + +- 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 docker.io/alpine/socat to 1.8.0.0[@615f616](https://github.com/615f616) by renovate ([#19661](https://github.com/truecharts/charts/issues/19661)) + +- 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 docker.io/alpine/socat to 1.8.0.0[@2e782d6](https://github.com/2e782d6) by renovate ([#19222](https://github.com/truecharts/charts/issues/19222)) + + +## [jellyfin-18.7.3](https://github.com/truecharts/charts/compare/jellyfin-18.6.0...jellyfin-18.7.3) (2024-03-24) \ No newline at end of file diff --git a/stable/jellyfin/18.7.4/Chart.yaml b/stable/jellyfin/18.7.4/Chart.yaml new file mode 100644 index 0000000..67aef96 --- /dev/null +++ b/stable/jellyfin/18.7.4/Chart.yaml @@ -0,0 +1,39 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + 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: 10.8.13 +dependencies: + - name: common + version: 20.2.4 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: Jellyfin is a Free Software Media System +home: https://truecharts.org/charts/stable/jellyfin +icon: https://truecharts.org/img/hotlink-ok/chart-icons/jellyfin.png +keywords: + - jellyfin + - plex + - emby +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: jellyfin +sources: + - https://github.com/jellyfin/jellyfin + - https://github.com/truecharts/charts/tree/master/charts/stable/jellyfin + - https://hub.docker.com/r/alpine/socat + - https://hub.docker.com/r/jellyfin/jellyfin +type: application +version: 18.7.4 diff --git a/stable/jellyfin/18.7.4/README.md b/stable/jellyfin/18.7.4/README.md new file mode 100644 index 0000000..e146166 --- /dev/null +++ b/stable/jellyfin/18.7.4/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/jellyfin) + +**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/jellyfin/18.7.4/app-changelog.md b/stable/jellyfin/18.7.4/app-changelog.md new file mode 100644 index 0000000..ae1630e --- /dev/null +++ b/stable/jellyfin/18.7.4/app-changelog.md @@ -0,0 +1,19 @@ + + +## [jellyfin-18.7.4](https://github.com/truecharts/charts/compare/jellyfin-18.6.0...jellyfin-18.7.4) (2024-03-25) + +### Chore + + + +- 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 docker.io/alpine/socat to 1.8.0.0[@615f616](https://github.com/615f616) by renovate ([#19661](https://github.com/truecharts/charts/issues/19661)) + +- 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 docker.io/alpine/socat to 1.8.0.0[@2e782d6](https://github.com/2e782d6) by renovate ([#19222](https://github.com/truecharts/charts/issues/19222)) \ No newline at end of file diff --git a/stable/jellyfin/18.7.4/app-readme.md b/stable/jellyfin/18.7.4/app-readme.md new file mode 100644 index 0000000..73fdb17 --- /dev/null +++ b/stable/jellyfin/18.7.4/app-readme.md @@ -0,0 +1,8 @@ +Jellyfin is a Free Software Media System + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/jellyfin](https://truecharts.org/charts/stable/jellyfin) + +--- + +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/jellyfin/18.7.4/charts/common-20.2.4.tgz b/stable/jellyfin/18.7.4/charts/common-20.2.4.tgz new file mode 100644 index 0000000000000000000000000000000000000000..e02a4ec419295564ee54731f20fe2563fa9e2f00 GIT binary patch literal 101809 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 literal 0 HcmV?d00001 diff --git a/stable/jellyfin/18.7.4/ix_values.yaml b/stable/jellyfin/18.7.4/ix_values.yaml new file mode 100644 index 0000000..8a4b92a --- /dev/null +++ b/stable/jellyfin/18.7.4/ix_values.yaml @@ -0,0 +1,98 @@ +image: + repository: docker.io/jellyfin/jellyfin + pullPolicy: IfNotPresent + tag: 10.8.13@sha256:05a9734d7e83086b957c5b7a16cbb5a60b5bb8d113ffb953e57547359dd05140 +broadcastProxyImage: + repository: docker.io/alpine/socat + pullPolicy: IfNotPresent + tag: 1.8.0.0@sha256:615f6161ed38e6daa676402658fef903d001acda7b855edf1007df57be43d7aa +service: + main: + ports: + main: + port: 8096 + targetPort: 8096 + autodiscovery: + enabled: true + ports: + autodiscovery: + enabled: true + protocol: udp + port: 7359 + targetPort: 7359 +persistence: + config: + enabled: true + mountPath: "/config" + cache: + enabled: true + mountPath: "/cache" + type: "emptyDir" + transcode: + enabled: true + mountPath: "/config/transcodes" + type: "emptyDir" +portal: + open: + enabled: true +securityContext: + container: + readOnlyRootFilesystem: false +workload: + main: + podSpec: + containers: + main: + env: + JELLYFIN_PublishedServerUrl: "{{ $.Values.chartContext.appUrl }}" + broadcastproxy: + enabled: false + type: DaemonSet + podSpec: + hostNetwork: true + # Proxy doesn't seem to respect the TERM signal, so by default + # this ends up just hanging until the default grace period ends. + # This is unnecesary since this workload only proxies autodiscovery + # messages. + terminationGracePeriodSeconds: 3 + containers: + broadcastproxy: + enabled: true + primary: true + imageSelector: broadcastProxyImage + securityContext: + readOnlyRootFilesystem: true + command: ["/bin/sh"] + # Quite a lot going on here: + # - Resolve Jellyfin's autodiscovery service IP from its FQDN via getent hosts + # - Export the IP to `$TARGET_IP` + # - Check `$TARGET_IP` is not empty (so we can crash if it is - will help to detect templating errors) + # - Touch `/tmp/healty` to use with the readiness, liveness and startup probes + # - Start socat in proxy mode + # - On exit remove `/tmp/healthy` + args: + - "-c" + - 'export TARGET_IP=$(getent hosts ''{{ printf "%v-autodiscovery" (include "tc.v1.common.lib.chart.names.fullname" $) }}'' | awk ''{ print $1 }'') && [[ ! -z $TARGET_IP ]] && touch /tmp/healthy && socat UDP-LISTEN:7359,fork,reuseaddr,rcvbuf=8096 UDP4-SENDTO:${TARGET_IP}:7359,rcvbuf=8096 ; rm -rf /tmp/healthy' + probes: + readiness: + enabled: true + type: exec + command: + - cat + - /tmp/healthy + liveness: + enabled: true + type: exec + command: + - cat + - /tmp/healthy + startup: + enabled: true + type: exec + command: + - cat + - /tmp/healthy +# -- enable Jellyfin autodiscovery on LAN +autodiscovery: + enabled: false +updated: true diff --git a/stable/jellyfin/18.7.4/questions.yaml b/stable/jellyfin/18.7.4/questions.yaml new file mode 100644 index 0000000..d47750a --- /dev/null +++ b/stable/jellyfin/18.7.4/questions.yaml @@ -0,0 +1,3126 @@ +groups: + - name: Container Image + description: Image to be used for container + - name: General Settings + description: General Deployment Settings + - name: Workload Settings + description: Workload Settings + - name: App Configuration + description: App Specific Config Options + - name: Networking and Services + description: Configure Network and Services for Container + - name: Storage and Persistence + description: Persist and Share Data that is Separate from the Container + - name: Ingress + description: Ingress Configuration + - name: Security and Permissions + description: Configure Security Context and Permissions + - name: Resources and Devices + description: "Specify Resources/Devices to be Allocated to Workload" + - name: Middlewares + description: Traefik Middlewares + - name: Metrics + description: Metrics + - name: Addons + description: Addon Configuration + - name: Backup Configuration + description: Configure Velero Backup Schedule + - name: Advanced + description: Advanced Configuration + - name: Postgresql + description: Postgresql + - name: Documentation + description: Documentation + +portals: + open: + protocols: + - "$kubernetes-resource_configmap_tcportal-open_protocol" + host: + - "$kubernetes-resource_configmap_tcportal-open_host" + ports: + - "$kubernetes-resource_configmap_tcportal-open_port" + +questions: + - variable: global + group: General Settings + label: "Global Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: stopAll + label: Stop All + description: "Stops All Running pods and hibernates cnpg" + schema: + type: boolean + default: false + + - variable: workload + group: "Workload Settings" + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "" + schema: + additional_attrs: true + type: dict + attrs: + + - variable: type + label: Type (Advanced) + schema: + type: string + default: Deployment + enum: + - value: Deployment + description: Deployment + - value: DaemonSet + description: DaemonSet + + - variable: replicas + label: Replicas (Advanced) + description: Set the number of Replicas + schema: + type: int + show_if: [["type", "!=", "DaemonSet"]] + default: 1 + + - variable: podSpec + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: containers + label: Containers + schema: + additional_attrs: true + type: dict + attrs: + + - variable: main + label: Main Container + schema: + additional_attrs: true + type: dict + attrs: + + - variable: envList + label: Extra Environment Variables + description: "Please be aware that some variables are set in the background, adding duplicates here might cause issues or prevent the app from starting..." + schema: + type: list + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: extraArgs + label: Extra Args + schema: + type: list + default: [] + items: + - variable: arg + label: Arg + schema: + type: string + + - variable: advanced + label: Show Advanced Settings + description: Advanced settings are not covered by TrueCharts Support + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: command + label: Command + schema: + type: list + default: [] + items: + - variable: param + label: Param + schema: + type: string + + - variable: autodiscovery + group: "App Configuration" + label: "Autodiscovery" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: "Enable Autodiscovery on LAN" + 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: 8096 + 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: transcode + label: "App Transcode Storage" + description: "Storage for transcode, best to be set to emptyDir and if enough RAM, to Memory type." + 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: 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/jellyfin/18.7.4/templates/NOTES.txt b/stable/jellyfin/18.7.4/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/jellyfin/18.7.4/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/jellyfin/18.7.4/templates/common.yaml b/stable/jellyfin/18.7.4/templates/common.yaml new file mode 100644 index 0000000..754fc72 --- /dev/null +++ b/stable/jellyfin/18.7.4/templates/common.yaml @@ -0,0 +1,8 @@ +{{- include "tc.v1.common.loader.init" . }} + +{{- if .Values.autodiscovery.enabled -}} +{{/* Add proxy workload */}} +{{- $_ := set .Values.workload.broadcastproxy "enabled" true -}} +{{- end -}} + +{{- include "tc.v1.common.loader.apply" . -}} diff --git a/stable/jellyfin/18.7.4/values.yaml b/stable/jellyfin/18.7.4/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/jellyfin/app_versions.json b/stable/jellyfin/app_versions.json new file mode 100644 index 0000000..5af0ec8 --- /dev/null +++ b/stable/jellyfin/app_versions.json @@ -0,0 +1,38428 @@ +{ + "18.7.4": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/jellyfin/18.7.4", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/timezone", + "definitions/certificate", + "definitions/interface", + "normalize/interfaceConfiguration" + ], + "human_version": "10.8.13_18.7.4", + "version": "18.7.4", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "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": "10.8.13", + "dependencies": [ + { + "name": "common", + "version": "20.2.4", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "Jellyfin is a Free Software Media System", + "home": "https://truecharts.org/charts/stable/jellyfin", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/jellyfin.png", + "keywords": [ + "jellyfin", + "plex", + "emby" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "jellyfin", + "sources": [ + "https://github.com/jellyfin/jellyfin", + "https://github.com/truecharts/charts/tree/master/charts/stable/jellyfin", + "https://hub.docker.com/r/alpine/socat", + "https://hub.docker.com/r/jellyfin/jellyfin" + ], + "type": "application", + "version": "18.7.4" + }, + "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": "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": "autodiscovery", + "group": "App Configuration", + "label": "Autodiscovery", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable Autodiscovery on LAN", + "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": 8096, + "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": "transcode", + "label": "App Transcode Storage", + "description": "Storage for transcode, best to be set to emptyDir and if enough RAM, to Memory type.", + "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": "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": "

Jellyfin is a Free Software Media System

\n

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

\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

jellyfin-18.7.4 (2024-03-25)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.4@f245f5c by renovate (#19731)

    \n
  • \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image docker.io/alpine/socat to 1.8.0.0@615f616 by renovate (#19661)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image docker.io/alpine/socat to 1.8.0.0@2e782d6 by renovate (#19222)

    \n
  • \n
\n

jellyfin-18.7.4 (2024-03-25)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.4@f245f5c by renovate (#19731)

    \n
  • \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image docker.io/alpine/socat to 1.8.0.0@615f616 by renovate (#19661)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image docker.io/alpine/socat to 1.8.0.0@2e782d6 by renovate (#19222)

    \n
  • \n
\n

jellyfin-18.7.3 (2024-03-25)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image docker.io/alpine/socat to 1.8.0.0@615f616 by renovate (#19661)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image docker.io/alpine/socat to 1.8.0.0@2e782d6 by renovate (#19222)

    \n
  • \n
\n

jellyfin-18.7.3 (2024-03-25)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image docker.io/alpine/socat to 1.8.0.0@615f616 by renovate (#19661)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image docker.io/alpine/socat to 1.8.0.0@2e782d6 by renovate (#19222)

    \n
  • \n
\n

jellyfin-18.7.3 (2024-03-25)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image docker.io/alpine/socat to 1.8.0.0@615f616 by renovate (#19661)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image docker.io/alpine/socat to 1.8.0.0@2e782d6 by renovate (#19222)

    \n
  • \n
\n

jellyfin-18.7.3 (2024-03-24)

" + }, + "18.7.3": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/jellyfin/18.7.3", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/timezone", + "definitions/certificate", + "definitions/interface", + "normalize/interfaceConfiguration" + ], + "human_version": "10.8.13_18.7.3", + "version": "18.7.3", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "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": "10.8.13", + "dependencies": [ + { + "name": "common", + "version": "20.2.3", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "Jellyfin is a Free Software Media System", + "home": "https://truecharts.org/charts/stable/jellyfin", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/jellyfin.png", + "keywords": [ + "jellyfin", + "plex", + "emby" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "jellyfin", + "sources": [ + "https://github.com/jellyfin/jellyfin", + "https://github.com/truecharts/charts/tree/master/charts/stable/jellyfin", + "https://hub.docker.com/r/alpine/socat", + "https://hub.docker.com/r/jellyfin/jellyfin" + ], + "type": "application", + "version": "18.7.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": "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": "autodiscovery", + "group": "App Configuration", + "label": "Autodiscovery", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable Autodiscovery on LAN", + "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": 8096, + "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": "transcode", + "label": "App Transcode Storage", + "description": "Storage for transcode, best to be set to emptyDir and if enough RAM, to Memory type.", + "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": "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": "

Jellyfin is a Free Software Media System

\n

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

\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

jellyfin-18.7.3 (2024-03-25)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image docker.io/alpine/socat to 1.8.0.0@615f616 by renovate (#19661)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image docker.io/alpine/socat to 1.8.0.0@2e782d6 by renovate (#19222)

    \n
  • \n
\n

jellyfin-18.7.3 (2024-03-25)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image docker.io/alpine/socat to 1.8.0.0@615f616 by renovate (#19661)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image docker.io/alpine/socat to 1.8.0.0@2e782d6 by renovate (#19222)

    \n
  • \n
\n

jellyfin-18.7.3 (2024-03-25)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image docker.io/alpine/socat to 1.8.0.0@615f616 by renovate (#19661)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image docker.io/alpine/socat to 1.8.0.0@2e782d6 by renovate (#19222)

    \n
  • \n
\n

jellyfin-18.7.3 (2024-03-24)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image docker.io/alpine/socat to 1.8.0.0@615f616 by renovate (#19661)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image docker.io/alpine/socat to 1.8.0.0@2e782d6 by renovate (#19222)

    \n
  • \n
\n

jellyfin-18.7.3 (2024-03-24)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image docker.io/alpine/socat to 1.8.0.0@615f616 by renovate (#19661)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image docker.io/alpine/socat to 1.8.0.0@2e782d6 by renovate (#19222)

    \n
  • \n
\n

jellyfin-18.7.3 (2024-03-24)

\n

Chore

" + }, + "18.7.2": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/jellyfin/18.7.2", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/timezone", + "definitions/certificate", + "definitions/interface", + "normalize/interfaceConfiguration" + ], + "human_version": "10.8.13_18.7.2", + "version": "18.7.2", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "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": "10.8.13", + "dependencies": [ + { + "name": "common", + "version": "20.2.2", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "Jellyfin is a Free Software Media System", + "home": "https://truecharts.org/charts/stable/jellyfin", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/jellyfin.png", + "keywords": [ + "jellyfin", + "plex", + "emby" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "jellyfin", + "sources": [ + "https://github.com/jellyfin/jellyfin", + "https://github.com/truecharts/charts/tree/master/charts/stable/jellyfin", + "https://hub.docker.com/r/alpine/socat", + "https://hub.docker.com/r/jellyfin/jellyfin" + ], + "type": "application", + "version": "18.7.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": "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": "autodiscovery", + "group": "App Configuration", + "label": "Autodiscovery", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable Autodiscovery on LAN", + "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": 8096, + "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": "transcode", + "label": "App Transcode Storage", + "description": "Storage for transcode, best to be set to emptyDir and if enough RAM, to Memory type.", + "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": "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": "

Jellyfin is a Free Software Media System

\n

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

\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

jellyfin-18.7.2 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image docker.io/alpine/socat to 1.8.0.0@615f616 by renovate (#19661)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image docker.io/alpine/socat to 1.8.0.0@2e782d6 by renovate (#19222)

    \n
  • \n
\n

jellyfin-18.7.2 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image docker.io/alpine/socat to 1.8.0.0@615f616 by renovate (#19661)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image docker.io/alpine/socat to 1.8.0.0@2e782d6 by renovate (#19222)

    \n
  • \n
\n

jellyfin-18.7.2 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image docker.io/alpine/socat to 1.8.0.0@615f616 by renovate (#19661)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image docker.io/alpine/socat to 1.8.0.0@2e782d6 by renovate (#19222)

    \n
  • \n
\n

jellyfin-18.7.2 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image docker.io/alpine/socat to 1.8.0.0@615f616 by renovate (#19661)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image docker.io/alpine/socat to 1.8.0.0@2e782d6 by renovate (#19222)

    \n
  • \n
\n

jellyfin-18.7.2 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image docker.io/alpine/socat to 1.8.0.0@615f616 by renovate (#19661)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image docker.io/alpine/socat to 1.8.0.0@2e782d6 by renovate (#19222)

    \n
  • \n
\n

jellyfin-18.7.2 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image docker.io/alpine/socat to 1.8.0.0@615f616 by renovate (#19661)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image docker.io/alpine/socat to 1.8.0.0@2e782d6 by renovate (#19222)

    \n
  • \n
" + }, + "18.7.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/jellyfin/18.7.1", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/timezone", + "definitions/certificate", + "definitions/interface", + "normalize/interfaceConfiguration" + ], + "human_version": "10.8.13_18.7.1", + "version": "18.7.1", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "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": "10.8.13", + "dependencies": [ + { + "name": "common", + "version": "20.2.2", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "Jellyfin is a Free Software Media System", + "home": "https://truecharts.org/charts/stable/jellyfin", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/jellyfin.png", + "keywords": [ + "jellyfin", + "plex", + "emby" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "jellyfin", + "sources": [ + "https://github.com/jellyfin/jellyfin", + "https://github.com/truecharts/charts/tree/master/charts/stable/jellyfin", + "https://hub.docker.com/r/jellyfin/jellyfin", + "https://hub.docker.com/r/alpine/socat" + ], + "type": "application", + "version": "18.7.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": "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": "autodiscovery", + "group": "App Configuration", + "label": "Autodiscovery", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable Autodiscovery on LAN", + "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": 8096, + "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": "transcode", + "label": "App Transcode Storage", + "description": "Storage for transcode, best to be set to emptyDir and if enough RAM, to Memory type.", + "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": "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": "

Jellyfin is a Free Software Media System

\n

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

\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

jellyfin-18.7.1 (2024-03-22)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image docker.io/alpine/socat to 1.8.0.0@2e782d6 by renovate (#19222)

    \n
  • \n
\n

jellyfin-18.7.1 (2024-03-22)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image docker.io/alpine/socat to 1.8.0.0@2e782d6 by renovate (#19222)

    \n
  • \n
\n

jellyfin-18.7.1 (2024-03-22)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image docker.io/alpine/socat to 1.8.0.0@2e782d6 by renovate (#19222)

    \n
  • \n
\n

jellyfin-18.7.1 (2024-03-22)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image docker.io/alpine/socat to 1.8.0.0@2e782d6 by renovate (#19222)

    \n
  • \n
\n

jellyfin-18.7.1 (2024-03-22)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image docker.io/alpine/socat to 1.8.0.0@2e782d6 by renovate (#19222)

    \n
  • \n
\n

jellyfin-18.7.1 (2024-03-22)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image docker.io/alpine/socat to 1.8.0.0@2e782d6 by renovate (#19222)

    \n
  • \n
\n

jellyfin-18.7.1 (2024-03-22)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image docker.io/alpine/socat to 1.8.0.0@2e782d6 by renovate (#19222)

    \n
  • \n
" + }, + "17.3.0": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/jellyfin/17.3.0", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/interface", + "normalize/interfaceConfiguration", + "definitions/gpuConfiguration", + "definitions/timezone", + "definitions/certificate" + ], + "human_version": "10.8.13_17.3.0", + "version": "17.3.0", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "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": "10.8.13", + "dependencies": [ + { + "name": "common", + "version": "17.5.0", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "Jellyfin is a Free Software Media System", + "home": "https://truecharts.org/charts/stable/jellyfin", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/jellyfin.png", + "keywords": [ + "jellyfin", + "plex", + "emby" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "jellyfin", + "sources": [ + "https://github.com/jellyfin/jellyfin", + "https://github.com/truecharts/charts/tree/master/charts/stable/jellyfin", + "https://hub.docker.com/r/jellyfin/jellyfin", + "https://hub.docker.com/r/alpine/socat" + ], + "type": "application", + "version": "17.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": "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": "autodiscovery", + "group": "App Configuration", + "label": "Autodiscovery", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable Autodiscovery on LAN", + "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": 8096, + "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": "transcode", + "label": "App Transcode Storage", + "description": "Storage for transcode, best to be set to emptyDir and if enough RAM, to Memory type.", + "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": "

Jellyfin is a Free Software Media System

\n

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

\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

jellyfin-17.1.18 (2024-02-12)

\n

Chore

\n
    \n
  • update container image docker.io/alpine/socat to 1.8.0.0@74e6801 by renovate (#18039)
  • \n
\n

jellyfin-17.1.17 (2024-02-05)

\n

Chore

\n
    \n
  • update container image docker.io/alpine/socat to 1.8.0.0@8bbbacd by renovate (#17827)
  • \n
\n

jellyfin-17.1.16 (2024-02-03)

\n

Chore

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

jellyfin-17.1.15 (2024-01-29)

\n

Chore

\n
    \n
  • update container image docker.io/alpine/socat to 1.8.0.0@9be350f by renovate (#17587)
  • \n
\n

jellyfin-17.1.14 (2024-01-26)

\n

Chore

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

jellyfin-17.1.13 (2024-01-21)

\n

Chore

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

jellyfin-17.1.12 (2024-01-21)

\n

Chore

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

jellyfin-17.1.11 (2024-01-21)

\n

Chore

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

jellyfin-17.1.10 (2024-01-21)

" + }, + "17.2.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/jellyfin/17.2.1", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/interface", + "normalize/interfaceConfiguration", + "definitions/gpuConfiguration", + "definitions/timezone", + "definitions/certificate" + ], + "human_version": "10.8.13_17.2.1", + "version": "17.2.1", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "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": "10.8.13", + "dependencies": [ + { + "name": "common", + "version": "17.4.2", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "Jellyfin is a Free Software Media System", + "home": "https://truecharts.org/charts/stable/jellyfin", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/jellyfin.png", + "keywords": [ + "jellyfin", + "plex", + "emby" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "jellyfin", + "sources": [ + "https://github.com/jellyfin/jellyfin", + "https://github.com/truecharts/charts/tree/master/charts/stable/jellyfin", + "https://hub.docker.com/r/alpine/socat", + "https://hub.docker.com/r/jellyfin/jellyfin" + ], + "type": "application", + "version": "17.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": "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": "autodiscovery", + "group": "App Configuration", + "label": "Autodiscovery", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable Autodiscovery on LAN", + "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": 8096, + "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": "transcode", + "label": "App Transcode Storage", + "description": "Storage for transcode, best to be set to emptyDir and if enough RAM, to Memory type.", + "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": "

Jellyfin is a Free Software Media System

\n

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

\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

jellyfin-17.1.18 (2024-02-12)

\n

Chore

\n
    \n
  • update container image docker.io/alpine/socat to 1.8.0.0@74e6801 by renovate (#18039)
  • \n
\n

jellyfin-17.1.17 (2024-02-05)

\n

Chore

\n
    \n
  • update container image docker.io/alpine/socat to 1.8.0.0@8bbbacd by renovate (#17827)
  • \n
\n

jellyfin-17.1.16 (2024-02-03)

\n

Chore

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

jellyfin-17.1.15 (2024-01-29)

\n

Chore

\n
    \n
  • update container image docker.io/alpine/socat to 1.8.0.0@9be350f by renovate (#17587)
  • \n
\n

jellyfin-17.1.14 (2024-01-26)

\n

Chore

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

jellyfin-17.1.13 (2024-01-21)

\n

Chore

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

jellyfin-17.1.12 (2024-01-21)

\n

Chore

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

jellyfin-17.1.11 (2024-01-21)

\n

Chore

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

jellyfin-17.1.10 (2024-01-21)

\n

Chore

" + }, + "17.2.0": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/jellyfin/17.2.0", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/interface", + "normalize/interfaceConfiguration", + "definitions/gpuConfiguration", + "definitions/timezone", + "definitions/certificate" + ], + "human_version": "10.8.13_17.2.0", + "version": "17.2.0", + "chart_metadata": { + "annotations": { + "max_scale_version": "23.10.2", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "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": "10.8.13", + "dependencies": [ + { + "name": "common", + "version": "17.4.2", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "Jellyfin is a Free Software Media System", + "home": "https://truecharts.org/charts/stable/jellyfin", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/jellyfin.png", + "keywords": [ + "jellyfin", + "plex", + "emby" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "jellyfin", + "sources": [ + "https://github.com/jellyfin/jellyfin", + "https://github.com/truecharts/charts/tree/master/charts/stable/jellyfin", + "https://hub.docker.com/r/alpine/socat", + "https://hub.docker.com/r/jellyfin/jellyfin" + ], + "type": "application", + "version": "17.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": "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": "autodiscovery", + "group": "App Configuration", + "label": "Autodiscovery", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enabled", + "label": "Enable Autodiscovery on LAN", + "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": 8096, + "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": "transcode", + "label": "App Transcode Storage", + "description": "Storage for transcode, best to be set to emptyDir and if enough RAM, to Memory type.", + "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": "

Jellyfin is a Free Software Media System

\n

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

\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

jellyfin-12.0.0 (2022-11-10)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Major Change to GUI
  • \n
  • update helm general non-major (#4342)
  • \n
  • update helm general non-major (#4349)
  • \n
  • update helm general non-major (#4329)
  • \n
\n

Fix

\n
    \n
  • change container config label
  • \n
\n

jellyfin-11.0.49 (2022-11-08)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#4342)
  • \n
  • update helm general non-major (#4349)
  • \n
  • update helm general non-major (#4329)
  • \n
\n

jellyfin-11.0.48 (2022-11-08)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#4342)
  • \n
  • update helm general non-major (#4329)
  • \n
\n

jellyfin-11.0.48 (2022-11-08)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#4342)
  • \n
  • update helm general non-major (#4329)
  • \n
\n

jellyfin-11.0.48 (2022-11-08)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#4342)
  • \n
  • update helm general non-major (#4329)
  • \n
\n

jellyfin-11.0.47 (2022-11-07)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#4329)
  • \n
\n

jellyfin-11.0.47 (2022-11-06)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#4329)
  • \n
\n

jellyfin-11.0.46 (2022-11-06)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#4317)
  • \n
\n

jellyfin-11.0.45 (2022-11-05)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#4308)
  • \n
\n

jellyfin-11.0.44 (2022-11-02)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#4261)
  • \n
  • update docker general non-major (#4280)
  • \n
\n

jellyfin-11.0.43 (2022-10-29)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update docker general non-major (#4230)
  • \n
\n

jellyfin-11.0.42 (2022-10-25)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#4182)
  • \n
\n

jellyfin-11.0.41 (2022-10-19)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#4122)
  • \n
\n

jellyfin-11.0.40 (2022-10-12)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#4071)
  • \n
\n

jellyfin-11.0.39 (2022-10-07)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major
  • \n
\n

jellyfin-11.0.39 (2022-10-07)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major
  • \n
\n

jellyfin-11.0.38 (2022-10-05)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • split addons in smaller templates (#3979)
  • \n
  • update helm general non-major
  • \n
\n

jellyfin-11.0.37 (2022-09-27)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#3918)
  • \n
\n

jellyfin-11.0.36 (2022-09-26)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update docker general non-major (#3906)
  • \n
\n

jellyfin-11.0.35 (2022-09-25)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#3898)
  • \n
\n

jellyfin-11.0.34 (2022-09-22)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • refactor Services SCALE GUI
  • \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

jellyfin-11.0.34 (2022-09-21)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • refactor Services SCALE GUI
  • \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

jellyfin-11.0.34 (2022-09-21)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • refactor Services SCALE GUI
  • \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

jellyfin-11.0.34 (2022-09-20)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • refactor Services SCALE GUI
  • \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

jellyfin-11.0.34 (2022-09-20)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • refactor Services SCALE GUI
  • \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

jellyfin-11.0.34 (2022-09-19)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • refactor Services SCALE GUI
  • \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

jellyfin-11.0.34 (2022-09-19)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • refactor Services SCALE GUI
  • \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

jellyfin-11.0.34 (2022-09-19)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • refactor Services SCALE GUI
  • \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

jellyfin-11.0.34 (2022-09-17)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • refactor Services SCALE GUI
  • \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

jellyfin-11.0.34 (2022-09-18)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

jellyfin-11.0.34 (2022-09-16)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

jellyfin-11.0.34 (2022-09-16)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

jellyfin-11.0.34 (2022-09-15)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

jellyfin-11.0.34 (2022-09-15)

\n

Chore

\n
    \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

jellyfin-11.0.33 (2022-09-12)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#3711)
  • \n
\n

jellyfin-11.0.33 (2022-09-12)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#3711)
  • \n
\n

jellyfin-11.0.33 (2022-09-11)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#3711)
  • \n
\n

jellyfin-11.0.33 (2022-09-11)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#3711)
  • \n
\n

jellyfin-11.0.33 (2022-09-11)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#3711)
  • \n
\n

jellyfin-11.0.33 (2022-09-11)

\n

Chore

\n
    \n
  • update helm general non-major (#3711)
  • \n
\n

jellyfin-11.0.32 (2022-08-30)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#3639)
  • \n
  • update helm chart common to v10.5.5 (#3626)
  • \n
\n

jellyfin-11.0.31 (2022-08-30)

\n

Chore

\n
    \n
  • update helm chart common to v10.5.5 (#3626)
  • \n
\n

jellyfin-11.0.30 (2022-08-29)

\n

Chore

\n
    \n
  • update helm general non-major (#3619)
  • \n
\n

jellyfin-11.0.29 (2022-08-23)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#3545)
  • \n
\n

jellyfin-11.0.28 (2022-08-17)

\n

Chore

\n
    \n
  • update docker general non-major (#3478)
  • \n
\n

jellyfin-11.0.27 (2022-08-12)

\n

Chore

\n
    \n
  • add documentation checkbox/section to all SCALE Apps
  • \n
  • update helm general non-major helm releases (#3456)
  • \n
\n

Fix

\n
    \n
  • move extraArgs from .Values.controller to .Values (#3447)
  • \n
\n

jellyfin-11.0.26 (2022-08-09)

\n

Chore

\n
    \n
  • update docker general non-major (#3377)
  • \n
\n

jellyfin-11.0.25 (2022-08-08)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#3376)
  • \n
  • replace questions parts with templates (#3402)
  • \n
\n

jellyfin-11.0.24 (2022-07-26)

\n

Chore

\n
    \n
  • update home links (#3291)
  • \n
  • update helm general non-major helm releases (#3302)
  • \n
\n

jellyfin-11.0.23 (2022-07-25)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update docker general non-major (#3295)
  • \n
\n

jellyfin-11.0.23 (2022-07-25)

\n

Chore

\n
    \n
  • update docker general non-major (#3295)
  • \n
\n

jellyfin-11.0.22 (2022-07-23)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major helm releases (#3280)
  • \n
\n

jellyfin-11.0.22 (2022-07-23)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major helm releases (#3280)
  • \n
\n

jellyfin-11.0.22 (2022-07-23)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#3280)
  • \n
\n

jellyfin-11.0.21 (2022-07-22)

\n

Chore

\n
    \n
  • Bump all charts to generate config and container references due to huge increase of repository
  • \n
  • update helm general non-major helm releases (#3268)
  • \n
\n

jellyfin-11.0.19 (2022-07-19)

\n

Chore

\n
    \n
  • Update Readme and Description on SCALE
  • \n
\n

jellyfin-11.0.18 (2022-07-14)

\n

Fix

\n
    \n
  • regenerate catalog and update template
  • \n
\n

jellyfin-11.0.17 (2022-07-14)

\n

Fix

\n
    \n
  • bump to ensure .helmignore is present on all Charts
  • \n
\n

jellyfin-11.0.15 (2022-07-12)

\n

Chore

\n
    \n
  • update icons (#3156)
  • \n
  • bump to cleanup old docs and use correct icon urls
  • \n
\n

jellyfin-11.0.13 (2022-07-12)

\n

Chore

\n
    \n
  • bump to regenerate documentation
  • \n
\n

\n

jellyfin-11.0.12 (2022-07-12)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#3147)
  • \n
\n

\n

jellyfin-11.0.11 (2022-07-11)

\n

Chore

\n
    \n
  • move icons into the apps folder (#3139)
  • \n
\n

\n

jellyfin-11.0.10 (2022-07-09)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#3113)
  • \n
\n

\n

jellyfin-11.0.9 (2022-07-04)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#3066)
  • \n
\n

\n

jellyfin-11.0.8 (2022-06-27)

\n

Chore

\n
    \n
  • update docker general non-major (#2999)
  • \n
\n

\n

jellyfin-11.0.7 (2022-06-25)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2977)
  • \n
\n

\n

jellyfin-11.0.6 (2022-06-22)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2948)
  • \n
\n

\n

jellyfin-11.0.5 (2022-06-21)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2943)
  • \n
\n

\n

jellyfin-11.0.4 (2022-06-14)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2886)
  • \n
\n

\n

jellyfin-11.0.3 (2022-06-11)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2854)
  • \n
  • update docker general non-major (#2856)
  • \n
\n

\n

jellyfin-11.0.2 (2022-06-07)

\n

Fix

\n
    \n
  • hotpatch to disable HPA and networkPolicy in SCALE interface, due to incompatible format.
  • \n
\n

\n

jellyfin-11.0.1 (2022-06-07)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • sync all apps persistence configuration and always default to PVC
  • \n
\n

Fix

\n
    \n
  • remove malfunctioning SCALE migration script
  • \n
\n

Refactor

\n
    \n
  • BREAKING CHANGE (#2836)
  • \n
\n

\n

jellyfin-11.0.0 (2022-06-07)

\n

Chore

\n
    \n
  • sync all apps persistence configuration and always default to PVC
  • \n
\n

Refactor

\n
    \n
  • BREAKING CHANGE (#2836)
  • \n
\n

\n

jellyfin-10.0.19 (2022-05-31)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2803)
  • \n
\n

\n

jellyfin-10.0.18 (2022-05-26)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major helm releases (#2759)
  • \n
\n

\n

jellyfin-10.0.18 (2022-05-26)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2759)
  • \n
\n

\n

jellyfin-10.0.17 (2022-05-24)

\n

Chore

\n
    \n
  • update helm general non-major helm releases
  • \n
\n

\n

jellyfin-10.0.16 (2022-05-17)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major helm releases
  • \n
\n

\n

jellyfin-10.0.16 (2022-05-17)

\n

Chore

\n
    \n
  • update helm general non-major helm releases
  • \n
\n

\n

jellyfin-10.0.15 (2022-05-17)

\n

Chore

\n
    \n
  • update helm general non-major helm releases
  • \n
\n

\n

jellyfin-10.0.14 (2022-05-10)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2649)
  • \n
\n

\n

jellyfin-10.0.13 (2022-05-05)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2612)
  • \n
\n

\n

jellyfin-10.0.12 (2022-04-26)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2573)
  • \n
\n

\n

jellyfin-10.0.11 (2022-04-20)

\n

Chore

\n
    \n
  • add missing quote on description (#2515)
  • \n
  • update helm general non-major helm releases (#2524)
  • \n
\n

\n

jellyfin-10.0.10 (2022-04-12)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2480)
  • \n
\n

\n

jellyfin-10.0.9 (2022-04-03)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2410)
  • \n
\n

\n

jellyfin-10.0.8 (2022-03-31)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2361)
  • \n
\n

\n

jellyfin-10.0.7 (2022-03-30)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2354)
  • \n
\n

\n

jellyfin-10.0.6 (2022-03-26)

\n

Chore

\n
    \n
  • bump all apps to trigger ci
  • \n
\n

\n

jellyfin-10.0.1 (2022-03-07)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2111)
  • \n
  • Remove -icon string from icon png's (#2040)
  • \n
\n

\n

jellyfin-10.0.0 (2022-03-03)

\n

Chore

\n
    \n
  • remove fixed env from questions.yaml
  • \n
  • update helm general major helm releases (#2021)
  • \n
\n

Fix

\n
    \n
  • BREAKING CHANGE Move some env-vars outside of env section (#2010)
  • \n
\n

\n

jellyfin-9.0.44 (2022-03-02)

\n

Chore

\n
    \n
  • rename web_portal to open (#1957)
  • \n
  • update helm general non-major helm releases (#1999)
  • \n
\n

\n

jellyfin-9.0.43 (2022-02-21)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1927)
  • \n
\n

\n

jellyfin-9.0.42 (2022-02-15)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1901)
  • \n
\n

\n

jellyfin-9.0.41 (2022-02-08)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1871)
  • \n
\n

\n

jellyfin-9.0.40 (2022-02-06)

\n

Chore

\n
    \n
  • update helm chart common to v8.15.0 (#1859)
  • \n
\n

\n

jellyfin-9.0.39 (2022-02-06)

\n

Chore

\n
    \n
  • Mount cache to emptyDir and add PublishedServerURL var (#1853)
  • \n
\n

\n

jellyfin-9.0.38 (2022-02-05)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1852)
  • \n
\n

\n

jellyfin-9.0.37 (2022-02-02)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1828)
  • \n
\n

\n

jellyfin-9.0.36 (2022-01-25)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1791)
  • \n
\n

\n

jellyfin-9.0.35 (2022-01-22)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1766)
  • \n
\n

\n

jellyfin-9.0.34 (2022-01-21)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1759)
  • \n
\n

Fix

\n
    \n
  • set additional_attrs: true on all dicts (#1750)
  • \n
\n

\n

jellyfin-9.0.33 (2022-01-18)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1732)
  • \n
\n

\n

jellyfin-9.0.32 (2022-01-13)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1712)
  • \n
\n

Feat

\n
    \n
  • expose capabilities in GUI (#1709)
  • \n
\n

\n

jellyfin-9.0.31 (2022-01-12)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1704)
  • \n
\n

\n

jellyfin-9.0.30 (2022-01-11)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1693)
  • \n
\n

\n

jellyfin-9.0.29 (2022-01-04)

\n

Chore

\n
    \n
  • update helm general non-major helm releases
  • \n
\n

\n

jellyfin-9.0.28 (2021-12-28)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1623)
  • \n
\n

\n

jellyfin-9.0.27 (2021-12-21)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1596)
  • \n
\n

\n

jellyfin-9.0.26 (2021-12-19)

\n

Chore

\n
    \n
  • Last patch bump before RC2 branch-off
  • \n
  • remove editable: true as this is the default (#1576)
  • \n
\n

\n

jellyfin-9.0.25 (2021-12-19)

\n

Chore

\n
    \n
  • completely remove mountPath reference from GUI (#1572)
  • \n
  • update helm general non-major helm releases (#1571)
  • \n
\n

\n

jellyfin-9.0.24 (2021-12-18)

\n

Chore

\n
    \n
  • cleanup questions by removing hidden dicts (#1558)
  • \n
  • App-Icon Organization (#1539)
  • \n
\n

\n

jellyfin-9.0.23 (2021-12-14)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1535)
  • \n
\n

\n

jellyfin-9.0.22 (2021-12-13)

\n

Chore

\n
    \n
  • move incubator apps to stable and bump everything
  • \n
\n

\n

jellyfin-9.0.21 (2021-12-11)

\n

Chore

\n
    \n
  • update general helm non-major helm releases (#1509)
  • \n
\n

\n

jellyfin-9.0.20 (2021-12-11)

\n

Chore

\n
    \n
  • update non-major docker (#1507)
  • \n
\n

\n

jellyfin-9.0.19 (2021-12-07)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1481)
  • \n
\n

\n

jellyfin-9.0.18 (2021-12-05)

\n

Chore

\n
    \n
  • bump apps to generate security page
  • \n
  • move all container references to TCCR (#1448)
  • \n
  • update non-major deps helm releases (#1471)
  • \n
  • update non-major deps helm releases (#1468)
  • \n
  • update non-major deps helm releases (#1453)
  • \n
  • update non-major (#1449)
  • \n
  • update non-major deps helm releases (#1432)
  • \n
\n

Fix

\n
    \n
  • fix typo in theme selection (#1428)
  • \n
\n

\n

jellyfin-9.0.17 (2021-12-05)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1468)
  • \n
\n

\n

jellyfin-9.0.16 (2021-12-04)

\n

Chore

\n
    \n
  • bump apps to generate security page
  • \n
\n

\n

jellyfin-9.0.15 (2021-12-04)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1453)
  • \n
\n

\n

jellyfin-9.0.14 (2021-12-03)

\n

Chore

\n
    \n
  • move all container references to TCCR (#1448)
  • \n
  • update non-major (#1449)
  • \n
\n

\n

jellyfin-9.0.13 (2021-11-30)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1432)
  • \n
\n

\n

jellyfin-9.0.12 (2021-11-23)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1386)
  • \n
\n

\n

jellyfin-9.0.11 (2021-11-22)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1383)
  • \n
\n

\n

jellyfin-9.0.10 (2021-11-16)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1345)
  • \n
\n

\n

jellyfin-9.0.9 (2021-11-15)

\n

Chore

\n
    \n
  • persistence cleanup and small bugfixes (#1329)
  • \n
  • update non-major deps helm releases (#1338)
  • \n
\n

\n

jellyfin-9.0.8 (2021-11-14)

\n

Chore

\n
    \n
  • fixes around the GUI refactor (#1316)
  • \n
  • move port above advanced in GUI (#1326)
  • \n
  • clean up Chart.yaml (#1322)
  • \n
  • update non-major deps helm releases (#1328)
  • \n
\n

Fix

\n
    \n
  • split udp and tcp ports (#1321)
  • \n
  • Allow spaces in paths (#1306)
  • \n
\n

\n

jellyfin-9.0.7 (2021-11-09)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1297)
  • \n
\n

\n

jellyfin-9.0.6 (2021-11-07)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1295)
  • \n
\n

\n

jellyfin-9.0.5 (2021-11-07)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1291)
  • \n
\n

Chore

\n
    \n
  • Simplify GUI for deployment, persistence and securityContext (#1289)
  • \n
\n

Feat

\n
    \n
  • Simplify the Services GUI (#1290)
  • \n
\n

\n

jellyfin-9.0.4 (2021-11-02)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1267)
  • \n
\n

\n

jellyfin-9.0.3 (2021-11-01)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1264)
  • \n
\n

\n

jellyfin-9.0.2 (2021-10-26)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1245)
  • \n
\n

\n

jellyfin-9.0.1 (2021-10-26)

\n

Chore

\n
    \n
  • update helm chart common to v8.3.15 (#1240)
  • \n
\n

\n

jellyfin-9.0.0 (2021-10-25)

\n

Chore

\n
    \n
  • Adapt for TrueNAS SCALE RC1
  • \n
\n

\n

jellyfin-8.0.16 (2021-10-20)

\n

Chore

\n
    \n
  • bump apps, remove duplicates and move incubator to stable for RC1
  • \n
\n

\n

jellyfin-8.0.13 (2021-10-20)

\n

Chore

\n
    \n
  • bump versions to rerelease and fix icons
  • \n
\n

\n

jellyfin-8.0.12 (2021-10-19)

\n

Change

\n
    \n
  • Project-Eclipse 3, Automatically generate item.yaml (#1178)
  • \n
\n

Chore

\n
    \n
  • Project-Eclipse 5, move app-readme to automatic generation script (#1181)
  • \n
  • Project-Eclipse part 2, adapting and cleaning changelog (#1173)
  • \n
  • update helm chart common to v8.3.13 (#1184)
  • \n
\n

Feat

\n
    \n
  • Project-Eclipse 4, Add App grading annotations to Chart.yaml (#1180)
  • \n
\n

Refactor

\n
    \n
  • Project Eclipse Part 6, move questions.yaml to root App folder (#1182)
  • \n
\n

\n

jellyfin-8.0.11 (2021-10-19)

\n

Fix

\n
    \n
  • fix previous SCALE bugfix not correctly being applied
  • \n
\n

\n

jellyfin-8.0.10 (2021-10-19)

\n

Fix

\n
    \n
  • Solve issues regarding ix_values.yaml not containing the image and tag definitions. (#1176)
  • \n
\n

\n

jellyfin-8.0.9 (2021-10-18)

\n

Chore

\n
    \n
  • Add description on persistence (#1172)
  • \n
\n

Refactor

\n
    \n
  • Project Eclipse - part 1 - remove ix_values.yaml (#1168)
  • \n
\n

\n

jellyfin-8.0.8 (2021-10-17)

\n

Chore

\n
    \n
  • update helm chart common to v8.3.10 (#1160)
  • \n
\n

Fix

\n
    \n
  • force users using correct / prefix for mounPath (#1156)
  • \n
\n

\n

jellyfin-8.0.7 (2021-10-13)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1133)
  • \n
\n

\n

jellyfin-8.0.6 (2021-10-12)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1126)
  • \n
\n

\n

jellyfin-8.0.5 (2021-10-12)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1123)
  • \n
\n

\n

jellyfin-8.0.4 (2021-10-05)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1099)
  • \n
\n

\n

jellyfin-8.0.3 (2021-09-29)

\n

Chore

\n
    \n
  • update helm chart common to v8.0.13 (#1060)
  • \n
\n

\n

jellyfin-8.0.1 (2021-09-26)

\n

\n

jellyfin-8.0.0 (2021-09-26)

\n

\n

jellyfin-7.0.2 (2021-09-21)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1014)
  • \n
\n

\n

jellyfin-7.0.1 (2021-09-13)

\n

Chore

\n
    \n
  • move more dockerhub containers to GHCR mirror (#958)
  • \n
  • update non-major (#962)
  • \n
\n

Feat

\n
    \n
  • add new GUI and VPN support to all Apps (#977)
  • \n
  • Add VPN addon and move some config to includes (#973)
  • \n
  • pin all container references to digests (#963)
  • \n
  • Move some common containers to our own containers
  • \n
\n

Fix

\n
    \n
  • make sure podSecurityContext is included in both SCALE and Helm installs (#956)
  • \n
\n

\n

jellyfin-6.11.16 (2021-09-08)

\n

Fix

\n
    \n
  • repair Hyperion and some misplaced GUI elements (#922)
  • \n
" + } +} \ No newline at end of file diff --git a/stable/jellyfin/item.yaml b/stable/jellyfin/item.yaml new file mode 100644 index 0000000..a07a0e9 --- /dev/null +++ b/stable/jellyfin/item.yaml @@ -0,0 +1,4 @@ +icon_url: https://truecharts.org/img/hotlink-ok/chart-icons/jellyfin.png +categories: + - media +screenshots: [] diff --git a/stable/librespeed/12.2.0/.helmignore b/stable/librespeed/12.2.0/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/librespeed/12.2.0/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/librespeed/12.2.0/CHANGELOG.md b/stable/librespeed/12.2.0/CHANGELOG.md new file mode 100644 index 0000000..bd886c5 --- /dev/null +++ b/stable/librespeed/12.2.0/CHANGELOG.md @@ -0,0 +1,1420 @@ +--- +title: Changelog +--- + +## [librespeed-7.0.0](https://github.com/truecharts/charts/compare/librespeed-6.0.41...librespeed-7.0.0) (2022-11-10) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Major Change to GUI +- update helm general non-major ([#4342](https://github.com/truecharts/charts/issues/4342)) +- update helm general non-major ([#4349](https://github.com/truecharts/charts/issues/4349)) +- update helm general non-major ([#4329](https://github.com/truecharts/charts/issues/4329)) + +## [librespeed-6.0.44](https://github.com/truecharts/charts/compare/librespeed-6.0.41...librespeed-6.0.44) (2022-11-08) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major ([#4342](https://github.com/truecharts/charts/issues/4342)) +- update helm general non-major ([#4349](https://github.com/truecharts/charts/issues/4349)) +- update helm general non-major ([#4329](https://github.com/truecharts/charts/issues/4329)) + +## [librespeed-6.0.43](https://github.com/truecharts/charts/compare/librespeed-6.0.41...librespeed-6.0.43) (2022-11-08) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major ([#4342](https://github.com/truecharts/charts/issues/4342)) +- update helm general non-major ([#4329](https://github.com/truecharts/charts/issues/4329)) + +## [librespeed-6.0.43](https://github.com/truecharts/charts/compare/librespeed-6.0.41...librespeed-6.0.43) (2022-11-08) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major ([#4342](https://github.com/truecharts/charts/issues/4342)) +- update helm general non-major ([#4329](https://github.com/truecharts/charts/issues/4329)) + +## [librespeed-6.0.43](https://github.com/truecharts/charts/compare/librespeed-6.0.41...librespeed-6.0.43) (2022-11-08) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major ([#4342](https://github.com/truecharts/charts/issues/4342)) +- update helm general non-major ([#4329](https://github.com/truecharts/charts/issues/4329)) + +## [librespeed-6.0.42](https://github.com/truecharts/charts/compare/librespeed-6.0.41...librespeed-6.0.42) (2022-11-07) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major ([#4329](https://github.com/truecharts/charts/issues/4329)) + +## [librespeed-6.0.42](https://github.com/truecharts/charts/compare/librespeed-6.0.41...librespeed-6.0.42) (2022-11-06) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major ([#4329](https://github.com/truecharts/charts/issues/4329)) + +## [librespeed-6.0.41](https://github.com/truecharts/charts/compare/librespeed-6.0.40...librespeed-6.0.41) (2022-11-06) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major ([#4317](https://github.com/truecharts/charts/issues/4317)) + +## [librespeed-6.0.40](https://github.com/truecharts/charts/compare/librespeed-6.0.39...librespeed-6.0.40) (2022-11-05) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major ([#4308](https://github.com/truecharts/charts/issues/4308)) + +## [librespeed-6.0.39](https://github.com/truecharts/charts/compare/librespeed-6.0.38...librespeed-6.0.39) (2022-11-02) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major ([#4261](https://github.com/truecharts/charts/issues/4261)) + +## [librespeed-6.0.38](https://github.com/truecharts/charts/compare/librespeed-6.0.37...librespeed-6.0.38) (2022-10-25) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major ([#4182](https://github.com/truecharts/charts/issues/4182)) + +## [librespeed-6.0.37](https://github.com/truecharts/charts/compare/librespeed-6.0.36...librespeed-6.0.37) (2022-10-19) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major ([#4122](https://github.com/truecharts/charts/issues/4122)) + +## [librespeed-6.0.36](https://github.com/truecharts/charts/compare/librespeed-6.0.35...librespeed-6.0.36) (2022-10-12) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major ([#4071](https://github.com/truecharts/charts/issues/4071)) + +## [librespeed-6.0.35](https://github.com/truecharts/charts/compare/librespeed-6.0.34...librespeed-6.0.35) (2022-10-07) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major + +## [librespeed-6.0.35](https://github.com/truecharts/charts/compare/librespeed-6.0.34...librespeed-6.0.35) (2022-10-07) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major + +## [librespeed-6.0.34](https://github.com/truecharts/charts/compare/librespeed-6.0.33...librespeed-6.0.34) (2022-10-05) + +### Chore + +- Auto-update chart README [skip ci] +- split addons in smaller templates ([#3979](https://github.com/truecharts/charts/issues/3979)) +- update helm general non-major + +## [librespeed-6.0.33](https://github.com/truecharts/charts/compare/librespeed-6.0.32...librespeed-6.0.33) (2022-09-27) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major ([#3918](https://github.com/truecharts/charts/issues/3918)) + +## [librespeed-6.0.32](https://github.com/truecharts/charts/compare/librespeed-6.0.31...librespeed-6.0.32) (2022-09-25) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major ([#3898](https://github.com/truecharts/charts/issues/3898)) + +## [librespeed-6.0.31](https://github.com/truecharts/charts/compare/librespeed-6.0.30...librespeed-6.0.31) (2022-09-22) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- refactor Services SCALE GUI +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [librespeed-6.0.31](https://github.com/truecharts/charts/compare/librespeed-6.0.30...librespeed-6.0.31) (2022-09-21) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- refactor Services SCALE GUI +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [librespeed-6.0.31](https://github.com/truecharts/charts/compare/librespeed-6.0.30...librespeed-6.0.31) (2022-09-21) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- refactor Services SCALE GUI +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [librespeed-6.0.31](https://github.com/truecharts/charts/compare/librespeed-6.0.30...librespeed-6.0.31) (2022-09-20) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- refactor Services SCALE GUI +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [librespeed-6.0.31](https://github.com/truecharts/charts/compare/librespeed-6.0.30...librespeed-6.0.31) (2022-09-20) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- refactor Services SCALE GUI +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [librespeed-6.0.31](https://github.com/truecharts/charts/compare/librespeed-6.0.30...librespeed-6.0.31) (2022-09-19) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- refactor Services SCALE GUI +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [librespeed-6.0.31](https://github.com/truecharts/charts/compare/librespeed-6.0.30...librespeed-6.0.31) (2022-09-19) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- refactor Services SCALE GUI +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [librespeed-6.0.31](https://github.com/truecharts/charts/compare/librespeed-6.0.30...librespeed-6.0.31) (2022-09-19) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- refactor Services SCALE GUI +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [librespeed-6.0.31](https://github.com/truecharts/charts/compare/librespeed-6.0.30...librespeed-6.0.31) (2022-09-17) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- refactor Services SCALE GUI +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [librespeed-6.0.31](https://github.com/truecharts/charts/compare/librespeed-6.0.30...librespeed-6.0.31) (2022-09-18) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [librespeed-6.0.31](https://github.com/truecharts/charts/compare/librespeed-6.0.30...librespeed-6.0.31) (2022-09-16) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [librespeed-6.0.31](https://github.com/truecharts/charts/compare/librespeed-6.0.30...librespeed-6.0.31) (2022-09-16) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [librespeed-6.0.31](https://github.com/truecharts/charts/compare/librespeed-6.0.30...librespeed-6.0.31) (2022-09-15) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [librespeed-6.0.31](https://github.com/truecharts/charts/compare/librespeed-6.0.30...librespeed-6.0.31) (2022-09-15) + +### Chore + +- update helm general non-major ([#3767](https://github.com/truecharts/charts/issues/3767)) +- split serviceSelector ([#3751](https://github.com/truecharts/charts/issues/3751)) + +## [librespeed-6.0.30](https://github.com/truecharts/charts/compare/librespeed-6.0.29...librespeed-6.0.30) (2022-09-12) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major ([#3711](https://github.com/truecharts/charts/issues/3711)) + +## [librespeed-6.0.30](https://github.com/truecharts/charts/compare/librespeed-6.0.29...librespeed-6.0.30) (2022-09-12) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major ([#3711](https://github.com/truecharts/charts/issues/3711)) + +## [librespeed-6.0.30](https://github.com/truecharts/charts/compare/librespeed-6.0.29...librespeed-6.0.30) (2022-09-11) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major ([#3711](https://github.com/truecharts/charts/issues/3711)) + +## [librespeed-6.0.30](https://github.com/truecharts/charts/compare/librespeed-6.0.29...librespeed-6.0.30) (2022-09-11) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major ([#3711](https://github.com/truecharts/charts/issues/3711)) + +## [librespeed-6.0.30](https://github.com/truecharts/charts/compare/librespeed-6.0.29...librespeed-6.0.30) (2022-09-11) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major ([#3711](https://github.com/truecharts/charts/issues/3711)) + +## [librespeed-6.0.30](https://github.com/truecharts/charts/compare/librespeed-6.0.29...librespeed-6.0.30) (2022-09-11) + +### Chore + +- update helm general non-major ([#3711](https://github.com/truecharts/charts/issues/3711)) + +## [librespeed-6.0.29](https://github.com/truecharts/charts/compare/librespeed-6.0.27...librespeed-6.0.29) (2022-08-30) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major ([#3639](https://github.com/truecharts/charts/issues/3639)) +- update helm chart common to v10.5.5 ([#3626](https://github.com/truecharts/charts/issues/3626)) + +## [librespeed-6.0.28](https://github.com/truecharts/charts/compare/librespeed-6.0.27...librespeed-6.0.28) (2022-08-30) + +### Chore + +- update helm chart common to v10.5.5 ([#3626](https://github.com/truecharts/charts/issues/3626)) + +## [librespeed-6.0.27](https://github.com/truecharts/charts/compare/librespeed-6.0.26...librespeed-6.0.27) (2022-08-29) + +### Chore + +- update helm general non-major ([#3619](https://github.com/truecharts/charts/issues/3619)) + +## [librespeed-6.0.26](https://github.com/truecharts/charts/compare/librespeed-6.0.25...librespeed-6.0.26) (2022-08-23) + +### Chore + +- update helm general non-major helm releases ([#3545](https://github.com/truecharts/charts/issues/3545)) + +## [librespeed-6.0.25](https://github.com/truecharts/charts/compare/librespeed-6.0.24...librespeed-6.0.25) (2022-08-12) + +### Chore + +- add documentation checkbox/section to all SCALE Apps +- update helm general non-major helm releases ([#3456](https://github.com/truecharts/charts/issues/3456)) + +### Fix + +- move extraArgs from .Values.controller to .Values ([#3447](https://github.com/truecharts/charts/issues/3447)) + +## [librespeed-6.0.24](https://github.com/truecharts/charts/compare/librespeed-6.0.23...librespeed-6.0.24) (2022-08-08) + +### Chore + +- update helm general non-major helm releases ([#3376](https://github.com/truecharts/charts/issues/3376)) +- replace questions parts with templates ([#3402](https://github.com/truecharts/charts/issues/3402)) + +## [librespeed-6.0.23](https://github.com/truecharts/apps/compare/librespeed-6.0.22...librespeed-6.0.23) (2022-07-26) + +### Chore + +- update home links ([#3291](https://github.com/truecharts/apps/issues/3291)) +- update helm general non-major helm releases ([#3302](https://github.com/truecharts/apps/issues/3302)) + +## [librespeed-6.0.22](https://github.com/truecharts/apps/compare/librespeed-6.0.21...librespeed-6.0.22) (2022-07-23) + +### Chore + +- Auto-update chart README [skip ci] +- Auto-update chart README [skip ci] +- update helm general non-major helm releases ([#3280](https://github.com/truecharts/apps/issues/3280)) + +## [librespeed-6.0.22](https://github.com/truecharts/apps/compare/librespeed-6.0.21...librespeed-6.0.22) (2022-07-23) + +### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major helm releases ([#3280](https://github.com/truecharts/apps/issues/3280)) + +## [librespeed-6.0.22](https://github.com/truecharts/apps/compare/librespeed-6.0.21...librespeed-6.0.22) (2022-07-23) + +### Chore + +- update helm general non-major helm releases ([#3280](https://github.com/truecharts/apps/issues/3280)) + +## [librespeed-6.0.21](https://github.com/truecharts/apps/compare/librespeed-6.0.19...librespeed-6.0.21) (2022-07-22) + +### Chore + +- Bump all charts to generate config and container references due to huge increase of repository +- update helm general non-major helm releases ([#3268](https://github.com/truecharts/apps/issues/3268)) + +## [librespeed-6.0.19](https://github.com/truecharts/apps/compare/librespeed-6.0.18...librespeed-6.0.19) (2022-07-19) + +### Chore + +- Update Readme and Description on SCALE + +## [librespeed-6.0.18](https://github.com/truecharts/apps/compare/librespeed-6.0.17...librespeed-6.0.18) (2022-07-14) + +### Fix + +- regenerate catalog and update template + +## [librespeed-6.0.17](https://github.com/truecharts/apps/compare/librespeed-6.0.15...librespeed-6.0.17) (2022-07-14) + +### Fix + +- bump to ensure .helmignore is present on all Charts + +## [librespeed-6.0.15](https://github.com/truecharts/apps/compare/librespeed-6.0.13...librespeed-6.0.15) (2022-07-12) + +### Chore + +- update icons ([#3156](https://github.com/truecharts/apps/issues/3156)) +- bump to cleanup old docs and use correct icon urls + +## [librespeed-6.0.13](https://github.com/truecharts/apps/compare/librespeed-6.0.12...librespeed-6.0.13) (2022-07-12) + +### Chore + +- bump to regenerate documentation + + + +### [librespeed-6.0.12](https://github.com/truecharts/apps/compare/librespeed-6.0.11...librespeed-6.0.12) (2022-07-12) + +#### Chore + +- update helm general non-major helm releases ([#3147](https://github.com/truecharts/apps/issues/3147)) + + + +### [librespeed-6.0.11](https://github.com/truecharts/apps/compare/librespeed-6.0.10...librespeed-6.0.11) (2022-07-11) + +#### Chore + +- move icons into the apps folder ([#3139](https://github.com/truecharts/apps/issues/3139)) + + + +### [librespeed-6.0.10](https://github.com/truecharts/apps/compare/librespeed-6.0.9...librespeed-6.0.10) (2022-07-09) + +#### Chore + +- update helm general non-major helm releases ([#3113](https://github.com/truecharts/apps/issues/3113)) + + + +### [librespeed-6.0.9](https://github.com/truecharts/apps/compare/librespeed-6.0.8...librespeed-6.0.9) (2022-07-04) + +#### Chore + +- update helm general non-major helm releases ([#3066](https://github.com/truecharts/apps/issues/3066)) + + + +### [librespeed-6.0.8](https://github.com/truecharts/apps/compare/librespeed-6.0.7...librespeed-6.0.8) (2022-06-25) + +#### Chore + +- update helm general non-major helm releases ([#2977](https://github.com/truecharts/apps/issues/2977)) + + + +### [librespeed-6.0.7](https://github.com/truecharts/apps/compare/librespeed-6.0.6...librespeed-6.0.7) (2022-06-22) + +#### Chore + +- update helm general non-major helm releases ([#2948](https://github.com/truecharts/apps/issues/2948)) + + + +### [librespeed-6.0.6](https://github.com/truecharts/apps/compare/librespeed-6.0.5...librespeed-6.0.6) (2022-06-21) + +#### Chore + +- update helm general non-major helm releases ([#2943](https://github.com/truecharts/apps/issues/2943)) + + + +### [librespeed-6.0.5](https://github.com/truecharts/apps/compare/librespeed-6.0.4...librespeed-6.0.5) (2022-06-17) + +#### Chore + +- Sync questions and values env's ([#2916](https://github.com/truecharts/apps/issues/2916)) + + + +### [librespeed-6.0.4](https://github.com/truecharts/apps/compare/librespeed-6.0.3...librespeed-6.0.4) (2022-06-14) + +#### Chore + +- update helm general non-major helm releases ([#2886](https://github.com/truecharts/apps/issues/2886)) + + + +### [librespeed-6.0.3](https://github.com/truecharts/apps/compare/librespeed-6.0.2...librespeed-6.0.3) (2022-06-11) + +#### Chore + +- update helm general non-major helm releases ([#2854](https://github.com/truecharts/apps/issues/2854)) + + + +### [librespeed-6.0.2](https://github.com/truecharts/apps/compare/librespeed-6.0.1...librespeed-6.0.2) (2022-06-07) + +#### Fix + +- hotpatch to disable HPA and networkPolicy in SCALE interface, due to incompatible format. + + + +### [librespeed-6.0.1](https://github.com/truecharts/apps/compare/librespeed-5.0.19...librespeed-6.0.1) (2022-06-07) + +#### Chore + +- Auto-update chart README [skip ci] +- sync all apps persistence configuration and always default to PVC + +#### Fix + +- remove malfunctioning SCALE migration script + +#### Refactor + +- BREAKING CHANGE ([#2836](https://github.com/truecharts/apps/issues/2836)) + + + +### [librespeed-6.0.0](https://github.com/truecharts/apps/compare/librespeed-5.0.19...librespeed-6.0.0) (2022-06-07) + +#### Chore + +- sync all apps persistence configuration and always default to PVC + +#### Refactor + +- BREAKING CHANGE ([#2836](https://github.com/truecharts/apps/issues/2836)) + + + +### [librespeed-5.0.19](https://github.com/truecharts/apps/compare/librespeed-5.0.18...librespeed-5.0.19) (2022-05-31) + +#### Chore + +- update helm general non-major helm releases ([#2803](https://github.com/truecharts/apps/issues/2803)) + + + +### [librespeed-5.0.18](https://github.com/truecharts/apps/compare/librespeed-5.0.17...librespeed-5.0.18) (2022-05-26) + +#### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major helm releases ([#2759](https://github.com/truecharts/apps/issues/2759)) + + + +### [librespeed-5.0.18](https://github.com/truecharts/apps/compare/librespeed-5.0.17...librespeed-5.0.18) (2022-05-26) + +#### Chore + +- update helm general non-major helm releases ([#2759](https://github.com/truecharts/apps/issues/2759)) + + + +### [librespeed-5.0.17](https://github.com/truecharts/apps/compare/librespeed-5.0.16...librespeed-5.0.17) (2022-05-24) + +#### Chore + +- update helm general non-major helm releases + + + +### [librespeed-5.0.16](https://github.com/truecharts/apps/compare/librespeed-5.0.15...librespeed-5.0.16) (2022-05-17) + +#### Chore + +- Auto-update chart README [skip ci] +- update helm general non-major helm releases + + + +### [librespeed-5.0.16](https://github.com/truecharts/apps/compare/librespeed-5.0.15...librespeed-5.0.16) (2022-05-17) + +#### Chore + +- update helm general non-major helm releases + + + +### [librespeed-5.0.15](https://github.com/truecharts/apps/compare/librespeed-5.0.14...librespeed-5.0.15) (2022-05-17) + +#### Chore + +- update helm general non-major helm releases + + + +### [librespeed-5.0.14](https://github.com/truecharts/apps/compare/librespeed-5.0.13...librespeed-5.0.14) (2022-05-10) + +#### Chore + +- update helm general non-major helm releases ([#2649](https://github.com/truecharts/apps/issues/2649)) + + + +### [librespeed-5.0.13](https://github.com/truecharts/apps/compare/librespeed-5.0.12...librespeed-5.0.13) (2022-05-05) + +#### Chore + +- update helm general non-major helm releases ([#2612](https://github.com/truecharts/apps/issues/2612)) + + + +### [librespeed-5.0.12](https://github.com/truecharts/apps/compare/librespeed-5.0.11...librespeed-5.0.12) (2022-04-26) + +#### Chore + +- update helm general non-major helm releases ([#2573](https://github.com/truecharts/apps/issues/2573)) + + + +### [librespeed-5.0.11](https://github.com/truecharts/apps/compare/librespeed-5.0.10...librespeed-5.0.11) (2022-04-20) + +#### Chore + +- add missing quote on description ([#2515](https://github.com/truecharts/apps/issues/2515)) +- update helm general non-major helm releases ([#2524](https://github.com/truecharts/apps/issues/2524)) + + + +### [librespeed-5.0.10](https://github.com/truecharts/apps/compare/librespeed-5.0.9...librespeed-5.0.10) (2022-04-12) + +#### Chore + +- update helm general non-major helm releases ([#2480](https://github.com/truecharts/apps/issues/2480)) + + + +### [librespeed-5.0.9](https://github.com/truecharts/apps/compare/librespeed-5.0.8...librespeed-5.0.9) (2022-04-03) + +#### Chore + +- update helm general non-major helm releases ([#2410](https://github.com/truecharts/apps/issues/2410)) + + + +### [librespeed-5.0.8](https://github.com/truecharts/apps/compare/librespeed-5.0.7...librespeed-5.0.8) (2022-03-31) + +#### Chore + +- update helm general non-major helm releases ([#2361](https://github.com/truecharts/apps/issues/2361)) + + + +### [librespeed-5.0.7](https://github.com/truecharts/apps/compare/librespeed-5.0.6...librespeed-5.0.7) (2022-03-30) + +#### Chore + +- update helm general non-major helm releases ([#2354](https://github.com/truecharts/apps/issues/2354)) + + + +### [librespeed-5.0.6](https://github.com/truecharts/apps/compare/librespeed-5.0.5...librespeed-5.0.6) (2022-03-26) + +#### Chore + +- bump all apps to trigger ci + + + +### [librespeed-5.0.1](https://github.com/truecharts/apps/compare/librespeed-5.0.0...librespeed-5.0.1) (2022-03-07) + +#### Chore + +- update helm general non-major helm releases ([#2111](https://github.com/truecharts/apps/issues/2111)) +- Remove `-icon` string from icon png's ([#2040](https://github.com/truecharts/apps/issues/2040)) + + + +### [librespeed-5.0.0](https://github.com/truecharts/apps/compare/librespeed-4.0.46...librespeed-5.0.0) (2022-03-03) + +#### Chore + +- remove fixed env from questions.yaml +- remove PUID from per-app env-vars if set to 568 +- remove empty env var declaration from questions.yaml +- remove TZ from values. ([#1945](https://github.com/truecharts/apps/issues/1945)) +- update helm general major helm releases ([#2021](https://github.com/truecharts/apps/issues/2021)) + +#### Fix + +- BREAKING CHANGE Move some env-vars outside of env section ([#2010](https://github.com/truecharts/apps/issues/2010)) + + + +### [librespeed-4.0.46](https://github.com/truecharts/apps/compare/librespeed-4.0.45...librespeed-4.0.46) (2022-03-02) + +#### Chore + +- rename `web_portal` to `open` ([#1957](https://github.com/truecharts/apps/issues/1957)) +- update helm general non-major helm releases ([#1999](https://github.com/truecharts/apps/issues/1999)) + + + +### [librespeed-4.0.45](https://github.com/truecharts/apps/compare/librespeed-4.0.44...librespeed-4.0.45) (2022-02-21) + +#### Chore + +- update helm general non-major helm releases ([#1927](https://github.com/truecharts/apps/issues/1927)) + + + +### [librespeed-4.0.44](https://github.com/truecharts/apps/compare/librespeed-4.0.43...librespeed-4.0.44) (2022-02-15) + +#### Chore + +- update helm general non-major helm releases ([#1901](https://github.com/truecharts/apps/issues/1901)) + + + +### [librespeed-4.0.43](https://github.com/truecharts/apps/compare/librespeed-4.0.42...librespeed-4.0.43) (2022-02-08) + +#### Chore + +- fix links on `Chart.yaml` ([#1862](https://github.com/truecharts/apps/issues/1862)) +- update helm general non-major helm releases ([#1871](https://github.com/truecharts/apps/issues/1871)) + + + +### [librespeed-4.0.42](https://github.com/truecharts/apps/compare/librespeed-4.0.41...librespeed-4.0.42) (2022-02-06) + +#### Chore + +- update helm chart common to v8.15.0 ([#1859](https://github.com/truecharts/apps/issues/1859)) + + + +### [librespeed-4.0.41](https://github.com/truecharts/apps/compare/librespeed-4.0.40...librespeed-4.0.41) (2022-02-05) + +#### Chore + +- update helm general non-major helm releases ([#1852](https://github.com/truecharts/apps/issues/1852)) + + + +### [librespeed-4.0.40](https://github.com/truecharts/apps/compare/librespeed-4.0.39...librespeed-4.0.40) (2022-02-02) + +#### Chore + +- update helm general non-major helm releases ([#1828](https://github.com/truecharts/apps/issues/1828)) + + + +### [librespeed-4.0.39](https://github.com/truecharts/apps/compare/librespeed-4.0.38...librespeed-4.0.39) (2022-01-25) + +#### Chore + +- update helm general non-major helm releases ([#1791](https://github.com/truecharts/apps/issues/1791)) + + + +### [librespeed-4.0.38](https://github.com/truecharts/apps/compare/librespeed-4.0.37...librespeed-4.0.38) (2022-01-22) + +#### Chore + +- update helm general non-major helm releases ([#1766](https://github.com/truecharts/apps/issues/1766)) + + + +### [librespeed-4.0.37](https://github.com/truecharts/apps/compare/librespeed-4.0.36...librespeed-4.0.37) (2022-01-21) + +#### Chore + +- update helm general non-major helm releases ([#1759](https://github.com/truecharts/apps/issues/1759)) + +#### Fix + +- set additional_attrs: true on all dicts ([#1750](https://github.com/truecharts/apps/issues/1750)) + + + +### [librespeed-4.0.36](https://github.com/truecharts/apps/compare/librespeed-4.0.35...librespeed-4.0.36) (2022-01-18) + +#### Chore + +- update helm general non-major helm releases ([#1732](https://github.com/truecharts/apps/issues/1732)) + + + +### [librespeed-4.0.35](https://github.com/truecharts/apps/compare/librespeed-4.0.34...librespeed-4.0.35) (2022-01-13) + +#### Chore + +- update helm general non-major helm releases ([#1712](https://github.com/truecharts/apps/issues/1712)) + +#### Feat + +- expose capabilities in GUI ([#1709](https://github.com/truecharts/apps/issues/1709)) + + + +### [librespeed-4.0.34](https://github.com/truecharts/apps/compare/librespeed-4.0.33...librespeed-4.0.34) (2022-01-12) + +#### Chore + +- update helm general non-major helm releases ([#1704](https://github.com/truecharts/apps/issues/1704)) + + + +### [librespeed-4.0.33](https://github.com/truecharts/apps/compare/librespeed-4.0.32...librespeed-4.0.33) (2022-01-11) + +#### Chore + +- update helm general non-major helm releases ([#1693](https://github.com/truecharts/apps/issues/1693)) + + + +### [librespeed-4.0.32](https://github.com/truecharts/apps/compare/librespeed-4.0.31...librespeed-4.0.32) (2022-01-04) + +#### Chore + +- update helm general non-major helm releases + + + +### [librespeed-4.0.31](https://github.com/truecharts/apps/compare/librespeed-4.0.30...librespeed-4.0.31) (2021-12-28) + +#### Chore + +- update helm general non-major helm releases ([#1623](https://github.com/truecharts/apps/issues/1623)) + + + +### [librespeed-4.0.30](https://github.com/truecharts/apps/compare/librespeed-4.0.29...librespeed-4.0.30) (2021-12-21) + +#### Chore + +- update helm general non-major helm releases ([#1596](https://github.com/truecharts/apps/issues/1596)) + + + +### [librespeed-4.0.29](https://github.com/truecharts/apps/compare/librespeed-4.0.28...librespeed-4.0.29) (2021-12-19) + +#### Chore + +- Last patch bump before RC2 branch-off +- remove `editable: true` as this is the default ([#1576](https://github.com/truecharts/apps/issues/1576)) + + + +### [librespeed-4.0.28](https://github.com/truecharts/apps/compare/librespeed-4.0.27...librespeed-4.0.28) (2021-12-19) + +#### Chore + +- completely remove mountPath reference from GUI ([#1572](https://github.com/truecharts/apps/issues/1572)) +- update helm general non-major helm releases ([#1571](https://github.com/truecharts/apps/issues/1571)) + + + +### [librespeed-4.0.27](https://github.com/truecharts/apps/compare/librespeed-4.0.26...librespeed-4.0.27) (2021-12-18) + +#### Chore + +- cleanup questions by removing hidden dicts ([#1558](https://github.com/truecharts/apps/issues/1558)) +- App-Icon Organization ([#1539](https://github.com/truecharts/apps/issues/1539)) + + + +### [librespeed-4.0.26](https://github.com/truecharts/apps/compare/librespeed-4.0.25...librespeed-4.0.26) (2021-12-14) + +#### Chore + +- update helm general non-major helm releases ([#1535](https://github.com/truecharts/apps/issues/1535)) + + + +### [librespeed-4.0.25](https://github.com/truecharts/apps/compare/librespeed-4.0.24...librespeed-4.0.25) (2021-12-13) + +#### Chore + +- move incubator apps to stable and bump everything + + + +### [librespeed-4.0.24](https://github.com/truecharts/apps/compare/librespeed-4.0.23...librespeed-4.0.24) (2021-12-11) + +#### Chore + +- set PUID to `int` instead of `string` ([#1506](https://github.com/truecharts/apps/issues/1506)) +- update general helm non-major helm releases ([#1509](https://github.com/truecharts/apps/issues/1509)) + + + +### [librespeed-4.0.23](https://github.com/truecharts/apps/compare/librespeed-4.0.22...librespeed-4.0.23) (2021-12-07) + +#### Chore + +- update non-major deps helm releases ([#1481](https://github.com/truecharts/apps/issues/1481)) + + + +### librespeed-4.0.22 (2021-12-05) + +#### Chore + +- bump apps to generate security page +- move all container references to TCCR ([#1448](https://github.com/truecharts/apps/issues/1448)) +- update non-major deps helm releases ([#1471](https://github.com/truecharts/apps/issues/1471)) +- update non-major deps helm releases ([#1468](https://github.com/truecharts/apps/issues/1468)) +- update non-major deps helm releases ([#1453](https://github.com/truecharts/apps/issues/1453)) +- update non-major ([#1449](https://github.com/truecharts/apps/issues/1449)) +- update non-major deps helm releases ([#1432](https://github.com/truecharts/apps/issues/1432)) +- update non-major ([#1427](https://github.com/truecharts/apps/issues/1427)) + +#### Fix + +- fix typo in theme selection ([#1428](https://github.com/truecharts/apps/issues/1428)) + + + +### [librespeed-4.0.21](https://github.com/truecharts/apps/compare/librespeed-4.0.20...librespeed-4.0.21) (2021-12-05) + +#### Chore + +- update non-major deps helm releases ([#1468](https://github.com/truecharts/apps/issues/1468)) + + + +### [librespeed-4.0.20](https://github.com/truecharts/apps/compare/librespeed-4.0.19...librespeed-4.0.20) (2021-12-04) + +#### Chore + +- bump apps to generate security page + + + +### [librespeed-4.0.19](https://github.com/truecharts/apps/compare/librespeed-4.0.18...librespeed-4.0.19) (2021-12-04) + +#### Chore + +- update non-major deps helm releases ([#1453](https://github.com/truecharts/apps/issues/1453)) + + + +### [librespeed-4.0.18](https://github.com/truecharts/apps/compare/librespeed-4.0.17...librespeed-4.0.18) (2021-12-03) + +#### Chore + +- move all container references to TCCR ([#1448](https://github.com/truecharts/apps/issues/1448)) +- update non-major ([#1449](https://github.com/truecharts/apps/issues/1449)) + + + +### [librespeed-4.0.17](https://github.com/truecharts/apps/compare/librespeed-4.0.16...librespeed-4.0.17) (2021-11-30) + +#### Chore + +- update non-major deps helm releases ([#1432](https://github.com/truecharts/apps/issues/1432)) + + + +### [librespeed-4.0.16](https://github.com/truecharts/apps/compare/librespeed-4.0.15...librespeed-4.0.16) (2021-11-30) + +#### Chore + +- update non-major ([#1427](https://github.com/truecharts/apps/issues/1427)) + +#### Fix + +- move conflicting ports to 10xxx range ([#1415](https://github.com/truecharts/apps/issues/1415)) + + + +### [librespeed-4.0.15](https://github.com/truecharts/apps/compare/librespeed-4.0.14...librespeed-4.0.15) (2021-11-23) + +#### Chore + +- update non-major deps helm releases ([#1386](https://github.com/truecharts/apps/issues/1386)) + + + +### [librespeed-4.0.14](https://github.com/truecharts/apps/compare/librespeed-4.0.13...librespeed-4.0.14) (2021-11-23) + +#### Chore + +- update non-major ([#1384](https://github.com/truecharts/apps/issues/1384)) + + + +### [librespeed-4.0.13](https://github.com/truecharts/apps/compare/librespeed-4.0.12...librespeed-4.0.13) (2021-11-22) + +#### Chore + +- update non-major deps helm releases ([#1383](https://github.com/truecharts/apps/issues/1383)) + + + +### [librespeed-4.0.12](https://github.com/truecharts/apps/compare/librespeed-4.0.11...librespeed-4.0.12) (2021-11-16) + +#### Chore + +- update non-major deps helm releases ([#1345](https://github.com/truecharts/apps/issues/1345)) + + + +### [librespeed-4.0.11](https://github.com/truecharts/apps/compare/librespeed-4.0.10...librespeed-4.0.11) (2021-11-16) + +#### Chore + +- update non-major ([#1342](https://github.com/truecharts/apps/issues/1342)) + + + +### [librespeed-4.0.10](https://github.com/truecharts/apps/compare/librespeed-4.0.9...librespeed-4.0.10) (2021-11-15) + +#### Chore + +- persistence cleanup and small bugfixes ([#1329](https://github.com/truecharts/apps/issues/1329)) +- update non-major deps helm releases ([#1338](https://github.com/truecharts/apps/issues/1338)) + + + +### [librespeed-4.0.9](https://github.com/truecharts/apps/compare/librespeed-4.0.8...librespeed-4.0.9) (2021-11-14) + +#### Chore + +- fixes around the GUI refactor ([#1316](https://github.com/truecharts/apps/issues/1316)) +- move port above advanced in GUI ([#1326](https://github.com/truecharts/apps/issues/1326)) +- clean up Chart.yaml ([#1322](https://github.com/truecharts/apps/issues/1322)) +- update non-major deps helm releases ([#1328](https://github.com/truecharts/apps/issues/1328)) + +#### Fix + +- split udp and tcp ports ([#1321](https://github.com/truecharts/apps/issues/1321)) +- Allow spaces in paths ([#1306](https://github.com/truecharts/apps/issues/1306)) + + + +### [librespeed-4.0.8](https://github.com/truecharts/apps/compare/librespeed-4.0.7...librespeed-4.0.8) (2021-11-09) + +#### Chore + +- update non-major deps helm releases ([#1297](https://github.com/truecharts/apps/issues/1297)) + + + +### [librespeed-4.0.7](https://github.com/truecharts/apps/compare/librespeed-4.0.6...librespeed-4.0.7) (2021-11-07) + +#### Chore + +- update non-major deps helm releases ([#1295](https://github.com/truecharts/apps/issues/1295)) + + + +### [librespeed-4.0.6](https://github.com/truecharts/apps/compare/librespeed-4.0.5...librespeed-4.0.6) (2021-11-07) + +#### Chore + +- update non-major deps helm releases ([#1291](https://github.com/truecharts/apps/issues/1291)) + +#### Chore + +- Simplify GUI for deployment, persistence and securityContext ([#1289](https://github.com/truecharts/apps/issues/1289)) + +#### Feat + +- Simplify the Services GUI ([#1290](https://github.com/truecharts/apps/issues/1290)) + + + +### [librespeed-4.0.5](https://github.com/truecharts/apps/compare/librespeed-4.0.4...librespeed-4.0.5) (2021-11-02) + +#### Chore + +- update non-major deps helm releases ([#1267](https://github.com/truecharts/apps/issues/1267)) + + + +### [librespeed-4.0.4](https://github.com/truecharts/apps/compare/librespeed-4.0.3...librespeed-4.0.4) (2021-11-02) + +#### Chore + +- update non-major docker tags ([#1266](https://github.com/truecharts/apps/issues/1266)) + + + +### [librespeed-4.0.3](https://github.com/truecharts/apps/compare/librespeed-4.0.2...librespeed-4.0.3) (2021-11-01) + +#### Chore + +- update non-major deps helm releases ([#1264](https://github.com/truecharts/apps/issues/1264)) + + + +### [librespeed-4.0.2](https://github.com/truecharts/apps/compare/librespeed-4.0.1...librespeed-4.0.2) (2021-10-26) + +#### Chore + +- update non-major deps helm releases ([#1245](https://github.com/truecharts/apps/issues/1245)) + + + +### [librespeed-4.0.1](https://github.com/truecharts/apps/compare/librespeed-4.0.0...librespeed-4.0.1) (2021-10-26) + +#### Chore + +- update helm chart common to v8.3.15 ([#1240](https://github.com/truecharts/apps/issues/1240)) +- update non-major ([#1232](https://github.com/truecharts/apps/issues/1232)) + + + +### [librespeed-4.0.0](https://github.com/truecharts/apps/compare/librespeed-3.0.20...librespeed-4.0.0) (2021-10-25) + +#### Chore + +- Adapt for TrueNAS SCALE RC1 + + + +### [librespeed-3.0.20](https://github.com/truecharts/apps/compare/librespeed-1.0.0...librespeed-3.0.20) (2021-10-20) + +#### Chore + +- bump apps, remove duplicates and move incubator to stable for RC1 +- update non-major deps helm releases ([#1213](https://github.com/truecharts/apps/issues/1213)) + +#### Fix + +- reenable postgresql migration scripting and bump all to force update + + + +### [librespeed-3.0.17](https://github.com/truecharts/apps/compare/librespeed-0.0.3...librespeed-3.0.17) (2021-10-20) + +#### Chore + +- bump versions to rerelease and fix icons + + + +### [librespeed-3.0.16](https://github.com/truecharts/apps/compare/librespeed-0.0.2...librespeed-3.0.16) (2021-10-19) + +#### Change + +- Project-Eclipse 3, Automatically generate item.yaml ([#1178](https://github.com/truecharts/apps/issues/1178)) + +#### Chore + +- Project-Eclipse 5, move app-readme to automatic generation script ([#1181](https://github.com/truecharts/apps/issues/1181)) +- update helm chart common to v8.3.13 ([#1184](https://github.com/truecharts/apps/issues/1184)) +- update non-major ([#1174](https://github.com/truecharts/apps/issues/1174)) + +#### Feat + +- Project-Eclipse 4, Add App grading annotations to Chart.yaml ([#1180](https://github.com/truecharts/apps/issues/1180)) + +#### Refactor + +- Project Eclipse Part 6, move questions.yaml to root App folder ([#1182](https://github.com/truecharts/apps/issues/1182)) + + + +### [librespeed-3.0.15](https://github.com/truecharts/apps/compare/librespeed-0.0.1...librespeed-3.0.15) (2021-10-19) + +#### Chore + +- Project-Eclipse part 2, adapting and cleaning changelog ([#1173](https://github.com/truecharts/apps/issues/1173)) +- update helm chart postgresql to v3.0.20 ([#1177](https://github.com/truecharts/apps/issues/1177)) + + + +### [librespeed-3.0.14](https://github.com/truecharts/apps/compare/librespeed-3.0.13...librespeed-3.0.14) (2021-10-19) + +#### Fix + +- fix previous SCALE bugfix not correctly being applied + + + +### [librespeed-3.0.13](https://github.com/truecharts/apps/compare/librespeed-3.0.12...librespeed-3.0.13) (2021-10-19) + +#### Fix + +- Solve issues regarding ix_values.yaml not containing the image and tag definitions. ([#1176](https://github.com/truecharts/apps/issues/1176)) + + + +### [librespeed-3.0.12](https://github.com/truecharts/apps/compare/librespeed-3.0.11...librespeed-3.0.12) (2021-10-18) + +#### Chore + +- Add description on persistence ([#1172](https://github.com/truecharts/apps/issues/1172)) + +#### Refactor + +- Project Eclipse - part 1 - remove ix_values.yaml ([#1168](https://github.com/truecharts/apps/issues/1168)) + + + +### [librespeed-3.0.11](https://github.com/truecharts/apps/compare/librespeed-3.0.10...librespeed-3.0.11) (2021-10-17) + +#### Chore + +- update helm chart common to v8.3.10 ([#1160](https://github.com/truecharts/apps/issues/1160)) + +#### Fix + +- force users using correct / prefix for mounPath ([#1156](https://github.com/truecharts/apps/issues/1156)) + + + +### [librespeed-3.0.10](https://github.com/truecharts/apps/compare/librespeed-3.0.9...librespeed-3.0.10) (2021-10-13) + +#### Chore + +- update non-major deps helm releases ([#1133](https://github.com/truecharts/apps/issues/1133)) + + + +### [librespeed-3.0.9](https://github.com/truecharts/apps/compare/librespeed-3.0.8...librespeed-3.0.9) (2021-10-12) + +#### Chore + +- update non-major deps helm releases ([#1126](https://github.com/truecharts/apps/issues/1126)) + + + +### [librespeed-3.0.8](https://github.com/truecharts/apps/compare/librespeed-3.0.7...librespeed-3.0.8) (2021-10-12) + +#### Chore + +- update non-major ([#1122](https://github.com/truecharts/apps/issues/1122)) + + + +### [librespeed-3.0.7](https://github.com/truecharts/apps/compare/librespeed-3.0.6...librespeed-3.0.7) (2021-10-12) + +#### Chore + +- update non-major deps helm releases ([#1123](https://github.com/truecharts/apps/issues/1123)) + + + +### [librespeed-3.0.6](https://github.com/truecharts/apps/compare/librespeed-3.0.5...librespeed-3.0.6) (2021-10-05) + +#### Chore + +- update non-major deps helm releases ([#1099](https://github.com/truecharts/apps/issues/1099)) + + + +### [librespeed-3.0.5](https://github.com/truecharts/apps/compare/librespeed-3.0.4...librespeed-3.0.5) (2021-10-05) + +#### Chore + +- update non-major ([#1098](https://github.com/truecharts/apps/issues/1098)) + + + +### [librespeed-3.0.4](https://github.com/truecharts/apps/compare/librespeed-3.0.3...librespeed-3.0.4) (2021-09-29) + +#### Chore + +- update helm chart common to v8.0.13 ([#1060](https://github.com/truecharts/apps/issues/1060)) + + + +### [librespeed-3.0.2](https://github.com/truecharts/apps/compare/librespeed-3.0.1...librespeed-3.0.2) (2021-09-28) + +#### Chore + +- update non-major ([#1048](https://github.com/truecharts/apps/issues/1048)) + + + +### [librespeed-3.0.1](https://github.com/truecharts/apps/compare/librespeed-3.0.0...librespeed-3.0.1) (2021-09-26) + + + +### [librespeed-3.0.0](https://github.com/truecharts/apps/compare/librespeed-2.0.3...librespeed-3.0.0) (2021-09-26) + + + +### [librespeed-2.0.3](https://github.com/truecharts/apps/compare/librespeed-2.0.2...librespeed-2.0.3) (2021-09-21) + +#### Chore + +- update non-major deps helm releases ([#1014](https://github.com/truecharts/apps/issues/1014)) + + + +### [librespeed-2.0.2](https://github.com/truecharts/apps/compare/librespeed-2.0.1...librespeed-2.0.2) (2021-09-21) + +#### Chore + +- update non-major ([#1015](https://github.com/truecharts/apps/issues/1015)) + + + +### [librespeed-2.0.1](https://github.com/truecharts/apps/compare/librespeed-1.9.15...librespeed-2.0.1) (2021-09-13) + +#### Chore + +- move all LSIO containers to github registry ([#957](https://github.com/truecharts/apps/issues/957)) +- update non-major ([#962](https://github.com/truecharts/apps/issues/962)) + +#### Feat + +- add new GUI and VPN support to all Apps ([#977](https://github.com/truecharts/apps/issues/977)) +- Add VPN addon and move some config to includes ([#973](https://github.com/truecharts/apps/issues/973)) +- pin all container references to digests ([#963](https://github.com/truecharts/apps/issues/963)) +- Move some common containers to our own containers + + + +## [librespeed-1.9.15](https://github.com/truecharts/apps/compare/librespeed-1.9.14...librespeed-1.9.15) (2021-09-08) + +### Fix + +- repair Hyperion and some misplaced GUI elements ([#922](https://github.com/truecharts/apps/issues/922)) diff --git a/stable/librespeed/12.2.0/Chart.yaml b/stable/librespeed/12.2.0/Chart.yaml new file mode 100644 index 0000000..195ffce --- /dev/null +++ b/stable/librespeed/12.2.0/Chart.yaml @@ -0,0 +1,37 @@ +annotations: + max_scale_version: 23.10.2 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + 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.0 +dependencies: + - name: common + version: 17.4.2 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: Librespeed is a HTML5 webpage to test upload and download speeds +home: https://truecharts.org/charts/stable/librespeed +icon: https://truecharts.org/img/hotlink-ok/chart-icons/librespeed.png +keywords: + - librespeed + - speedtest +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: librespeed +sources: + - https://github.com/librespeed/speedtest + - https://github.com/truecharts/charts/tree/master/charts/stable/librespeed + - https://ghcr.io/linuxserver/librespeed +type: application +version: 12.2.0 diff --git a/stable/librespeed/12.2.0/README.md b/stable/librespeed/12.2.0/README.md new file mode 100644 index 0000000..e7948fa --- /dev/null +++ b/stable/librespeed/12.2.0/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/librespeed) + +**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/librespeed/12.2.0/app-readme.md b/stable/librespeed/12.2.0/app-readme.md new file mode 100644 index 0000000..7e86075 --- /dev/null +++ b/stable/librespeed/12.2.0/app-readme.md @@ -0,0 +1,8 @@ +Librespeed is a HTML5 webpage to test upload and download speeds + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/librespeed](https://truecharts.org/charts/stable/librespeed) + +--- + +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/librespeed/12.2.0/charts/common-17.4.2.tgz b/stable/librespeed/12.2.0/charts/common-17.4.2.tgz new file mode 100644 index 0000000000000000000000000000000000000000..31f3a104561f859f297067776ab86a1503525be4 GIT binary patch literal 100097 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 l8bLay74+E3;;+DksJU3 literal 0 HcmV?d00001 diff --git a/stable/librespeed/12.2.0/ix_values.yaml b/stable/librespeed/12.2.0/ix_values.yaml new file mode 100644 index 0000000..6747483 --- /dev/null +++ b/stable/librespeed/12.2.0/ix_values.yaml @@ -0,0 +1,23 @@ +image: + repository: ghcr.io/linuxserver/librespeed + tag: 5.3.0@sha256:d9c4605e8a3821764926aeaebb1b67b889a54fdf72031703ecfe2c70bc043d9b + pullPolicy: IfNotPresent +service: + main: + ports: + main: + port: 10016 + targetPort: 80 +persistence: + config: + enabled: true + mountPath: "/config" +portal: + open: + enabled: true +securityContext: + container: + readOnlyRootFilesystem: false + runAsNonRoot: false + runAsUser: 0 + runAsGroup: 0 diff --git a/stable/librespeed/12.2.0/questions.yaml b/stable/librespeed/12.2.0/questions.yaml new file mode 100644 index 0000000..c0a34b3 --- /dev/null +++ b/stable/librespeed/12.2.0/questions.yaml @@ -0,0 +1,2867 @@ +groups: + - name: Container Image + description: Image to be used for container + - name: General Settings + description: General Deployment Settings + - name: Workload Settings + description: Workload Settings + - name: App Configuration + description: App Specific Config Options + - name: Networking and Services + description: Configure Network and Services for Container + - name: Storage and Persistence + description: Persist and Share Data that is Separate from the Container + - name: Ingress + description: Ingress Configuration + - name: Security and Permissions + description: Configure Security Context and Permissions + - name: Resources and Devices + description: "Specify Resources/Devices to be Allocated to Workload" + - name: Middlewares + description: Traefik Middlewares + - name: Metrics + description: Metrics + - name: Addons + description: Addon Configuration + - name: Backup Configuration + description: Configure Velero Backup Schedule + - name: Advanced + description: Advanced Configuration + - name: Postgresql + description: Postgresql + - name: Documentation + description: Documentation + +portals: + open: + protocols: + - "$kubernetes-resource_configmap_tcportal-open_protocol" + host: + - "$kubernetes-resource_configmap_tcportal-open_host" + ports: + - "$kubernetes-resource_configmap_tcportal-open_port" + +questions: + - variable: global + group: General Settings + label: "Global Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: stopAll + label: Stop All + description: "Stops All Running pods and hibernates cnpg" + schema: + type: boolean + default: false + + - variable: workload + group: "Workload Settings" + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "" + schema: + additional_attrs: true + type: dict + attrs: + + - variable: type + label: Type (Advanced) + schema: + type: string + default: Deployment + enum: + - value: Deployment + description: Deployment + - value: DaemonSet + description: DaemonSet + + - variable: replicas + label: Replicas (Advanced) + description: Set the number of Replicas + schema: + type: int + show_if: [["type", "!=", "DaemonSet"]] + default: 1 + + - variable: podSpec + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: containers + label: Containers + schema: + additional_attrs: true + type: dict + attrs: + + - variable: main + label: Main Container + schema: + additional_attrs: true + type: dict + attrs: + + - variable: envList + label: Extra Environment Variables + description: "Please be aware that some variables are set in the background, adding duplicates here might cause issues or prevent the app from starting..." + schema: + type: list + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: extraArgs + label: Extra Args + schema: + type: list + default: [] + items: + - variable: arg + label: Arg + schema: + type: string + + - variable: advanced + label: Show Advanced Settings + description: Advanced settings are not covered by TrueCharts Support + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: command + label: Command + schema: + type: list + default: [] + items: + - variable: param + label: Param + schema: + type: string + + - variable: 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: 10016 + 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: 0 + - variable: runAsGroup + label: "runAsGroup" + description: "The groupID of the user running the application" + schema: + type: int + default: 0 + # 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/librespeed/12.2.0/templates/NOTES.txt b/stable/librespeed/12.2.0/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/librespeed/12.2.0/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/librespeed/12.2.0/templates/common.yaml b/stable/librespeed/12.2.0/templates/common.yaml new file mode 100644 index 0000000..b51394e --- /dev/null +++ b/stable/librespeed/12.2.0/templates/common.yaml @@ -0,0 +1 @@ +{{ include "tc.v1.common.loader.all" . }} diff --git a/stable/librespeed/12.2.0/values.yaml b/stable/librespeed/12.2.0/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/librespeed/12.2.1/.helmignore b/stable/librespeed/12.2.1/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/librespeed/12.2.1/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/librespeed/12.2.1/CHANGELOG.md b/stable/librespeed/12.2.1/CHANGELOG.md new file mode 100644 index 0000000..053f8b5 --- /dev/null +++ b/stable/librespeed/12.2.1/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + + + + + + + + + + + + + + +## [librespeed-12.1.17](https://github.com/truecharts/charts/compare/librespeed-12.1.16...librespeed-12.1.17) (2024-02-12) + +### Chore + + + +- update container image ghcr.io/linuxserver/librespeed to 5.3.0[@d9c4605](https://github.com/d9c4605) by renovate ([#18066](https://github.com/truecharts/charts/issues/18066)) + + +## [librespeed-12.1.16](https://github.com/truecharts/charts/compare/librespeed-12.1.15...librespeed-12.1.16) (2024-02-05) + +### Chore + + + +- update container image ghcr.io/linuxserver/librespeed to 5.3.0[@8e56f58](https://github.com/8e56f58) by renovate ([#17856](https://github.com/truecharts/charts/issues/17856)) + + +## [librespeed-12.1.15](https://github.com/truecharts/charts/compare/librespeed-12.1.14...librespeed-12.1.15) (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)) + + +## [librespeed-12.1.14](https://github.com/truecharts/charts/compare/librespeed-12.1.13...librespeed-12.1.14) (2024-01-29) + +### Chore + + + +- update container image ghcr.io/linuxserver/librespeed to 5.3.0[@e7e8a14](https://github.com/e7e8a14) by renovate ([#17611](https://github.com/truecharts/charts/issues/17611)) + + +## [librespeed-12.1.13](https://github.com/truecharts/charts/compare/librespeed-12.1.12...librespeed-12.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)) + + +## [librespeed-12.1.12](https://github.com/truecharts/charts/compare/librespeed-12.1.11...librespeed-12.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)) + + +## [librespeed-12.1.11](https://github.com/truecharts/charts/compare/librespeed-12.1.10...librespeed-12.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)) + + +## [librespeed-12.1.10](https://github.com/truecharts/charts/compare/librespeed-12.1.9...librespeed-12.1.10) (2024-01-21) + +### Chore + + + +- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) + + +## [librespeed-12.1.9](https://github.com/truecharts/charts/compare/librespeed-12.1.8...librespeed-12.1.9) (2024-01-21) + +### Chore + diff --git a/stable/librespeed/12.2.1/Chart.yaml b/stable/librespeed/12.2.1/Chart.yaml new file mode 100644 index 0000000..bba5bd7 --- /dev/null +++ b/stable/librespeed/12.2.1/Chart.yaml @@ -0,0 +1,37 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + 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.0 +dependencies: + - name: common + version: 17.4.2 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: Librespeed is a HTML5 webpage to test upload and download speeds +home: https://truecharts.org/charts/stable/librespeed +icon: https://truecharts.org/img/hotlink-ok/chart-icons/librespeed.png +keywords: + - librespeed + - speedtest +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: librespeed +sources: + - https://github.com/librespeed/speedtest + - https://github.com/truecharts/charts/tree/master/charts/stable/librespeed + - https://ghcr.io/linuxserver/librespeed +type: application +version: 12.2.1 diff --git a/stable/librespeed/12.2.1/README.md b/stable/librespeed/12.2.1/README.md new file mode 100644 index 0000000..e7948fa --- /dev/null +++ b/stable/librespeed/12.2.1/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/librespeed) + +**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/librespeed/12.2.1/app-readme.md b/stable/librespeed/12.2.1/app-readme.md new file mode 100644 index 0000000..7e86075 --- /dev/null +++ b/stable/librespeed/12.2.1/app-readme.md @@ -0,0 +1,8 @@ +Librespeed is a HTML5 webpage to test upload and download speeds + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/librespeed](https://truecharts.org/charts/stable/librespeed) + +--- + +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/librespeed/12.2.1/charts/common-17.4.2.tgz b/stable/librespeed/12.2.1/charts/common-17.4.2.tgz new file mode 100644 index 0000000000000000000000000000000000000000..31f3a104561f859f297067776ab86a1503525be4 GIT binary patch literal 100097 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 l8bLay74+E3;;+DksJU3 literal 0 HcmV?d00001 diff --git a/stable/librespeed/12.2.1/ix_values.yaml b/stable/librespeed/12.2.1/ix_values.yaml new file mode 100644 index 0000000..36c8992 --- /dev/null +++ b/stable/librespeed/12.2.1/ix_values.yaml @@ -0,0 +1,23 @@ +image: + repository: ghcr.io/linuxserver/librespeed + tag: 5.3.0@sha256:4e6e49c172ac10073036fbe3d8f64466843c705da3bee16c84cb8886bbb6693c + pullPolicy: IfNotPresent +service: + main: + ports: + main: + port: 10016 + targetPort: 80 +persistence: + config: + enabled: true + mountPath: "/config" +portal: + open: + enabled: true +securityContext: + container: + readOnlyRootFilesystem: false + runAsNonRoot: false + runAsUser: 0 + runAsGroup: 0 diff --git a/stable/librespeed/12.2.1/questions.yaml b/stable/librespeed/12.2.1/questions.yaml new file mode 100644 index 0000000..c0a34b3 --- /dev/null +++ b/stable/librespeed/12.2.1/questions.yaml @@ -0,0 +1,2867 @@ +groups: + - name: Container Image + description: Image to be used for container + - name: General Settings + description: General Deployment Settings + - name: Workload Settings + description: Workload Settings + - name: App Configuration + description: App Specific Config Options + - name: Networking and Services + description: Configure Network and Services for Container + - name: Storage and Persistence + description: Persist and Share Data that is Separate from the Container + - name: Ingress + description: Ingress Configuration + - name: Security and Permissions + description: Configure Security Context and Permissions + - name: Resources and Devices + description: "Specify Resources/Devices to be Allocated to Workload" + - name: Middlewares + description: Traefik Middlewares + - name: Metrics + description: Metrics + - name: Addons + description: Addon Configuration + - name: Backup Configuration + description: Configure Velero Backup Schedule + - name: Advanced + description: Advanced Configuration + - name: Postgresql + description: Postgresql + - name: Documentation + description: Documentation + +portals: + open: + protocols: + - "$kubernetes-resource_configmap_tcportal-open_protocol" + host: + - "$kubernetes-resource_configmap_tcportal-open_host" + ports: + - "$kubernetes-resource_configmap_tcportal-open_port" + +questions: + - variable: global + group: General Settings + label: "Global Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: stopAll + label: Stop All + description: "Stops All Running pods and hibernates cnpg" + schema: + type: boolean + default: false + + - variable: workload + group: "Workload Settings" + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "" + schema: + additional_attrs: true + type: dict + attrs: + + - variable: type + label: Type (Advanced) + schema: + type: string + default: Deployment + enum: + - value: Deployment + description: Deployment + - value: DaemonSet + description: DaemonSet + + - variable: replicas + label: Replicas (Advanced) + description: Set the number of Replicas + schema: + type: int + show_if: [["type", "!=", "DaemonSet"]] + default: 1 + + - variable: podSpec + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: containers + label: Containers + schema: + additional_attrs: true + type: dict + attrs: + + - variable: main + label: Main Container + schema: + additional_attrs: true + type: dict + attrs: + + - variable: envList + label: Extra Environment Variables + description: "Please be aware that some variables are set in the background, adding duplicates here might cause issues or prevent the app from starting..." + schema: + type: list + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: extraArgs + label: Extra Args + schema: + type: list + default: [] + items: + - variable: arg + label: Arg + schema: + type: string + + - variable: advanced + label: Show Advanced Settings + description: Advanced settings are not covered by TrueCharts Support + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: command + label: Command + schema: + type: list + default: [] + items: + - variable: param + label: Param + schema: + type: string + + - variable: 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: 10016 + 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: 0 + - variable: runAsGroup + label: "runAsGroup" + description: "The groupID of the user running the application" + schema: + type: int + default: 0 + # 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/librespeed/12.2.1/templates/NOTES.txt b/stable/librespeed/12.2.1/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/librespeed/12.2.1/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/librespeed/12.2.1/templates/common.yaml b/stable/librespeed/12.2.1/templates/common.yaml new file mode 100644 index 0000000..b51394e --- /dev/null +++ b/stable/librespeed/12.2.1/templates/common.yaml @@ -0,0 +1 @@ +{{ include "tc.v1.common.loader.all" . }} diff --git a/stable/librespeed/12.2.1/values.yaml b/stable/librespeed/12.2.1/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/librespeed/12.3.0/.helmignore b/stable/librespeed/12.3.0/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/librespeed/12.3.0/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/librespeed/12.3.0/CHANGELOG.md b/stable/librespeed/12.3.0/CHANGELOG.md new file mode 100644 index 0000000..329f99a --- /dev/null +++ b/stable/librespeed/12.3.0/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + + + + + + + + + + + + + + + +## [librespeed-12.1.17](https://github.com/truecharts/charts/compare/librespeed-12.1.16...librespeed-12.1.17) (2024-02-12) + +### Chore + + + +- update container image ghcr.io/linuxserver/librespeed to 5.3.0[@d9c4605](https://github.com/d9c4605) by renovate ([#18066](https://github.com/truecharts/charts/issues/18066)) + + +## [librespeed-12.1.16](https://github.com/truecharts/charts/compare/librespeed-12.1.15...librespeed-12.1.16) (2024-02-05) + +### Chore + + + +- update container image ghcr.io/linuxserver/librespeed to 5.3.0[@8e56f58](https://github.com/8e56f58) by renovate ([#17856](https://github.com/truecharts/charts/issues/17856)) + + +## [librespeed-12.1.15](https://github.com/truecharts/charts/compare/librespeed-12.1.14...librespeed-12.1.15) (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)) + + +## [librespeed-12.1.14](https://github.com/truecharts/charts/compare/librespeed-12.1.13...librespeed-12.1.14) (2024-01-29) + +### Chore + + + +- update container image ghcr.io/linuxserver/librespeed to 5.3.0[@e7e8a14](https://github.com/e7e8a14) by renovate ([#17611](https://github.com/truecharts/charts/issues/17611)) + + +## [librespeed-12.1.13](https://github.com/truecharts/charts/compare/librespeed-12.1.12...librespeed-12.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)) + + +## [librespeed-12.1.12](https://github.com/truecharts/charts/compare/librespeed-12.1.11...librespeed-12.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)) + + +## [librespeed-12.1.11](https://github.com/truecharts/charts/compare/librespeed-12.1.10...librespeed-12.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)) + + +## [librespeed-12.1.10](https://github.com/truecharts/charts/compare/librespeed-12.1.9...librespeed-12.1.10) (2024-01-21) + +### Chore + + + +- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) + + +## [librespeed-12.1.9](https://github.com/truecharts/charts/compare/librespeed-12.1.8...librespeed-12.1.9) (2024-01-21) + +### Chore diff --git a/stable/librespeed/12.3.0/Chart.yaml b/stable/librespeed/12.3.0/Chart.yaml new file mode 100644 index 0000000..fdb396e --- /dev/null +++ b/stable/librespeed/12.3.0/Chart.yaml @@ -0,0 +1,37 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + 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.0 +dependencies: + - name: common + version: 17.5.0 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: Librespeed is a HTML5 webpage to test upload and download speeds +home: https://truecharts.org/charts/stable/librespeed +icon: https://truecharts.org/img/hotlink-ok/chart-icons/librespeed.png +keywords: + - librespeed + - speedtest +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: librespeed +sources: + - https://github.com/librespeed/speedtest + - https://github.com/truecharts/charts/tree/master/charts/stable/librespeed + - https://ghcr.io/linuxserver/librespeed +type: application +version: 12.3.0 diff --git a/stable/librespeed/12.3.0/README.md b/stable/librespeed/12.3.0/README.md new file mode 100644 index 0000000..e7948fa --- /dev/null +++ b/stable/librespeed/12.3.0/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/librespeed) + +**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/librespeed/12.3.0/app-readme.md b/stable/librespeed/12.3.0/app-readme.md new file mode 100644 index 0000000..7e86075 --- /dev/null +++ b/stable/librespeed/12.3.0/app-readme.md @@ -0,0 +1,8 @@ +Librespeed is a HTML5 webpage to test upload and download speeds + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/librespeed](https://truecharts.org/charts/stable/librespeed) + +--- + +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/librespeed/12.3.0/charts/common-17.5.0.tgz b/stable/librespeed/12.3.0/charts/common-17.5.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..3a5534883aaac1a331bf10ad166cff7fe5d2dd75 GIT binary patch literal 100452 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 z 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 Wm9Bh-<^K-=0RR7ge;?HVjtl_2wPFzf literal 0 HcmV?d00001 diff --git a/stable/librespeed/12.3.0/ix_values.yaml b/stable/librespeed/12.3.0/ix_values.yaml new file mode 100644 index 0000000..36c8992 --- /dev/null +++ b/stable/librespeed/12.3.0/ix_values.yaml @@ -0,0 +1,23 @@ +image: + repository: ghcr.io/linuxserver/librespeed + tag: 5.3.0@sha256:4e6e49c172ac10073036fbe3d8f64466843c705da3bee16c84cb8886bbb6693c + pullPolicy: IfNotPresent +service: + main: + ports: + main: + port: 10016 + targetPort: 80 +persistence: + config: + enabled: true + mountPath: "/config" +portal: + open: + enabled: true +securityContext: + container: + readOnlyRootFilesystem: false + runAsNonRoot: false + runAsUser: 0 + runAsGroup: 0 diff --git a/stable/librespeed/12.3.0/questions.yaml b/stable/librespeed/12.3.0/questions.yaml new file mode 100644 index 0000000..c0a34b3 --- /dev/null +++ b/stable/librespeed/12.3.0/questions.yaml @@ -0,0 +1,2867 @@ +groups: + - name: Container Image + description: Image to be used for container + - name: General Settings + description: General Deployment Settings + - name: Workload Settings + description: Workload Settings + - name: App Configuration + description: App Specific Config Options + - name: Networking and Services + description: Configure Network and Services for Container + - name: Storage and Persistence + description: Persist and Share Data that is Separate from the Container + - name: Ingress + description: Ingress Configuration + - name: Security and Permissions + description: Configure Security Context and Permissions + - name: Resources and Devices + description: "Specify Resources/Devices to be Allocated to Workload" + - name: Middlewares + description: Traefik Middlewares + - name: Metrics + description: Metrics + - name: Addons + description: Addon Configuration + - name: Backup Configuration + description: Configure Velero Backup Schedule + - name: Advanced + description: Advanced Configuration + - name: Postgresql + description: Postgresql + - name: Documentation + description: Documentation + +portals: + open: + protocols: + - "$kubernetes-resource_configmap_tcportal-open_protocol" + host: + - "$kubernetes-resource_configmap_tcportal-open_host" + ports: + - "$kubernetes-resource_configmap_tcportal-open_port" + +questions: + - variable: global + group: General Settings + label: "Global Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: stopAll + label: Stop All + description: "Stops All Running pods and hibernates cnpg" + schema: + type: boolean + default: false + + - variable: workload + group: "Workload Settings" + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "" + schema: + additional_attrs: true + type: dict + attrs: + + - variable: type + label: Type (Advanced) + schema: + type: string + default: Deployment + enum: + - value: Deployment + description: Deployment + - value: DaemonSet + description: DaemonSet + + - variable: replicas + label: Replicas (Advanced) + description: Set the number of Replicas + schema: + type: int + show_if: [["type", "!=", "DaemonSet"]] + default: 1 + + - variable: podSpec + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: containers + label: Containers + schema: + additional_attrs: true + type: dict + attrs: + + - variable: main + label: Main Container + schema: + additional_attrs: true + type: dict + attrs: + + - variable: envList + label: Extra Environment Variables + description: "Please be aware that some variables are set in the background, adding duplicates here might cause issues or prevent the app from starting..." + schema: + type: list + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: extraArgs + label: Extra Args + schema: + type: list + default: [] + items: + - variable: arg + label: Arg + schema: + type: string + + - variable: advanced + label: Show Advanced Settings + description: Advanced settings are not covered by TrueCharts Support + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: command + label: Command + schema: + type: list + default: [] + items: + - variable: param + label: Param + schema: + type: string + + - variable: 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: 10016 + 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: 0 + - variable: runAsGroup + label: "runAsGroup" + description: "The groupID of the user running the application" + schema: + type: int + default: 0 + # 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/librespeed/12.3.0/templates/NOTES.txt b/stable/librespeed/12.3.0/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/librespeed/12.3.0/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/librespeed/12.3.0/templates/common.yaml b/stable/librespeed/12.3.0/templates/common.yaml new file mode 100644 index 0000000..b51394e --- /dev/null +++ b/stable/librespeed/12.3.0/templates/common.yaml @@ -0,0 +1 @@ +{{ include "tc.v1.common.loader.all" . }} diff --git a/stable/librespeed/12.3.0/values.yaml b/stable/librespeed/12.3.0/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/librespeed/13.7.2/.helmignore b/stable/librespeed/13.7.2/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/librespeed/13.7.2/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/librespeed/13.7.2/CHANGELOG.md b/stable/librespeed/13.7.2/CHANGELOG.md new file mode 100644 index 0000000..4247e4f --- /dev/null +++ b/stable/librespeed/13.7.2/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + +## [librespeed-13.7.2](https://github.com/truecharts/charts/compare/librespeed-13.6.0...librespeed-13.7.2) (2024-03-18) + +### Chore + + + +- 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/linuxserver/librespeed to 5.3.0[@e8430ca](https://github.com/e8430ca) by renovate ([#19412](https://github.com/truecharts/charts/issues/19412)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [librespeed-13.7.2](https://github.com/truecharts/charts/compare/librespeed-13.6.0...librespeed-13.7.2) (2024-03-18) + +### Chore + + + +- 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/linuxserver/librespeed to 5.3.0[@e8430ca](https://github.com/e8430ca) by renovate ([#19412](https://github.com/truecharts/charts/issues/19412)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [librespeed-13.7.2](https://github.com/truecharts/charts/compare/librespeed-13.6.0...librespeed-13.7.2) (2024-03-18) + +### Chore + + + +- 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/linuxserver/librespeed to 5.3.0[@e8430ca](https://github.com/e8430ca) by renovate ([#19412](https://github.com/truecharts/charts/issues/19412)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [librespeed-13.7.2](https://github.com/truecharts/charts/compare/librespeed-13.6.0...librespeed-13.7.2) (2024-03-18) + +### Chore + + + +- 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/linuxserver/librespeed to 5.3.0[@e8430ca](https://github.com/e8430ca) by renovate ([#19412](https://github.com/truecharts/charts/issues/19412)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [librespeed-13.7.2](https://github.com/truecharts/charts/compare/librespeed-13.6.0...librespeed-13.7.2) (2024-03-18) + +### Chore + + + +- 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/linuxserver/librespeed to 5.3.0[@e8430ca](https://github.com/e8430ca) by renovate ([#19412](https://github.com/truecharts/charts/issues/19412)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [librespeed-13.7.2](https://github.com/truecharts/charts/compare/librespeed-13.6.0...librespeed-13.7.2) (2024-03-18) + +### Chore + + + +- 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/linuxserver/librespeed to 5.3.0[@e8430ca](https://github.com/e8430ca) by renovate ([#19412](https://github.com/truecharts/charts/issues/19412)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [librespeed-13.7.2](https://github.com/truecharts/charts/compare/librespeed-13.6.0...librespeed-13.7.2) (2024-03-18) + +### Chore + + + +- 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/linuxserver/librespeed to 5.3.0[@e8430ca](https://github.com/e8430ca) by renovate ([#19412](https://github.com/truecharts/charts/issues/19412)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) diff --git a/stable/librespeed/13.7.2/Chart.yaml b/stable/librespeed/13.7.2/Chart.yaml new file mode 100644 index 0000000..e7b6877 --- /dev/null +++ b/stable/librespeed/13.7.2/Chart.yaml @@ -0,0 +1,37 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + 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.0 +dependencies: + - name: common + version: 20.2.2 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: Librespeed is a HTML5 webpage to test upload and download speeds +home: https://truecharts.org/charts/stable/librespeed +icon: https://truecharts.org/img/hotlink-ok/chart-icons/librespeed.png +keywords: + - librespeed + - speedtest +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: librespeed +sources: + - https://github.com/librespeed/speedtest + - https://github.com/truecharts/charts/tree/master/charts/stable/librespeed + - https://ghcr.io/linuxserver/librespeed +type: application +version: 13.7.2 diff --git a/stable/librespeed/13.7.2/README.md b/stable/librespeed/13.7.2/README.md new file mode 100644 index 0000000..e7948fa --- /dev/null +++ b/stable/librespeed/13.7.2/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/librespeed) + +**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/librespeed/13.7.2/app-changelog.md b/stable/librespeed/13.7.2/app-changelog.md new file mode 100644 index 0000000..4c98f08 --- /dev/null +++ b/stable/librespeed/13.7.2/app-changelog.md @@ -0,0 +1,13 @@ + + +## [librespeed-13.7.2](https://github.com/truecharts/charts/compare/librespeed-13.6.0...librespeed-13.7.2) (2024-03-18) + +### Chore + + + +- 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/linuxserver/librespeed to 5.3.0[@e8430ca](https://github.com/e8430ca) by renovate ([#19412](https://github.com/truecharts/charts/issues/19412)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) \ No newline at end of file diff --git a/stable/librespeed/13.7.2/app-readme.md b/stable/librespeed/13.7.2/app-readme.md new file mode 100644 index 0000000..7e86075 --- /dev/null +++ b/stable/librespeed/13.7.2/app-readme.md @@ -0,0 +1,8 @@ +Librespeed is a HTML5 webpage to test upload and download speeds + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/librespeed](https://truecharts.org/charts/stable/librespeed) + +--- + +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/librespeed/13.7.2/charts/common-20.2.2.tgz b/stable/librespeed/13.7.2/charts/common-20.2.2.tgz new file mode 100644 index 0000000000000000000000000000000000000000..a03705c84630d53af93b6d6ffdf44b22f1a2597f GIT binary patch literal 101828 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 literal 0 HcmV?d00001 diff --git a/stable/librespeed/13.7.2/ix_values.yaml b/stable/librespeed/13.7.2/ix_values.yaml new file mode 100644 index 0000000..6430bbb --- /dev/null +++ b/stable/librespeed/13.7.2/ix_values.yaml @@ -0,0 +1,23 @@ +image: + repository: ghcr.io/linuxserver/librespeed + tag: 5.3.0@sha256:e8430ca472f2091a9c79a47f3dd3661b8140776ee6001e4a30e7d3c843a14798 + pullPolicy: IfNotPresent +service: + main: + ports: + main: + port: 10016 + targetPort: 80 +persistence: + config: + enabled: true + mountPath: "/config" +portal: + open: + enabled: true +securityContext: + container: + readOnlyRootFilesystem: false + runAsNonRoot: false + runAsUser: 0 + runAsGroup: 0 diff --git a/stable/librespeed/13.7.2/questions.yaml b/stable/librespeed/13.7.2/questions.yaml new file mode 100644 index 0000000..9eed1fe --- /dev/null +++ b/stable/librespeed/13.7.2/questions.yaml @@ -0,0 +1,2839 @@ +groups: + - name: Container Image + description: Image to be used for container + - name: General Settings + description: General Deployment Settings + - name: Workload Settings + description: Workload Settings + - name: App Configuration + description: App Specific Config Options + - name: Networking and Services + description: Configure Network and Services for Container + - name: Storage and Persistence + description: Persist and Share Data that is Separate from the Container + - name: Ingress + description: Ingress Configuration + - name: Security and Permissions + description: Configure Security Context and Permissions + - name: Resources and Devices + description: "Specify Resources/Devices to be Allocated to Workload" + - name: Middlewares + description: Traefik Middlewares + - name: Metrics + description: Metrics + - name: Addons + description: Addon Configuration + - name: Backup Configuration + description: Configure Velero Backup Schedule + - name: Advanced + description: Advanced Configuration + - name: Postgresql + description: Postgresql + - name: Documentation + description: Documentation + +portals: + open: + protocols: + - "$kubernetes-resource_configmap_tcportal-open_protocol" + host: + - "$kubernetes-resource_configmap_tcportal-open_host" + ports: + - "$kubernetes-resource_configmap_tcportal-open_port" + +questions: + - variable: global + group: General Settings + label: "Global Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: stopAll + label: Stop All + description: "Stops All Running pods and hibernates cnpg" + schema: + type: boolean + default: false + + - variable: workload + group: "Workload Settings" + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "" + schema: + additional_attrs: true + type: dict + attrs: + + - variable: type + label: Type (Advanced) + schema: + type: string + default: Deployment + enum: + - value: Deployment + description: Deployment + - value: DaemonSet + description: DaemonSet + + - variable: replicas + label: Replicas (Advanced) + description: Set the number of Replicas + schema: + type: int + show_if: [["type", "!=", "DaemonSet"]] + default: 1 + + - variable: podSpec + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: containers + label: Containers + schema: + additional_attrs: true + type: dict + attrs: + + - variable: main + label: Main Container + schema: + additional_attrs: true + type: dict + attrs: + + - variable: envList + label: Extra Environment Variables + description: "Please be aware that some variables are set in the background, adding duplicates here might cause issues or prevent the app from starting..." + schema: + type: list + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: extraArgs + label: Extra Args + schema: + type: list + default: [] + items: + - variable: arg + label: Arg + schema: + type: string + + - variable: advanced + label: Show Advanced Settings + description: Advanced settings are not covered by TrueCharts Support + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: command + label: Command + schema: + type: list + default: [] + items: + - variable: param + label: Param + schema: + type: string + + - variable: 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: 10016 + 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: 0 + - variable: runAsGroup + label: "runAsGroup" + description: "The groupID of the user running the application" + schema: + type: int + default: 0 + # 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: 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/librespeed/13.7.2/templates/NOTES.txt b/stable/librespeed/13.7.2/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/librespeed/13.7.2/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/librespeed/13.7.2/templates/common.yaml b/stable/librespeed/13.7.2/templates/common.yaml new file mode 100644 index 0000000..b51394e --- /dev/null +++ b/stable/librespeed/13.7.2/templates/common.yaml @@ -0,0 +1 @@ +{{ include "tc.v1.common.loader.all" . }} diff --git a/stable/librespeed/13.7.2/values.yaml b/stable/librespeed/13.7.2/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/librespeed/13.7.3/.helmignore b/stable/librespeed/13.7.3/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/librespeed/13.7.3/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/librespeed/13.7.3/CHANGELOG.md b/stable/librespeed/13.7.3/CHANGELOG.md new file mode 100644 index 0000000..e727f4c --- /dev/null +++ b/stable/librespeed/13.7.3/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + +## [librespeed-13.7.3](https://github.com/truecharts/charts/compare/librespeed-13.6.0...librespeed-13.7.3) (2024-03-23) + +### Chore + + + +- 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/linuxserver/librespeed to 5.3.0[@e8430ca](https://github.com/e8430ca) by renovate ([#19412](https://github.com/truecharts/charts/issues/19412)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [librespeed-13.7.3](https://github.com/truecharts/charts/compare/librespeed-13.6.0...librespeed-13.7.3) (2024-03-23) + +### Chore + + + +- 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/linuxserver/librespeed to 5.3.0[@e8430ca](https://github.com/e8430ca) by renovate ([#19412](https://github.com/truecharts/charts/issues/19412)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [librespeed-13.7.3](https://github.com/truecharts/charts/compare/librespeed-13.6.0...librespeed-13.7.3) (2024-03-23) + +### Chore + + + +- 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/linuxserver/librespeed to 5.3.0[@e8430ca](https://github.com/e8430ca) by renovate ([#19412](https://github.com/truecharts/charts/issues/19412)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [librespeed-13.7.3](https://github.com/truecharts/charts/compare/librespeed-13.6.0...librespeed-13.7.3) (2024-03-23) + +### Chore + + + +- 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/linuxserver/librespeed to 5.3.0[@e8430ca](https://github.com/e8430ca) by renovate ([#19412](https://github.com/truecharts/charts/issues/19412)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [librespeed-13.7.3](https://github.com/truecharts/charts/compare/librespeed-13.6.0...librespeed-13.7.3) (2024-03-23) + +### Chore + + + +- 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/linuxserver/librespeed to 5.3.0[@e8430ca](https://github.com/e8430ca) by renovate ([#19412](https://github.com/truecharts/charts/issues/19412)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [librespeed-13.7.3](https://github.com/truecharts/charts/compare/librespeed-13.6.0...librespeed-13.7.3) (2024-03-23) + +### Chore + + + +- 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/linuxserver/librespeed to 5.3.0[@e8430ca](https://github.com/e8430ca) by renovate ([#19412](https://github.com/truecharts/charts/issues/19412)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + diff --git a/stable/librespeed/13.7.3/Chart.yaml b/stable/librespeed/13.7.3/Chart.yaml new file mode 100644 index 0000000..008e0ff --- /dev/null +++ b/stable/librespeed/13.7.3/Chart.yaml @@ -0,0 +1,37 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + 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.0 +dependencies: + - name: common + version: 20.2.3 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: Librespeed is a HTML5 webpage to test upload and download speeds +home: https://truecharts.org/charts/stable/librespeed +icon: https://truecharts.org/img/hotlink-ok/chart-icons/librespeed.png +keywords: + - librespeed + - speedtest +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: librespeed +sources: + - https://github.com/librespeed/speedtest + - https://github.com/truecharts/charts/tree/master/charts/stable/librespeed + - https://ghcr.io/linuxserver/librespeed +type: application +version: 13.7.3 diff --git a/stable/librespeed/13.7.3/README.md b/stable/librespeed/13.7.3/README.md new file mode 100644 index 0000000..e7948fa --- /dev/null +++ b/stable/librespeed/13.7.3/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/librespeed) + +**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/librespeed/13.7.3/app-changelog.md b/stable/librespeed/13.7.3/app-changelog.md new file mode 100644 index 0000000..2af28ac --- /dev/null +++ b/stable/librespeed/13.7.3/app-changelog.md @@ -0,0 +1,15 @@ + + +## [librespeed-13.7.3](https://github.com/truecharts/charts/compare/librespeed-13.6.0...librespeed-13.7.3) (2024-03-23) + +### Chore + + + +- 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/linuxserver/librespeed to 5.3.0[@e8430ca](https://github.com/e8430ca) by renovate ([#19412](https://github.com/truecharts/charts/issues/19412)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) \ No newline at end of file diff --git a/stable/librespeed/13.7.3/app-readme.md b/stable/librespeed/13.7.3/app-readme.md new file mode 100644 index 0000000..7e86075 --- /dev/null +++ b/stable/librespeed/13.7.3/app-readme.md @@ -0,0 +1,8 @@ +Librespeed is a HTML5 webpage to test upload and download speeds + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/librespeed](https://truecharts.org/charts/stable/librespeed) + +--- + +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/librespeed/13.7.3/charts/common-20.2.3.tgz b/stable/librespeed/13.7.3/charts/common-20.2.3.tgz new file mode 100644 index 0000000000000000000000000000000000000000..701ca7141bec7a024c6a235eece1372f39cd79bb GIT binary patch literal 101772 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 pQu&l(J|9!^kf&Su#3jL{{R30|No + 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: 0 + - variable: runAsGroup + label: "runAsGroup" + description: "The groupID of the user running the application" + schema: + type: int + default: 0 + # 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: 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/librespeed/13.7.3/templates/NOTES.txt b/stable/librespeed/13.7.3/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/librespeed/13.7.3/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/librespeed/13.7.3/templates/common.yaml b/stable/librespeed/13.7.3/templates/common.yaml new file mode 100644 index 0000000..b51394e --- /dev/null +++ b/stable/librespeed/13.7.3/templates/common.yaml @@ -0,0 +1 @@ +{{ include "tc.v1.common.loader.all" . }} diff --git a/stable/librespeed/13.7.3/values.yaml b/stable/librespeed/13.7.3/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/librespeed/13.7.4/.helmignore b/stable/librespeed/13.7.4/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/librespeed/13.7.4/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/librespeed/13.7.4/CHANGELOG.md b/stable/librespeed/13.7.4/CHANGELOG.md new file mode 100644 index 0000000..3f41133 --- /dev/null +++ b/stable/librespeed/13.7.4/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + +## [librespeed-13.7.4](https://github.com/truecharts/charts/compare/librespeed-13.6.0...librespeed-13.7.4) (2024-03-25) + +### Chore + + + +- update container image ghcr.io/linuxserver/librespeed to 5.3.0[@f18f467](https://github.com/f18f467) by renovate ([#19728](https://github.com/truecharts/charts/issues/19728)) + +- 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/linuxserver/librespeed to 5.3.0[@e8430ca](https://github.com/e8430ca) by renovate ([#19412](https://github.com/truecharts/charts/issues/19412)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [librespeed-13.7.4](https://github.com/truecharts/charts/compare/librespeed-13.6.0...librespeed-13.7.4) (2024-03-25) + +### Chore + + + +- update container image ghcr.io/linuxserver/librespeed to 5.3.0[@f18f467](https://github.com/f18f467) by renovate ([#19728](https://github.com/truecharts/charts/issues/19728)) + +- 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/linuxserver/librespeed to 5.3.0[@e8430ca](https://github.com/e8430ca) by renovate ([#19412](https://github.com/truecharts/charts/issues/19412)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [librespeed-13.7.4](https://github.com/truecharts/charts/compare/librespeed-13.6.0...librespeed-13.7.4) (2024-03-25) + +### Chore + + + +- update container image ghcr.io/linuxserver/librespeed to 5.3.0[@f18f467](https://github.com/f18f467) by renovate ([#19728](https://github.com/truecharts/charts/issues/19728)) + +- 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/linuxserver/librespeed to 5.3.0[@e8430ca](https://github.com/e8430ca) by renovate ([#19412](https://github.com/truecharts/charts/issues/19412)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [librespeed-13.7.4](https://github.com/truecharts/charts/compare/librespeed-13.6.0...librespeed-13.7.4) (2024-03-24) + +### Chore + + + +- update container image ghcr.io/linuxserver/librespeed to 5.3.0[@f18f467](https://github.com/f18f467) by renovate ([#19728](https://github.com/truecharts/charts/issues/19728)) + +- 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/linuxserver/librespeed to 5.3.0[@e8430ca](https://github.com/e8430ca) by renovate ([#19412](https://github.com/truecharts/charts/issues/19412)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [librespeed-13.7.4](https://github.com/truecharts/charts/compare/librespeed-13.6.0...librespeed-13.7.4) (2024-03-24) + +### Chore + + + +- update container image ghcr.io/linuxserver/librespeed to 5.3.0[@f18f467](https://github.com/f18f467) by renovate ([#19728](https://github.com/truecharts/charts/issues/19728)) + +- 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/linuxserver/librespeed to 5.3.0[@e8430ca](https://github.com/e8430ca) by renovate ([#19412](https://github.com/truecharts/charts/issues/19412)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [librespeed-13.7.4](https://github.com/truecharts/charts/compare/librespeed-13.6.0...librespeed-13.7.4) (2024-03-24) + +### Chore + diff --git a/stable/librespeed/13.7.4/Chart.yaml b/stable/librespeed/13.7.4/Chart.yaml new file mode 100644 index 0000000..b0751f6 --- /dev/null +++ b/stable/librespeed/13.7.4/Chart.yaml @@ -0,0 +1,37 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + 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.0 +dependencies: + - name: common + version: 20.2.3 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: Librespeed is a HTML5 webpage to test upload and download speeds +home: https://truecharts.org/charts/stable/librespeed +icon: https://truecharts.org/img/hotlink-ok/chart-icons/librespeed.png +keywords: + - librespeed + - speedtest +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: librespeed +sources: + - https://github.com/librespeed/speedtest + - https://github.com/truecharts/charts/tree/master/charts/stable/librespeed + - https://ghcr.io/linuxserver/librespeed +type: application +version: 13.7.4 diff --git a/stable/librespeed/13.7.4/README.md b/stable/librespeed/13.7.4/README.md new file mode 100644 index 0000000..e7948fa --- /dev/null +++ b/stable/librespeed/13.7.4/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/librespeed) + +**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/librespeed/13.7.4/app-changelog.md b/stable/librespeed/13.7.4/app-changelog.md new file mode 100644 index 0000000..48db3fe --- /dev/null +++ b/stable/librespeed/13.7.4/app-changelog.md @@ -0,0 +1,17 @@ + + +## [librespeed-13.7.4](https://github.com/truecharts/charts/compare/librespeed-13.6.0...librespeed-13.7.4) (2024-03-25) + +### Chore + + + +- update container image ghcr.io/linuxserver/librespeed to 5.3.0[@f18f467](https://github.com/f18f467) by renovate ([#19728](https://github.com/truecharts/charts/issues/19728)) + +- 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/linuxserver/librespeed to 5.3.0[@e8430ca](https://github.com/e8430ca) by renovate ([#19412](https://github.com/truecharts/charts/issues/19412)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) \ No newline at end of file diff --git a/stable/librespeed/13.7.4/app-readme.md b/stable/librespeed/13.7.4/app-readme.md new file mode 100644 index 0000000..7e86075 --- /dev/null +++ b/stable/librespeed/13.7.4/app-readme.md @@ -0,0 +1,8 @@ +Librespeed is a HTML5 webpage to test upload and download speeds + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/librespeed](https://truecharts.org/charts/stable/librespeed) + +--- + +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/librespeed/13.7.4/charts/common-20.2.3.tgz b/stable/librespeed/13.7.4/charts/common-20.2.3.tgz new file mode 100644 index 0000000000000000000000000000000000000000..701ca7141bec7a024c6a235eece1372f39cd79bb GIT binary patch literal 101772 zcmV)LK)JskiwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PMZ%avM3aFxbEO6bPy(#_AO*-X(F4Cq7wHck63e))8g*%+5EV z0jod~N5w*Q0i?|KIAUL8UvHme1BpwaZX_j9vfaZvXWC*FkVqteL}ns0;j!tIh5IKH z9Ee;bWP_TOf+-T1EA=^h+(8wcHPtvtgaGeGdyVX7QqrXeh`yhJrPp1awZ~ zMZSDMJrZ)#M{nK_E^5tsv#3aT$NT8t6@(C~p%70=AMsffu~@)6gl2KjM-w3;-rwK% zDfd|H*F84fr{SCmvM)aHtDB#Hy%BK*NAv@UIb~rV&07^5MfPWa1>vIN6Yj+{67cTF zS?I~XP(X(k8D2lh|XSAfW)Lv;Bi!ry(bO<&G@wS?u$ErG}EmDm8;?4PI1g zNH=pg8xq^qKmYZ0v)<~|8@0xtD^pBEfoVu$07j;m26FsH?0+SI>nt8ukfy#vfDG|7 z6;yGJfmlSOZ_umE4KA%ly;W~lzVy7_KI=W2|IcwSBm9{*fTjGu*=jYL-7Nn<=rp$c z|0SLsRI8z%0ye|}Qj?%EhF@|wfR6(r5cYj4`6dpK`icTPB!T1?>W@D9^m%y&XQPpu zg0t;ptC|{;+wcf`1is$9JAKzjC$l&vp$Ha;vnfGr_&>xG9Qh1|Oqgv1i3#PJy8(bc zs#Yrqjc^bQv3GY$MtBwo*zk12r({G!f-vHO#du6k0?hd(o)RP`SfG0v1ZYUmj1wRB z3>*aL>ca`w5KeF?KeIWB<5@s_6p>hdhtDp^bdwSb6vb>vkmRQD4SwDLZ8PO9ddBd-*E~LO%99!Z~`& ze4+*q!wdM`*YZaVT@&p88dE{ugw_EebKGiPhIDPu_OMjF6UCg3Kqt-3OthEHQUSlQQ(u^l!T#RGFe+!V7rGU|#TweX8OBXUB z`Q5O=Wy~m7E*e|$vDvF2G$lf^M~6Wj`#x8%FW$He8wq9@hh9RyuQ|)H%hsjvSV2g{ zn2hLM7O;L@1{l4%pO6rRg!shYU85NZ`z*x6fN;cO~0oSfl79}L_;j67z^!dTP3@t!p=M)DcZ{3 zMp3XpbR@gY?oU`O-;T!tL6mD6`f5zg_a(g)UX4X0^jOSm(Bm)ESD3qRX-KEDDGHfS zuB5C1LX%uSG`!UB`sk?9XqXymQo`I8EJ9Pp1&Wx@5e|JMwLzt;AsTwY%%|ZPd0{k$ z+CC#31RM2@NM08DH5{;z0E`Mq7twJLnC-LzZT`&IoorFB0yM#M2^eeLt>%-6ggyzq zg&B={Wd~iwbc$mdEEJ0o43Ut}VuJ1o@>%%j1P=uUO=p3iQJ}Ujj_#?LppbAud}Ldo zgjaO66R4#Zi$e75V-!%2f=AWFOUh7|c?%7`zEdqP9n2H6`04iL+Z~#KV6Ek&?DFL&I zd=z$bNM={1l;7Ag6_os~mS8*!kNJB};y&v34wF|u#cUQi?+Etag~8&QG4Ue}2w!kP zrVdYpMSd02ISt5|oN*5aSlMF|5il~JefKRVp2w!qRm?^-Aciq0%ft07l+#YjQSiyb z5gyWj3Yu^c?E8K6kALc4e#{(6poWewE-HpW{3_~l7J0YV>D z8;w@WGSDmLmrq#D(@LO6%vTFYjo>Id5%r6c2@c1^toV1KoR@DYpJL%n)U29CQ9!07 z6gYqy+|Cfb;GPK7Z?zt;31_odiaIO%9GjvNzkp7uk>0&%)<>O2qcMe_Q!)ikbqGpI zOn#dYo+{eR6zn$M(n`fPq&7XMaQWf<^!)ht~*zdA|3ko?4f#3wkGYO9oxFB9%=KF0*acQcsB z!98Bc8RCcBywhsyk2K~&eK}#_h>jIKSkfU^rU-qeq7398k=OnHF-d zACQ1}f@#ipHye^TB!cidW&1exCVf=JQ@_`-^ZdQtLPsq2q=Y|aa_UEtUBZx@k|OCX$Woq6l0HErB$k4 zL(kAxKJ)m#oJIk|{{HpZ@#)*M`qba8n0J!iQ%u9YBYykN-V%Y#vT)w0-60_^y!3~^ zVk+Ev%pXL=GxH*0Z^`bEG^?I`g?dA$vqHqxUx_sim#KyDMA2 zdicTy>FYC&x)hA+e8HRbkBi?;&0rSxkws&~)oB6wC^~58UA7h3 zt@BWjcm#r=;aB;BV8sH`jx?CswV1 zxhL}TU$e>`g#1N_r_`%Ob8i)-Xzne8v}CC|jnsTB@Boy%=W7q4Tq_9O(NK=nmDzE` z2NujgET>aD0D8#DN6G~a$5$Ut;FI}X^JM9@5jWMK4Ly*a)82zSW&lR>=N&MF=0Kdw zWCdJ(0HnFVf_k-Z#Ge}j)sh{)Df6YaIpXGpls1T59{UnK^~;VUw4pJFzg^_{bofP( z=hNX6kcVl_Kw49u)DQb@2IfV}VC?$>KIIa_n{mOWUxXg2X^Usf=2Y$@wi|WlRYHQ8 z&TR?x!+zUACjb(i49?|#2Rj=Jk(94Z8M)V^PoLFlf-SeE<~k2?#3yVeLw)+H8t9g| zrH3)5RHqArhO;N6Yq@rWq_`*FR?#aXYwT8B**X!)eUcW@3t$6z3f`+qxo<_~ld?O- zeNGTJG+5S2HBl^O++M26Jk9FS4vMIEhgfKbJ@K({`Mzx-ntQOlOKnA;6pe{MI1nTz z{;q|R!BTl3<_1Ga3QGMs5C4aFg7|0@vnd*!9ABI{XMB|%^ezmP_hd{)BnHP2n6LEX z*+(G-g}@4N+8#HHwbB0{|9tK?z>t_z=D+}RH4B0P@nRwsU4OTdc?qNc&`O1>qX!60 zaRfE&uUrEhKxoal5CxvHw7EL8ewC{c53vX39u7#3f(mZoC)2mfcQj<<)rwJO z4Z;47r-8L@Xlsfoq1yZOsfOst+A`?hlma9RD|~j)2@6BwN$Eo>9MCU)g7bGaLmm$0 z4y4W*0TYQ9i%2Ldu#g}&QXT{>2-v-R3I5B7hO(0}8piCNoAWY-P>jPdDaWaXlFrr5 zOI4GEKC0l*Q`E_lFHGXZ0n%sS+|H4xL*juP)@`1UR$p`t2G9wu27$hYeB z8z#ks1koOfblWWC)F-iVPLy*f!C+Z~`#fSHXK@9gdmPId>GCxCH+9a+l|f7H^2qVx z)qV|H=dajls3Gj^>{Q_YU1|&>;?WWH&^2QMz0=M@P;6&MH>>=Wlv|Ak4#Rdoq22^3 zHV0li;0H1!XiP#9V?q3iDlU607g)ybk{oElxfJ#7X|J`{>E9E^h5g22{dWWsjrK`# zWf^7{r}nI|rL6m-^G2Ihlf!sm2vv!2Rrhxc8j{Pg+U`E6& zJTG)u@VvNA*}nXDUl+8#3GI6Opx!XP2?wNka6~%9Yxf$Sf6&B)9P|!4-ENzV{PtnP z#|?bY=p5ljW7s-4>fnxl*yy#qPWQ0YZQ$NAZ-`1r1fMV_RwHRjS}Ys&W-Gz6OE7L8 z^;$!(*Juu#jgEIX?DdG}b@8y-9336@MhC5Cv*BTUFv0|T!w&8o_{~PQ)fK!%Oey7(V-E2ra5v)d07c54x+Z?reqXs!3q=o&XPOH;6 z9N}(v)I2=uHAkaf@2GKb*lP^i?MAoR866HgqfWauY7B?|L9cbN6vg{7Sz~d_QqF>D zIP1l0^+uy^2Nr{WL^`7;K00W&Tg~Rt5Vu;RgYH4I(d%~o#-Z0~G=?4-HM_pokc+9| zFJIS--z;iN9JXAnr}U1DaEvGWi{A{woqESvHH7$Gzj5HVMm^jc`iF9vn472}nA5>OJZK|Ft0yT?@2Og-1f zEFolvbVzr2G-@B4OOjm5PxiN1bNt@Tln>4SU{EZ`5oy zJCd;Nfk*zF!PM$N-kchox=c1aVre4lvDRn%qSm_35Js#-C^N3Gr= zX|<192VMsc{iC7ZXgA5I*TRRm-SfJKq}grvn%<~A>NO9J8ofsAXoNe%-l)~}4w~Ll zgw0HBb_=l`PZYLZz-E4k1)Y;xG~Q3V(GAMgX1Cs}uGduWsZI6jt@WC^lK;}jbS{}a z)n>QWu6G{R;KRGv&t?63%v0l7o5Nw>!!TIh<%eL< ztGCv|Kzp%~@Wa(5;zm31TvJbF2mLQ|MhF5sK|>O-`-&9V=TRbYD|sGZEI@nF1&{|z z*}CVHE@fT5rpm7iQFggR8aZtCj*gm*RC^qgHF!#6v0EHxCXE3F)qlfut{rfWWJ%{VR>hPct0*52g1#jmcP6ET?z^dnK_g zv^C(kBnE+{)o3*vN6n7iy$;*M!{I^4?{&z~Zybz{j=J4u=b+m@I&62mmSm-k5h2~C z-@@(Q2p{x@M|g;PheuL@8LflEgNSU5l>|W9un_I?PPE7Sgv6v?*+IuiEM-#EQ%;=N z_lYl6RP6i8!{4V6;f~`4x+4q3>68XImddz<{O2jA;hznhdg*8yT{-2Xzv($R8>4Uv`z&so{Wpc(5n8M)YG5*mv6ar#OTe^yK`?b!DgY2xWqc==UkUCrf zgSuQpYJ$trkCgL0!s(e|=E6@za76WJt2h-MC(ikd0I5ebF!6jQc0waubDGUe^O^{F z(l3w1LJAvL5Czv^2X@i9WT=%c8YfeY^%j-j-{KIDlcSo#U1~WhnOIg->Ue5dnB-vh zWC-yt#Hl3WMZ~~W-*M}$6&76)Z;Eu_tK6fwB)`MT<=Ai{Y&i%-xVaeQv5i^8(NInk zo2|h|K+;?cs+t3C3@38qIJ4B;DGg#Z%yU^ND|%>EKrROkKL$K(aLU z(?!iWx&E5)pMdksn5>-kcFyW`nvaD|Q6*R0$+Kh&rE)J7R}L8($7~kaZ(|kHwX7-X zIc=zXOHT27>W_(V7giQPs%O^8zFJg6E?^_{NhX9EPAN#0l&YtXr=2$-f`GG>5HuY3 z)tQkA8cx@{n`dj*qztd?+>u4*s|{RoU{)OVWjuzo2)|P_{OV-^&yz4I{9Q>zmBjZ) zvUWBlAbe!!c^;_plep1aO9I3ZV$G|pB&sx~H)l7;{frni#)91A1&Y~BtfM^Xa!=Eo z00;z2tK(e>NyYd}nOMoek_RJ#<3I}90xKT^xla--W--}IpFkVOof(dCD2UcHuqS3X z2o~s`#dn~ny&)1!NeCSljl+FlA|Av$O2r906=niLwyBt~nUJ8VN9<{|PLwm_1kJ)g z&guo5p?e&{OczQ&!ve*W-&JzjrRJ{XG%2C(WcvhusV+vz>L7Dhfhf-Jw>`fr4 zgI1DpOhR!@MoviO4uU9J<13>lgRt=GS>|3kI~<<>3l04>AS$x|qyReALC`I$p5E3n zwbWj_R#mmxmbA)=N;N1~qF$RyOD*VyE_>-H4H=D+B-&?az1s@LF`fmQ7s>&YlufDA zuHD6ieks$1tmh7C3hEGhcO>*d_=^dGP-@AIOzbk^6E+KcIq5hFMba@{(VZ`0J zbQQGd6h=nokQ%w83n!1>*Y_)xi20|K$1`A1Z)QfcDTtiQa6Ii(Y)m5P!X#`<9PQMr zM6FV9e~}W0`tySoQ!@6I#BwsF;qe^PKq6sCJjEa1huD2vxhKO3W1u+ACC9}e43%|2 z$AH*^6*Y_i!p!{XOsoUM6w8CCq#~cS43d5aLWv1+(h^F_;XCW^Em>Gb%u3v-&8Rk2 zhCmCCkSUC=F&JN|Hy7-l#8(<0U07*nR+@E1xU{Sd5~1@79GYNWcrn3(q>|F9d`Lc- z;?S?8vehY~q!ZX}mL?I7@stS231FqbSjC$dg2a$8PJaVUQ#nJQeT;CZQdqfEhHr0Z zD8;(B;Ie-{of4m7VTyncyh(MSUFvqwl|{wMl5engH;V?U{})VodA;Jhb%%f0BshsI z$;5=jh^QPBulTOvyu%`JhzG!hB??jmGP2g31SDosx&p7=d9&Wz#}Tc`dCm6~C_OTP z2DM))Y{B{`?U<#NSeq>tFn}Ei^W&MIlX#<^)bRr)KREnFC zl2`ma+axXruCtt}dFm^-N{d-l%Zt^z)i&zIoz~N-_#5D%wiJVr#xYJ2!pws*WKE^I zyAXU58?Y+jnr_{7^dHW=J0c2+uD+;rQ4X1DST`nhziuI^(k^5VpAb;Tm7gXCt3j`W zNa!)C@tho^;Vkr3Mk=WXfIVkUVmexYZ|cQBZi%6iNF1R-_tc@gX;d|tierFH&2-PF zF>D(PGz%q#m5_>q0DXWt4sma}dE^RCs+&b^tCo^sG@Awse}pYN^cI#D6LybA>a7SC zrg7b_uBe1xHEw3S^X(S2lAw@elteyJnJ@@PbcEE31_ks!rh+KiQeHN_^6l;<=5CfG zmfV9sK`t?eGX5-%M{crXC;WK_ zA>RIx#U7DD=|C(3lKS*M4xHb2Q~nECocnzjoKk93PNwAj&4i%yQ#&-Xp_NGtP31&| zZ+iM;71gpQCyq}?S^8Wu@ZBK zWH0kRU}K(yB4FQF_OSquQLSbWugQMaM8Iom3rsL6>{`FFQzk2ZNCnwFU09qK!h4*w zn2r@q#Kqz^9CGwvSencLiJRq{-uVMOPM{lD??w4 zc4hcLLoe338J)MhaH;R;^(ck)zEtAh=v`Omxq~&Q6v=wUzSKi@EcLQ-fQl{-bsy0vq z{UHC(#N5v~d3PU@_}U)EoQH}a8UD9}&Q(HQKQW^2nN8busbS868Wo%bqdjwMM4ZIE zX8vgSB6rLuM9@doR;MvZ@&oX!x^B`PrtMS(0rrluD!UVuo2ZIxPbMh?Sgh2K#8~B% zfVft%uxHiaosrwYzX`CnMplEuq4oBE~>JrbvmR1HZo zeV>Sy)YRF^oMKoODq+D-@6YX7E1Q#8D)tj2gXddJPVDk+Ulg~hI*Vr9K(!6)nh8uz zm*kwIW<577b*d?+kz(qoZ&?geH8xBg1-pnk6)%R=dUGv*=NEIuO^3}Bzjf_$p|>Q2v%1zuaNnjO7^o08FV0vW1e# z4Ddm-pu|V_1XKYdiX=E?bD>Ll+Byj6Bn!mXCLYxW_-2*U44Gr1xA+bm5W?Ds%|f@$ z36A~R2-Covp2)x7g=cXr8Acikw$q4w6ft(7$PE~x??;+nC1d=~6w-5S2S9-^DoF?O zp|XL3i4vPDDiXp|Nts#btLzcx1`Ba*S&%%{Zn>QXmfN9SUVrX}cX<4zt0xr!p!2gMBnk&Vgyw_e~zV#L5b zq(l1mOmxm3ve7M)|F}`=%8N?HJIU4jt1XD*B$b4^ULhtPq*X|S0Mle8!S==gFAL{U zC5x%AzS-;?G#s(S%c=lM(Y=YLedn)Xz=r!$piriYyF)*g?l~6-erNIEK9bT6KcxkdUZc-SI4xdccg6*jzk@ zbdECZSLry;%2sY!n0@PcBoeoNnDK;F&SwrvKH=h)x-Jl$d3W7gn`6zq29A1*<8i7s zmZIKm;WsuDL%E1=<#^miG5ff<4IqhBiXxJ#jvvyOW5XGXSfDw@o>bzwxu=3+jzjn5qyE@X2qf5rG( z1sa*40Db8zn-UVvt^0}N%&L7^ZKoDGSCcwPv^wX)VMSoCP^mpRJ_@$PeB89caCMGsz6S1|&1<*KLReayQL1m6~00l4NJqO=i^Gd_mxwL43ps2qi>k>)J^VirgF>N*V?} zRJL5dZ%fwsBvV+viHRH%DKcsBnh?;PGE#&#k*Tp@%4wev#h5hIyw^odTDcTRrFW}a zpd{8bRKx{w#{>j`l@nEyJTg^vj~GwRGLml+mi+wT>axgR%WCtW$1CtoemzIb2z|rT zq0}7>g26o%-o)AE$VX*8(l>zc+w-e=$FA_AuRW#8<;6I24|86Sb8_NnfeyN_Ze5hK zhHp&3OURh>HI^blm`5nNsz*C0sHY3`kcA}K0I~=;U#dDSm%M@oQ4tCAxCfczY0R`MUY^BU)L;2iZ3w;APQbE=bltAYsREM`XiWG>9br|?{ zgeNvrB8|Cl=A|;wzLlkv52nKFltLb1vpc)tnCS(G?csQ$dSp36J!>p<1aeVuw=GP0 zcTYBVv9efzniEg46Udahcp}d(%G*XuZimTSL*aY?gKM+ZZZ#EgoLKxEaY7rN^Z@F( zdPz}?fm)yGJB~~+si*ux!!Zqw({d)TAQi2t)`yOAWEPF}f73^6BlWc}!YXIa1eAJD%{CZ2y~UQzcA+`%c8 zcYo--ovY+M|8mSkHaD3rWflz^p{wK)V&!qPXEs4g&=5mB1otLnN|JV(U8m7zPyL9- zACfDE&33Kf$dQmuD%&HRMJEK9CRb9iV0bZMF)<;zw=|do$d*A*pvVd4% z2G_iSM}JB7r}Y+*yG+Y=lEOtKo4A}!ha{Hs2aZ2N&z>aN-+k0d%4>Ht$uSTM5vSoe zAhl4=L5%{}w=}bRxY%E7lXoN%vVwtXE+o`|6`V^L2zOW2XV}L3kJH~1@deyoqPh2H z?iBtJ@=I&?7&&dE043*+$s>K0xq<(+xlkW^XB^Cv-J8Qj_|;ao_Y?@HjLCg z4hHMuRja8y6N-OH+Bf93?s9I*T?uMO=`02jd-JA>-ZIu|3*Wh!)4qF4#6&60D!Dgs zyl5O_pX9>iNNhZ+F^ZYWXs#HIN}u6FST7#Q1tK>G%|tkw;5k7fIWg<=_$Bt4O6@Bg_ zYWu9O*CjrBH4FJHk^;Y!G%TwJ3QTc0!vT7g6i95oXG)-igX}b}TzA?LpOM>0-)UV} z(c7~j29whp2Z1w-(@(zVhNylrhEDTtV&nRGH6p%Ry_KI`qE6YJ2kvL}Yp2>2) zr%swI<@S(IhO_Y=5^-`S6R`1xgxpsPJ%vHmMyWX5$+12l4`8ev*XD%h4G8JmW32SS zs&=hS%p?2WERIPi_HjgSZ2C@7OrkB zAZQ>*L2l&A(5M!)jbkyQ9&Gh?f3Mp{&r^P&Hd+gE)fKgxx(D01Xt9vgmv$pL3e7`Q znS~0w;;DN|_LM6Yfy=nz@VWpAf6rnd2U*B+!vKeOI$@SR1~MxoMV8^hT6`!F@bdk| zMLiiAeG#(3?ihHP@jWqxQX_5J(c<*rzb}x@?!CE*W`y;kNtPs4b*9)G#)M>t(RoP4 z=^Nwy>=mItG-YjmD4;zJsqlv;%;;&|u}$o6lq?pk!qtj}@<+zRA*m#3G5GI`w9{A( zom`(C-<+YdzulZ&4$j|QqVpfo<+~en_P6uF%>XI2>MsSbj+5&E9u5|4q#p%=sMfzE zx~&#p)l77KO|*xh)(61%&&EU><@t*FZ`G%i5lXL0?a27wGZIshIkZ-1KlW3~PtIQc z6pe2^>`ln+go<03MAcNM^XU&=IS&4-4(s)uUUy_swag#naP#Fig-CTbRaw53)dy!6 zXD2sE&x%{4@VwfU6046PZNeVnv+1h|!O`t7xZ@J#U9>Mnirm}(D^oNk*xvaRPPs@S4FX`vHMwCdFn{y*Pezc2O-TkdF3tgOhx# z{pmll)oZE)OPc-Z`2A03D;qtLgN`OtAZO5b(6v^86Zbo+j}az}6J>#s{3FqnP3}x{ zo271eC*fPltJ^|WGH#-7TC;(HA!$BgzC-gL(7%-GEcJ2?NNV7&GH=vyc&B5CUR|Bv zT$|G=;_sqM=crO=;sVvku{YUw*15Xw;-R$rThQ*;z-EZ!DGt*%fh<-j_$f=lvIgc9 zV<{dJtTS9##$}Dub@ZN-(JaWsqGjiX3NuZn91!S4vhPb^-&a5FAu=bS>Jys@2mwp- zf~L$UNRM70xs*!uKFJF)ib*0Q<0vAbJ?>IFEi4IOnUK9zN4|n^V8X_j?2F3CVuuX8 zQysNYH3BIt%uAC((rt)_$=qYZJK|Xb0hF)zywAriPMtfuSNxyuAWtC0)me3$XRj_mCXq0Tx{j|osJjnBTj;mQ;3?pSvl_&KI4)Zr5qgObQH3;Nzi1q-S8cD zP(yE(mD@xMX;SUX9z_nn854zK~RhqshW35 zV7HUHPwIIB=A}E&Sr9+G+p^X}IxNedFt|0KsedX@!sD5k$hBw^A5=pyp5_Q7YrHgR zF4AGV%DoLvib)i(MUss%CXi6P0tIiP0JiJzw$Hcrs5p#$le2^GtB_mwO5*+7#N)Xx zqTs=8G#ZUYuhaQX<-KiW|LwMWz3-Zx?!iH~anS8HzH79at%KHgsPQa4&O9?NaQt24 z$!%pj_l-QCKJEWdF&8r^12DwTWZcMESUJ}r1e)EUeMCdB?<#hn4aIgMrEe>NKmrqX zQ~6>4^XJN^Pc@yH6IF#*pEv7jF4m#Bx*PXY)5X6}M?RqbYbi9)FeyPt=zHT7re<>8 zoxJJlvJyf?fL}iliiANz-$kRmzTQA=^ZP%bV{O{W`0uAeK}=9bz_8B|kWeF^6zjjX z!?T>Gbz7&3>geBK?*BWU1`bUmDHF)*y>8H^A?&|KVd8#pE;zWF`qVG{v?X*&ptU4GK*OS_7)%E~Y zJsbp*M%5GM69|qbv5Aqc7K4B@_G*4=>TXwecMW0fTp+(C1gJ`7uxg2u%omG!-8j!B zWl9I>wQ|c%Lo;KW|D79oxqkfo;xR+$tdyn8(p-m-UY;6j{V_jLO5v1E`81?zdYx34 zE*u@`Qb58q?aEuzqf$*%yolZjjO>y~ugi1;4;vv9y0q>HnHZ$P5z-&m86ned5p7do ziZ={ZMfQpF*_7z(Fo)`rJ?EB6rZe?GM6w&tsQX(mTK+^Z>X&b_++eQn2*S zH3c&KF~uQiIMy7JhU0{+me*&g_$*9v8Jo0dmDSXYQg@_;QEE~YGs-2bQg=VaD%WF{ z3A?mCC}fwVqn2Zs`6axZi7w$N=f$I1Iz?A=l!{$17epW);d{A@Pq4~CudW>u$(qPC zmz`~C?vq9)&wa}N{?bzS*Ym8Y|7qdtQR?3+{jb$&=k&j3qqo)nUgA;uUsiO=rU}pv zZ#3j27Q}z32Ip!Ua`~lWrPX!c{R%>X)Dmr|b3US4g+_n+w1yN1G28A3*p4-iaS!=o zf_?hZjY0sA$yE6gO+w;^UBs|ZGVA%0_nn;LZ3hPQ!iE7f1}@KOxQX#M5Hw3Y-J-%160+QMVdT765zf9 zU^0K`l~)uOUR`5j1H0@}LfE33fOmW7`#F#=>F}NH<=pLAQNy1?)>~u+5T_R5IlMFU%me~ zdk5M5ztQb9w)_7}JkPlQn<=z>_t(jNh=mYj(FZJ<)sR%j|dvc{svD8c;z^G6d}VNfM&Vvzy!F)3@iBsW;ch zzb@M>vvzGeNZ-g_Y15-TX{TI9h3DTWOIu%SpWN*Jw3`20>>kVhSMvX6vzz7rokn-d z|6k(yYR~`7w0q#`U-`oRQipCu+u+xF4DqUtoDa_%J~003PJQ&R~|f`_kXvV z|2MjgR+|4e4?3OBmjA!RW95IHr*}lhAob~d$yV@JIbGLd-Sf!Y3N^)1k<9O7f%~O) z3t3$^U!O%v=$b`!KIx->*DOnuEHtE{FXg{ZRxVl#w$JWE1zrC2AozbArnhwc>zfNs zo@fDBvHshQoc`ZzZ1w+_dF=YvW4$5WU#>F^ak=`RQMGj)P_(VCU*gy$+b~9eD_K-6 zX4fttYYGNZmb;!?c0F4Sbg4DL(Y~H$SXk3?@L)@UYj5cG4xeH>Fu&jaa{2Dm{u=y! zaQpV%>HCYbin1;sbb2|s{pIZJ>h|*Z?b+b$`or0EA5~dcmEYdo$iGLU>axL0l8c-1 z_}(NB4|Vcza3erbOhYk3)j!Sm{xq*9uppVNrlpi;PtH%TOTO~C2VZxy>U{xTh55~0 zZ^0avMM&lf)t$y2UH)Ns^p@c!n5gnm4~KKu3f;=&H1d2##h{mq+q?=Mep2k+lp zp4|+zaVHBkYp$?s%Y|&Fgl@LnBm)Ep=ZUpQE?~Wui&nC`^RG60Y3N_X;#GT~$xBLR zkFj(IynZ)Mnk@ycK`)r>T@}It*=egy-gKj%7|84cZ7kQph{?oJPLGquj^B*q% zIVVTYEyrzg|IO{A1t86&Fc)wwEoAdH0^|=@m$%37Z+?cI_EjR}{3Rt5KDDh~RJf_G zFT&Dj-U*h89fi`R*{|Jp3dP%8Gp|izkmS``5S;D2v{559Kfcin1S9sPgu-{1)k?B9&BB=0?e<^|H@R#tyjS$!=-jTF@% ztq)gVrVoffzr25Qb~`vbxjwsr)QOOpkwfx2bu&ur5$9HRlRX9QHZ<6Qu*U`XOvTu{ zqv5z-`ISNlsJ$9C{oPy({AYo1aE}+fau>3DlN}pJk%}XoLHcC4oK3AmAKb1g5(je| zuZix~dG$aL2H&iJV0EJn4rVdY3ss-j+zf7=p6h&eH-p>3yOUq!@BKNB_v2YubZ5I? z=ghm)bLJMPtKIMy>z^6L~=*I zZQ$&0H`m9v$Jaj@!W1g54l?&&NERu;X7u_#se=j22 zR^?t_}QT)~Um{rWVQrSiYJyZ5>E|8Bc?koEs-w6^iTFY;LVUyU_-Wp2`u z5{q0~+FNcnqXZxts_V(j1%T^o1$tI#z>a_S5OZ>c#binDh#VACr;6%exld~r>cUg& zi&$aKEj05e)F@Q)SJWukQ%44>w5ip`!NEbbLIs&7y2wh`#hSX@2K*N*CL&k;DmY?T z!&^}U)Gmt_r1|Y|n*254pUPr2)t-`aA2$q6vN|PS&!f-?+HmQ&%6Kg~pB=bW40pv` zQviDq8?xtFR^hITIAiNkT9w+rInVkY=TPN2WEy#}lS82?wNkxl-nwE^Ixut<*2IIAJJ_vgmbhny}&~8G?3FAoc17YTg_O(b48dCc^(O2-w7=Ayyvm1f zoH+D-k!79Gb0g~-jacB5c=O9!!F_>^DX&CGEH<^8od#5{%HJ_<{{;Y!6-bjrIK1v(J7PDO^g< z1n4S?CMBzhIiOku;n9S3w1%f>errrzO>0MzE+lreI%K^-bzXzu5s6n4+(j-mkMkgk zDPDWIxty89<#g2rA4XU^*_LyL1oT5mo6P0{AnOo!m0q)qc1r4BO*&QXVU#oK-crIP zfFDXX1HJ&n3aah@fX>uCeEPmUt7N#hSx+$yQN(<8BQ71GSt!wQb4%nCU4ZYalkK9^ z3t&~Y`{EWJn(w~2^Le(EPNd;vns9on&sLV_y(Ygo8bjfUn2`dUp@8B*(j;eSj7^vB4&jz>yuv(NK{$Yb#=!o=n4zD{%j~Qeg z&+tsEq#&l}>m=jjSBYcucoq^`_V>un4C#2qOTV;=Ss^RXOG{Xp5NU5dVPL#w#1osaCYsVmk!RZj<1hz-d*=m^)J;5Lg!aE$8Rpq2DfjHPkuSOJnf@uI1&%YI)czI z=NA`)U(at&e(vkLI!fdHI@xq2f7whr67&qQgPrwa2Rmi4g9%w~&;E9D@&5Ge^z!WH z*LT;y3~tY_K6HwcfXqADG$0R(wRDbdzPVt_6$I;*Ivy93VntfnZT#fd5kL8@KRNl& z3oz#!OZ^DX3i+>f&}wAQ|GJIs`QM8?pk$rc3A?8y|h6S$IG zBQFc7zYB|{E|-^Oofm}_Aea?O%D)PWNSq)hB|%YzsN@QxSIQiQgIy(KmkZfBN;{hN z_nL~}r*8gsHr9lAP{R57`E#XKt5tABKS(uI3Xk(<<&K7aUr&*@II2vEzvUz;32VRPB(-{|UNjxU#m5aG9k$Cq> z9Cnx8V`nkPL2v=J9ZVCW!R~H0s$(6P>L`90DFBr~YQF;0r21o5?rAZd>R#(vU!Kym z&}YV-^Gj&u7JDSYjuQ|sN;RBn*ZGy9pUV!`A>!xHHo6^@&L}{yw20wS&If+y^fx7a zXuH>qv|7OFD?EY%ryvW`UMb&S$|0+w>j1%ASWRi7t2kUF@tELYd*;O5t ztCV?JE4*&{0}iMUoW~M!8S%2a_7DqivY+hTs`uZ-&aF`0?%Uga`$hL{9ucqq;AJ|9 zi1F40YI`SM9vtU0Q4*K6{uxhBkcUh&#UK`ehZu!1(&Qp9}I(xYhp95``(aIr38 zH;af=Q8i+I)x5e?*Hk-W$0sa?*SkflDm@imj4PSP#{C0 zrI)ak&o_Wq|Ad6fQd2m6n007&Nanic@3Cttt>U|Zj;4Zwo^ zCX4{d5NxdgTPwiVYz440b!!ILngOJlYLSXpcY&D@QTTspovRl=BtD3*8YCaosBJ?c>*!N??IayOHwmX}xw?W}YHXpHAJQNqG z^Cg6^Rr~)Spx#q&09vvCcN*$(n2QG9``fmnT8UWyP5oHkTJyG-Z?o8b%WKr*^tB`5d^5OnL#bg*(ZU%TS4(ZK~Qv-v|45^=lT4( zqGh%9q%;n)&;~`dmbz$2Lw^_=_SXhc*_!VDzs9AS~!lYtp(>cZ8w)nvy8GP%N+f2} z+G{84bFl=Q?!kqX>NEr+#iffKr)3dS)|EZd9mAoIUg_Q$+^Uj@@8%?qsV`+q1I2xv z);bJ{Upwg;YmlDNd|3j+kp{97d$|_tBukZ4t|zsm_WJp=7VLj6=8`2MzCpG?w6|Fc zll)+b5NAJ*12)7#NttT`nHB4o_UlTaJsJ3?3hU1&CBD2+otftw5vHG$KF=jS*Bl=x znAbPJeXq$#=MOG$F_iDs(tsP$)wESy`xhGe4l!SqEIq|*Jr;_XNo`bloYav$BTv>- z3cR}(oNWRsO=);dqJVmsr)oOyo$5_p34biEl)QH;wRI&TV(K~crK1d#$)0%Qb4U$SY#bw z3cK=_Oj*3xWN)Sb@i84*1D8+#NqJq@eahs28jhu&`~vyknvH{Y?)<;i+}i(NyBr>^-|IfD{kABAYhfMDa#smMWD6XP036p%^G6q;ef?qG`;GQ z6PH~16h67HuhAIy4O!S*3m>5n4l_DuWBa-Jy!BvRRYN6t1Ai# zNf8LHuy#?+Hy@Jw!Gk2gA@=S_=tIhIJ)d%+5k>P$%WaMXS7pZFioTEP=7*N_c3nX+ z)j+BjHJ~^QGUPV@K7!7=&M5m;C$o8m1hT9>h;;#EJzB0}GNK=sK+NQ}Y)iDVxv{^{^o4oXiWJi9l{snSpoGw?yY7B>SlV&daUK1 z*F?Z;fAR}_GG0m05CtimkQjiQj7V*LCR0FpbJHi5J(D=f{=0-%BsTYQ%oKsFTpSaZ z^ahyQ5eaq$HQbpyEI{2VX+Gd~7$OQ5U7O^rw`|KVvecTxjI8$HmKf`YmY58t<*9yw#LnR8ziJ z^Nt&BSzEI8>+I=;DV=r}E|<3Sq&8i%zb*WHZwo}Mf}#H=1g@{_DU<)S6V9;^*qcmA zC{E=TKp!Lit<3+`JIKcWwOYOH{m(D*fJk?#1{)=#jgsNsgaEi?Hho$7Z)wk$3xF%D zt|I}i1fq_iReklhsY;E-VLdr*=@2}Zm?i}>FQj!Z^hPPk?6Mr2Z$U6yI&5X)+SBE) zjEM5>N@E+6tX_m3FK{AZ7I|i#>-GL`#H~lb#zmYJ`~MXSsJD35{9ny>ubYkkIp{PG zw)_7}JP`l?CKcuH>`Q9+^;!E`5&L@HL{PE%ECKhasrkUr`&8Y{1mWjFCN}3sh2y74 zxK3bxs=^lv(a#S`K3G3rX8o}Jl-QskJR+1oMX7vHf3f6|N4r4w_%Z?fMN?%P%3ngC zZBTz&>WG*>a4s16ln(KBz9taBYg;hcL4c0i8Hgai?ZdELT<>Sh~wfSS5nhKk*-oOg+rfT{J27rm@@U&vtV__7>k z#`DFo&7fMXmLR9|GZsu~$p%d7H~X3VR#c*Dqky4o@`d-&KWuc@KQj}&1QuBW>dZh| z50pl$whW}fZVx5UmkAzuQYq*PxcWO|3oa;ELxN>J-s^&8(!mL4lv4!oPCVsynwAX3m&FG zc1&_`(zKM+Uyh9%fm6Vd?9R9x%D<7`+>%|a*;>aRY6*faEpk{oAJ;|Ih4%=2A2EMi zQDD89L0~>S*m0WM8@29261594Q;!jZ8x;- zhW2%AXxshl54@jk{Jbaol%4-XB<7S05{eHjm`$H_1cEIq-OH>Pt_ zRsEf<<#Ad;C?*2au#bM75HV4O)GLh(!XrUq@eN4On)2TlB>%T@23KTC;RiOsg*9Sz9s%^oo9?iXh z9G-{u8meT@8d5Q5$@feTK*=ymZi*^S`8ZA zB%P9rQT6{+CnT8G`DEYZ`K>7f_5Z0>QT2|Hs3^bRa+uM)p1$5EVZVNDxJa*Ymo6z;EV#;QrPysDkN_XGn((|w=mzpO9A+O1?NYuf6l&ET{ zTt}~y{4=uX9a%U&?eM;2LaMXK`V`-h^H98tFByxfPJ6o!oV41K(i?TAtz6@1Emf!J zSBAn|PH!*m`VVJURX!b73yRjK%+Hy_N@tUvr*%FZo(#@6b=6U-ugP&+H5~EHp&X9* zbD_LJRk2k6WBw`S@eF4Eo0&f*kG~3hh5py+9c1G_8{N(}|Idp&px#By_w8U0VX!x% z0_Nw?m(>Z2CiPM!v82K}T4PDo;*idg!mA=Vi>f_1fU|Ivo+}_g$$?26z*WBSZ^8fn ziuowP8)>R-!!-XW3eUHpDwsvWQzrvC!+wF(=FPZZ(+k&=7(HVynv#|avVP>d-CH55 z<_}kkeE<>8v6nwZCYFqC)4x-6EP7ivL9yFidH9JjXP^!+>a?H1}1K z@>j5dh-o-ZD_Ks_Y}ViPQNSPHhd7Hw>g6glQiWF|lC!SI(Th`UO z%fDO9>PuREj>Di*`9G#CreXnN;Pc-9-)=Xv`9BXj&29Yei#$sH*MkjXzY)pb1^9(! zeixM$(tft+T5^86(t09ynmijjPSJ(b>482p$hsh{eNd8uk~uF)xA3~W-s&?3?oEh4 z3yN<0xN>>WH=!12gw+z->H}MS;6?QTFbwCGg)&b&*ITL$N>+$sLZ(qh3P~TNqzhzj zX^`J8*gc8O#0RM>#Q+q@G*6JK3*lZ&qvSG2r%~sd+ukKZ?iaZBqxvi{(f>(Lsr)zh zUMl~4r_pWY^S^K7zhC4j^#3^tFr9A338*N4@{4)_ovd;LI$7Tj2#S_C*L*n1`O_dY z2XbB(qNctUhXWDAslZ@}9vD zDDmofx+{>CZikEoYxn>qU>@iO^bPy*z(W5fB?|~2L2oBCRNoh`DYd` zpFx+5SgwDiORXi1E5bjQ(*_`dXJW!)`g?Jv?N6T)=l2sujB6HTx5h54P`edEN+f%yrH2_!?ETb z_SctWB383slBI3C+_%g9g_k=E$Tbk0JL@+0w+xQ&UEG1!1D>W8JNrdy_u>6F-oGa}P? zZf2yvm(Gxa_VaV4pwLSAx!IEja>Zg{DVBkyGPA5b&a!lFwE5gK+$2Y;)J%}{&8k0R zEXX}xn4Hro2R9r<6WmG-Nl4taQT^%q>O`%8-Q2fib>zR@oRojM7?gc_e`;$b!#ct= zK(EX&UNV6&0zW~dxF;;ySAXKWRR`8?YTQ15P82<-y;6nE&e$Ri?2BaBcA5M(vv!6q z&zw=aNGsYDz1F{qcKu_z2*)H8*JMezLMHT54ydJSiiEzCX*f z;q5s~*G(|S2?SJJrZ93|s*H$ksedDTu}V6^sMw@a!m5|BT!*ikNibntKqnMj`!hAU zOA4zJI;Yt3Ihpy9vJ0kXr8=2_QZ+Qh-W>^jGl$*sb?4jC`D>@CChwBjs&~`!*=l)r zf%LF+?k!{bMUzMh0LxmGq6SC_D(72L@t)A}Bwe+M>gsJajOueLNy01gTj{o*56M%R z?vk0Hf2Pw)7EFzT__-pioFC4gUs^leKF|G>*?&0k;wPkhNIk3kf7_i-#{Sc5w72>H zUgQD&bpV6C2@e1@ZN97zfS$Tby#SIj>-YgArNtuBEy}<0-;2{bB;QwMbkHRqoW#M< zebb?23NG9{(SMDq?;`x$jHH^;H&r-i0YI6mM`A%o)WgPzlphH4B1))A_Yp@tJo=Vs*XV|8R2wX1d8-d*#qeimv03t5C0~X(g3h2k^s= zHNTY4gC_pg5qEp?`C=!ZX+M8Sx1TZ3FT+;>7v?tfqVJK(qGWG#bo#Fik&#Y8w5R^e zQbV2OWipIH$vO#Tm$ElEsO?Z?S5@VrmN!K#LB!VZqpmv%?#G^QX`vF1JRD#jjNALm*^mU5n z=lPX$47mRTGVc*sUH6mU=U2#Qgo7((Oo9bsAslW;%s0p2&RjD|N36JJCVvV&Hz-q| ztY0x7={YpSa!IpL>&p5HmsdK0J|1!sDqWh2UDI}MB7W(NV8-aJrS8nEHdwmj?GVCU zZ%Trj#UME+-7Q#|%e+V;=GUFFYxm8fx|_xI*9i$zh*A#WdwSd==I@~qi($h7=fd-= zJ;a$|<%x$dzb8SEp73%uxojkxBX22+D_Dv_ zZXj5Mj)OoCa1mn2#ms1ItDG_fi;jb!>hR~Z@ns3_1$uT8KI$$<0qOB9tQA%on3&&& zIYu*=uf!hX+})Ia)`9=Xw1-w^OQ$|`1MJ<*hg4idYf5}joc)8I6BXP$(Om8bo;!_v*P?mM`k|l7-)t6SL>jeJ^wlA zHhbIipO<)2=RbP1H+T+I9@+b%4q>UeyuvXoTXsDMv0Sa0U~lD*8+J$1DIDQSIrlWm zkX^{4Hhs)Pj;1V`pDP7S))b~2{Dv%IW^#Wuma(m+=|8|z>GS7`IEr|Z zcgZ2dH?f5$=x(>~?e_f@=HM+_v4h9w;!QiluDIXt3m6g0j!`p)BprL0Y#e~U!*3ib z-s-g+F@FFjCWUKy=|S`Q$IVYU&R)Nji23UdLgD<_G(OKiGjbdt8TuFFp7IG&3n$M2 z4p9a>*H6bz)-^e*nXyYa>ly?2pvk+E18=lJdn6SK5|6M)u9*L{L;8o#?)7nvGN>)v zo|2*d0-Kb4avK#|cdqJJX4^t5w+Fj*!D`;b`9Tk@f0C$k*UyvdC~k}@`t*avBB<-` z`~M*)9Oe3da%;>}4FD_j|8}pH&Hs1MJlNj<^dgVa@xhUJildEK{?*L+3a$@$+C)kK|X)3#FDqsX~}J(sjqG*mb&x_!jp@*hXRygI%V{P(-W0F11ReL z&LqHMkx&$bF4fEx?C^f|E$p8^SCo9I^V7d&e!=Cd*%EHI&!`y6|f5v1?xrmFe8_CV{6jS>a zPQo4Gm?!B6KSqVzN&PME;(rZRJ=;F3(_P2$f?`@&a`qoYP!B46D2ZHM$ z#1Wsc=k@<>cN#hWpKfn!|9g=K1Ufa?{Qqa~-@n_&l>~A8`*Z#Z9Dbd-RyLB~_Pw6X z-gP_fw6_!6Ydh(k$z*b95|VgL5exyzaVPoTKL=0Z#fKi2leBnFcVrSM6beA0s!*sB zgS`-W&w%*I@|}T8gFNSyZ6&`swHoCvv&QstmPOx(lB*PkRra}e2A}v5L@0}ND@kf4 zNj;W7kz>3vcU{JZ%W(D;A9+~&n)`W%PX^1AF5HUP?-FkZ8(yH7tK9qV%JWn`%6?@5 z9W~dRqOMJ=uax&^L~paQKwXK%x`r}8EPU<=Y&!PU9r%69mC9LCs@F!2Ts+Z!QHdTKFV!IPp9Xq_{RLBop?P@2cjHobgNT8qgqx z*?c+aCBW6o|8nSKt>u03CyRZvu}Cn?@k7rvmW;l)Jb2MeDDx1G=t^ZvJ&-$^`9{hAJA>0F#7j2lS>LxT6_?d5EWf zw&_yY#|JSPNJ`}hlR*LTr<8LX+hCBQaeNk%WCFVvuPRIiE{xJ@z`IjnFwj=_|GyiItT=&M{M&u9gsLYUO`1$PXL; zVS8tDYtxDUu)C7~m-4ic|HU*|umaEpYyEMWWHcrVOl;h_EUe6g)qOyhui2 zasM`tLjtcz5fV7KXJa+aFeT6=!7vUgtGt0^h+;mtcL|AxXkxAA6b)X(31p!If+XuB z<7*g25aTx}=5(5(Cr4UMld?w(gQ@i4@D>6*E+Dvt_ZYy>bU1Hd9~DsMlH?s>IZE;P zhL`hXD3xhjjn!$aM`dRA=N429(^Aj;DQtYrjnq18*P>Q__C|#^)~-cac-H15i=_;Q zxo)*-)~z&u^K_Zdf`L}A3W*0Y)d&>)wWZ89B^1L?(G*kmec4uaIzK+!y zK(sD8-ft3_au+rIU)Ad}EQ@bCsI;jj??HumxGJ`CICs8OT_~V3LFP-ADv^5yGgyQM zZk`w`v6)thOAj@@t|6v>cQc^-i};(HrZurKR<|Vz%+!+FQw{LyZT%F{UbvNvM(iV3PorLO&}rE(G`^^)UW)@GP|uVtt=7zscKoFJ zq{mDe9aCx4N@!f|D=%k*CeBg-T!^vOsV(yQIiVL)4bo?HX}$@QjKGX?C-6s-#puq% zeEc$4^7)u*PshRw&xaCDvOx;Z9Il`V=#B{9mOW%Bh8p$)`G$#CHf+u|3ni`Gv{PFu z7dCvQbi63bOfkbQxLyKE#iU}UVV-!-&*DtoreiZWOZD+jGpAUMjOEP$NRko6QJBK` zCTPTf?$JkiP9eLWeW2RoF=3Id@w_+)Fg=Xwc26M@)-r9iYQ&WVT&jDz&N$m{T1urJ zxKg8?4Yb5Jbd)-eo;Wx5m91FHV{Jog$tWB^d7SJOO^5R27FAfL`eI#XL6#HRabScV>xTB^%=QX-wam;eE1Xx zI{v)^<_J^q>E3uv!ht>l#$tUv&*lA8;gOX`mP@0P2F2XE6O7mfOHXeaJ`=*zqtERp3NusN>j(2h0 zNv}uy|4EK|+l+-g+f`gfT!vIkhgI-u7rdmcp0M&>)ts02Ywd0=u4H@a2<@A%IH5Q5 zVoHl<-;~`&^hlXuYOE_t%vHR~BlK}xRf(EV86I$AVC*}R96-e_NvTDsD7|(ZUu%u{ z)fIn`4S(+dz{9YB@kjCbV=BLU&`pyYwx;MrqwDHzmVDBZR&@E;BsbHdX>bg$!pD&* z)wM%gnGIha#CJ4TYQz)+$vX+qz=_85W&a$S09`X`qFjT1xF8 zpz1&%bPG#PYzIJ-$OBW@S7J<)R3cS~d=mBWZ0WIVysGn$l*+^$>SePX(y7ls;K>7}stiMt$k?E;WRC6}6Jlf}L)Erv}2v!BM{{8U|4xHSlrDbLMd&`%akyK2zs=#$mZO*LW!q!`1%pqEb47ht{AoVrxx>psO@ra>v^5N}Q~*)2C? zla>UDZb_wbk!j(h=yMB&pz^7A3ynAkyrbPuqNg)$V>bv9ObR~ZG}^F}5|5Kb(|XrE zae4}PPX{zpx}&n5Gn_E@E>wsdAOci9a8?w(IPWK4);w z`(iLdU&Qr`h2#5W<+S;ie`@_dbA;0Q-9H=Se{AmA@qhOZ4p#o3OL@Mu@c-n~U@7;% zcvH^(FWluHxMWaw|4UBU`+SiXz%;ZT#T)d3kHCXo0ONi1R~A&A4u;`*V|;l)k0Rbq z4H(gtS)qA4)zX{D^u6_fV#c$~ucm$?FgH0gi4PW;Esy}kXF{+@y>qTYzT9$3x=PCXEuv*pgq2d+bGPygN%6W(^}6Aib!ChGJ_ z({wl>sUmqx+mgPh5>^D^>$96jN>CJ-G9C4N0*fMvsdOlz=&!AtaOMyg$~M!ltpYU= z7b;8k%2OfPKJMw>XsCb)Q;3ELc~PJdBttmH-SZq4A)UH@IkGy7MVN;-Nt%$vm}tGS zasbvSNO_thS!Csjl0iU^$hjt`b(uG!+!5ET3%UL>moSAPhP^ZOwLuVEcPHw+!NVU; z09s&1fi{BSdd0F_NFeZsq|y@P!+)V0HsFUK%yTQ>7M+?bz&*b|cW8L&3cevf>ViB= z0YwlciBqn_C}!cM`6=qW%rrN0@{q6?K%!mg6Y$OV1{mHnj4yc9Bsp4Oy@s6)VVc7N z_Y_Q4UG6?pWWniFp`vz3?VaWjD{75G5)EHFk@H(jD@ky7=U)BG1qCQ2d5(yeCy8^JyuA+5hmnLE^_J}`@4N1(70q)1wV}Agy(r&OiP|W z1s#*vL&dWB8R$tBHoY%`ytI!0wa~?wH9i)vbRzxiBl3f4A5HQ{{lmhv>n|6=$b^bEjkV@mnoto+@{|0a5E}EbcD+OaSTwGK7FD8&Ar5rF=!JFk^)%>P4wnN(QWgkcFD6=o=%erwa;Al{Mi` z;>bm^+KOQPJm-dt&J#95PZ|`t`jOD@Lo6b**TOS|nh2}zSnlKR*xL$mURANvf?C|I zIW%qd=#Jz5VeB-E@l6+hrkCNr7mx5MB>Gmq;p^>g0nI4S|5P61d4VQL?75a8KUncM z4M*$(Qs_x20;ZOKTi)9}-M}wHxApi1vQ&5C&e`^jf@KcD?2y5|ArkHT9CJPMCtK_meFmrgqq=)yFW2Kis!^q4CKScCk3 zu(@f+|2o*;*<8v0%XpY%ukQ0KPUM#$A6Lp()3;Wz*GsjL<@NGS;=3w4tHfRsav?%` zS*Ap_K49&lWmhhwt80&199fZnj_}-_baVXW>b05QHbv-mod0t5njy{q0)Z~t2O#i@ z^#KS1wk4a9Iu*cPLf}YGHM8+d?7_b#STD0|DDPnSOm=3V1NO#RA3+Owk?SYnpAe83?KVPq*E?fEZ?^2ad-@0W*@` zKNppGH30%;>Aiqp0iY9E0C^7XhDkJ}Z$}7|^d8`_4+R8**ajY^C>wAJP&|2`_-<`( z*B&=A;}FuyOWgxO#gZxKWAmEwDV?IBo;{mav)lw*M?05SS!41YbFpfB(O>YabM?4S zgZ*cM((wphWnqqoh|G8Z+;slCxxHzh|L*Os{6ClSFrAx^G8Uu!00+SS1|HWoBqvMq-@Yj7D`Cs@WZ+wK=ZG_m~4W;4FqEhWBOCr30Yl*{}Vxo3gNn;zY7hQ-c_WaCB#n+ z1WTAfKUpcTSW*c3p8l&ti^n;nLr+DXft9{i^h40wylJK?>KjZyOwux?=dmOR=+fDh z6et@}@!?%qB;id8!TYE914uIdFDVi}1W4W-ql4hBM}{GxB1V`NFpTfTsKgQ!pCF1* z5>r8~PW6$fKZ&nS1vz=Gc`1nVlDt|L^SYIQ~C-n>#E1zl?`5 z_e)5|MTWs^bO$kE^6GENU`T)Gs2~`G7$<{_uTH{@8}}u5q^pj;%uzh+hM`}C!Y~>a z3AsP!jJ&7M!>KJs54t~GptxygXy37gZW3TEmyj7>=R_MOgJA$RL6D-m0Bmyeh@r%Y zcpSLA!=_G6%=^~%bzy#8%MNBQTzXFXKvqkzNDUtMdOh>ZjBY8Sm`ax0)w7{B~X8Y>aGUErjwB#z*X0D4Nj+~ zPKOMY{ZFvk0dK}cb|){AQCQr2dt<8Fyxf8iu24CxaTajREB59rq*J&IXQGJDIg*VD zg<4kdO(0MPye-Hz;xaE?9C|%IvUFMM7pAoW^k>IIs-zF3a*vsI9+(Z8H9VNS0P8GQ zm;SCyGVv888Syl04SK4pJ%%x+R{qlhna(2tHpzcG z2af!AaIiZ6Tgt-|%gRlidEd%Wr}E7r1iF?HahtQ*(H?NF@%3XjeSG$s}fN?u$KF&>W~2EiCZDKZ8f%llm4JLND3 zs*`3sCnd2O3P6Tz3`(K(Ii(%PLtntO#26>pfNPgRN>y5>f_{`@MB!(UYiP^^kXbTE zSx{hj+qu4V| z&F?ibdF8rgsMr-4cPG}Q#O55MBhO|R%Dg&N>uDg#QmH4*CM+on1rPzPk_=FJi7f)= zzFABl%Ob2@7SVB30@muV%YItPe=<&41|P0@{h zFgeib&QfJTthYU{JZJ)IBNNI!q)H?-A-0#uB;19Fh6WNdh=)F8Rw81Zh-eP`BZ-Mv z=UopXD#{ibBt=|?Fq_V@UT+n*g+^r^tuyA zx##_$kW^b?dKcbfc@EAvWB>yuO@*|@J4QD@my>s z@ni~|&A98+;9V2feMz{RDWj&Md38#vCEG1 z|3|PONuT+EZ+tBE+Xu4$?r!ewI`-dH{+H!E+^k!UHdtIAs|E98@}WHxF9iBrp;Fy&-td z8v5{@`A`lJ5myP6{^hh^bCEz8|Ax%aS4%@l=%LRhJtb{nMv8lO3Bn|Dg^7HPmZBIk z$HQScmo5BsHF8Kuez>s_@XDQ9LwXzJZItO~P8m@!eV|)h*7j_Q6&qm<4a+zHl@wU7tlbH!rrydr z^VfO&@;?=$Ha@b`F<}TINjkG3sLB4bw`<4$+1lJ+$^T1vs`XiR?_1Yu4Y79!(~;Dj zsbG7otG~aMAA7QpTlW}c%ylmKUpu{j^mYSF2J9U(VgATUb*O}wQIhf0lQI14D;$tw z4B1S^JyZ-fMoIROw)}BoYUSk_Dut-?_Kj!YD9_V-5P|}x;b#~FQCA!sTlbEPj+OZm z|JRGBI544C^IJ;>#&9&D07rRPK(hgT2s(CO%rt=RW^1JhOg=OEiJNKuT~^5#YD=XE zD2h-afr|`%G|sq7Z4bQ72Spe|a9xby+0hlaIzD=R0?x03Hhrl$;5BbVEe1bUG)fad z5K4Qku=_do%sT$hv$oD>`~Uy7@c-Mg{r|T1cQ;q(ze{oWL6Q6WpA6fQWNP7NBUHMPPqN#45TP_nA)D z4WyyhZ}sIk%G|^A;92G`)}8ROsd6Ce`HxFpuT(q^%?wd$?0Ol`#p^5KKX%Qme}fZ$^= zOTUFJ6=Hq;wC<^GaI_~}&l;?)-Bt;Fx#7dJ5@(nfzO{->I|bv1zKi zU^3$Lz?(6a#ukbg#hKY4!VH9IJ`A(*2o_1ir*0HtsJmyJ66Tm9Z61H?{;kKZgVWwI zlOSQCpuy8gSqt|>KNQ+NlDSjin5Bf^25QbQDZWxT2{Df^aC2Xpv3V4`Dd!CPU9mj) z!q-@<_$?*$Ij8(%?_{fImZw(!Lu489-`2swmLvb|tn~k-JZ(4&od%|M-mt|EVaOs; z_NJ*6jWI!^DJ%66B2%|?7ZzEP4X~=_@a_hR$o`d_pPitn#QbdC@IpqC=}p^bxJ_e{ zF13yELi0B!=~>$tFEoE+U9!-a}@3HB%oI3S?Ki81fR0Z&CvZR z;{Q#B^QZW5Z+B;VgJH~i;)EL4U&J8^Z$fM+fEmI#ovy8aVw{dp3}3_v4sTL8bK5y8 z$ZrS}yLqj-z=f)x3RG6EulKL`CbH|%cZXKTEef~ppPHt3!V~`R1qg~eYs1jLp}-^z zN>9YiEh|2ncJggZZG=)-cwRX-z?=rGI9(>b_cXFsK!TUjj{x+V#_f= z0VZ*vRCYD(Rr~y^LBJ-dR<4}1c1byY=o_p@t z%JI`j!839^CFJF~Np=ZVCu0pEk=~64QrcykiD}oUCZ}DpnxIC>8h@##Aopx1;#&`6 z;mT=(|KV`>fNl?gWb_?9w!S$6m7)}Hth7K;47yKo*KJVUUF?__T<7Rvk(M{(*&GSv ziVMV)3Do3SXy;hN({^s-8TbRLJGG-Rp?f0pwT{R*Ou;$@-;sANS^UNf5fNfJzqhVH z>50*}&>%=q**U$Cy*#S}{4#^Dh3j3?M5?!Nw zA&Po((Kc5#stsFJ;R{(*p?_Ew;MqA{B@OkdtkJQVl14?Hnyu(*)V65aNL8cquw_L` zPNSltZ@uxjNj^7thAwZ*9az@^oSqb~=P<>&toA!l~NoNpi8p;g4%X6)~m_;Ru_E!&@b`cj3t~rkY8tgxt+dH=X|6p?f_dp2075{TNPct9l`Hn_m-cu8z zysx%4(R={q@5-%YB6F}&7BW%Cjw*4{ikmF`sayX{o_hmHkwkMH12(Pyo!uQL{_ox@ z{@YTX=Jh`k6M#<#ZRztDXVM!*`?Es!D6fJ)kx_yuS8&ofvt|>tQ9=|#ht)!yqa-7& zQkThchd>~^;v{XK>h*sUMz`a9<0H<)y9^d{Fo34>|E+!J{_p1AD*nS#o)&tD7=Jz= z78v5tJn`k=?Nc7nXm1o|<1qb&|5c@J>v_X?MG;Yq|Dm58w5Y4Hnu^*YM{4W(W|B_< zB(!cbJZZi%#s)!Duf0m$E^uajgFH>J*5n-RR2nrNd(N+(@@eM(4<7$v)5-s^y}7ru zz2g7Nc$)dYhxJU$;yu9xO8)G6{RYQp7q0+k_7y<{C@bfg1HC)M2Y$iXcYwKKM8;FM z{)gywq>C@X%d(Tq={4)8C8?U3plmaPjAc zW8Jen48k;$G-(h9n?_^+g;1vXW;o&-e_bKM@sAYAfa5C8@5_^B19uiTS6Kp7S9;oe zjjmF0e|!1bEUtghM;v03WNhoX2)Tn-S;zjU)e{MC%d%GHTe&OwL0Dy2cL*xN0X&K# zG&Zuax%XAr4#onB{|6eYqj8+WDCysW_fIijHWtVa02S<`h0=!rtn(G|6-40(rcsDt zM&w%#SL}>fr(8=wSJ&s4N3Tvk9vvT_zdgGy!Tb*Irv&l)$$ym9uR?r{Zecbh zjH{!okJsnFpPVgLf}KkK6C2C45@3V;x4pk@o&RlbZ*8vZe@l7hm;aQs@!%4mU)(Tb zC2?dMM2;Y6kT1*vLXZgT2qo~7z%nRcgeI_5I6cjpc1>BqBlA>l8s7SK!V5$Eg^isN z^27(yk=g)o315MZr*6fj?yX+HNuouI@i(jq;sx6swXf}OS&kSsC%lbMvNBuM{NKDW5D@m zYk&f0V0p1ycptC*8D3ux^uaTf^1T!l%r-b&xSG4Y4&&mw-y_=zK z#?dXD*Zd?{Ifu1;yT^bVJv8fv=+%#5ui(_P3>IRE6?~2HYGM^KEW>9_HCofOVu1}9%U(GE#Ott^xotch+o6dh+|DUbR{hihRzl>-8{U7hF z_I|vxI{8^`xeZ$`-g&g`7VkX7cH6bDZLU?>J`7?OaNt@6W*{bqqll@sJtrYe8;^5V zgLisQaW5Q&f1)hBWBHN-qic^Qmf#&run40FV*ES2KaJbU8OO&bS63f@KlzW3r!SuX zz>6J8IMYG7Iyt^Pxn{>7E4Q2P^Qo5q#9p)UQ8<7-od5UkjvfDJb8~h7V>!<>@?U8W zUxcj3;T`JX5qt(;o(`OI7yg@Zo}Lrs3xEO=%KK2p)6Q`Y<+ULj<#=UBq~fgZE=&)_ zHWi^!UO>!munqo9a`7H!QE{IW_WJ1LYI|>=eUO*lW~d6lzt9b?#GiiDHtTJm-2oOt zX_X(n`YwlQ;~DrBl4uCj7baTk@r#uGd;onuoVaXN-}s~?tG3VCBw8l1l<=o^Mh8L6 zU$I^Y!B(E_bhNN>yN_*&f1IZc|3?UuBFr!4dD?>Q|6BV9cK(m;t(E@2oJYjx<|7Ma zZlLFYWfqFT-4JGAgklI14CH}oo0!DL+D3@58PqFJqTB2e-@ZMO6%LgsYDu7)V(v!f z(Y*m!gEFv}!&+6uFIEiQWw3C{l(7)B^MBuY^9Yh5ipvvZvA@XePM4p3)iu}na*xxF zr|X*J-#%i>K`mzlOI2?;y)UO7wZ1VQ5>@~TG_nya^sJR!w37d`Y=95KaH zp+^$gp8U!`@WJOo%ylBBKu^B_Uw@$e5Svpw{!fez;N&xbMHZ&VVtqI52TlC{VAIO~ zvAwsuwaWjol*i=%{Q`{uG=~>2ZCB`7E$h3)g3_!`$3MS)dtwvg@UO>EyN12TWT;-f zNefL`p^lVX)6_?rHIgQsM9oG=Dft1^5+xq#iplG=Qb@2>d&Ql44(HCFRr;lTjbk}M(djVI3PT8=O|%@T6;f7#(tnqco|xmh(7J1P(3 zD@xLpc|3&CEgp|pTs1AS?iWv}N|&pHfcK_4a%D}OhCr4cmmn8dkHhL2U9pfcyZNFu zm@3pZo`DNLjmB>eIQ6`{9d8r1%PJgF(n@VJ103_}9QFu@?fAQVkA>=Hs>v0S7{29i-YfI!CT0q^B`zoK(BGWZ&srlO!e)wcEm5Nz!mQ%sVS z(&o1i`&+X>)@7+}?k~z%2I?{yz1HP_p(F#ra}YQ!)(&xnalkc8fMA&1z#brASm#wy5fYqH(GEBlOf_5U2qz_U8*7bH(QScQc8R>wn z>3Xf|%U%yyP7Jn!GO($4J!ZbDHEl1T=OYx`BhF{o8x%u*jp&BGpnyzLHOszh z>~KhHq{XxmCoBdbDVSN7j%d@yXaTfjmU{SMiXr45 zjq$rnNHnC|1=~1SYX13$j<;hry4X?UKxf)(Bswj7vGCz?4w+^$kJ-eu$4JU&y^b8} zBqNN2lKtHP1pO3+^jF6mmzhS!i=mPrGnSHd0E;RSve$9vhE8Rzi>LtWRQl^FNv{Le z2gZxd?cIm&(hVec5N2SDC0L^^IwE4v5eNM}tD8|(JF<1u!eqCKkVc+JzRKgmBZ_dk zDEFc&U0Z?>8h7n#sA4?Q+0t_13G%_mn-D|g@!eL`vR#8Jc~8Y;@OApV1$1HT#)8`z zQL(M(s+VmyIjwrx@{}_{gJ(^O*`~OiVz+b?YV8lz#{S|!n0ul~K(4{0UUhacnNCW# z38wCPw2jHshFms)7SwX1g1@(+OiL;Uiv{R2GD4TbZz|}jGCS8?f$|Ap+_BiuJGsO` zIbQ+$u;?Bx;>zJR_ve8y6xvOTFILw*UPl-S^s#U_3PPhUN;Ae65>+l5#{`>t_ z_a7hLZ+8Fj;o1B6ZuDV|aT{(qJw|x~W9}F`&M_%qI4Vt^E+sE1@HZiehGs)8?xD>~ zSPLAZFmu!Z3=u)&lD_lcS3%qM!US+VSAVI^05g*-t)~^mZWrdWYs-`^W8qa(pw@#| zlxf|FXQaHC*0~thk+Bxp%jve+CVc7Kaw*|y&P9Ei;D{|2;D)wqzjuLsV0_-QGes-` zkXV-QJ#$Xf^z8r4=|0Iye|xsHXlao;DZxPOBF{k|6@Z~DwM4Px{nOZ|-@q~i**r99 z?E2$%(4!H~tV{i{{sh(M|2*5?67s+8>>k+ne>S(aR`)-b@-(0S%kkIqKT1hzF_&^G z+^9hynrz`dt;#m#{}%};lWb5GXwiRyCTn?4D5_6Q%W6Wtzd-RD{?4(dnuxW8(q2*V zJDqc)mG@8X%HiF32HtUx4+t)JG2I!VK28;f>q}QxaUZ5*xKJFk<5K1baruXAofihp zSZF!yi{#K6O4vgg;!qf zNv_=3rtnY`EzaVo<{`%;`KxhyUJM*JG#)97`{QIdWJ#dxY2u*<{fEM8ea2_kGZ1QV z7~vtMgf)wOTQyvRV;k~LvrEvDP!ny91wLlXpZ{XfPMMYNkX@O6A_L($nc4VFH&&}>XM59w(FW$V9xE}M4#i55 z*9_zLlmGD4rwqEeuFA;ffgqE-Rf73qCr6)Z5Gpofdnnu^-F0?=?;}>n_+}4>XOnF_ zkMd`@JioL{*lkJH$te;uyh|4WW+hgkK@!Zg0D{1K2JC|`<+Bx}xMIS24r)Er`W@bP zeDCFedv}fLNcB6s_mRnJXdzUpmQ&a{wX-NHCixUyMp=5VHpQy$KL^Y1`p>TBRX(lu ze?A)TW>o~6^uNtrJOB6g?)EDF?^2#AwjO&HOrZx#E7CO4X81Y$Z=uS3?~>1E`dLbDgpQ1p_QP2fvNFMjxg%}Ky3CwD2M23nI z_;&@%!>BT8cw5hdYW=Fc2ZD}ytIQw5ZQ&K&EQS#9&dD7n$%Fx>S3)%%S$O$rbAq@@ z)+=tAwWOG=y=a;>geR^fnyNQ7*{Z`9`wW@wVi+qjJ;jEkuf4r zuu=cpxBY*2Hdp??%Xy~Q|9#wcQ5HZy$6dM!u-uL;8=$<}umCGyQ-u1duZUJz0v(#J zOo6M%ep>PW8S{S2r-}b>?^*F5w+?n!{vXSErqTa)=CS?hd1VcYpG+-V<8k4nlQldp z7*2HnX0;OHow+T9C34dn1r@!SL%>WnK)lo5A)*|JnNU^L7mMm@=Xuzt75|^p1-ya( zZys#f^8eQM!Rq{fDbEz_a3&9MQAkAbRf+f|A7w%|XQcdRg|6V$3xwCKoTr)xF?00^ zK!A4w5b%SLdN=b@4mM%diRLUneaQ=->Syka&cCwjj54k#aM^yXU_L*0tX}^(8p3#- z!dTqyp8XYo{R=h=oe?m(9{|iqdDd8?5$k6|lAkGXbK)t%EC5&EWkQ9o z+-%P2?tKaSuz*?Qk6kW{=puB+qrhXB_Jf-E+?99hO1k;bup4f1*{+Vf?|p5wBJd2? z^faW~cX;lYg8INFqY;dgS@JlPNGcffl3oFthTc=9f$$-{P|2_~k#APjg znyp)e^}XS!$lJ#S2*k0emn#vIwf82h5-Vx77Kc4*Hyed{;Iv!oiQq$kH>HIc z!s1@vjV2Yl5o>YfZ}6y375^t;lEGr*V^|FET!;TH`2Wu4fqnkJwY9(E|I2t7gTI7i zTx1x~!RD!x=VShS^7JS;k3p?w3;6c!i73a}GyQ||Wdc7F#ioa0L3;X5!HSAlYm9qx zcEqw65(EmE#VnQ$WAOsFC!&Y-9Ny?idsp^Wtl!LUDG#n#O9A{$itvd3HaRkPyKR%{ zGU)?5@;*y+tg`0zDwF1#zS;^(nnW;A{;*|1(T}iTfh)~M*xTxMY^B5ZW~G)q=+ngi z>Gv>;AJ+fNzW=#(uy?S^|GSjO;QwN<7q|roh(EjRpZmPFIt_dC45gnf3vD_qR^pZx@;G5zULC{Y2{GYHmGn1S`R3HS*(`l1FjQNX|(^&uJRp}c@?h+*F19@CI;lR`skbfT9lNH_ki#ExVweeE!l-7*R zrq|n)!=YK7sd(@dGiV=dJ?Cu_32oWgL}oO5p#*SF z!!^s3(Wn7G=V2C~i5atAy>*UBlJ?5d_WecoX~W*@s%P90@>aj-D2W@?Rpb{X=|0iv zR17NoWb`~B#TW+O(OpXj95K?YaoUq28C{M0{p2$UCwFpxMc|8v7)NgTr3#u!qNl}pii0|)!3APk5BK`xG!<)FEP)C%91d8DcNx!lIHi%+lo86E zs}v<9EcxQl-tO2)PI~e?|8WtLp$B($8rrxKxZpmx`6mrhsDhjxUW_W}lk|=9VV=B$ z1xs$I3YPC2@LKV?jpWnWT3YD;RHl4L`|s}l!M<((-QQZ>|6R)C=>K%I7iI*Yz`3!FSQ1oql;Wh~>F%O$OVcdQRO5)B@WRoWVbqxmV?%9=+# z^E)CsA;}%&{b(-|Yb{{8p=aJ8GMv66V(_RIO9zgPzlp4N$ScQ^7V|2KbliNp+)Szy zqoStGc^mcS<`wf#Dmv_3phi1-P~E6WGwM~>lmZm&Pp1}@N)clcwqi7eTBH%v3N>ex z;PyJlm}WJ``(bbtuOcMc^Q%y$qnkd;6)Kg$>xJem=EF~q1ILgo`P?iRiojpfpm(JO zvaoP#(l`VzGpig@ozUXOmAr=_06!;~1Pa;4Ub(7Mjg{H2(LIK#*}O*0^M-qRT-u^r zo0W8Cv{-$rYA7^Cf}M-9NiD5(rGBO1<#)Mx1hex3nF>+>U{sO_DeXkHZ{u6NRG>a*~|q z?1okE?A__h)1!~aM;BL?Tcf_8DMn%!S6FM!zGz$3gT5qK3}JrqX&j~oWagsqHcLL~ zZ#xb5o;=nfA5I@kqtQ4^K8>MpQmJ!K@F3zFmPibUyeg2U0afou`IyknaZHjlA@>0Y z21S?;lL!YOm?SYoKI35&^5{AmX*`lfd9$CEXBf<45cCskhWqy%0s7B0X@)V3js^cX ze8Iws{~wI9T1`+bdkmv-k&t@%6aU=^?%yJpd#S) ze`--K?Ui}`pE{JcZ;q~huLQ)uR>N}otti54Y7JeyJ$+f(4*NJuGpu4)XM@Uu?Qs;V zYP!<_>+lmDYEn}OY+4MIHD1>vcd`j)uI5Ml>(#3QjdLnH=OL#15S@8!3(8Tfv-q`( zS1tuzKoFXCKiCK9YfZ+N+DF+DXgwi=cyUJ{sMSb>rMi3vbPOe=r=2m07 zCX_bJR%^6?TtmRUVTfN{yq!tO806#Y`X;i|4gTGT&0Blo zE1Wwu-+E~>N{AJN(6Q__)OP*&7((26!|5zo9}wXl#}dkKx|S|)*UQg01q^Rno>kYA z%m|vUk<0hK9jR(+{)l9fO&Ali)zTCj@ypB8cPE#0KR){9^!4fW>B$vet8&w=kxq0^ zqNy8xcY1aD%j=VmFHhc`9?M1pDhLOaBGAS&aM}mOILnf307A?)13F5KC5u?X>ze=- zU{Ju2z@qb}z|}<Wo`&`Ym*>e%?9Gt<@wu-kMo1^Lhx+ibdn)Ne!Zeos(@k4 zJkQTBL5v_~VzHQe&p`?a!26|2iK#eyo1r^Eh9LocEI}}Zz?^xgFej2|=#n;_q!8a@ z0!Qv#J3|>QG6Mmw_CH>p9KHN_e)jr5K3<-mi)}gBs$O!AfszC5KBf_{RAV(OpnF$= zy{)pkRfrW8W;bT_>nzsp_Psn!_P=Bl4&W6`VMNdjp?}%aaQ?G>u)S-?|2f!O-Tz(6 zW7z+wZo&p!3*@pGQ=l=8ehPb_)uToGg)#8w{8ooD*Odkh-YjzfVI_40nE#M2>Kdq; z8;64Q!oJK~CwEF)r0r~vy=|zji2ErGwYk{gTb2W)+uYfti z2|^$sE}|lD-QWMO)pTIME6zZW;N77SvCN{Y5xq7ivnVp zk=o>&v_b-PE2mjCI7;urdrb8RIMKq9dQFx-yj2s^TYNPdmH^vC`d9N?w`7)h`0%VV z11lPT1q3le<~%Y;)Bc|(eHh(Gb7X&S5&!w%z~2A2R_A}qd5ryE4fbL-eFg5P*zmR9 zEPAsaB6O=Wy}W=|gsL7vjxf0*VL=R5$Fh{_72szW1t1s_l8b+E;G}ESMS^mqJ@zt+ z&U5~c*rQosC&xf$vRhhQbY-?nz6z%g;5`M?g171%RkY0hZE=rR?rvo-dq#rk>6~hG z+*!71`;L1x1||h{RQNE@PfVWvdMaXymTi=LbY&|@41akuxisNB-4e6a?p3RZauGjr z<`7z15wv++dUcnpxg)Nfg0CP;vKVFrY}?%w{>qgjC6=Lg{ms@x3gZ>@InO;6Y?!a+Nnf}~7_N{S>{-SwdYm*`qvBqL>BwR&bDej$o34(;lz<0TF{ zXj4)U(>536e9nJr6V@CR&Q+Y_akaSo^VT70!{jwlm*^O?SEpU830wiQZU!5(Saq>_ zE?e`tx)mdhN5xF8p>0L<4bKFroZBtux6x_uEU%jB-f6zrK3R9=yhXLiQ89vIKcR!= zpMWl|p0%qAT~Ii5-8iGqzG&WaS^?I$3)OeG!EDG!F0053u+FYKm~YFAaBj0zSMf-c zUlfR-2&KBcf<$?hxx%QPi@Nes@w!0)`LWu)aFC*#FzxljG`$I<+n2nU+Cn929e;E; zMNvIXEN{~6n3trg>;bYspmkDYG#EBI&s?CajcfNkAycGR|{Y0H;}Q4bmt% zM3|J|?!^SpiI8Mq!7%nyj-a0ba8DsBPFo`Zydh&lgY zg&qjU1dT$HP{sJ3x%?1OJ0UE`B|!at>E2Pm5t=}{{zpA<1qqSuFktX=o+eR3Qs%o% zI}YxWG&O3m-dwZIB`hGogcgWG3^8{MQNR+t#rQesqXNLs;V4hxb2{_x(U^Obhv547 zf}#HQjO)bk8weF z7}W0z$^Ef4r=R0#)c^UW{BE8!P)+_HJ3IS!{^$MuRsN@?JTm{2^k4fW#7VTcG*D7~ zwr9~SwwiJc2KP+9>37MlI;UjMAm~e7}UBXY}gvuxcq%g#U zVeAm(IUkC9dsb+Jqz^lfB~_y8@w6~Vb)+{gn<&XfW$z}sRZ5DF&0W9$r+NQJH*n4a zfTsK3+dGc^e|P2oxtzza|6j1dUeuOPVf`G&f6+4DDo%}C+{7flb>OSW3!;1Yx|rac*VLTlxBc*od8`^ z&|r=cR-QA7m@nN~8X2-E&8v41XpJ7QN!$m)yL3W`pS8M?EGt>ygt?3% z=XDX%+N*G*uCaglCjeWUu9|8bn{vKY?R<62E zMi7m?z7@4-s)ZUD48H=`hTYK8x@6q5bjfOe7a|L^Yx zPTHgP()0&CHAW~7q3qo63|)mvYcbn8cop;4Rg-Mhs3eKJiZ2P*v&X9gw&v-&4Nekb z3!sb>h7}DOrE5c?^2|Pdva7n`DM2gR6V$3@f2LLJ9#~cE&$Nm;!L17BM_SyN{#I$@ z8~DL*QvaAwll`v@lk!mazqYn_x3--7Uk9uFA4_=*x$RO8_F_afHFtgraZT&Zq78ux zv?GXB26w8Ft;{k?m?&TS<)-p`9WdW9(jSb>jJ8?_lME9W#&pC=*v}b0AqICMNMe|# zELuu}K|c)#bmKJr?ov2`Y1@F9)W>{{MX?V)8=NE6wUHkcM)QoWCO7IoO>K`KPtA$6Y?C4V8}eY#u=+y9$U(8 z_569tYui`dnGXexXth{)jPoT*`jqiIXsftq>u8h^58;C-9|s`d=mZ_ruX9?Q(mKpy zfh=?GB13r39NLCq7N;-<;SHL=a&dw+b_I}UH=8%N0pEUv^9IDATrC8FQAna82tgha z0*eKCsm!`&T5eXVmME$E!-sda&B#Di-i!@9!aGDV~V2U6d^uSid^hC&VQwX%A z-hV*m7Zau!fiRA#UQanw0Jx)0pUMe$VMe$J$GugUi>U3HR2~>=a*RY`2K$C~tXZx# z9?!#t>OG$AqD zgL6o$3lplQWm0cD3Kk;oWC{rri{nZ{xfs2Z*(CJz^*rD;-@T-n)0f5GHS1kcUiyYr zlsHl5DiB#G=!#wUu-fnVb4InXa@q65&f`aSwmzcbJ8ia)icv_gKLQT3|M83RJguGN zzXE#;XOD+n-DLvz&2&;m&4!z!*b`lN!IpXvd6<=uzYQzB#e1z-v>*savG&&>ANP`s zz?8j9{;{=Zhe=w~TTxS=HzQk-W$Gdk4f3(aarFUX9`jpL#Lqwn1gv|{EgZ3TjdWDp zUY7;XUOi;YUe_O4r(-X5`puzrsu)k}^f7{yK+FjZIm+=_(|56aV62lH;;*^CLSggtPQydF8eOl<@ zfO*A8B@hX?FGc_m&%tC^UB07qH+0Ojpyk{$SQXJ+7JiFi;V((QsA4SWzP}vLm%_~1 zzM$%EC4cPoZ{MD<NDjiN9eB1{5aHI;wM#v2;V`M0G;(C;agITkqYXk9kL9y1dka_go2;Hw$2a6HH*HfkH>LmNkuBJAsJ|H5sw$)M1kJg^bJ}bINyRQKWI*!i4GWbXWaNW^1 za7rg)8*#xZV>n47==v0|O;9@K{*~*~?XtY$8#K;HFTpZKj9N|>ReW@EaP<+sCYy$j za(;8B=%lh^p7ucq#7makga>9|!68O4%tV9>^ALX+Vi0B^#5fsbFb15YK9i@tNE(7# z`QNm$!!SEZ+iY|O#8evx7lbT=XtMwtN@1?}xd;*IiiG@q9W^wYg?t~Y%nlQPM zhN|BaMJv#&p;39SA3ql^C8K08B(&f-=SZ>eCBncS_6aP&h&JZALvNi}NO3a|znMsB zA6rb!QvwZd?_q`CMR&q&-i!Cpwa2-1)P0|1X6;hE+wj1-0Kx>vTr&TuN6{a78x#qTR zNtk(N>p-TM*94C8b3>mMYKe+E8dOKtRiSw*V%VDD3s6BW87FONr{wwhTnSc0%4D!w z8!F9ycC0nYqS`0~dnvjD>#4j?WW4Wihbl`$DuwF1FeA)o@g~V)5c1f4|MLZ_#eAO5 zPOd-xa(edi?x<3`Aj0OPYS^O@gj@ zuw1cCR~i%(9NwhxYX5k~Ec|u+!Gu1|_TCEJa_4W?yQUZvQ>=-)?V<+ZX_f_>5q83t z`YKl^*DSa0lyzQBTj$sFKh91rr>pbw==kILyOYby)0Y)1eBn#HLZW6>gSbGB=A95Y z@=3#H+s&dePMK+s!CUy6(&S{?AHQFmS{V$5c0Q%7_g>GRbvyWTZzgw9+5l!!VA~Gz z_UgOXbIcfR0@1T>#SrEvpT=RzH?_A}@<|TbtYbHIAIDkpiR$gX9%_Pd%{cl6E=`wP zNJ_t{o+kef0*g_S%^LZYKTYvpx3>1|`=5JTtN3qAdCdI3l#6f!vVYq$uIyxP`;4KRn6-cjwxP;s`DgPu%|({WrT8T*Fl*0teerU8g?(U z$ug0w-fGTYAHMLzc8Z$WVt-9i7=Ykc5u)T8y+#9ko}Cm0DtyO&R^+Y99I?}g1Uknw z`Z}$FrOXhU8%bfk^ldk2V$R5(R*aV4Do}!3{w}q89_ne@|Fxs)nL|J{_DS%|1ut9|JMe4fmz@*s6T}eVDx9vLcj#2e6i6&Yz*|T5sKjzEGDox9b~A0v2!mI zW&LC@3iAL27)Avo0SG1$@!ru~xfuoTxFZW6%&AnrEFD!WtR^GssV)7RDKDxV}ir0W^9?d&`V;uQ%A?2pqcNG!)5hVe_3 z5p@@lt#&nUHZUwANH!)ByK_q?9A*>F6Q18h)tjFzC;?D>OHs?;uZjuoaZOSSrD3+U zbh>&{Kl2{kBTKd4>42~0SxALL7Vmi1b)G7@hiTd?-}|dCz@M8q<~FPP2o_Vdg@Ds3gQKa$2VSJ;{7zBc>4v)!+}(CeF&BXeCmvDoc8pr z&aic%vtq9snu7BoXwc5IAU78U>?fZ=uo3t$s<*XOprj!}`3j5K#}&d5^igpa7BRqS zh=<_)MkA_gc}Y=w2RuU=RRMoPm|P>Jp#>oLC5e*)vKX&n>IMr8^>yNo+q$VL)(o(X zTZ8XbJ-td;(;v^9Sk&O$a$?x-Bodr-V41C-vbJ&N1jEejopK&=8g@HiWz|zvGL>3S z%}1+5x$syq*@jh0zBYs0aN~=^P*@r9hn-Z<&v`9C&Lq=%P`<4P{iP~L$_!$!v483Z z`qrk%BF|dy{KZRYv**5TEkrj6;&sloGJ~Wii<7>kSz*E&Jjbb&W^N+=ahhg=G&MpC zQ)*~A+>SLo<}ZL;aZhpgDV0K0n@(AGX4LF;6|!_|VrXvkG9rfX1IH?S9J_!- zmrRJ&h$MYJ({uV>*$CDnJ5|y|V|^~_Wvn7HE;9F8jmYM!rBgmiQ=ZRP1Zl${ zOjD4f7;k6}CUkP~>ULd~DRdOxLV#h0ATR2!7aRZ9M;z4 zsFji*_vLAXSA|Q}@t!$?X0uHveCB9~sYjZ{ z!0lT#`i)q6a*Mi?O?3wqnu_gZjO%u9#q8>|wn3WY*?0!n?K7@%3E`i4mh!7)H;{2P zy1BDV+c}JqeiGGX3tj6&5)EN|RWZS>4tR0)Ud5cs(#mFr7ZY!yeLv0>C|3*u_zL<- zfr-aj>kHpj?iBu8fa-Gva;>+hHhW3Z2MNJqBezZ7E%$8iG^@bO-oxl{NuqMzL0NOy zkSbS4j7geapL;7Ooteb8l5!psFOP1>it5hp3He*Os-KG+!Hkspd7`PRslhdT2~1r| zqmY0ZW`Hv(riL33*&81)PXvX>K6Cw^o`&;(mbavvCVd#)M=9)z99bJ5;b$1N^#^G1 z|J&Nxwevsh>~HR`&i|M380Y_VPyrv}#T@-Nq*SX3P#{le*Z7a`))~O;;i9|&%WL`*Z324k)Q8^$ zs&)Z(!F0|ofWqMXpZ2MN|LaD0*0>Y4xFFWfWnWWTbCBk5cs^zRd(EYw*nKFDbjzW| z_(3hJu-XZlpIQ08$hF*R3uxf~JDUgF7XRPf*<8hcUCLwde=(>JvISHp=l+Q{0M*Gy zRsuz@?x)r(o{f081D_w3l z&$S#DF&OO}=Vll#_rjQy8A6OoL;t^hdm^U)VHM~h!i4)L(O+z*wm{kteS11!2ixLZ z>0iZ=6k%&Q!e7BS&w0e)Duf8he}iER3oP&|UpSFoGwvg=A~9L6R?3A_=6!KbVHy`6 zt6Pquz~qB{e_s&?0Nu;2bZ(;$gQaM!C5RDmpcKu)SMX_!2&{=u>+>6X?44`%EaI6} z{!b@S)41dwQ9Qs6@w0u=36)_|6e zm;c8wr^_LW5{NfGMrjh=4$&CH)9hc|DP+2fzzzI=cYoj3|F?JdSNwk|j|i`Jt#fuT zfEg@UZh?>rzcKSA#rO^t+$RBMcw9gX5(0#~76xHdAdJB{XW4o;V4U!%cZwS~FjIZb z^~x#Nlebuv{F(HDyost6GaVOgH~&dkB=o!K*w6e*q&L3iHD7{_3K-)6^e$lvLkxTN z4Tkt8FW@9WV}4y1q1$l|g2@&SV9)S2>f$_%px&?-7E0r3zy%Jz2GolXGwkR<9;Nv( zJR6U|-loTgwSX+Sv+5EjJ$?=tzAB7%7K0c@#eGhURIJiNM5Bqp#swzqwq^`J>jir; z-|1C9x^lV&9q<+0?C-`ZOP=A0~1>w^O^)xJbQq4xdi`_tOdU z&GoFX^5rnwjPxMZbBm__u9YWn@C57{(Tq?c^|l!u-*ene{r!DqY+eI zdkE;Q(v|QWUr>_pgIaqs7sP;(BU&w z>~M$7N$&|{cc^*%+B0SWVwYZ?P=>@DFx$=Ttlc3QP7x4ch9Hkmu5$T_T zHuf23ipWv6@8MN$0AkbbSn!wQz1Twjk8l16li4yq@~2+@-`?BYv-3Z0Ztku8KbG>; z8aHB?}N^|Tp}Bz;Cy z8H#TfG;RXgYUKFH335Ex*r9BI7B_Yr+G^~?*l}_^)Yw&8D`p)&U5EV1N3iu6YI5%b z4I@Trv7iB@pnm$HYdLU~77HD+wF2UCN~+Urs&$#=1Do!ii_kjEX_L?Mn^UanoJ&5- z2XoDswI5;1v|sI6K3L48X{U&KMb@sPob#;BJdxLvWE2jdyt{Y^Sf%4Mff+faU!GXe z=c)3prNQ3Y|GRu45?+fp6`8GB`=Wx%x-DK-C$r|Z0|4|))$*O2lv<{xHq%`_0l-fF ztS4R8(*wWAp*h4XBdr1k`2Ji zUjSWExYz6PD4g%#gKh?bHIpg<`0xSz+rLp7pn`D3j$faCJbHWm+Y6`gzdsT5qGey7 zzB_rrD8*mXshfgejlLHpVK%Aot!xwAo8h@ix9gPX-Vz2|Y!GCF=ILV?kG2Q~u z9jY$SnHJce^RkEMm(J%r$p-30NBm0q;5`V|B#Hre@d5-F=Vz}1@Bw`N>iPKk{OINB z*(-2Kkpu|_ljQ7-l6{R~{G9St z+8$-zC6f-bm^(AlPopr&O23PB+))z&u*06|nx@+qFG1Vw^?Kkcg^-yk`=|h0n{;7m zEdYS&cd)f7Ui1?=BQoCf$@#A{?GQ>io^Fp2)mFR2WA74gjxJA+UjDL_eL@U+^G+d= zx;#I>UfPCHi=8xj6bO-W=XmfKu=YhCz;6NQ=Gr@h ze%}JdZxsvvw|`p%NK8U9#{Vv0#z-)l?M1N{X}_70z3^%)_VVcL<^1f``LfsxAM_UN zMIiO^==$iFqpOoc5PbRK7$C*J>PY|Fw3HzsU}wf z=ypkwK>T70bh|iDVpxD+?TbZ?Z^6HpniX&5n0DYd+5yl78B+R|CZ}&x`k^ewnwTz@ zo4MLN5W^^fIqO7(vW!Rk#=%T$k{f7OtMNx#jaTQdFPE~T(#g@hoicQe&o57|%#D;C zBhddHqXJ^Ke~Q8X&2R`WXA$ZrC2;$6ZVv9!gC|aJ;b(UgfqlwT%@4eWfv>D z-7)4o&_nxg!J+vFiyow!JcKXio=4R}pz@oaV2G-|QSoh7Y zN6eA<^4vYJoxOW#p6;D{x>sW5q>-sVcQw}2OO!ztjId%+)vDMo72K;2J+_l+ud%pS z$$l8uXV~lbMt{lk^Y%oXQI7I8#2i;iuy7Ip;y@k0CMjp3_w4%QmoKd5w{IVUC(@8% z)>Xtt8F!_AU;0vipgqqA9}`Tsi+j+0%N?yTi*EqBvGCw#e+*40Y-Ot0d%|`~L1YWl zw5r{Qb3R@@kN&jq{}$H$883e}-~Zg-+1t1Lzqbx{R`)-b^051#-`VX?>7ZP9_0#Xf zJm0-f^Ni~|zw~J$+iiQ}6O`cyew>S;@_e!Sj;7tM7Ql?d$_Kt@x|j~Q@Y?jD{ms>3 ztDCEaPec8+)t#Nq{Xjw1%FDZVdU^aQt-6IO7rXek#r;#OhVSO-xJWaEaaxPRKQT^6 zD26ZM1XD)xz&Lqt!{SdVPb=WN6gwsGH}_Zn_qEdkJLz5obo%+_FD`suZPpg*Fa64z zi@Nb^z*EzG)|<6{XqRG{ONeUO&jM4skUVUCr`89fyp22`oY}4oS3#QX&aeedzwE1+ z&n$o>*ATacIR}{qQ1!jxDFCpAE1~eUJu@iD*4K@t{QcZ$w)ar?IKV5koGutr+P z@A|)i>`$)$i;KC7(f3|FGQS^V^>9}71XU>#f1Atf26_9Jy#0vLQ_lQSA z)`9v=3nsueYJ4jcEW-k~B(Q5V0Y}j+PEu?YCn>gzH|W6vuZ8KsIy^VgwhUc3M*6lGILJ?D`4R&KCL~ zyWKjw_SYQ$cjsW&*8g^QSNh*lp6^lr<6*_>v_D_qvH5gA{X+bbG`|*VT6}ZLlmN{! zk$0W_Ux}VyDN)05N{3j60m-e)f|1nC7dBp$5{Ga>#o3{MFvw5(R|CjN6kMcji zm{=qJdqObIC;e;p4=aU#T4r(LzYcBMqaO`h3*xembPSppTwGyOss(ysp%@sqI~&em zY>G|OTzPWRro~0)`Y3Oa*NgLi|Ht3`Sw0#Pc8rVEIMZ-1_LlT<&oiux$j!n!tFS0p zy#&VTq)X}w=~gnN4rwM)-2pI*q;3Eaq@G^3)}eft;;^xdMAB6`T1|rQ!o^lbt@))^ zW7}Dd&{}fx$C6pS@*m9N93>gq_!!1<0WpSnj`RzpY#CU@) zPy;?s?oT;?dJ38+<)=*ISe5ycbGb!i`V=KGEG9_=xg=U28o<{9%X?<#WS*9>QcI5s zKNGrNr>7SNbK&t8`0SHr%j-_+O)n~J7`Qlao~8GIZuI{jd;i|t zHjXR~!@s}tDNsC49V;i6Enm;N-n{#GoMhH#Cy6W0&eVCb{-t0NvaqH|hM?qlC;9GA z;Y!?ilPD#g5vyimk+?J(K%=|Sml%PIOMnR=vy2{WC<5Uu&rwpu%-5Bzl^EZc3RE-s zXythHQHUh15Pal7UOxvnvjW_v12+W&u=>Hq$ro&R%mGCJAc(EoKjHvPY(6W$B$XG`a?(tQDZ&oqCl2(!yPEz&UM z_FmgDCIy8f3%FP({wbsD|L#O8p`dXl6L``qn_@U+SIhEMNewaq5^GP4P4cm~ae4#e z;TXp84Gix@fEdc(GNj7Ul!t^UK`FPa1Y`%#`Prj>(<6k>MPx_6DDy{a@E0(@MFm}= z+LfnXKu<8O!fd=^vJB8FyOB2B!;m&*rZ_0UdI7fGY}5k_t)46xqB7lSTP~)lPx9xY zj6jq8ceH2Af1|ykCvB`>Zfybnfz&_>H&kCY>DMzIkG{}AG!rt#o$nnR$Nz(Qt_BkZu3eN*}>2F0_*%yQa)nhaa<0ktDoK+0qBjkQyn zpF=XPIM_C2G0J@eHRT5bS2iqVDtB6S!OCn&6Rs#1(n_?dfTdc<)GJR?QfPp=5^gQ@ znwV=e)I!qLfxsD@F4H%yzd)D6;vrjV%&L*P&bMd*ow1B2jI$&KEO2P>lu`+xI0G-h zyul@wTnV;VZE1oib556-v*7-f;sgZGL7@8eLRG)&=yuyqbGIr-!o}seMiUaxz8zj-Y$vD!H#Sz=PpdwqeyFb5Fg`l)T!Z@wN({7$WC|a7v4*9IJ~s@;mL9xoxdM|W zGq}k5u0n=y(Ds0xA?s{o-5gtRi&WtbyDN|}j9Bb$eo(q>bH`C@ja>tr_-4GC@%Dmu z3k!4)AC?DAG}IleKQnXv2p%v0&r+RS&f=I`q3?d;xd-@}-@E_!{?Vc1|9!B3yy5@X z@o>JL5!flrdSd&n^)oD&PZQJ6)q{bhMOi=v_yjN+fmhLWfHrJxgn+v7v=#vx6o;kX z^DQPt{&1yCml?tgv;0{xp=aLB@gYjWG(y}jr=Z6o9pe2Yjg>jLSx&dbhqM{P59ahK z34|_7J0dCeSYizBN}y)OUr@OUl?A^F2)yGoMp$u3MBR$ zv)-d(mh(+y;T96`KSWYR|5p79ij?4Giy4!d;9VH~48 z0Ko;HkN^aCh*B>(k}JMXIfpwK=sHgk7Qu>Tg}!8RIKD)o!bXA;LWCmS97EF_Ygh?* zq*|RS?mh!Q%?dEaIVnImLE#;($E{qE)E4*d{8Tbu>37jKPijCZ~B~9W7FalJ% z!Gx!Ow~u87*$c2;)7@9v2mxQ272s=nJe%@IIgS^u2xPS-yR=%+&Yap)+^Fr`Gn*V^ zg{;Nbm@Z*)5VZwN1ueRA(HBgLpaN$1;FQ*}Z8$z&)ModZ89q5iy^1)WnW!g>4!>}4w3 zOr|g|H!5iief?b4&ZfZEx#Xj9K_v1$=F5ybcPHJp5Rd@t9I|cqThf#*i~05J_ASo@ zRL^y0*W$1 z7cKT)op_RFo9I?J^B9elb!*gu9q0->|Jbw(6`5RvULfp&EW6hmcexzx6LW*BMOC@U zE4Ozusa_1B3WpB0ZiPrD-lOQM{?yC=%ia6Rr(XUa9gPlL{r|@Qe?5;-5c9*Nr`um4_j_)A%d@r94RBlg zF92+J5jisczTE|`2mGE@7H#zbE$(A27mTjLU9}U)6lTl#fK;lZMM1|~wMt77qr}F@ z_HCgzG%`oM*q|BHiN3&)$1Fg!dwuv3V?<@24WpD-(a*uwykVR>w(Q2Zqq!qwbRE=C zXQm;K-W!0eyV@HB|C&=iuyfY|c2Tfuqd08cl`CyNsB@&Pxi9zbG_kkOV@Swb=b8_P ziO(X>sbsOW2IolI2#Ror6ls=GUc0SmXZOO;MCaiKfsbW_*UvdE#suVuGWsY2<22_^ zZV8ORj3B?@S7+~G`(+WIiHQre<%C5#g&A>O+gKa5#w8xS@s71MMcZvfxp;TY79|sV z3%eMSXq*hSM5mq6$0|2@ux!aJt!$Z!4y#t=_5_m49F6f86*WBIEp$IAG!W&|q^wiH zFV#Pa=H1O~_U7Bc9ze;8Atg(Is=Q2t(>_5I&4Q1oT>#S|W3Hu>VFrr{sc<9}Umc>_ z7GhSr{cdx+t2-|{E<)ulVqo$uq){eHlIWMg zz@r-OJ{N2rbjsu*NvyjLDrfz+;9?A50b&G6!RDG<^y36rW zYt5>)M6?guC78CV1>T-)E&-0B+CFwY)Xl3Q=CX%eXH?c@}adsHo$NG+Ydf4+5NOqV;=~ zY5x;LA$uuq$NE*wiaWPoH3jDu>%4<@)YHa}o@7kV#KwZt>5g-ZX7G`nzTlaKbRFsh zl2_#|Zu!|8|4snJ)~2)rk?(eTH|PQ84Y8%g7X8}gJD7kpnDlU_P7V)yY(RdmwE)o% zrV`07Sk5PheLPDdy{ig)Z5d-_0ts_8l{ErUJ{W-QEo;@-q+$0NcujXGmZ|BOiCd0f z^q|={$d(=ZX)5<=ORAaUdnb3hY%+ui-R=_PO5V;SXIh^=6n0|(nHlEi8P1W(v|FQp z&Jq4#&%B`mD5rLtb36)AUv!!hFK2qkvIB`DO0qpjs-$G!`(|tNw0Uape{oWvTM>3= z_Y*zs-oOOjqK=l}P5xi|2X_9~{o}n&{NJ@atqyx_9SpTq(0}j?t#Mln*4LsAgniqi zuTnd}Ei2Q=9#xE1UI?RhKFlTGQO0Y~hNHVBGp2oKD!Rexu3*@Au;Ad0K{*`0$;x-{ zEz9v77HH=VJ?!M7*iM$lIHZioS$q#4NZ?~!9n!z(Lefy%dPViOWY`he9>bN&0%!y< ztLWQpe4*ITU{%$EdmP;&_cFug?MSSr+1Fs^@i9lybj=enHt#&67h z=^RQtl>QO&V&o~=WquN@v+XT$>t5t|THa+h88KZ-iVzJt>MYL!`xf|jBZo&# zJ?qZ)cj;!)SkFz3!N~=wcU+mG0_E*#WNB1ko?XJGMQWkFv!zcveo6)n;K*yj01PXx2bVy2mPR{71zIS< zwF$e<`7J-owViHtCdzUbar;!$#}eTJ;jl`=Uh}Yy_1$T-l5*vgA#)svRmI34tRKn9)K9L z=&ZMK*IwQAssr`PL!DKi-38|-tqGr33(3vEhTZMIyb$UAwzdnaCZ2vZYSUKrjgvcD z`78D{cB9d@?pGBc^@0&?N7u}KW#yIN#z|J>jB|E}rjd}N7L(7*au zG+cX#$uc|sfFGI;RaXqlT1u5FU(~2j{5G?wHedQDrkZTZx&72dtcWI-U8l%t<^fUQhOE79WAuv*l? zZEQ>{T+^f%SB-6ZYt;zGyU)No8Map7ZJWb4aK_Box;PDC?AQfvwMCQ<^^JA?a0?}} z1e?{?VdO7tNR7J>Ys1=8(zt)^3eHNi)(2`2$aX&HX79I?DIjg$p-BzehI&g|pl-E}vG=kP>5O5swV!fbUxr#$350wlFd^ zkP)Uy2n+LVbrb&SmB7vj%8kjaoUZ9o;MKL_hwu%&Lx9Y31nv=t(xl)~0HRsufs%3e z5klFk&ofF?rZZCfBf+1IRWPuAwd3*6)9DRM<}J6czJ8>4L^R7{W*I^}2KIWVP1hCm z7Tt4{pfLb4<5yg&DaAF!$Avwd^Vn-MTN@)b{EHcb|bvI!g@0J17FPtPY_|V-OoPRLu>^=kMEI%25fK1uF6kl8Huwjlah0JqukH9@l3QtIK zcZr%#JMMQgni+R?&@R==fpqtK8mIXb7De-xk<)-9j;&h4`&P$n5cn1|1SOU+0k?RL z5+2l@1?6?uFm1PTX6$ZXR2Q#WlPtcx7pNkC07VMMIEeuEfyVR{M*j|U<8+pI*mw)O z+)dwI0A58fi>Akywi>KgEliQe`?tT=A2KBb+;OY)Wd=9_(^*{LEJh{D$Pm2xLXR9= z#1DWlr~C)-QGLG-N%m6Os!doNJ%nh_C=h&zX(m&}-C&s)Sy+VKCB7nO{kFz3A71kL6b{@yG$ zpdGWAA>(PWL+l0*I2|vknxx+*OiZhlJ_}+(Yq2{frd}e}2@|#IiY9c} zm3zX8-E4QnIDmc6q+c3&_wDwWoAteMuK6P_sNo2^H-4)jB0Q zAx!9400l9BZs)YCR~@Q8xh~)6b_o6m6sURs|H4x4t}g!f-e~{W+W(`I~U(3U` z4WHumY<=F>Lc3m8rF(6H;^~k~c3I@_Q&8Kzo}7aHEjBN0V<$&*OmLd8Hk6I0 z1)pbWfoO5p2$|)XZ{IgpjSl^7NrPq+4rZ(DEk8$j2{v~OI?J+O`P+K1x$k$hbMs(! zCL{atN(&-2=Z*P?(TUp1=^lbja*CBb4fG#<;bEmOk^<#p7@|eE!3O$&xW8w||2Q~4 z*u?)>%Oe7gy%O^b)I>Khg;^S1Whm_BRB#sAWf~c*mM41z?SCS&7_o##<<9{lL*h;s z^Q@MYNh7pO6SOScxh?O?M6E21x*S`LW9!?D4%1F9k_dfq%`J38S6bq^DDKUr z7s435vZ2?6a&g_Oh4(*;V~Rt93IMsjoFa_%f89sj^LVhC_lBcH}G7@^JY$8@MeBtCRaOw z4u%848C~f(ykq^vkQB@$1Eky%gCV%8A3m?Y&^p>Yn$2@#4>3MW0M^<~$NW7aQWHoI zj_3L+^yfmyV<30bHcn*k18Z%$SEc&u@hnRIp%PhM$1vwo$-EO+>e9e-c$$X(Kn4YJ zmz%rVDuOb5_6(ncdyz4?9OrY2U#|3EG(kVeQ+bGi5XLcIjM|ZHg%i|~_wC!0yZAihT8`ERk(nyH8*iljWJ-S6--oPT9fZ+drgggJ<+xg4&_V&(S<=;Dh9XykN z5B|DkTJvwmi2j!tFOLrfbzx|q60ifx`P1!$nZ?}@yqOW1^M%4mhrn8hPQcaq*)OjE zNx?m0Xdrhu`8O$)m4aUFD)XuK~lFAU7k@h40vU3f1J~nQJ&h9^B zo^Sws$Y<#7*%cp2-Ly0r0Gry)R#;~^{|7-ik=E!GIWvMdG&?HoYB@$e4zBB(K&EiR z$t?jm5&9NBBR~J+!qmDpBTnoI=EK<%ed(+qIAR)M4)9r)k&a7y%cM3N2I~*|H1L0! zaa*+_`@aL*{%3#h|E=R`VgJ|XRc~h9es;A2vg_}#tKK*kb~rgqqBF`Jyq!(K zk!}UEpxRmn> zcEAUD1Ic6?oB#-T7!|fEl@BSww+UaHLJYFI|Mu;P5rCDQ3j%`8Ip91E^q(tcmm&Tw z@_+4}?Ai2x|6pVPy_QGl|LH6f0D0PqbZn{rm!kVEbo*OUo6mad^O|tWxEO4g;?(Ix zBl!X^^gt1RY9IAGQ(8j*-9hO|5K4Yg{aAKT?CY7?k!|9~b%zFghUJoqUp%z5C^87k zogJ)L*IcQC;!X!u&fV4>`1Xy_TsIoAV#ZC&9c{d(<&O4Y>#ovbr?nEur(kubXoZ+M zv)1C`=+YN}i!=RepNQL>oqxQi;ry2o=YLN0V&-BO4I!z_%J~%z41djlPrKRT$T48 z_i26?r?8Wmzdg3DVyaB_G}L}Ng_NW^u5JKrGBjG~2k*-|Kihc^S;S->nuJW=vlkclQVdW)tM=z~N7ol;X zOdhocHC8lpO;IV3uoY7rBgnwnDS)~1j=~Vwe8j8RVFkjy?Z&)uJr94>gNY%{JDECBlDUi zRgnU&>tl5<(`eX&_ir9l-*;82H#0=5@&!w9fnkjQjmmVd0XO0bK$?}OdU@$%1j;;JwbKyaCY^vt=u59*u z`NdV!e_=ei^zBb0{XgCt+4n!kCx?3*`oE6Hp#SG`%9kbfYVAB)%C3!|Z!(Uj@D{zh z`4^+&c{=?ck|togMunm_BCC0&@_Tm9Q*1D)TLsFeIN{P>XHc}tivjZO+mjuj6iBwE zJHPf|<7MBqw8<>prNrSdM_Ed6k>(HD%L3kN4P4IR_%e-g$ip3##WMAQmoAD22biLG z&{Cc7LzfjMMT8TlID6}_pe~(S;g`OINo}@@%5B6GeGhoIqM=iDmJPvIkl-XjNdXRB z=j^V4!u+;{F1HCv+R7pz>Wg?dMTF4#hQ&loX!-F?`HhFB>fWrrQrw2i1y$8s>zhVU!7%`8cdJU;Jqtn+2`E5n*d$jI_LD4%CVd{MGN! zLjZzuz`?*u^(a!C$)Q_mY2OlPEciBNW)W)IFNoXC(eLts18n(-`-E%O@3 zV3oOIIE%|M59K|-07gd!i zGXMREQ_Nmd3+sRzHnxYm-D_c>yy0iNKh^wSw6MRo{WS1@M~8d1|K}0?XT$%k;W6%i zUcS8oLd^-22=LgX%d&(~MFj81zy(Ih3S3Szj^Wc6AUKa_q(J#=oRh)~t;A7(`l3_; zEqKlE4OFDv!$%1bQ*Q8d0?5+yrP76_wrR11jHbodYMO3+&+kM@l1JClqw=@8@Niyz z$#~px*1tA_5~OYB0VIA(tPaenAA?Csinl!GF2Do`{!>K!oe>1|CG{IFCV%4i|Dx0G;{YE_>C?o0iTGRU!;HziDd=4Ll1=cisb0?4CgYPmLVL8+8ht2_$2-7 z(1V6zCd#0EPUS5S5CrpZg6N-o3PR=a!nlw5Nn zpd(t0|05mC^)PU{sdJ+v4DA70{#iX__-H{RDhGxYiM=b#`r=)ryXMC}c0Rx~ER;eR0FOBmE|ahEqwa z3Gv`Y;js=e$BQB6*g%ZzsWVn&#dV=XE;Uv`{HW}k_O1*%7z|ux;J~4EG@Mheq5Q;t zo_Yr1afh{s(|QwbWX1BSmj5_wA?z7{!O7ji;$Wly&+)OX|35n1#Q#~#W5|E*lrJm% zxh+0gSzC}aN1gzcE+l67^Q}-J{)>?Xd%CE=1d%=;kYNxl&!+GQBHJ0rWH=#Q!0-FQ%HMeVko$Sp%dA_^3g6Jq!l*0+Q^NR!ThS;hHGfS{i;G9}Y77frQ5pi?1_NRO5&;N_d^B(R1o8-TPlOx;z z>tJtl|F@RMJ^wE*&-*z0FD}m?^|{aB@B7Rb4XFY>jYM z*Qt@n^b(ts%y{bQzqtEbt^7ASJaF%MyP+5?}k&(|?u* zZ`JXCM#nDwKiTB}SJEwIuU~*7pP@G7 zdL^d}17cv`)3m8%-J?_usqUI$MJH0lnCeRRH5jAn3eK;3`k%ll%ly6E5zs{c_xGIp z|AP(vU(e&w|G+8ggZy(J&qqxE`2bcy{-tkk5VUeUQB@p@FI;syB>vv=HrCF`*b~lM zIP%Iy>rx6E9dEesALOZ~|0;Ig6$*1ytSpLFmG zCdIOcfwhnx?U~?=qwk{uPjAcSy_wyFF;v3Cc8KyUT!+P9TddONnM-Ed3iD7G zU92|V#DIh4hRKj%%Ge(UXUv@%3z*-cf(JG|i({6;hw{i)Fay0YyNd0VVt)#zzhUc0_pAxvyMt8Fuettam1kI&}Roc{?f z&U=Xg)^PrxjE?Q|e>B?Ue_hX`ZXS9J0_IyekN4E~4yN~`U+;yxoilWSfIN@_O#^n? zcw<%RPe9vgUzQXwj@uTWWw$wu5HD^-6=NyGbzgZ2vjC^;Ni|~DpQ8L0MdtW@g0O`p zmp-=%Z02<4aS3`1W0!B}P&(9$t!X7RNCwH-sv z7g9`hEVCxE$QeFx8ls_^=h@1lIr%+Z+V&!n`a$cO!u2C}Ffm(47{LiWun>;5kYVDSgZoRc2Rf&XTWdD@QQG zeKkhe%3_w)HuWgt{pmmo8LLQz=h9eTU^h^t4QA`r28{BL7Kg*awpeF+Jpt5)S6h!0 zLMahiUF&fMTi?RzcbGC8?FG5ujE&KZ&5BeGRk1}*Sewr<`&NzzE=np*As|H;9~zW+ZQZSMcq@)-9& zZ_@|?rQ}{x3#6}~N2~oY2hq3IhlrNRIs$#_Losz8B^Vv!0CWliuw?%#TXd6Jh7@Ub z7RS0s%EC(80#)!5qG_63A$l}^`}QPYs)#R`6gasJPKEY^_04Z5T%PCdIoO&rrBXQr zucBdVZcFl_!QX!eTX*2wH|5yBHSZX>jl;)71T1jOR?~kvZ>IRMn)qL%!=rsC|Htv+ z=Kg;zk3s)0(+J2p2V&BfJqDUHay^cdz!^u+hk>LN76G@qrJxvOfU8&O#QBw~p8D67 zk#D;nI$H#Va-p2^d)QL_*m5ZS94}Vu_6eh)a4JVNNeEE;XGquWoBQ(b$VmcY^p5+LP_Q3ug*grJ#y7IzjQN*t?N)vO(p1AJo zCCUjV1xiAs-R$tVpi`K!0KMD{CSXhLCC&p7MCpBU5A*2k@*-fG!GEz8X+%NZVkb+? zm#WVOUYxF334yrI(cWkmIyTFr0lu=UoyMtjK=m~u^xW1!wW}Q;LH1qni0d7#p}vl!hj9vE}XiAdnWrBjz$xazLkDth%1A9r@EeJPqb zW%s~)1Md(ZvmAjWWkIw+P)u-gO9B?&oG}d*vGeJMYB&m(44^--_UZ4I6KP8b{GM2g z_bx)%wCvp<3233-MR0TpgPM#j(+9MEo%~+LRO@a%&>=0F;3>{^{cN`+>o&)vE@--| zWyKBf0GMY2#ikAC5XNzOf0^Ssj?pc8MM4TBQk_hq;~N( z<8+|R9{6~U6HxwMy(&XxRh-z zEf|4gwY3Gl*;f!s^ARf)R#_P z@+p2Z5O)kdrIcIhob3}&j;)ph*6UXf-k*x;EWU>iBmluXcJ{x)WD1LLQlDz6VF;~K zFxe#6HcGGIIdvUQ;T^h2ig)?jG_9EPvN^p|o}s7#bCznZ z{^a}i?TP!=iCC-!D(*6{VND!kao^(U9DKZf;;Z5gM^G)=4FB`AkuC8I%UGX7kBwu~ z4x&}A0Zzb20mgMuLGR42c)aUweX%-Cor&41%l%`e@3GSSaLB3(*UYAv26qZ=(rHGs zS%_x-tqcjW+K>!ueQNIia-1@jEQW-<6@efY>Z8g2@rV^npsYfo|Fef~x`+XgrI#q2rFNyWFNLU!q3!>y1HC_>7;I+=mgj$7Wn31Pg@U8b$f-OBB2xDqv6dHbs`Rn0y&yYB`$ zxYh3o@gbSx2*dT*;)38dn{luFfcHx~*}ctX!N6ju&}RjjW8AU(3`~k5Bd5E&x44+h zZdfa{R07HF6h~2v?qQC0Z{qZ3ckgB#?j4PekHdrUUyg1@@a8athwv}Qqr>CBjK-tG zgS~_3W*_a6Jk%;j#@|^yyTu9Fy_?;jJV6B_pJJTMzU9IF}H?WrT%AhaCm6ze~vc(KkIo6{_jdoc`v-5v49>e z<7bVc?-Ncnzj~FwF%rvERY9>nb$_qm7?n1sQTwNc{-d1Pdxl{;ONwO^R%dddOkP$=bPtIJ;EP+M&_y2y!n zeW8J0QHD?M3jm{NWWL*3RdDK>!7Lb~xkCS{(CKtLH|FLQx4di13u|M%=)qi zLG6-yv91NSvGw9>ITC8OS-HpUbL!Qq_I2| z=|U`Vrk|BAdUUJuS6?tGNB{yB*Tjw?Z(GbOY?f`=k#nj{#r4xhR_57(?iqiDz zg|~Opp!h@%+18J#9o&H4Jv|AxHo5u%nNVZ!88Y3BlrH5^!uaA zOuBj2@zlwGSsJIe4_8@^V04})q{tyo3Ie){gN^n-hqnLE{{G3v{&OvlA^%lR`SRjm zMaz#^IIJ8|-=bouO~hJ6#i~_cNEbR(tIQkHFF0Hr!z{~UrTc7?%WSoCY}xjp4#h%v z<3r-S&J=#RxWp2rMueV|WvzQ)QcdmOR|U2gU_(y!@T=Jj~mKt$Z>} z^V{7VhIhde0AhH9VrkIA!&R|ZX}{3-B7T(^Tjlr-62%j0IBoMD^ za%>J*wABbD1vusmOp-?EY&^yZE*@k+vcIKCnu~8A*le3$mPTahD>KCD?j$7zvugV@ z;?ieM#J6c^?m`jD^4-gKr)9=ZdPF=2Bn9^fgfIaxiU3KcEC4Bv_$3p}(^(P$1jz%X z#8Y^Oz!Z}L-XSsszohppB$27c8G^5%NdFg3WAGIuVw8K2G57wD@Kp1E^E94K(XzV# z|I?iRXaC^n#M1vCA0BV?|7&>+{_j^l<;yaAV&yzq)=t6SGb3jjX#YWznIvWg6S1UL znY2U)&yxh*0lp@wu-=l9RXp+KE+qO4`N%i z3y*wZ#SCXfnxTA(3DMYZU>P!7+44&J+`z0)-1H#!7-)sdvVzB?yP<~1TE77UW)U+H zORZ73Yer8{@f?H`6y8xV1s+wORc7E-bC~8nbQua=C*e&C%XuqAu}(0wP{n3DDi#l= z2(Fr1Y9?y{alHa8thx%%ic~x-gMIt1TFiW{;lF>HZR`KDICf`V8uc$_|KBR7j|DaD zziQcWXA~#JkEr~T6CAqt1<|R@(k?Fz>1#?w%_*U8%S%Up(2U_2#_M4H zrgJwJNE=RK$Y$dGZ|{6(Sf@x1`e9=%I*~}VXPR3+Oa9Im$fE1IE;3Z)dZL9&>GKJ%kRIO}h4N%MMbxVOP8(9^+ zZl1iBu6)0Diq+(vp?!(9e(}pAvl@)WP@5C>ArXGYLtV(?7Y9lFAh<9XhKP_iX@m&l z$h1B%kv12_Bqa#&$e4PFfA;1#TujbXE1K$`9=Mj4zvNl9n3rY)maWy4K~^6XY#t7^ zVN@?HwM;4(m`A{-Yi^vU)BlCj_$<$vW*b;WH4{kQ|Mt#K`)VjBrc4XLN3&xynp7~H zg5W)Z(Qi2}(7VK&B2siy!I|IW2;Nojy_Fk*a=D^eFI4tLj2;2i2Ea1b`dH2h6N{)o zMnxlIl-E2L(~L+L*N>`$>%iH@TDH^byQ0R6rvcc$Ex`7+UNc8oj6+CDR(v$@W~sC2 z9E_sjJx`Y)>Z^v7)f=VdZaV{hH z;>280MGDXtOp2fySl6suTRCoIpSqmLwULGfJ`lXiTHwWIfqyqc0_z$>StYQi!BE`0 z?&eEP!ADtJDe7ql)rxvwzg0;vZB)GQRMQXG_OI63p7yCL6xq_|lu2c4!!D6y>x3rOpe#NUD<$}TDcHU_L)`6-;n<>jM z$lOBpBHl)(>*;Bh|F{}-88fgZ`~Tz7zU}{gGCJJIf9rS*`HxRE*p_#CgMQ_}N`?Ak z69VNxdX@mUB;G#=Rk_Vx>4%U})?hk}FD~a{d~U^h*wTe;VIiSZR^}op$7HoUY7NOJ zjH+)wQB?Bj6G$#|G{#>*up5-^d2_W_FhwQcMGAPHJjNM7$`jqgJOU(!WCA|!wi}xA z?wG**B`d4@BNWAhFFV;*<+Ka^J#CGt@bzXLm3fH{#S896Xuivm>C>764d`Q}Z3g}eBqvW3-z$*}BG zsH6?<~VfG2N{N8s^>fT|7+Q z2Y3EA)hIVNI67oxvIflQ8Ajp1SwCf%SXsYxtHn)vzb%tTMLQgUiU>!L?t4hd_+GbT zxS#%a-Y6^m>ajP9CY?1i`xwuEn0ixG4Y5+^nZxY^fr&^mlwWN#@en@@qfm%&qZ?|X zX;w3z==suYDpp6YIGlfjqLnlmsz^2qSPF$gZ#I3wmYoTsXQQhag;W-y*+1nsM3*0j z88%%x4glX@ue--QfSzH%XXHvHi0I=NBgB8BH)j9|9&OVQ-m-Q50@q4+M)b%FawISJ zkINrd{wtqe&r?_1eQ2UB60C1tHzX^?H&@hKp8+0#;SQ&ptL=J*D4X30f;|`mD%f@@ zzFx#uFFLyGzKM%V@_BLajnyV7LA+a-S8@b8)2d8Zej+g`rvBe5eFp)|unkG+GYiR9eXdN~s>PD}s2hZdYV7P;rrwE!*``tbno=WcJ0K8!}p zvOx9~??NAyg2`m-V=Tk<-kHk6@KGeSRY!jZA%%VqW`_!s@aYvywB1 z`T}fJ2(UOl(P86fZCHXCkOOJR0~s-H4eZjyc^PT6!{JYF(kdFRS=bO4_{PZ@{^)L+ zoKzF#ospx|GULl8qo(fgDyHUkMlZOu?C`t!>!RLH=%890(E7Jq z`s;rnQ{EO|uEjvnHF^V)glFcV0*5<{Z46)d$_Ys~OP=!f2y1smvT5n2RfMzp1>E9s zuJ2lGGHw^wq3AC___Bd_Y$%HalP$%Dx%itv(Q!v*rUHxjqxSOBTeWkm^q4_RN~Aj@ z=Fl(xq1b8J$v$B$Mt&T+hySGM}@7`Mv7vxe{-s!;diYsuFt_1FQxr@ zCyQ22CY5Z9=1L>0^?V2eWE}RGckX?N6q?Zjx5t2BjpbgCOakch{#IdhIzz6$Uq9w= zk5ifY(IE9$kv?BeV+Jmfn`Ce+PcM|I)-1Fn)hyG6f3(ST@nrq3A}sSN&U>Iq?Cn%- zuP{8g#9^5c6Yp_kaWRPDHf&ZbW5MyM9j~u-021O~6(HgRZo?CQZvQ9gRF+>oIx`$RHLLg^j7WiH!%vcVEzWp1|qbK1<2#Br=~ z)LM%Pp)^|Yf$3Ha^_*4*NwRNnKt2~aJ&^`i@UgVn>!_lGy!Cp#;Qo2x-h|Sns1@e8 zuL5UmCp=rwM5-UjXR@DmB#8Eyt(O4(SYXfX>BRfHOPvJTeY9K82{)ed<^gd5nN9o8qhMq1KRFWLOi9qnoyNLHD7&gbdYXm*<_ zv!#t;mv#X#8Oh?3Fh4;Qslu8xm>nYQg&>cGkehvzPnCBsArvipo}GQ|c56#~IaDb) z;j-1@h=(s$TUwv?qa$&z4yggQ231O3$Qn^FQD+MO3PSl-Jy;tnu1_~a7X-!o+M$+v zg|=xuldUvYcP}PVRb99i&Skt)CpY-RSepRsCfM9TM4g#n9(+t@{lSqUiip52e~e?f z;iAbRn<_=^%A8kjQc^uML21S0)~I0j<9+wO!lp?rOIbaT-wp3E2vUQ+%nL8Bam|XvQGiRnIFI*Yz2v{rR3!TiokRgw*VpWr+)KIKU z0J99u#EnSjbiIR2g3-2Lz^aH8j-5oDf7m{qG#8n{+|dYYIfa>I8%kls zB#5*snhUMMa?w0~NZX@hSK#g2J!Cm4sxE(2q+M-jm(Mp9@TK2XVSdASY)If+*n0=Q z6cO}Cn*Fcydqt%?!i#|B^x-<;sYsQGnCJ&0BIevfIIW_HQ) z5&!Qx3+cBBlkiwaQAbd|A^z_M8$H_sRbkCkCX|HY^l-F1>q$u~IyqdcNr}mG73Tgl zL}M!a;S4TOS6@!A7wbes?9XL55jQjMc8-t2!TW=_S6d`(T>J<2xYCF-`QnCWF73pS zKhZ)d>*n$Yz4`yX^5E`oQUc!k0g>IEeN3oQ^(-%?k|XS@w7CgOm?C^y{ujNu3Mj@A zw`~#H9mYXq%#wsq8c7^xaC&96vxIgoQ2O#1WN@P~WUUCV9TMm?>gr-J`gi6^)_qdO zKVh@*M9c9lSNgEjg};?XvHn|Ly;K!>Dx$fmZ*#l#cY8OFe?4sy%7fam`JaeTKQmEj z6lsrn;8L6dpLs0fskZ`{9Kc-%k^YGxdG8sB20iPM4FLD=mhW?zMLOFq$g-#4Nu_3% z$n?R37s@X#2HE(dn-not1-a1nP`?^kB%@$=edtQy^YalgiNOX7g#O(Ye^Q-psn78F2jOD4Z>0kKc9G1)IYGXLKYrv2X;2gRUBM7B;p zYxv$=1~!rOJ3vYi!}})Q4`tr}W_cx=isO7a6p!5RM7uWd-I8isP_&%+*2(uhGj8gKi2<1_wTe0+WNn{ zihe0!U`qnBX8Rf~L@$*r@=_&TW!H^Xc+!`#n_WB;YnvoOyRhvZ2pd;3!Lu>kNZo(E zcqr+*`8lcIDOJ$WZ*B<+&L3}9gnh}o$P;6--%wbDJ|j?Qgt1=f zdo`91AMgI6F^N($xQ#<=7b#*T+cJohT!)7?L6oMF0><;K)$xa z{~Hl}O(2jw>yQ2C4A`RjKMu<;&`b$&_$yqG3ekVIJN!X*qOW?}cch?tCa5itn|sX# zq&qnDlZGu>bj}fA3N2_=;Qk*E}NM}sulEBXD^wBiJ+*|Z@_A8|cWSThrw7gNc)u9e0!c-lvyJkX%x zj@<2uu>|4cFnlvv`6*Kiq;v?l)Hs)=0TMRajjrFb{tOM5S_ zB96kS94iT>#>`Q8AUqsIZ{lI>|T0&@d_;@Kn>tlbOFJ-J&~B0XLO!B z@aj1j-mXibKUTk-0hh?)Rm7#n+s_t^0^Nrp5Wr zGpCzYd4t8qa{rJ^M;Myqab8(;Y;S@SC;-MhNT}Fmy41`9TJGcHw~?4AQ?YOiE0uC? zH%RBAi09>2O}yXtkPW|teL72Dts{TNtZXs+#XQWE;Z^T~M*qaW9_sd%yyp&JuY-if?8_t1bNe`0CT( z6)_`hA*@A;>{&Q#T7&4LYssIy^1rBv^Rvf#D)~S5x3U*!K^C>2iwlw<gEnSNN$y874~tGTrv4BTiXgU?%@)mT}EzfNrUhb%5Q2@D;6 zm7};Um`fdhCSKvb=>uhn&UksOb1RC2250OeKT?UAZ|HWH@$)c^)P~R07RW2Z>J6dt zXk%9~ace_Y`%@J2;WfL7+#>onYrf3ikVaYbYo$7Lv(2QrKd7c*;pO^E@Sj=x&wV+@ zn<(0u!wxpS9_5AWQ864{@~iw3Q*P2o=#Fm*`kfEC@1~FLP@J=%&n`b&;Kc2TwFDT- zQ}>(Y6X=uwLGeS(_c70277fMBX9hi1osMVU<^|j#A_E5Do}2clkbwBrD*ZzpFmGvwV!nSwqxX7$ z(B`jgGHuzNoiRttC1RALgoabeanLZN8XGUAqZRr+yg**ha^}iKy(87YTtgr zUX=GTCx#F`?}Vp+7+H|k6A-{uZ+YM3%P zB&50a)8PNby^rI_TGAs#BG4W7Y>5xwj{q*gtUJrUTA7sTUL+FvKLGOYL-YpZ{1QX> zti8Ga?g(7d%*M-uNupI_5-@~HWe^UeIhzP0l&ZA^v~s#zJkNo zQvJC0x*fvbrjU5VdNVC^)Wy+~zDW^|C#&I2VSZ|DP$mVOGJSK#iz4J2^dF(F3)yH= z)2JoxUrxW!px4cWi~kSyWrk5lALV2K5CiZ+9~Bc^q80vq=I zR*p7}#b{W}4>r43x&Vi)er7s@Le-vxaEc{P$0DcZOJ1R;an+~JsnE`?)33(*Smll! z2Q`xwgV2kL4{TEIazR(>l55lPe}3nzrgNOLE|_||9A%Gal~f)o>`s~)Yz7YN2Gf1E zLoGd-qIIX7Sl&33{|p~~sc|B!*_moS*!4DDOgZSGV!%7-@s)6#0sJ+u)?>wmidj>bC+f{J*ZWmO{(f;CL_&6v zyYdF=n%k8Ig7*vAq^adtr6~f;E91JNqekge+kqFzD?Z#as|@`Y?8@LSFtg2}E(8uS zUfj#S%2u2p$9rr1*Z${fQg0qia)h< zlJZLH{>O9Uqpb8-XVa9E#|xh9wS=&_Y4pIm5xki#E^T@msz@xtyjxVcb^ro#qwbJ( zK;LM=Qgc(@gwq{c7e*ER`y7>dYqE=4cn@R1ztBy%e+{kh#?{Q2%Njmr^zyc%JQ*g? zbw|S-C|vjsa9@#qLi5%zp;da;gKN3^0-jm0%RT0oE1LzXlE3tLaw#`olzx2CM;Ic7*Vt&+5K5>jXR1ykH9Ul)Mc#NK@KD)4_Ht zS#RjL!XRGDQS4#Wb>vk`L1X6^i$$u#ut5fIl?J>Gk9`9_a^trSbtHKKKI`lR)5ydY zB3)DDYH_2oHgxC@RRKYyGvS z)-TVKz*;_q%Gk784%TzL^e}QVcFMG6K4n=?7s7xYd__hg>o6{a9}(*`IV6&wovls# zetak9HZF{mKDU30v8t{{&5k&gW@|Fi3@a+-D#^&V#u(234We^4 zNEJw9OONJ}vREQub7!#UW)H#`o5m_9`iQbmi%Kg;Gmp$G67Wm~E6`@1?q2lpsoXO|^P}M3Mw!t=RFApsr?> z`bNdD4`rqzCI5aCiX~Lt`?VqqrdByAE3U>-6;G(dYH%(5r$jfl_EWJM)A8t(eATxG z`^ENCnwFYJgc}5!x1hr{ljt3dcHOi7k@is{=&d}PbZ%&5Z@o37Yl|^LJLQ%NKbV-* z?dX53=DX%53HM!^KGivTpS3Tk?2pGxu=7`?ap%s$yH#D%t$jeVYx9{Hkgv06>l|2r zslN~rFE2RXr$dqV+s?QYRlsF!gg>Rgu?cw2hpidY*4TRo*D9Wkl+#8oMp`Q_f5s;9 zH+LE8>;pv_?g1nur1pD&s>AxH9_}tb6^QD#5ou_YS)Xp?pQ8aW?%FOQ2PuTOocS?* zwltVgSAYThvOp}(3((wdU>7JhMv41&d+AQ&0) z_@%cyR+ie|O}r|~e~AYLETQeH=j*Wm?G&@=s1%S%t!fFkhtuOQxM>cTqwSgL~%H-k}smu<81)4_y_ zKrt`eP`7@@*Sy`O0^ z>?{Dj{7yye4Q8zdM|v&h;i!pMlU^Vn+QqN^D$cDat7PVwg&Mm*e|I>JOu!CRn%)nI z7hZQEP~)oNpRof6y-x7ui8rc%1XC@SwnP?4%=ebN|Ec(K{V2HfYQ)vmwed%*>2u{J z_{`;j5y3Gc#u|QWU44`I416iSH?M$lHJ1IYN6VterDE1u!Skd;x0CyRDhEQOfGHhY z_56cv(1Z<5d;;p*s#gS|qoecO8ZF=HJb)sVS>o>3;Wt}SCe0|H(OxQ3kgCxXf1)0) z!&&6gSyjHX${`&AZn+gz5;scU=Jn3Mz3C2|j;5XqF$Q$*=i!(vbb;FY zRQ>ec6N~=*w6TUWX@}m{rofo1;qKc@+$pBb9AyA6dc9AQ8OoP#1 ztcTK*2>xX%%1=C9`>KcpD$Nj_(d6DdP_~iWSQ3L!Jk< zI7hxUfVM>hh21Ye%G`I`dO1jM%EumDv=FgM_u(@TLY+!R+Fk6CzemnerzEql3s`C* zexys$avo{Ms_-^#63Cxw)ZR-vskYH-_E-AQ*-y6>Pq)eZn)Fj1dkPaW1)P-bzt++= zo?L#2@DcDGgRJ-e%X#pF9_xHRb3pZ&H`kaspd*MkO_+0Q0MtI1OA`2y$}U{c`nWK? zxi+ttX5lE*%oqEfC_s7-;rH91xKU8@+T`a1b9H66=87T9!R0G~(kbpqE&vB^_r1{u zxsHx>20)nCq0W0!au4dA1F@$VgRzji_0s^{j;`fK5!E?A^4&HgsO{@?7S%4kIFLf* z&eUoL<}{$F^y)(ddB80NN4_-Bx(UQze+iCK7Dj`X^~m-=@UgoyM$-yzg$wYOIUoHf zv@@K&ObI4fl6RT%=~VES=861RAiw?f?-;sHro8)o`}fGIZzq*Id}6py!*wV0IoVJ! z$2kq_05^1q=~k0CLVNEDosjGv9rQ8-qL|ucUi*X@z`(qti9RFkB+e?oij(fD*C)4;#e#8WX&clB%|*?AF+RX8UwUMKgtD^ z?S$4(y&jZHpj-C|E%7x=lYnC0FlQ`w1>xWCLsA@C6e-WSkMHTN`bW|uh<7EP$ofuN zNbpY#u?hk}C06gmX@W3oR_{E_{^`;dtsK#Xl_dL|(JH~q#rtAoXS|eU&-uP`C?lMx zId%cy@z>ftF9})EqsT4Lc-G61-YW?k?xPUJw!uqJt*uLLpN2|CFb-Z|a))kK)l9s6h$gr3;jd`t{Vl z4$JnazKlAZ-++3xF?it@;H_Hg1@ux*3g`6+Bi%gcYtXnOZ@0*e`V5HL?5F>)dYt=Z z8sPir9f$xtdVPp2-LvA(tS@Wte4Lq<%aipn+~Mxez5b)~p?lO7UA+gl6py$j-OF9f z;{1Mn-^K22`quyhA{KT0+SjdQ95X2MMvGf*;}?nXBn~#v4N*_zKbzBFVO62evA_QZ z$mKmSlBdsBGK?_}gn;>qcs9izgM+Q79y?H= z`R+>Y^!Sjg;It$PioJLT$bop?z|hhUAZSY2Zw}CHN+$4Gig2m`I-CW~J^(xv;UPHU zdET}*{rI>2`0@J{@8em^zFB8MLZiumEm;)-Ehk97`53ke*}|ye(PI5?ydV?AAgkNo zJ!jYi!Al-cnw28-=P@8_BrZ26+xk1!mSlN2Lsk2}8-|ig$1JgN#keaJ zsf^RT`f8>Fs-kJ@BF-~4030@!sJjQjv$%R@(wHgG7^g@jQT}=+`~oKXE;z*O6Ks6x zUd#!0$$)-2^ zk9DrZ>5{QE#f~v*c6ik@hEdvauL=>wXci6A7gU#C8JV*NHl3w&GC{I3S+d5ELvSFn z*{r2S_y2_;v-IL0fhk2C&;Hyu7HbT8WO2DpMnu26;B4OXmJa*sXgJ%O-9@b3^GuiR zXhXf2(y-L4yKQ;DbOm`r%NWwON5jb3d=X3Q{fVLM^LoAfJ3Aob0YDoD_BCGjS(|~^ zYo*aJgWU7Zj$W$|CiwcKz;TZ)>u*S*WoK5)O?Wk3(+KT;r^T7X&q54el%Oy=CD|Cp z%?Zi41xo4q)s=~4MktyZQV?Y%GNLPX!2z<1G}{5FJgk4;mSC!;a-FeOOFDYQ3_6wW zmw9O)KByY$7cFRPx_Sslm z08x{Q3@w<0ynJ_F02h~}jwc{~vKo*CUtf{2nx=?wuI_4qi!;KeQFXzLhQ(jacSvJK zASc0KiwPrb9MY_h@O^V+*koS#svwFeD|!?J%mso^1ih5Pum*+sk{P&hlb-&Y2^*rQ z=!y`SND)^YmEO+;Ar^APB;^oyc-lkY(12(|?ND@sP6s{w`Gl^#8bRiu4T(-izK9BB~X2ZNP53YG5 z9;BWb1r}#|z;B+kqtU6Gy>F2KZ{KzNx zEtR3))=nr?_02G|x+7tjQ1N?`Z;@3-6sq#{6%vL&DCXO|!)uRg&~|sX-q`1LU*BAg zAE;v&wDiFGq;%t329Qu8zkl9z2r4;cqTjN>q3fTh=lOD2+a0xf61m98?ir@Nj0B|~ zPwI*Oti^DHNabW?G)H|PV0w7B2I;f_6{nk0%tu|7v8q8_EIz$&Cb{M{ejMK5jPnUM z!}#It5?C@>t+)6@3hp<&`I*|}{>i5oQ!U7nGcB|cw5XLC92+k8=CKe`2Atz5FUf;l6|A;wg~M|g__!U7B}(Tux0 zyy76OLAGTfTXV6cED)Jp*-qOJnSyL4Hd-r=H*dp_O1ZyYtfZd#7T#Ln?B{L>Lnfu_ z-;!n`#TJY7>}|AAz&ZN?I8}(b0$#Qqic2pQ3$cC`<#jBw3#32pF&9-u8EwUNawJ+m zugn#H>Bw$X@)gn~JXY>RS9+h9LW4XWk4hJB03(#|K&z&fmfQa#%Xfe-;vi7lOAqzr zFo^eK8(h6w@gmaJsWlA>%zFq#OX|4w*g=}We4fEQLotDs8P%>i25JO8V#(P52@ix9 zzGL`irZYgu->czTx+!{^E%kX$d7$dYc+zoKMixLu9=jH>D1silmIC6yUD|xVq%z& z>o~oA#L^$)UuzO`P}6_OaCt~_-3N5{)?r|V4&C9DEcxPm9OaTtOY}Nqi3mqmVM|F& z_d--0%NGuvh;Rg)F@n~u-Rvho@FTRDAKP|b{NS>n%)lp;NWwWRUPb;jQ@zD@0<*P{ zUM@6F;_DfP1^brwfj=1c8NY6E}Hc;RpPyXvyB)A$0_6f}(;Z$h!NMC7PxF0Y>Rc6Uq;C3*Rbtf}>yf-fDT8Kk{dKnR* zfGsOOkch0TwU9#4C}?lF}=NuqaABl(VOgl-!rYpbEsh|{Y1e&VVgD10aV*V!lvWl}Uzw0XN+x+Xn$ zZ$b9XArs}&2iBKIYby_S9z4zo^Owwwdk_9-zAt(AUeJ!Ic&?qb&g0`$FY=pX>T@au zjZ5rM`&?aLe`Q%72doNid?qoGJj)BC-fi!0jRj_dBU@nf4p?!D1EptlHPx+KUZ;zLRE zy)0ZE8_d7Jo>Ub%RB5;wi{FHPlF~GEDX-s`MN<6(xiYLwaLjG8KCdD-vH$0N` zRQOi7Sdy?}zZ4f4;>NmoMvI~M_ z;YG6aoU9}-r$0hf|J()pv1e+fa`C%bE}vxmRYh#&zhC{Bd!5TzN~F@K9XldAj(y_1 z2Wdd*(Sv#bg8V;UK#6nz1EKAL@~1#XU<_Uas1~D?e5Om8FZ^4U*P&4C*feu*loHBe2?;jkoqEc9v&kDgSa6a*BUA@iDS z%^r%r_fbVtPRl1T-?m!<^_B)_=)WJ+@tDT-Q9-rD!FnlUM8<7q*j%zDKP@cck+nxg z;HH8jJha&{@(wie?89@mfDxE*ywHLCcJE}Ysusn?;zB9e`wE6#sxIXU5he8*E((t2 zJV7-|SB-**8t&_8?(4QXk#obYGN!|}_L@4DL(IjC!|O(9R%W>wODUv3UeE=BKZS7n zBYm@u?1=)q%}inhzsWPPcI~$x1kvs&F=5BP#UtAvQb2l)di<+qqF`=yK4;%smoH zJo@NIe>Me!QNq0b)BckU>m<^n-`ZVcZ!U`vl*F7dc*)bn*w@C=gnl|Bt;n+@OGsbk zZ0EUT6p}ur&_lUo2wL@=tclJgGDX)6GCRbiEzt5f2*WzfksK;RV1IlmVGN9d0PPBp z^1?a*_-}kHT-+ks;(3N>gkJ?rV9h!Q)KmB)_4l)&2&{O;@E?llL{)evTyDPz7Ar5d zk6DcodS%jFFEsHU9+@4r05FnrgM=R0LkK(j*uJq+l&;ZW2cp!*%$P`{?5w;Locv?0 zScg0Y_&l%cpKney-YZ}G`#l0bhbFX_N|&$wecsQyJZ-`)J|b>$@Zls)xCLO}eSCb> zFTwsw^~lc8-1>eiZ!>OA8AJ+cbzka27P^1y%BAXQy!%KdCS9w{C9793eXVJNNuyG% z{dOl|%m=#7^FOlM1&p8JXgkacx>n=6`aV)lqA(Kqb_V8r#i?=bx<8Ev)-7jU1dw2eBUu?-2X zw{mLV7_Fv8d2$kl4b_g(zx&Q~c~-`7*f9}qlkznB1A|hkRij8AJjqL>)$M9nv z`;!R!){kXbnLUshTa<#wvEq05)wvoLFYn59Xs~O@D0S1Dsq5!!sRxy$>c&-OHtin? zv?p*)B+`>Ssz;X=l2H10jE~pSkFe-pbE2B-WTDL$4zl;JA zP!py8AX^-c^C@`Sbwd3ovE%__+J?`NQ}f=tMcx21;&IeZ-Enb2QD3nb6qwTn}IQtOdjKhbWX)v%ynA71u)F&TpZyl?ZEyLAF3We#q+mtOY zjMy!LwL+R=SGn>@Xg&>yJvO1IE?tq&G>Oz&Ca!}v+6a~4vsL^$NEilaM;Z0kHB5BWP@G%Aq!ajn8xy>cC(EyicVF1Z4dorIBT1ujQV zJv*<=lbo^WyIMq!1YO(7v1xcLKsP78&aAuyB>W;)Ar-mGN->+{cO4kD{=Qz1AJsvg z{+zsm*rK^)IedRtn10%23;gY$_B{$|u0Em0^KNSYovU2D-xcOgHxv*BEqN=T{?V*1pg1zaE4 z;FZjq6(R0?kt_K_`6k@Y_L!duYe>Q`;TB4HAdarnv?*BL7IROkWcCG{7mOOBlAnbs zCiz}uI;g54S%Or%mz;c!Q|f`k)=W!^Nu@ltsnz8X_ZBebq+OBhB5M8Rt{wfJzhMo& z4>hr9o9(QdipQms`k~71VnZY4fE_o{!KT@|gJMAfm!t6$et+**0Hm z)XhEmD;{(B;p+q-krb9>2A2Z7_1EUPf#EWir5`p&DV*NWn2uS@%qy?*Ew>cI9>&!JXaAas?)IZ%*^LreggCEa;Mc!<-wv<#^Ww${uzWNG7RO4HwIf=V$pYi zU|v3_#c@2z1=Yh%?IzI)qUO7Joy^SS8D)Y~(h(#kLPr)->W_#~{ z0pdwuh!Y*0MAp;KFE)j^>VD`IoHG*WHh#n>h{Je^irO}0Aq*i~vyEXhSs2&ob(b6l z5HEHX|0xi#V=45^(tp;XCrayssk=9AYD!i|k{#;(7KPhbhWYhA_KROU2GloEU|A3S zvcXMj#%tTsxX!6+7wO(!38yo;o+w)Ew1AMVF=HtJ7 zF%O@eA@~?;By7Hlv@ee|Dq)uJ6=JK$!>8L9q0Uage~ZFH=k113sEnu5#`=V)ooG_8 zxpA>+X#)^DH&h|E?pFL)Nc>5sYhk(Qtj}vT1UuxSp`)+Rtm3ay3DG9WUs|`i8b_}X z?K9C_tzRPIHgkDND@pI+cMd|;v$ihV8#+7C+5q{;ea;;FdW_W)8TGK{l2PxP5O>4a zNaz}S`NGJk*HjO&cQ}=v1}unwdVV7+P)fe%SF2c4|120ku!+<8Qd1*AJGMwVaM@ov zsn%WfOfl46Z7_+9OyJbyvd)Hn92!?#BIiJG$@sOd05o&$=TRu`0Cj-F3fP{ z#9R&4{m5cYLGn-GI@ZZ3DAzgRJCZ4HWfK8n*L*#`VmUa^r0kL_tX@_! zKr>cyshk!&l;80koas&#(}Z3h3ri)A#fDL5ouXh0<5(bS%;%GZvbbnZjq>!>R)5tRe+iu0N7-6hB^v%=^cQL_IkwYe z=U4pBq{Y>xiG=5yBpQ&LUBAjWRkLV${-CL`BPO7D~ zS`@W~`J<#Ppe5+0Y3W0$?3MGjnO+(HuRXhJt{|tJAg0&1N4+o4Xwj%3-Ck;XDSVC?%6(rLmFUqCredjib0KABMXT?HjzRVyB;g5P5w1n>-Xbs%~$T^_gx_vV1NX4KQ>cZ*^`b!M4JQI_?i?4e7HEiYUV8|@3UttrXe zR8B$iT`m6`=xcEKADTugWa|RZu~qR4K!$exxrdmZ`2^67Dol?TXLe~gMuY%zkYP_XUCKFt$pSFomj5;l6|wV^r`t82lqCg->dItw&$t+uw(fd z=c+gPgVNJ#Qb6T)nl#!13#>0V~X!oZfSo3gBhvVQQyh`#MfPdB5Vlb22v zH3+o3dzzmM0^Rr$gM289aghH-<~Wd;vtS+?<_3Q8N-Xxx>SWJT89oS0`j$CKDv39qiy zXS#nAovcz;U02iaUipN!I%86i#f`Kt65v)}#SN<)*Bk;WWN|nFWNcRJ0$El8(@M<` z0Lo(2PkiD$#!q}78cEO)`XrhiO(6Ve&r6KnEMU$cP7}6O5(G=;aN2YA(-5WC`0Pn* z0#Xt?3|eR54S}S0$aex!ICwq?n0c&-+!!GJ4!Vt}1(B2F=Gy=F?nys++!ioM?msGt z8R@!W>|8`9-sX(zfbx!nAt5n?uy%vVWJIzQ(QbiEgQRlgjIYtRfnpb=bXKAfV;{F#@fGMJVwYX!=d@ z>P!)~$X%lYF~2}qp)bEj@fqT19Fd>|g5yYfz-$ORnnD62d@PtBE@EZ&Zn2|xz?P21 z(BAw^Wpq6`dx^32?~IJVck-zERlEm45bw|&(J5#(Fc)dHW`4!XQonw+~66NFFrr;1MVBV zhi9mo@fIHg9EbIU3BwPr=4X*{BffE@A*1Zm7Oxd;QKp=-YVq4RnVZ|cF&kgEZ8U3t zj(Yt1`xg2`1ksR&c>2>>yC}e%%G0TV>{7z*DXk)`QJTDVtDc!$#-_^EP19~{S9W8(s5-;Dcqmwj805d%D;m`zW<69}EY6zpBN>h4cA|vX~ zAqD9yz)T}OI|x`hzsLK;=qsdOkX8`I)0H)VJFUOZA|hUu^&hY*fvZ-ouu16UkJKt` zh{?;MhsPOOOpAAS?dtx0VnJW_r~g!TQcD2lD=8d>&;(Xfl&k*T03xsI{$MGyOMazw zQ-#cn0Fl1~w`Jgu!}LMmXR?gRsqJ1x=Vlxz+z2exn9=&8p<%$}8is&qSeyY{f*L+d z*PePO1Ei1Lr3)@wacax;NA(x~q7}PDZp^UYDnBl(mWRFEAjJHH4^f-|x#)V9kKu+P zLC+$DwN2P574%lnhubml>1_~b&H|%UC3Udqt7RF!r%HFkaFVDXrM*HpI*1hfb0t8q z%$bddkI`N^IuqN=D{6thVG&*4WkU6vjU(RvSTJHITi58nanmWRNMk`Bt-NOh|r~&MjI-%K*zDap_tnVQ8c=VEr6G1jhUC$;bOHU)4 zWeDCv8;E1bmcA(ri?pJlgHCmFlBxI8Wp?oGZA7AP9lm8)^7;by***#4B*zuv$jRZT z1#brOgasiW@B1hvC3EDG^LNY9ar0cBge$1KNmNXgT?7>-ciY^GdusURTCDd`z@4>G zb!f-vU$4MBZh^k#<8|6m)Z$POhf+fnm9Ec6OYprq=yQ4X^y%~3QVuz>W(_X6#6Tt& zBU%2<@z)V0>N?k|96@oKP~Z33C@K>oWA_2slw=2p!x#yY^V8)WnNaBk$#zz$xUXM?e++x;CKTx=yPWG^|tQ` zXhm84`cdhCp~?egE@_7A9mUVn$xd7`{)LMb)ZEZb@OqaFJiWVgO;*+)=8duLT;J`d zb1oSCq4|<>;frM|KKjY&^Lw9H3_XrvB#8Em@nirciX*Gy;< z-YNA*!6qap>b2hh$<+_vX~zO05C?K{F60t2^69JDi_#|Fn^^ zfkYDN%u|>{hZepfMv2^*oy}lgqZYXJx?w4I_@f7&cI5C`4_NpVOp6qX zBASfz0)8((6xUvX4xc7xcU)3(A|!ICxUtUh>f9|IWpFf{I+`=AG1Ok6W0{@E$J{=p zS!Cnrc=oHoD6aH>Z^s(CS5%)!ct#c5sdOl&`e;am$>|_m3I#DVuz30ENs0nGj`Gd@gmslD!v7& zu^6fbAI5&_F>0;2s@(B5P!_G!ToM?kp`C$#{@VZ}Xq=R)@yfaKEhUogC z@pjR}mH>yflQbpw%AO%)C8|Gxwqbt6K3y@%AYV3af>v19)xg_c5DM|0`0#7&GNopf zUD>!=<>t1wK4H9b4G-@B00lw%zG5z!dT&q)>?wsHZ^gnIY+P3}s!R4*3==m(URpzCKt(n%O)ByStDR=+ zFG^K03tu$LFEqqpSOz0x=?=4E@xPk&Ekw=g?OF<4J}OHElX$3f{SK%9P8>ybI3#;_ z2qoqWB_qH%p(+Et_*L6-Ei1Fj{%06oHV?YMN6lktyoJfwj5Rz)o3!R#ml&ti*UZoE zG&E3HD_rw08mC{abIXaMhABz+WmsnLi>e|>4Y4n1g2cGQQuQR}n@}b?a}h6Jf0Vo) z&D}v82zhFFRbAZm4KW%F1_550BIB83ozhm*Ud(YZ?>Pqg5v03a z2?0rZJd6dS7%2Sy+lF2v8u?aELRN z+e;divmMKcwB~ZFpP!|^wdN*7baB$^KomD%`d_VsihGJfP9Rt)d1^jEHgGLW;xtAd z_P|awsU;$P@qfDmX}Jl>%9GGRS4$hXLiBF3B`;P{yhTT4PU{{~(^>uDtU8{-*1>~W zaWvbUNJqY{Jd?%zl~$GDTJ&yd}?8 z>3l_#ZYQhmbahY$+xXQvYnSgBM*)%(xMy}a=1kEc$dq93tMpn@=S0ZqcHdgI3U`ug zS$Rh)2);5KD8bC{Nh2Q2eD|eVK!f(b8A=c(Pu~w=bU)2*IHB+ky(E$Jn}3&k(6_Y+ zHr)RlA0GMkzvJ`st^fB%iacEJmryX3BQq=>%Y9}iPu`y97 zdddl=R@H1hst(#`ZBB*iECd-PGaMu8P;=!@tkxCig$4P_S_+7zWEeod)~Cw!`;RD! zQOYq)md2m}wJ;8Y(wo=i5Rvc}$EHYdv=U_Q(Yyf{Coe=4A;w-2FB9;N+@IpJz6F(* z+qVeDZ_;GmSO1junu;_?c^>L;Ulx2{D{@7=7Sr%c0ryvJkR+*mr!M5aJusYda7Vb7 z0-yXwa0>c+pzk6PMzmXIBY%`#P^#_s2(T$dAQyaakp<38du}Rt$)xh{omcNLs3-*J&P!UT+~+cAq^4l zZeDt}C>gs$CKOkL>d#oxcbSla?sDb4t8W5TD{-!35*8A=VIMv)AB{q?fDc~GGBy3R zcNYFGfe$R-DO#GBQ2I5U?&`a`pW!6g^)C~0bFV#DFdqX5 zGyvZu8qU^b8uvk84-u26V)p6;2Av)-Fz@WRdfM6X=4YK9H&431eTzxIBEmGCrdtZFegdDrd6CMcIO0ODt9q;w z){VO^l)DKUp{t-Cdb%xE;M|`{Zb9e7=%>LX9UwWJbG)c(506C&qy+zpqmtCY)tsV z7eEd4|LFL{r~fBM$6NZpkz&*TcfsXeEjLhGis?Qc{RSvQlwrmNL0N!3v>42zUi_#9 z1!hIpb@NlUVl33Xg0oQPE1U!m;3{vyx?-}vYp{heS<5}x;@DJPgl+kI%TmYx3pM%a zd-$+;0;mT5e{ghkEL8p0e2-Ys@|jCGs^ClT`{4KA0nZXJD0;vn!lczV_i`> z@A41uk164(eC8{aL;G(|EBY_DfosbYUlcW$|7s@nvYscmiEm2hlR&h%1~Y8Sd8HNu zs{+V1z>t_%L6h{KFvH(dGR>-cQ9m!!hkCPAJ(S}2WqP4HFjYk-`OgdWQKsM$D2qsz z*Oh;C<_cTd{rIJx{?C?k{LrPI{vVzl2lD@(A8+aZCQ2*%UvZ(;%DcBYh@XF7z~@=u z<JL{iKj`!zau$^eezA_{E_7)lB*Y2-rgeq?yn4O<-d}x&2r;aG9|qQF-=_lBsnfBXl&$vYvwDk zm>Ln*aU`bM8Wz=eTVV;7kFEnqcb)%Qtfh;J*cC0OU*Pv<6vnG&c$)F+s=m*Aa5>Df z8H5ArSDMEzF9w%ftsnQTlSRQ#A9b|Vr$`T$|y&1CoP%Gg0qwg>Q&JY`Bqp*3( z#qBn@(&m>>2>KFSIh@4Gr$U~Ayw46Z5f(>7S?Zh>516CckIinpp|w@=bqnnE69Z|9 zDkVN_Jw$~07*X)clqSCdLcuQ@QqA%ySs^ZH*pTq?GHYr3;#RvekypXO-;WjG+Ery7Le^$_);) z%!LRS!FC)bx6ah9Po8ScHJL2HNle>yY|#pW<0BtnnjO$zpB&I`0G2JOJN`xE$3nlb zQgz2ZZ@WR{ccjtFR`xDc2;DyD=YbaEKIng4ilSFCqxmCNu#K!c@Kw#y3>Mm>YN&Aw z#ldR9G(_7PYSdYibV-t>RvIkTKUTt1TnS1Hc1qDTNpMt3ke{iqb(1XX2_O;zc2@gJ zrtRp1{&x^3q3oOP!sy-{Xp2bP&X6{;N-oBFAe}{XcVXnK$mN!$0O797iw`j3eb9gL zk13wP1f{(F;y5rDSsiO!8(A9<;YAn6ez7d=PqyJ|*OCAbPG{OXH@JE&W=I>seg(3l zz#Pdp_P><7l8NZF{;?Wa&Kt93pKCv2Z@<LMinI z)^4tzBpf`!DX*TN!?jMqos3pMRc7>q1*W0J9z;}cWal8iz1#eN7zz7Y%bM@9&X3dk;23lA_@!!ah z{eT%Kbp8@gFjp9+)5#D~F(g$BjBtwC7{%Z>GL&E_;t;1U=tBXPP3808(KKlSUDRv` z{#b(NkaC>fJx4H3aEfvv;7z7-Yl2w+B4(Fqv0+4L-cqj8Z)7MGR?LCm(}?A35=-eq zHh}3IPy`wA@JMko&{D`hNvhY>{H60T+4W6gy4(Nk0q}q74JfmZ^z^Q-6Ly1}cYj6h zuEvl!Winr;=ay$a7g@;s)N(@SZ^&qwC+hdp#d&=PQ|tfvXHQJ*f68h8{de$0@>9p> z)y#W=q@RBK_CI&6&Mn{n;#3;Y!Ek56wt)lq`|o}X7`KLnVqcxozJOG94n1(;Y8K2x zIi#A?=K-v)Y5_f#K&#H24>4TN0(W+Bps;A5MP}H z=xm$~%YYQkFvBFR6NyL?OQ{V<@CI>95|ZJph2#b(Ns=Lq?v*e^AxC#}1tuR{{#~@1 zGNiyrSx_bW6H-t{Vx|<^6g>cvA~xtEj(9Vi_lO|RIg2c0zdqi z!WqN~93}#OyEZpddWZVEyV@RT|NhLq-sy~jd0^>&E-!@*WZ+f?l{YWl&{Ctc5RxC7 zQIXZEkto}WzCdfu>Pr*b?*hsd_{=f9y&%ZSD|C6KhGvEK?D)+ikSZoFoVeyfytCfuiA_-EZb`z(*d{| z$*f1}N@%aRS7IPVGeiq$F^H!MN9DO9ua9`52YNB$h<>LR=^41aeHr=zBw`b(sYvh$ z$!jVy0#Ke4IovU1#bTomD4NRodZHgxU#fkB0HNSJxw&@b803x{VU)xIb%yv}6>82QMG3ycf-7lv+$kp$$Z-V4E{u`rJ05_a#$qFA5LoPgvF-KGdoppF z7+*Ax5(Mt1kiwKB#K03YxEqK*VS@jODBA@OI7viDW0DdoK$iwHP1SI8Zx1B>E3ZK< zG#O$r|3s7&P=+WX6I2?mh63U|%fTYRX z3<(V9G8iMGOf4}=CEFLM+}^%)7iWYZpHk$Kh*u;=&&<;6zvab>I#^@!0Io@F(-Z*3 z;h-?Oms7$)1XD4-zrQBwRT`rYDE>QmqGiBcv6=pEK6g?L)^(X_(X5tIz16}K>}^Ja+e>H1Sb9{k4f-ye@`a$is|pAymZ3}? z-Xa>>WBv2bUL}F_I;o;n*3IbAf$zj=X9^549~tF2%$364hFf#rDoca>pOJX!@Sjcc z|M|&jDgNi#;nx1Qks^hC!IxGh|7Ro)$o@4#|6($~tf~`p%G9+=HkdLLEAyI6Lo3=| zleiPRlmlqb1*qt5nG%FmNM8cTjRW$Q+@rJw zB6ZCdMTt&RAy8i?kg=BY;Wt^dYl|(_NDHDzJb`!UdYU9R-4e^XZZ4eSiR{<|XN746 z1IHEFmpR6S@z;opt=VFptlEoCkpOXh^}JFDbEvSmkC*O!ZS#Kw@KYf6Nc z{@MwY-f##*?G{BsDHHk>y~OD~Yk@(z(ZXjANp;Njl{QFa6cdX1d?~6U5i3Dj9=Vjn`3s9>iIWYhAWSuMsT-=CWF#SX^P7w!7+;c< zaSCzD7u(Dh-j#sYFbF||E)on`{WF|4Xj`DxglM|VW;Fm7ed{HVi0j{U)mnc$Y%Fc_ z!zBHl!U$a>ib-t32rN4OTByq(Tuu@bXKVTWpOj(MlyLp5)oOZ;mO$Ib zP3*NF8KP~NVP1DRc7)x4x*3V(^_I{!AWjiw+T&dR)y5}UV3)VJ$>2kZmZ8b5p2<}V z1E-i@Izw^4v>lGqYC}V6b9!{X-DOXX24l8=>CAjd)}{vg595%d(KK1g1H9?|-@!@A z|Lf>r`~GhuMH+i<^eV5^1Kis>U!n(?H3ge+0V~b;$Kxx$bp%_bBbYJ?#VzasHZ9tz@J_mogg{{M%k z{`I*M5LU z%RjC2tIbdhK;<5pG905lzzBFiK+|&NIVl}3g*HRfN$>LTzw3G4N)jJ&Y0v-jcgUS3 zfF}Nb;KzSFIypQ!+VcNR6z~22iY0)+o>`|1;9Fm`_FCfPuAZp-u$8XGxp{EJOY-x4 zAZ|FHCTon#wDo6~ZNEvMOJC}KS;Mbo+j$=r*m{0lY%wQ_xrWn`QQMv7xOC*u?JO8O z;-?=oe~!xy{Imk5;S(oc)C6XI^HV9#b(;xuIxf;fi4%oM3hBHwZ6?@usneQS+H&kK zrgY%{`2*vw0zfnWKlAzj@#(>q|8JuB@BddV00cJ8=Pm&Rhy2ls0L5edwTl47F5Aig z?PP%PjBSO0ZCO=m&;J**{r^h~{(p3Q;PL;X^W*LNpN*9K{r`#?|JLr`;#KZSZT`-X zJ%hjVTglpAYFTHmcPg7ynC6wL{baR)x0Q|eHe_EI&_MS<(Lp(*nG2#h{U7>AX+XtL zN;mbsN#EWxMP=KvUp+)-#>WuX`40W@7jNRt;D7azs>!HZ`+m9!PpidB@obXIwi3tY zOMCvWy~`H30BF?zPmjy`|Cax6q?G(WS1bouK8at91)yTgAFT;sbGHEYM%&r|TG;@q zrfh2j*p?NP_Wa*`>}~{T;{PW{CqDl_INaX@GWFGTD1s}Q9OZkZnMH2 zNl?1PT9sCxFZl1qK-# zHihXO0y`<3pgpjY*APry=fugsS=>QjJSyN}rlXDJpbPGl&w#1nDSR?@z0J%En{nS^ z9)0Udxi59Te(rnLoV7ehLuSfXoi^qd&PQ%17@lV(<=*4+%;WO9GZ%*zX_D=QwQ?Ti zHJ*MAF4EXp2EEOSWe6;UspAg*>DMySpQy^mh$0nojv^S(0nFk0TgdIg+NU;fTUEE_ z^i7(~SPY@~P;jLzQ_TBd(7Ha%vSgk& z_)-t+8cOx~7c;&Z3ea%=&koM~_}^y-$J_kx8!7Vqza%gg;z|OT3iiNS9(i>tT}k{m z6mbwu87C8&lzD^`#P$GW8dMB$s-^V798Qwv2M8Le0s6oxyv>rn6SCpJ>HkH_rql{M z3^GJ@f^Y_`FdtBeXcAXX1gU=;EZ_==Z19^9pm&_UU%`6>WcNx06nzNsMMyh8U%Yw= z5T%5&=I-?Dm=_y;qfB^mmW*(yQjEWX*%P+gekvo`N}8dn=Ti4z;#WlpWUNy!PRkZO zsqlE6x?nm$UnA_R3A{t#dYUAc|ND?H6XD1!)1EaYEspidNaJ3)Qgg zVYzs$t_APpSK*KR1_uc4?YSZSNQZhk&jHV2{LY(5L+Y(Jwn-(2i zBFgt)!4%%NEreN zW?c0GvrG^^a+y_&3n}&=3CJL04}``{Ui2Xpx3Pib0z#VI^;HzyU_TVam@U>tjKt)l zG{T4tB%Fb=(GXhK;{;L+HJ>OvDlBu4ux(HMYnye|&Eg@$_>YUF4b$0TI~(N;Chy#Z`*fgpmisnxO{ zieK&F`0o03Gj4(n#F$Am`aY(!ELENY`z;ZiWoaACQpDMq5Z-y}OvA1dXWG>wccFMj z3^^P^hQI^F+_p7yq9S{?+D$Ra*g!z&gB`Gbxw}&Sll*KW_dkb6$H&|IpGPW9Qk@oS z8pS#zV!3AWmzcG?=GDzJM42GiX@t5qjgd-|(ybLU*;TqV)Aqow&4wY{Kvy8MpqXPy zC`+}LmfOxVuWb!(!>y5F!=*(3wV40(y^!-aLH`dA56=(E^nV-wb0fvF9;%GTV%hbh z7gh*Y!+C3SfU753M48kOxU>YX~%!CX?QouOH>7DP2yp!F%(-pk8 zNW~9DxcDcW+$b>l;kZl45GI2WR7nd=hWMhn?^(U05y~A+{LP|w%6@jIYr4~sPk(8^ zS0l?&CZlME$&}gmNF&6fu}%)}&4Wr8lMr%0%|L&4D9(~Wun%?yZ&89ELxVhZU*VVj z74!FXXoS1Id%Hpyf*6lRh@zC|E2W=6!!!od?2f`1SuXv1`L~eIw~V@DPocj`1sCXXX_=y)7 ze&ga;>1ST)dF~uMg-r|!_y#T~z&ddLK?tA997-QN*|Cp=ISIQZM6{7M-*;+n6>Txg zarAMRA*wb_14|R4R1SY&VhJSz&C6k}wB=JvVG4!0}<;aJRtA(i_F`%9s zP7sGeLcb-?am3p_+zk*lbt}rAnw!a3e+ay^kVhhv2}ECtdf6xR*U>N8W11Bp0x(r zyrz02f-9P3Qy|-|p7elo)^A~AV2KkNshqzk)d?!UaeSIbwop#IhWbb%*Eh;?w2K3zwPyqqZxaKxVe^VxA#uwR3@9<6EQe}+M z2PO4@zPSPG3l=>*JBd+L^*+u>7+A=;0HsLM5p}DjMBfL~# z^#b8i^RQ9;#4WQuI(%E1l$Gjogq&y1u0eQJBUTNj8SB zrxS2?RCOFJOr>v|fn+etKa4O+$^v19P-=FJGc5sX{`^~U++vh+3=^hL#2$FSNdjQP zh<>sFB8p;pucQvU{Hq&*kB73E?nzU+u<)P^Im&j>%&}@-h;EI$A781l|K|G2vPR%0 z|F6>nFaOiw`N7#X{_{qPk~?zk@g{>0V)+*h{1A9wWW{=DVKgqTEm&^ZD|5p=*eK;#s0ivy$H6nWR0VvssM~ z8BAkSr*T2@+Er`PMnEn%>bw}W3*jzBF+giI9MQ*`r*G=4n^L%K(mvL12)ageMCb$* z8l@6hfJ=cG7{i&^V-xs6+2RwF-tn>6Zbzrb9i$wK8U(c1@-;+Xb<`K#l;WXOcaw9; zuBvhy=wi~9skJrm;6^MjhjVY!c$B+d<#fM~ap;WTI8vFFB5t8^ET9Y*{A3|bxJH`& zJjB^*`LFbJb748KLH;{BIy&;=e;u5jZsUJ!q$vAD>5=cs1i`=q;7$TzpnX}M!xCjn zh?8$2U-(U1c%urUTi*Ch)K~VuYe}rWhv;ka03MKHZRS;f46x~d?E$JDa1~TeEA-w# z(-?i&6aO_svIdPmlt#=H3z$;%#K4tkUHME7%efg3ihD)RFpWVroC0c_y^2d8EKzw^Uw z{O^sFHVjw?-6`0c;YJ)yYzAbi0{1pTUI)m!u6m$?_q`B}WT2pM0%Qa9S0F(2OLpcz z|LpDW@7w*EAj`^us;~QYx)$B3&pXaTXB&3HP`S|))#?wx${648tP5-^8TuX?7P4|Ciho`>%=jdP?|9vAxIe?U6<4OC^ z3d}#Huz8(~Kc&{|zZ1lhyP`wKy5i#UNVkIydR=Y^OG{jPQ|M3peq0kv6Uza_@+e} zc7c;JO>fzU_FD~--lhvg*$8B!&#-ggr+blT;>><-w}>_JpL*lIf+xTY^56O4*@%U5|OUER$9+=|Vr9;#yoV#M%Wsyyi*2)$P;FCPyWAf{#Cca;h_^Dia( znhv`OzN%4Kgt$sEH;gP~div!3=qk2e?dI#`Lnl2SG80?S7G!i-7zwBVLJ=d$3`t=^ zCQ2$lM{s=d3hLGDd}kjRAMIV81<8Kl;AcYu)?*HPuVE$)kcQCd@P?Q(HC|3Yj%34V zK3NaLk4bG>Ql&9FzP*~JDQ%#;h4hx7)L%i?K3Q2m7ep4GDV0|35>bA|*c4Ge@1S+; z?Ng0Yj_xQ7=adgTS+(oSz}+VLcbiJVXRSfxt+a4+uWq>$eT|T~fbQ%#4dTR_UN4$V!Hp zu$1iKUt|q>J59>6ckP7bO{vV~QbOD}X>B?7ms_g&zjpY)mbtr@k^-9iKaY=m{(pXc zcD&{PnJGHd zaWsHKYZuZG{_BztoWAdRu1eYPzmcP5%SA6c^+I&HkT!PftOBSn&| zjKp!i)I+({EAs^irsVA87Z8N7eoxRW9@_jQfQ3VpHs%7F#ltR+pVuS?1>!)@U!C)3 zXuenI02Xlc=-7RjcK_|Etja%HTd?TxA_To8_3Ju?S?l%yBpXxM{0w&v2~La zk}A5)S8?RZQ?tS=;2_WW+x-Z(|LJv)cC7>Mfw>foJ1t)=OY`yEW6fU zl}m{G+Yf}f5D4{Zh#3U^4Dzw}9rCf=a!S2!f27Gzn2$yKi!^qs2d99fjMHhv!_T~e zvU)CV@<`2$5;}cRvsi5XJl(`B3i;;Q@`?RDwvX9!?-@;lbh&t-!j1VJHg?oHSYbZR zUBI_@-pLoSM8<+CDcZ|*Ej(n}M+EdH!9@!HhuTGf%pE&ZhF+5xU0sL#{v5jNonp}6 zNlA>}+0t^B`09zyXj|W z^KDq2#+CUp&AjSYXK#FJ(G!+46}!Z-rHQ!q6mIsZPW}|P^|CnFFZGzordBI77rX50 z6EYOn$bYkFHR->b@_(Nkp8N9O>G{Dn{^v%DqO|WWS7-d4MO|e*(V|)~LzH30QR)V} zwm(0TP*z~jNhB+p)yrd6y;VwM*1UC-#fpYyNvtlE%oFDk-#kNBR<`D>)J3ni^X$rGd$znIo))-d8y4H9HZST3#WXS6nd1xiUz$5vL+-yRaivORh_(Nm_`tn%&TTJ{a z)vG57W?WSYydjWpD#ZT#0Wwh9KMG3VRlE%2fz!Lo1ma1^Xcv-<#8}EEygG@fhO977 zD7-_0rVY|UjR>u>V{WTj_|~^1bwU@YdOyrK+`Y~pTc>3=u>yT8l zbE%~y7k2TJO(49-xE(s1kz_hSP3ifa`SCK*I^$)Np>LD*#o3!z--64Vt1hoL?LEUL z!^@kiRXo*ioEw>dlVKvW+KQnKB8CU||H=lKghp8b$ZVi~O!2G|RC&hSjJ@*NYbl4N z)wQZu|G2tbT=gYi`Zg^SI7ErRL)AxXZwfqi+kk^AG{(*TqtbU1AE06?`YB?Iwj8 z8xtP5Hr9IYj3lCxAO2+KHLuw#uEwVtGTkt=gG`qdnxFo)EP83n!FSUnQM&;c^nmy~ z)RRFY5PwD5pnW;bbY3B~HCl(_Mdnql&?%gHW*E=v@B;VJf zMn`I~hl*qGpb(mdS`pr9ZEH29ozM~lnbN4x!*XSutJ#pMVpvHCvj6HOa_6YaLWS3% z6B%nJWG;HmG_8bRi11dD;;=%c9_3>eF&ub{KLW&yTqPdsr(O) zfBN>~a#dbmV%v1Q08~v@@8hLB+hp9^LK*`jLi0-t(K8#gi~B9lL${#cqKSQJDgWMo zj7P(w=PtLDVn@_oPs%lW{IoCvjYh|?iZIM3#D*nRm@vtospr&MT%a~}IVrbfJ7*_( z&K}pt>1qU`WXd@D3C9TBqdABPQn9$@E#)47j0tUAJr4*+e|a*7?BCJcn-B?>3b_5& z*MoMWU?k$wCS9$Alp^t;kYCi7QflNsGUaF`0$^kOuY=P2-=mYQ|JO!JDgNhMvFs~} z{wX(*Rr>S~AWh0UI?pqTaW5UOoO#2fo)%2e&oAxy? zP5S@I(XmhekI%R9zcx~=6qGA-0cMNjdSx3+@ybfMU0IRR6>M5FXPr~Iw#eVgR-U%C zBA;Wea?V;MYyI@zZB;Em_2h#u_@UOPnctRutZ8kXT((VykZl&$ts$Yl)X9G`{{8y% zf1DhZ-hZ8)o^JL3jTB8fRJy|zT>I$ z0gBSEGk>btU7wMZt~vQuO#kRhqx^pnMP!;TWe0Au{~jHkd-)#@4$cp^^8Y4^Bme8Q zUa=map)RHl=!TR=E2dN{#$yJRbTS=2;~4tJ`z~?f_PQj<{t%OW%K#5MwrKon$T5u0_;W=UM(L-39DP?IvnjEk8ro zf%=tcT9q%^k6@9^3m=6m!IDy_vlrTlpmm4uV-NLeBmWUbdUd(er!NCn%YSabk#*Yt z&QARNuLp-G+x*`fDS;>{D-#0!kQ1H6K)><&1wn5XEK#sB_RdD7K^MO+@}M91rA{LB z#=1(OusVuNvsmc1{rm*O#wBX8JYTYOxNxASk3vN37&~b5UZ-yGvX*ja!+HN?EumdQ zDSgaRU|acb88cv${C9rl-~S#So^12KZlnZ=XOt&_TD=gsh(Rz2VbkJZ$vhZ19v_8V z*x6Xi-$e*bf_jsLchBDeCZDTf@VcR#5mS2rzFsvP20B?#*M z)KU1$TdiN!hDBRUfawjRT4$|i*?o}>V%~E}t zLft3rb7+>iolsOuw;xeDs+%7pR;=Vjjm{`0P~=%sjy1ls>`kybJ1TCu!8pAO1TU|X z?(%keog#akmdOKWr$_l=giva0!HW+Wia3hFFS^mMGKMxMDtdOm z=^QL9>iZf*|2fJMGM}K7cay1OtKDiO{1R$69C9?8CO4=fZcI01i^S4uiQIFDCM4~Q zS}dEb6S2RMVKv9u zgoJPO|MB&|qr>ylgRTCziK19#vAU~L0W*pT#eBYq!;iJuHgWGGy0g_WtNTaN$OHym zv@x-M;FUV7_F~p*XZ9>xA?NG$GfTp(Rk#H3&+ihZ{XAFC@#EjjsJLbjSjefMvbXwp z3nfJB9eV)AzfD;iCx37`$KYED0+@gW zW*A5QUsjML1&g0qmFqp8wQWZA%(aft=Vl zruv}xTqG*5*)q8pm$&O86j&RfY6t9=wtThZr2Dsq_HoGFpqg)eYQFo+iS3n(+)9#e zM^85_SS!M>g?w>Zg>)S=d0C%PGQ%;Vdx8$hiz@xW#O9tr9*u?GibdNb0qh=UN<0q? zt>#6Ak~9qX1u~C-en!y^eBrsBYfm^VB{ke5obq%Xw>buK6?+;Oa9_yZ^t;M>D|T z1D~1-yn5|dZhPh|t$$-BSVLU(`R)%nOS|Eh$rtxoyrl#>28lT7dFdz|8>l0I0aLH|2EDCPe;Jv-m( ze;X+({u`oq`fV{#>kmvKceOwCZ(53BmO^+tMxd{$L*Kk!w)sqghZNHJqB^8PXCQW? zASBI-qSK&I2l1$Q-=l_PKX}Cyp}Gu;8`tKa*jplMcby9>CBZ_8&^D(Sx#HJ0)FFr|t9pO)kQ zoE~lC|7@fLzIiT`uXD3 zOEIv&-Mo3-x8W5;Uqv-abFR$^U}N%N{*(%oV8RNv9(NJp$h-!OkzBP0qCzx?&UVnM70$yU)Ni}Gc z|IhvWAIC?B+x#CJDNUrUasxQDPOJLzMkH``g5wW+U}wlIf@qr5zMc~Ol&tXPPA8`V zLze7|?JDidPdK^ZRGehdYuSt~Nn(M@z-m9shTWht|5kBkEK>uSj!x8FA@V(MR|BsJK{@;gZTl&9|(nSA@4bYw7tG3lN zzku!7G4xHN-C9S>QlEnNZw^OL^*Znar>}LhgbY!J8AoZ<;H+EMaB1>y0W(D3SucA< zWC%02FINzME?WY%l;BO8%)u`T+OI$^olppeD34}{Q&23v(kJc+2fuv9e(eWV-Zhym z7U*DGf~A4};|aV&*V80X5nUEz1Wok+@X(L{b#$-4H6V!B+UdX7Yd0R?H(r_#cmNGA2rt=|?0#;giT*9cj95v^*_WfN~n{O#ha4 zZ%er}(0@xyT$~3q+kZ;=zmHB2xAcD#rHTG~8=yN6umDu^0k0R|9F(E}oQ^gj-M%aP zD0lnCnup3O*~UiHzqTN01Cd<0+(5*}^3u7=JS6X&`&$dpdP)=hCv-uhk5wAz|IyL0 zC;uOwpC24=>Hj85BmLJKppx*Le_KDZSyYhvLGhQxB6j#ByRoZz0YRKL4&8KGO7yC{ zAl*LtvZ_NE%cMkeE>ZPLaW7(fcNTc5j!V2s)_+}MJ%on&j_${czFsi`J=UTN8@Yhz ziNQ!^ow~LVYk0cD5EZmn^=GnH1-$yr%J=hG>AM*3284pgnOgsDN&gBC{I@!KkNJ~U z!-cJ3^z*smbXpa&JjjhLc_Rns3mWbu*rG-doG)fD|0L8r1}oKd#fe~lq2?X8?3RIV zzBKTE6DVRS8KBYr=kx!ggVV$9`;U#3CjOs?1X@h{GtH}2Kc|D{%bvV?S4GanWbIm< z6Z)S0)Q?Ttp}oax zSiG%FEw3LIx>ZO$G&9gyJ1of|W;azUiB(Nn=!)yyZy|-Wf)wP_wG*^aeGy_&1OIo! z16?L?5nqr-|GxuY|2sNAI^XjDO_V17U$FtYYl1rXRyA3#=&4yHoORX(9bDF~3I+z& zO(_fkSXw;{05yuDyHr~}@pCSn=>LLhV59x-)X)F7&Hucq(vALag!F%wWPd4=zjAWF zCH32)N;mqySO9=#`QNAi$0x_z{I44+9qIp40RU!o0RXByS_>=KSO9>k0K1EGgVluq zsEAr^c*8aZz~^5y{U3}`GQoE#p=kAeG|>NpQ$PRP;nDf_{(m#&FW?$-j%X@_N2whE z9>ypI!zoT;K}Rzf-NQS?2ED(iC|_)vDaRf*Mo9wh5;9c5n{ax!2PjG)$1?;n$j8=q zn8v-ofE3*+BJ)H=$VIWD$p6RgK)o9$scb1w0vVzp!6_Q_2G4Ka-*7@v?=Rp|g<*Vm zc>`ihS#NNM`BVA73jN+-_)q#&{;&BkzI!VE$Nb4=>C*y`3WNeiI6?fZ|7ly9dDr-(6dL#9-E=tn4J2pkR$ zd%bH&;RJC+S+A#lAoQ7Y`FJ}<;FeC2jKs#kwK@@d0Q0{xKxFa|73l4+D#{wg!zm|} zX>ce8KM{KWtO8vBQpc730VNY4KlU!-7z+W92ypiT0u%5fL*RP~Q~nJ6Or|o>o5`h@ z81N5--UFP1jFNa7iH3UsGLVq;E_j;?#IKkG%mi^k5l`lT$*Iw41fY$e4iO$#fFh$2 zjxbCBMHyk36FT1m5#%r-cYsh0c#vZc6Gl{mz>MM<HxGD^mHh&hU%RRG%u-%iswk!(iYEeh-i1u0_P^MpR+5f zW(4!`6P)e>m=Zol)a)RR(pc;P6^P!#w{mJt@I{zqkfM}pAb^a(2u3);9LhM4FpZxQ zS^*`aWI|*$w^uNn13tzy1{tIrBL;9<0b+(pq7!9|R5VOI4})Isax4|J=a3`oU>_Zv z9_$|+?jIcHHS~Ekm5%qLM23I-_U5?(*Xw;JgG`PHov8lckW4v%iD2eRCQw!7sHxNq zCn)7AyuX;L8#3Y#Vn6k=1VM&WWX6a;0|~l=$^Xsi6v^<%Y(VH;ulJg89HCxMY|AQ2 z_CyXjCec*%wFh)p|NUS8OV{}C|N7s%CWQb@!J7=FJq^Q56!?KWpc$fjvZ+J6R3uU~ zLn&8LFoy_CV2l8qL7c#0f_hUK&s2l<(38}NamdvXl(@dkm&c5OqYqrB!=d7M9{jZ8S`tSex-(mtF z;1tGa0_nZjDq-M*UT=SurPr%vLAQubm|9@NfxsA1G@OGwLHZe(lc`)4H8q^bdD>Gn zQjlAf=paUtqT(6qi381qoEl@M7!s1wsiM3oN%y^@rX!g<%RUgKFlUOAdduc81tAW# zr^1Hr36XY!xjfJbo(Q7Wb9)=~dM`#J6v^Wv$om)p>y+mEcSNR?j{!_mJVTU0nx{${ zVahnjro#kB$-I~ELy(VG(*g)sh9bd9fB=zG2!DsG{VTR+FW2r*QxRDOD4aqrX7Fkxx}%k= zX9qQ&WXZfB))f6?im4(?y=Y1W;ZEkFPb61G#;-*zqIg(7v3qimlc}738jS@7gFPW) zBP!(pO;3s}!e*}aWU?YS8sP*>T7XiH1zDHt4X1oeDE=pkdlWI0B#5dX^6n@aQHWCo zc*+dJbGK}-C+I>%GQlqNvi>)dTfRrmx?6y-2Q5+!25m_%ZuX{3YGMnlM(!`}_ zN_#ZN8)jL85$iD|R+6J+F4+Kr(YSs)nr&g73VHr!kj{JUKu{#vODwpkS%N{Y_p_PK zh@>pT(UeSCGB;9$GZ=9+Wk2}@3MydcPmrMC1Py@Nnt-ARiMcG}hEp46FNZ19A!!k` z;QVuS=F~Y7GZT?iksl^aej_5Ngx;q;d+z6AecV$5xm;VZQPO$!;lXJ@rZAu-JA_kC zgbWY~j@Zjjrs~cn0&ZI)2IzAq#{-iDNI|TpSCob6vEUIFsQiFSsv)NwrgP0CWQ^#! z&Fv^i$Q=P>RFHI)RjfFZ3_LO7zM87JrE|arV2}xkmLewhlcq7Tmf>=wcf}yyfZHEl zfEWL9`{MO2xPI~W)z$6oi|63mpTWiT^~-gy|NrAZU3^W8RlMrT$CfliIETU*@8*ZQz{ch5za8u$d~nTPGsnQbDAt7{H)hI z9DrM*C6l?ByRv8?KYf4w61>wy{%CL@`D8i=3FL?x>MwOO@k7peRaOHg7XxxE#3H#M zA!q?u4`Qo{87$h1Nt+;;G6kDy6{Z-TA#|ltL{O@1LzGA6my}7gyrWQMEUbhVLRdg^ za2^0hLd_?&kWgKeRLTG{mHzEgK84yGa3og+VX?l?z!SJz084FnirkWsq4N2TgheI^ z0US>nLm|2#Z8*!ur&rsTIEFIAqdUhgk|0k7diFuR**j3%hp+Xwoo!$lO4Y097V0N4lD z>M_GJ@b{hXrb+S|PSD@w4{yX-VD|U@9T$MAyAR%edvUn{Fwx9_(0~_5$pE@0Fc5y1q37aycqEdf_4M|1=u^bGtR zf7su7tCSnnQs%P#d$0FzKtNO6egEIU-`!f$oUOqBo6NE!>q(-GK12w`44fUyBycd| pQu&l(J|9!^kf&Su#3jL{{R30|No + 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: 0 + - variable: runAsGroup + label: "runAsGroup" + description: "The groupID of the user running the application" + schema: + type: int + default: 0 + # 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: 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/librespeed/13.7.4/templates/NOTES.txt b/stable/librespeed/13.7.4/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/librespeed/13.7.4/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/librespeed/13.7.4/templates/common.yaml b/stable/librespeed/13.7.4/templates/common.yaml new file mode 100644 index 0000000..b51394e --- /dev/null +++ b/stable/librespeed/13.7.4/templates/common.yaml @@ -0,0 +1 @@ +{{ include "tc.v1.common.loader.all" . }} diff --git a/stable/librespeed/13.7.4/values.yaml b/stable/librespeed/13.7.4/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/librespeed/13.7.5/.helmignore b/stable/librespeed/13.7.5/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/librespeed/13.7.5/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/librespeed/13.7.5/CHANGELOG.md b/stable/librespeed/13.7.5/CHANGELOG.md new file mode 100644 index 0000000..9d1a607 --- /dev/null +++ b/stable/librespeed/13.7.5/CHANGELOG.md @@ -0,0 +1,100 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + +## [librespeed-13.7.5](https://github.com/truecharts/charts/compare/librespeed-13.6.0...librespeed-13.7.5) (2024-03-25) + +### Chore + + + +- 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/linuxserver/librespeed to 5.3.0[@f18f467](https://github.com/f18f467) by renovate ([#19728](https://github.com/truecharts/charts/issues/19728)) + +- 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/linuxserver/librespeed to 5.3.0[@e8430ca](https://github.com/e8430ca) by renovate ([#19412](https://github.com/truecharts/charts/issues/19412)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [librespeed-13.7.5](https://github.com/truecharts/charts/compare/librespeed-13.6.0...librespeed-13.7.5) (2024-03-25) + +### Chore + + + +- 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/linuxserver/librespeed to 5.3.0[@f18f467](https://github.com/f18f467) by renovate ([#19728](https://github.com/truecharts/charts/issues/19728)) + +- 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/linuxserver/librespeed to 5.3.0[@e8430ca](https://github.com/e8430ca) by renovate ([#19412](https://github.com/truecharts/charts/issues/19412)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [librespeed-13.7.4](https://github.com/truecharts/charts/compare/librespeed-13.6.0...librespeed-13.7.4) (2024-03-25) + +### Chore + + + +- update container image ghcr.io/linuxserver/librespeed to 5.3.0[@f18f467](https://github.com/f18f467) by renovate ([#19728](https://github.com/truecharts/charts/issues/19728)) + +- 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/linuxserver/librespeed to 5.3.0[@e8430ca](https://github.com/e8430ca) by renovate ([#19412](https://github.com/truecharts/charts/issues/19412)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [librespeed-13.7.4](https://github.com/truecharts/charts/compare/librespeed-13.6.0...librespeed-13.7.4) (2024-03-25) + +### Chore + + + +- update container image ghcr.io/linuxserver/librespeed to 5.3.0[@f18f467](https://github.com/f18f467) by renovate ([#19728](https://github.com/truecharts/charts/issues/19728)) + +- 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/linuxserver/librespeed to 5.3.0[@e8430ca](https://github.com/e8430ca) by renovate ([#19412](https://github.com/truecharts/charts/issues/19412)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [librespeed-13.7.4](https://github.com/truecharts/charts/compare/librespeed-13.6.0...librespeed-13.7.4) (2024-03-25) + +### Chore + + + +- update container image ghcr.io/linuxserver/librespeed to 5.3.0[@f18f467](https://github.com/f18f467) by renovate ([#19728](https://github.com/truecharts/charts/issues/19728)) + +- 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/linuxserver/librespeed to 5.3.0[@e8430ca](https://github.com/e8430ca) by renovate ([#19412](https://github.com/truecharts/charts/issues/19412)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) + + +## [librespeed-13.7.4](https://github.com/truecharts/charts/compare/librespeed-13.6.0...librespeed-13.7.4) (2024-03-24) \ No newline at end of file diff --git a/stable/librespeed/13.7.5/Chart.yaml b/stable/librespeed/13.7.5/Chart.yaml new file mode 100644 index 0000000..5777c10 --- /dev/null +++ b/stable/librespeed/13.7.5/Chart.yaml @@ -0,0 +1,37 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + 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.0 +dependencies: + - name: common + version: 20.2.4 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: Librespeed is a HTML5 webpage to test upload and download speeds +home: https://truecharts.org/charts/stable/librespeed +icon: https://truecharts.org/img/hotlink-ok/chart-icons/librespeed.png +keywords: + - librespeed + - speedtest +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: librespeed +sources: + - https://github.com/librespeed/speedtest + - https://github.com/truecharts/charts/tree/master/charts/stable/librespeed + - https://ghcr.io/linuxserver/librespeed +type: application +version: 13.7.5 diff --git a/stable/librespeed/13.7.5/README.md b/stable/librespeed/13.7.5/README.md new file mode 100644 index 0000000..e7948fa --- /dev/null +++ b/stable/librespeed/13.7.5/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/librespeed) + +**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/librespeed/13.7.5/app-changelog.md b/stable/librespeed/13.7.5/app-changelog.md new file mode 100644 index 0000000..9c4c85d --- /dev/null +++ b/stable/librespeed/13.7.5/app-changelog.md @@ -0,0 +1,19 @@ + + +## [librespeed-13.7.5](https://github.com/truecharts/charts/compare/librespeed-13.6.0...librespeed-13.7.5) (2024-03-25) + +### Chore + + + +- 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/linuxserver/librespeed to 5.3.0[@f18f467](https://github.com/f18f467) by renovate ([#19728](https://github.com/truecharts/charts/issues/19728)) + +- 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/linuxserver/librespeed to 5.3.0[@e8430ca](https://github.com/e8430ca) by renovate ([#19412](https://github.com/truecharts/charts/issues/19412)) + +- update container image common to v20.2.0[@91ade87](https://github.com/91ade87) by renovate ([#19361](https://github.com/truecharts/charts/issues/19361)) \ No newline at end of file diff --git a/stable/librespeed/13.7.5/app-readme.md b/stable/librespeed/13.7.5/app-readme.md new file mode 100644 index 0000000..7e86075 --- /dev/null +++ b/stable/librespeed/13.7.5/app-readme.md @@ -0,0 +1,8 @@ +Librespeed is a HTML5 webpage to test upload and download speeds + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/librespeed](https://truecharts.org/charts/stable/librespeed) + +--- + +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/librespeed/13.7.5/charts/common-20.2.4.tgz b/stable/librespeed/13.7.5/charts/common-20.2.4.tgz new file mode 100644 index 0000000000000000000000000000000000000000..e02a4ec419295564ee54731f20fe2563fa9e2f00 GIT binary patch literal 101809 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 literal 0 HcmV?d00001 diff --git a/stable/librespeed/13.7.5/ix_values.yaml b/stable/librespeed/13.7.5/ix_values.yaml new file mode 100644 index 0000000..36cf366 --- /dev/null +++ b/stable/librespeed/13.7.5/ix_values.yaml @@ -0,0 +1,23 @@ +image: + repository: ghcr.io/linuxserver/librespeed + tag: 5.3.0@sha256:f18f467599991f14c69a6e25d5287b7ec06e5bc3e23939d4b18e26a19c59f9ef + pullPolicy: IfNotPresent +service: + main: + ports: + main: + port: 10016 + targetPort: 80 +persistence: + config: + enabled: true + mountPath: "/config" +portal: + open: + enabled: true +securityContext: + container: + readOnlyRootFilesystem: false + runAsNonRoot: false + runAsUser: 0 + runAsGroup: 0 diff --git a/stable/librespeed/13.7.5/questions.yaml b/stable/librespeed/13.7.5/questions.yaml new file mode 100644 index 0000000..9eed1fe --- /dev/null +++ b/stable/librespeed/13.7.5/questions.yaml @@ -0,0 +1,2839 @@ +groups: + - name: Container Image + description: Image to be used for container + - name: General Settings + description: General Deployment Settings + - name: Workload Settings + description: Workload Settings + - name: App Configuration + description: App Specific Config Options + - name: Networking and Services + description: Configure Network and Services for Container + - name: Storage and Persistence + description: Persist and Share Data that is Separate from the Container + - name: Ingress + description: Ingress Configuration + - name: Security and Permissions + description: Configure Security Context and Permissions + - name: Resources and Devices + description: "Specify Resources/Devices to be Allocated to Workload" + - name: Middlewares + description: Traefik Middlewares + - name: Metrics + description: Metrics + - name: Addons + description: Addon Configuration + - name: Backup Configuration + description: Configure Velero Backup Schedule + - name: Advanced + description: Advanced Configuration + - name: Postgresql + description: Postgresql + - name: Documentation + description: Documentation + +portals: + open: + protocols: + - "$kubernetes-resource_configmap_tcportal-open_protocol" + host: + - "$kubernetes-resource_configmap_tcportal-open_host" + ports: + - "$kubernetes-resource_configmap_tcportal-open_port" + +questions: + - variable: global + group: General Settings + label: "Global Settings" + schema: + additional_attrs: true + type: dict + attrs: + - variable: stopAll + label: Stop All + description: "Stops All Running pods and hibernates cnpg" + schema: + type: boolean + default: false + + - variable: workload + group: "Workload Settings" + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "" + schema: + additional_attrs: true + type: dict + attrs: + + - variable: type + label: Type (Advanced) + schema: + type: string + default: Deployment + enum: + - value: Deployment + description: Deployment + - value: DaemonSet + description: DaemonSet + + - variable: replicas + label: Replicas (Advanced) + description: Set the number of Replicas + schema: + type: int + show_if: [["type", "!=", "DaemonSet"]] + default: 1 + + - variable: podSpec + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: containers + label: Containers + schema: + additional_attrs: true + type: dict + attrs: + + - variable: main + label: Main Container + schema: + additional_attrs: true + type: dict + attrs: + + - variable: envList + label: Extra Environment Variables + description: "Please be aware that some variables are set in the background, adding duplicates here might cause issues or prevent the app from starting..." + schema: + type: list + default: [] + items: + - variable: envItem + label: Environment Variable + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + - variable: value + label: Value + schema: + type: string + - variable: extraArgs + label: Extra Args + schema: + type: list + default: [] + items: + - variable: arg + label: Arg + schema: + type: string + + - variable: advanced + label: Show Advanced Settings + description: Advanced settings are not covered by TrueCharts Support + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: command + label: Command + schema: + type: list + default: [] + items: + - variable: param + label: Param + schema: + type: string + + - variable: 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: 10016 + 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: 0 + - variable: runAsGroup + label: "runAsGroup" + description: "The groupID of the user running the application" + schema: + type: int + default: 0 + # 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: 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/librespeed/13.7.5/templates/NOTES.txt b/stable/librespeed/13.7.5/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/librespeed/13.7.5/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/librespeed/13.7.5/templates/common.yaml b/stable/librespeed/13.7.5/templates/common.yaml new file mode 100644 index 0000000..b51394e --- /dev/null +++ b/stable/librespeed/13.7.5/templates/common.yaml @@ -0,0 +1 @@ +{{ include "tc.v1.common.loader.all" . }} diff --git a/stable/librespeed/13.7.5/values.yaml b/stable/librespeed/13.7.5/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/librespeed/app_versions.json b/stable/librespeed/app_versions.json new file mode 100644 index 0000000..6445cbc --- /dev/null +++ b/stable/librespeed/app_versions.json @@ -0,0 +1,34753 @@ +{ + "13.7.5": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/librespeed/13.7.5", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/timezone", + "definitions/certificate", + "definitions/interface", + "normalize/interfaceConfiguration" + ], + "human_version": "5.3.0_13.7.5", + "version": "13.7.5", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "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.0", + "dependencies": [ + { + "name": "common", + "version": "20.2.4", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "Librespeed is a HTML5 webpage to test upload and download speeds", + "home": "https://truecharts.org/charts/stable/librespeed", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/librespeed.png", + "keywords": [ + "librespeed", + "speedtest" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "librespeed", + "sources": [ + "https://github.com/librespeed/speedtest", + "https://github.com/truecharts/charts/tree/master/charts/stable/librespeed", + "https://ghcr.io/linuxserver/librespeed" + ], + "type": "application", + "version": "13.7.5" + }, + "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": "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": 10016, + "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": 0 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID of the user running the application", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "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": "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": "

Librespeed is a HTML5 webpage to test upload and download speeds

\n

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

\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

librespeed-13.7.5 (2024-03-25)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.4@f245f5c by renovate (#19731)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/librespeed to 5.3.0@f18f467 by renovate (#19728)

    \n
  • \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/librespeed to 5.3.0@e8430ca by renovate (#19412)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

librespeed-13.7.5 (2024-03-25)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.4@f245f5c by renovate (#19731)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/librespeed to 5.3.0@f18f467 by renovate (#19728)

    \n
  • \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/librespeed to 5.3.0@e8430ca by renovate (#19412)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

librespeed-13.7.4 (2024-03-25)

\n

Chore

\n
    \n
  • \n

    update container image ghcr.io/linuxserver/librespeed to 5.3.0@f18f467 by renovate (#19728)

    \n
  • \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/librespeed to 5.3.0@e8430ca by renovate (#19412)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

librespeed-13.7.4 (2024-03-25)

\n

Chore

\n
    \n
  • \n

    update container image ghcr.io/linuxserver/librespeed to 5.3.0@f18f467 by renovate (#19728)

    \n
  • \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/librespeed to 5.3.0@e8430ca by renovate (#19412)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

librespeed-13.7.4 (2024-03-25)

\n

Chore

\n
    \n
  • \n

    update container image ghcr.io/linuxserver/librespeed to 5.3.0@f18f467 by renovate (#19728)

    \n
  • \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/librespeed to 5.3.0@e8430ca by renovate (#19412)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

librespeed-13.7.4 (2024-03-24)

" + }, + "13.7.4": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/librespeed/13.7.4", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/timezone", + "definitions/certificate", + "definitions/interface", + "normalize/interfaceConfiguration" + ], + "human_version": "5.3.0_13.7.4", + "version": "13.7.4", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "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.0", + "dependencies": [ + { + "name": "common", + "version": "20.2.3", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "Librespeed is a HTML5 webpage to test upload and download speeds", + "home": "https://truecharts.org/charts/stable/librespeed", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/librespeed.png", + "keywords": [ + "librespeed", + "speedtest" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "librespeed", + "sources": [ + "https://github.com/librespeed/speedtest", + "https://github.com/truecharts/charts/tree/master/charts/stable/librespeed", + "https://ghcr.io/linuxserver/librespeed" + ], + "type": "application", + "version": "13.7.4" + }, + "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": "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": 10016, + "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": 0 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID of the user running the application", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "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": "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": "

Librespeed is a HTML5 webpage to test upload and download speeds

\n

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

\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

librespeed-13.7.4 (2024-03-25)

\n

Chore

\n
    \n
  • \n

    update container image ghcr.io/linuxserver/librespeed to 5.3.0@f18f467 by renovate (#19728)

    \n
  • \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/librespeed to 5.3.0@e8430ca by renovate (#19412)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

librespeed-13.7.4 (2024-03-25)

\n

Chore

\n
    \n
  • \n

    update container image ghcr.io/linuxserver/librespeed to 5.3.0@f18f467 by renovate (#19728)

    \n
  • \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/librespeed to 5.3.0@e8430ca by renovate (#19412)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

librespeed-13.7.4 (2024-03-25)

\n

Chore

\n
    \n
  • \n

    update container image ghcr.io/linuxserver/librespeed to 5.3.0@f18f467 by renovate (#19728)

    \n
  • \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/librespeed to 5.3.0@e8430ca by renovate (#19412)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

librespeed-13.7.4 (2024-03-24)

\n

Chore

\n
    \n
  • \n

    update container image ghcr.io/linuxserver/librespeed to 5.3.0@f18f467 by renovate (#19728)

    \n
  • \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/librespeed to 5.3.0@e8430ca by renovate (#19412)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

librespeed-13.7.4 (2024-03-24)

\n

Chore

\n
    \n
  • \n

    update container image ghcr.io/linuxserver/librespeed to 5.3.0@f18f467 by renovate (#19728)

    \n
  • \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/librespeed to 5.3.0@e8430ca by renovate (#19412)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

librespeed-13.7.4 (2024-03-24)

\n

Chore

" + }, + "13.7.3": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/librespeed/13.7.3", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/timezone", + "definitions/certificate", + "definitions/interface", + "normalize/interfaceConfiguration" + ], + "human_version": "5.3.0_13.7.3", + "version": "13.7.3", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "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.0", + "dependencies": [ + { + "name": "common", + "version": "20.2.3", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "Librespeed is a HTML5 webpage to test upload and download speeds", + "home": "https://truecharts.org/charts/stable/librespeed", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/librespeed.png", + "keywords": [ + "librespeed", + "speedtest" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "librespeed", + "sources": [ + "https://github.com/librespeed/speedtest", + "https://github.com/truecharts/charts/tree/master/charts/stable/librespeed", + "https://ghcr.io/linuxserver/librespeed" + ], + "type": "application", + "version": "13.7.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": "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": 10016, + "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": 0 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID of the user running the application", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "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": "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": "

Librespeed is a HTML5 webpage to test upload and download speeds

\n

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

\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

librespeed-13.7.3 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/librespeed to 5.3.0@e8430ca by renovate (#19412)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

librespeed-13.7.3 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/librespeed to 5.3.0@e8430ca by renovate (#19412)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

librespeed-13.7.3 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/librespeed to 5.3.0@e8430ca by renovate (#19412)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

librespeed-13.7.3 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/librespeed to 5.3.0@e8430ca by renovate (#19412)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

librespeed-13.7.3 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/librespeed to 5.3.0@e8430ca by renovate (#19412)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

librespeed-13.7.3 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/librespeed to 5.3.0@e8430ca by renovate (#19412)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
" + }, + "13.7.2": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/librespeed/13.7.2", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/timezone", + "definitions/certificate", + "definitions/interface", + "normalize/interfaceConfiguration" + ], + "human_version": "5.3.0_13.7.2", + "version": "13.7.2", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "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.0", + "dependencies": [ + { + "name": "common", + "version": "20.2.2", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "Librespeed is a HTML5 webpage to test upload and download speeds", + "home": "https://truecharts.org/charts/stable/librespeed", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/librespeed.png", + "keywords": [ + "librespeed", + "speedtest" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "librespeed", + "sources": [ + "https://github.com/librespeed/speedtest", + "https://github.com/truecharts/charts/tree/master/charts/stable/librespeed", + "https://ghcr.io/linuxserver/librespeed" + ], + "type": "application", + "version": "13.7.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": "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": 10016, + "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": 0 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID of the user running the application", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "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": "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": "

Librespeed is a HTML5 webpage to test upload and download speeds

\n

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

\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

librespeed-13.7.2 (2024-03-18)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/librespeed to 5.3.0@e8430ca by renovate (#19412)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

librespeed-13.7.2 (2024-03-18)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/librespeed to 5.3.0@e8430ca by renovate (#19412)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

librespeed-13.7.2 (2024-03-18)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/librespeed to 5.3.0@e8430ca by renovate (#19412)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

librespeed-13.7.2 (2024-03-18)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/librespeed to 5.3.0@e8430ca by renovate (#19412)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

librespeed-13.7.2 (2024-03-18)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/librespeed to 5.3.0@e8430ca by renovate (#19412)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

librespeed-13.7.2 (2024-03-18)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/librespeed to 5.3.0@e8430ca by renovate (#19412)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
\n

librespeed-13.7.2 (2024-03-18)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/linuxserver/librespeed to 5.3.0@e8430ca by renovate (#19412)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
" + }, + "12.3.0": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/librespeed/12.3.0", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/interface", + "normalize/interfaceConfiguration", + "definitions/gpuConfiguration", + "definitions/timezone", + "definitions/certificate" + ], + "human_version": "5.3.0_12.3.0", + "version": "12.3.0", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "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.0", + "dependencies": [ + { + "name": "common", + "version": "17.5.0", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "Librespeed is a HTML5 webpage to test upload and download speeds", + "home": "https://truecharts.org/charts/stable/librespeed", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/librespeed.png", + "keywords": [ + "librespeed", + "speedtest" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "librespeed", + "sources": [ + "https://github.com/librespeed/speedtest", + "https://github.com/truecharts/charts/tree/master/charts/stable/librespeed", + "https://ghcr.io/linuxserver/librespeed" + ], + "type": "application", + "version": "12.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": "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": 10016, + "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": 0 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID of the user running the application", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "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": "

Librespeed is a HTML5 webpage to test upload and download speeds

\n

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

\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

librespeed-12.1.17 (2024-02-12)

\n

Chore

\n
    \n
  • update container image ghcr.io/linuxserver/librespeed to 5.3.0@d9c4605 by renovate (#18066)
  • \n
\n

librespeed-12.1.16 (2024-02-05)

\n

Chore

\n
    \n
  • update container image ghcr.io/linuxserver/librespeed to 5.3.0@8e56f58 by renovate (#17856)
  • \n
\n

librespeed-12.1.15 (2024-02-03)

\n

Chore

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

librespeed-12.1.14 (2024-01-29)

\n

Chore

\n
    \n
  • update container image ghcr.io/linuxserver/librespeed to 5.3.0@e7e8a14 by renovate (#17611)
  • \n
\n

librespeed-12.1.13 (2024-01-26)

\n

Chore

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

librespeed-12.1.12 (2024-01-21)

\n

Chore

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

librespeed-12.1.11 (2024-01-21)

\n

Chore

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

librespeed-12.1.10 (2024-01-21)

\n

Chore

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

librespeed-12.1.9 (2024-01-21)

\n

Chore

" + }, + "12.2.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/librespeed/12.2.1", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/interface", + "normalize/interfaceConfiguration", + "definitions/gpuConfiguration", + "definitions/timezone", + "definitions/certificate" + ], + "human_version": "5.3.0_12.2.1", + "version": "12.2.1", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "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.0", + "dependencies": [ + { + "name": "common", + "version": "17.4.2", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "Librespeed is a HTML5 webpage to test upload and download speeds", + "home": "https://truecharts.org/charts/stable/librespeed", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/librespeed.png", + "keywords": [ + "librespeed", + "speedtest" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "librespeed", + "sources": [ + "https://github.com/librespeed/speedtest", + "https://github.com/truecharts/charts/tree/master/charts/stable/librespeed", + "https://ghcr.io/linuxserver/librespeed" + ], + "type": "application", + "version": "12.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": "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": 10016, + "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": 0 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID of the user running the application", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "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": "

Librespeed is a HTML5 webpage to test upload and download speeds

\n

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

\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

librespeed-12.1.17 (2024-02-12)

\n

Chore

\n
    \n
  • update container image ghcr.io/linuxserver/librespeed to 5.3.0@d9c4605 by renovate (#18066)
  • \n
\n

librespeed-12.1.16 (2024-02-05)

\n

Chore

\n
    \n
  • update container image ghcr.io/linuxserver/librespeed to 5.3.0@8e56f58 by renovate (#17856)
  • \n
\n

librespeed-12.1.15 (2024-02-03)

\n

Chore

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

librespeed-12.1.14 (2024-01-29)

\n

Chore

\n
    \n
  • update container image ghcr.io/linuxserver/librespeed to 5.3.0@e7e8a14 by renovate (#17611)
  • \n
\n

librespeed-12.1.13 (2024-01-26)

\n

Chore

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

librespeed-12.1.12 (2024-01-21)

\n

Chore

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

librespeed-12.1.11 (2024-01-21)

\n

Chore

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

librespeed-12.1.10 (2024-01-21)

\n

Chore

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

librespeed-12.1.9 (2024-01-21)

\n

Chore

" + }, + "12.2.0": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/librespeed/12.2.0", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/interface", + "normalize/interfaceConfiguration", + "definitions/gpuConfiguration", + "definitions/timezone", + "definitions/certificate" + ], + "human_version": "5.3.0_12.2.0", + "version": "12.2.0", + "chart_metadata": { + "annotations": { + "max_scale_version": "23.10.2", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "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.0", + "dependencies": [ + { + "name": "common", + "version": "17.4.2", + "repository": "oci://tccr.io/truecharts", + "condition": "", + "alias": "", + "tags": [], + "import-values": [] + } + ], + "deprecated": false, + "description": "Librespeed is a HTML5 webpage to test upload and download speeds", + "home": "https://truecharts.org/charts/stable/librespeed", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/librespeed.png", + "keywords": [ + "librespeed", + "speedtest" + ], + "kubeVersion": ">=1.24.0-0", + "maintainers": [ + { + "name": "TrueCharts", + "email": "info@truecharts.org", + "url": "https://truecharts.org" + } + ], + "name": "librespeed", + "sources": [ + "https://github.com/librespeed/speedtest", + "https://github.com/truecharts/charts/tree/master/charts/stable/librespeed", + "https://ghcr.io/linuxserver/librespeed" + ], + "type": "application", + "version": "12.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": "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": 10016, + "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": 0 + } + }, + { + "variable": "runAsGroup", + "label": "runAsGroup", + "description": "The groupID of the user running the application", + "schema": { + "type": "int", + "default": 0 + } + }, + { + "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": "

Librespeed is a HTML5 webpage to test upload and download speeds

\n

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

\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

librespeed-7.0.0 (2022-11-10)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Major Change to GUI
  • \n
  • update helm general non-major (#4342)
  • \n
  • update helm general non-major (#4349)
  • \n
  • update helm general non-major (#4329)
  • \n
\n

librespeed-6.0.44 (2022-11-08)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#4342)
  • \n
  • update helm general non-major (#4349)
  • \n
  • update helm general non-major (#4329)
  • \n
\n

librespeed-6.0.43 (2022-11-08)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#4342)
  • \n
  • update helm general non-major (#4329)
  • \n
\n

librespeed-6.0.43 (2022-11-08)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#4342)
  • \n
  • update helm general non-major (#4329)
  • \n
\n

librespeed-6.0.43 (2022-11-08)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#4342)
  • \n
  • update helm general non-major (#4329)
  • \n
\n

librespeed-6.0.42 (2022-11-07)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#4329)
  • \n
\n

librespeed-6.0.42 (2022-11-06)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#4329)
  • \n
\n

librespeed-6.0.41 (2022-11-06)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#4317)
  • \n
\n

librespeed-6.0.40 (2022-11-05)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#4308)
  • \n
\n

librespeed-6.0.39 (2022-11-02)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#4261)
  • \n
\n

librespeed-6.0.38 (2022-10-25)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#4182)
  • \n
\n

librespeed-6.0.37 (2022-10-19)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#4122)
  • \n
\n

librespeed-6.0.36 (2022-10-12)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#4071)
  • \n
\n

librespeed-6.0.35 (2022-10-07)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major
  • \n
\n

librespeed-6.0.35 (2022-10-07)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major
  • \n
\n

librespeed-6.0.34 (2022-10-05)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • split addons in smaller templates (#3979)
  • \n
  • update helm general non-major
  • \n
\n

librespeed-6.0.33 (2022-09-27)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#3918)
  • \n
\n

librespeed-6.0.32 (2022-09-25)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#3898)
  • \n
\n

librespeed-6.0.31 (2022-09-22)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • refactor Services SCALE GUI
  • \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

librespeed-6.0.31 (2022-09-21)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • refactor Services SCALE GUI
  • \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

librespeed-6.0.31 (2022-09-21)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • refactor Services SCALE GUI
  • \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

librespeed-6.0.31 (2022-09-20)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • refactor Services SCALE GUI
  • \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

librespeed-6.0.31 (2022-09-20)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • refactor Services SCALE GUI
  • \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

librespeed-6.0.31 (2022-09-19)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • refactor Services SCALE GUI
  • \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

librespeed-6.0.31 (2022-09-19)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • refactor Services SCALE GUI
  • \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

librespeed-6.0.31 (2022-09-19)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • refactor Services SCALE GUI
  • \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

librespeed-6.0.31 (2022-09-17)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • refactor Services SCALE GUI
  • \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

librespeed-6.0.31 (2022-09-18)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

librespeed-6.0.31 (2022-09-16)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

librespeed-6.0.31 (2022-09-16)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

librespeed-6.0.31 (2022-09-15)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

librespeed-6.0.31 (2022-09-15)

\n

Chore

\n
    \n
  • update helm general non-major (#3767)
  • \n
  • split serviceSelector (#3751)
  • \n
\n

librespeed-6.0.30 (2022-09-12)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#3711)
  • \n
\n

librespeed-6.0.30 (2022-09-12)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#3711)
  • \n
\n

librespeed-6.0.30 (2022-09-11)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#3711)
  • \n
\n

librespeed-6.0.30 (2022-09-11)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#3711)
  • \n
\n

librespeed-6.0.30 (2022-09-11)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#3711)
  • \n
\n

librespeed-6.0.30 (2022-09-11)

\n

Chore

\n
    \n
  • update helm general non-major (#3711)
  • \n
\n

librespeed-6.0.29 (2022-08-30)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major (#3639)
  • \n
  • update helm chart common to v10.5.5 (#3626)
  • \n
\n

librespeed-6.0.28 (2022-08-30)

\n

Chore

\n
    \n
  • update helm chart common to v10.5.5 (#3626)
  • \n
\n

librespeed-6.0.27 (2022-08-29)

\n

Chore

\n
    \n
  • update helm general non-major (#3619)
  • \n
\n

librespeed-6.0.26 (2022-08-23)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#3545)
  • \n
\n

librespeed-6.0.25 (2022-08-12)

\n

Chore

\n
    \n
  • add documentation checkbox/section to all SCALE Apps
  • \n
  • update helm general non-major helm releases (#3456)
  • \n
\n

Fix

\n
    \n
  • move extraArgs from .Values.controller to .Values (#3447)
  • \n
\n

librespeed-6.0.24 (2022-08-08)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#3376)
  • \n
  • replace questions parts with templates (#3402)
  • \n
\n

librespeed-6.0.23 (2022-07-26)

\n

Chore

\n
    \n
  • update home links (#3291)
  • \n
  • update helm general non-major helm releases (#3302)
  • \n
\n

librespeed-6.0.22 (2022-07-23)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major helm releases (#3280)
  • \n
\n

librespeed-6.0.22 (2022-07-23)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major helm releases (#3280)
  • \n
\n

librespeed-6.0.22 (2022-07-23)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#3280)
  • \n
\n

librespeed-6.0.21 (2022-07-22)

\n

Chore

\n
    \n
  • Bump all charts to generate config and container references due to huge increase of repository
  • \n
  • update helm general non-major helm releases (#3268)
  • \n
\n

librespeed-6.0.19 (2022-07-19)

\n

Chore

\n
    \n
  • Update Readme and Description on SCALE
  • \n
\n

librespeed-6.0.18 (2022-07-14)

\n

Fix

\n
    \n
  • regenerate catalog and update template
  • \n
\n

librespeed-6.0.17 (2022-07-14)

\n

Fix

\n
    \n
  • bump to ensure .helmignore is present on all Charts
  • \n
\n

librespeed-6.0.15 (2022-07-12)

\n

Chore

\n
    \n
  • update icons (#3156)
  • \n
  • bump to cleanup old docs and use correct icon urls
  • \n
\n

librespeed-6.0.13 (2022-07-12)

\n

Chore

\n
    \n
  • bump to regenerate documentation
  • \n
\n

\n

librespeed-6.0.12 (2022-07-12)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#3147)
  • \n
\n

\n

librespeed-6.0.11 (2022-07-11)

\n

Chore

\n
    \n
  • move icons into the apps folder (#3139)
  • \n
\n

\n

librespeed-6.0.10 (2022-07-09)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#3113)
  • \n
\n

\n

librespeed-6.0.9 (2022-07-04)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#3066)
  • \n
\n

\n

librespeed-6.0.8 (2022-06-25)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2977)
  • \n
\n

\n

librespeed-6.0.7 (2022-06-22)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2948)
  • \n
\n

\n

librespeed-6.0.6 (2022-06-21)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2943)
  • \n
\n

\n

librespeed-6.0.5 (2022-06-17)

\n

Chore

\n
    \n
  • Sync questions and values env's (#2916)
  • \n
\n

\n

librespeed-6.0.4 (2022-06-14)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2886)
  • \n
\n

\n

librespeed-6.0.3 (2022-06-11)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2854)
  • \n
\n

\n

librespeed-6.0.2 (2022-06-07)

\n

Fix

\n
    \n
  • hotpatch to disable HPA and networkPolicy in SCALE interface, due to incompatible format.
  • \n
\n

\n

librespeed-6.0.1 (2022-06-07)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • sync all apps persistence configuration and always default to PVC
  • \n
\n

Fix

\n
    \n
  • remove malfunctioning SCALE migration script
  • \n
\n

Refactor

\n
    \n
  • BREAKING CHANGE (#2836)
  • \n
\n

\n

librespeed-6.0.0 (2022-06-07)

\n

Chore

\n
    \n
  • sync all apps persistence configuration and always default to PVC
  • \n
\n

Refactor

\n
    \n
  • BREAKING CHANGE (#2836)
  • \n
\n

\n

librespeed-5.0.19 (2022-05-31)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2803)
  • \n
\n

\n

librespeed-5.0.18 (2022-05-26)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major helm releases (#2759)
  • \n
\n

\n

librespeed-5.0.18 (2022-05-26)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2759)
  • \n
\n

\n

librespeed-5.0.17 (2022-05-24)

\n

Chore

\n
    \n
  • update helm general non-major helm releases
  • \n
\n

\n

librespeed-5.0.16 (2022-05-17)

\n

Chore

\n
    \n
  • Auto-update chart README [skip ci]
  • \n
  • update helm general non-major helm releases
  • \n
\n

\n

librespeed-5.0.16 (2022-05-17)

\n

Chore

\n
    \n
  • update helm general non-major helm releases
  • \n
\n

\n

librespeed-5.0.15 (2022-05-17)

\n

Chore

\n
    \n
  • update helm general non-major helm releases
  • \n
\n

\n

librespeed-5.0.14 (2022-05-10)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2649)
  • \n
\n

\n

librespeed-5.0.13 (2022-05-05)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2612)
  • \n
\n

\n

librespeed-5.0.12 (2022-04-26)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2573)
  • \n
\n

\n

librespeed-5.0.11 (2022-04-20)

\n

Chore

\n
    \n
  • add missing quote on description (#2515)
  • \n
  • update helm general non-major helm releases (#2524)
  • \n
\n

\n

librespeed-5.0.10 (2022-04-12)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2480)
  • \n
\n

\n

librespeed-5.0.9 (2022-04-03)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2410)
  • \n
\n

\n

librespeed-5.0.8 (2022-03-31)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2361)
  • \n
\n

\n

librespeed-5.0.7 (2022-03-30)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2354)
  • \n
\n

\n

librespeed-5.0.6 (2022-03-26)

\n

Chore

\n
    \n
  • bump all apps to trigger ci
  • \n
\n

\n

librespeed-5.0.1 (2022-03-07)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#2111)
  • \n
  • Remove -icon string from icon png's (#2040)
  • \n
\n

\n

librespeed-5.0.0 (2022-03-03)

\n

Chore

\n
    \n
  • remove fixed env from questions.yaml
  • \n
  • remove PUID from per-app env-vars if set to 568
  • \n
  • remove empty env var declaration from questions.yaml
  • \n
  • remove TZ from values. (#1945)
  • \n
  • update helm general major helm releases (#2021)
  • \n
\n

Fix

\n
    \n
  • BREAKING CHANGE Move some env-vars outside of env section (#2010)
  • \n
\n

\n

librespeed-4.0.46 (2022-03-02)

\n

Chore

\n
    \n
  • rename web_portal to open (#1957)
  • \n
  • update helm general non-major helm releases (#1999)
  • \n
\n

\n

librespeed-4.0.45 (2022-02-21)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1927)
  • \n
\n

\n

librespeed-4.0.44 (2022-02-15)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1901)
  • \n
\n

\n

librespeed-4.0.43 (2022-02-08)

\n

Chore

\n
    \n
  • fix links on Chart.yaml (#1862)
  • \n
  • update helm general non-major helm releases (#1871)
  • \n
\n

\n

librespeed-4.0.42 (2022-02-06)

\n

Chore

\n
    \n
  • update helm chart common to v8.15.0 (#1859)
  • \n
\n

\n

librespeed-4.0.41 (2022-02-05)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1852)
  • \n
\n

\n

librespeed-4.0.40 (2022-02-02)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1828)
  • \n
\n

\n

librespeed-4.0.39 (2022-01-25)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1791)
  • \n
\n

\n

librespeed-4.0.38 (2022-01-22)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1766)
  • \n
\n

\n

librespeed-4.0.37 (2022-01-21)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1759)
  • \n
\n

Fix

\n
    \n
  • set additional_attrs: true on all dicts (#1750)
  • \n
\n

\n

librespeed-4.0.36 (2022-01-18)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1732)
  • \n
\n

\n

librespeed-4.0.35 (2022-01-13)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1712)
  • \n
\n

Feat

\n
    \n
  • expose capabilities in GUI (#1709)
  • \n
\n

\n

librespeed-4.0.34 (2022-01-12)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1704)
  • \n
\n

\n

librespeed-4.0.33 (2022-01-11)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1693)
  • \n
\n

\n

librespeed-4.0.32 (2022-01-04)

\n

Chore

\n
    \n
  • update helm general non-major helm releases
  • \n
\n

\n

librespeed-4.0.31 (2021-12-28)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1623)
  • \n
\n

\n

librespeed-4.0.30 (2021-12-21)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1596)
  • \n
\n

\n

librespeed-4.0.29 (2021-12-19)

\n

Chore

\n
    \n
  • Last patch bump before RC2 branch-off
  • \n
  • remove editable: true as this is the default (#1576)
  • \n
\n

\n

librespeed-4.0.28 (2021-12-19)

\n

Chore

\n
    \n
  • completely remove mountPath reference from GUI (#1572)
  • \n
  • update helm general non-major helm releases (#1571)
  • \n
\n

\n

librespeed-4.0.27 (2021-12-18)

\n

Chore

\n
    \n
  • cleanup questions by removing hidden dicts (#1558)
  • \n
  • App-Icon Organization (#1539)
  • \n
\n

\n

librespeed-4.0.26 (2021-12-14)

\n

Chore

\n
    \n
  • update helm general non-major helm releases (#1535)
  • \n
\n

\n

librespeed-4.0.25 (2021-12-13)

\n

Chore

\n
    \n
  • move incubator apps to stable and bump everything
  • \n
\n

\n

librespeed-4.0.24 (2021-12-11)

\n

Chore

\n
    \n
  • set PUID to int instead of string (#1506)
  • \n
  • update general helm non-major helm releases (#1509)
  • \n
\n

\n

librespeed-4.0.23 (2021-12-07)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1481)
  • \n
\n

\n

librespeed-4.0.22 (2021-12-05)

\n

Chore

\n
    \n
  • bump apps to generate security page
  • \n
  • move all container references to TCCR (#1448)
  • \n
  • update non-major deps helm releases (#1471)
  • \n
  • update non-major deps helm releases (#1468)
  • \n
  • update non-major deps helm releases (#1453)
  • \n
  • update non-major (#1449)
  • \n
  • update non-major deps helm releases (#1432)
  • \n
  • update non-major (#1427)
  • \n
\n

Fix

\n
    \n
  • fix typo in theme selection (#1428)
  • \n
\n

\n

librespeed-4.0.21 (2021-12-05)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1468)
  • \n
\n

\n

librespeed-4.0.20 (2021-12-04)

\n

Chore

\n
    \n
  • bump apps to generate security page
  • \n
\n

\n

librespeed-4.0.19 (2021-12-04)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1453)
  • \n
\n

\n

librespeed-4.0.18 (2021-12-03)

\n

Chore

\n
    \n
  • move all container references to TCCR (#1448)
  • \n
  • update non-major (#1449)
  • \n
\n

\n

librespeed-4.0.17 (2021-11-30)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1432)
  • \n
\n

\n

librespeed-4.0.16 (2021-11-30)

\n

Chore

\n
    \n
  • update non-major (#1427)
  • \n
\n

Fix

\n
    \n
  • move conflicting ports to 10xxx range (#1415)
  • \n
\n

\n

librespeed-4.0.15 (2021-11-23)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1386)
  • \n
\n

\n

librespeed-4.0.14 (2021-11-23)

\n

Chore

\n
    \n
  • update non-major (#1384)
  • \n
\n

\n

librespeed-4.0.13 (2021-11-22)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1383)
  • \n
\n

\n

librespeed-4.0.12 (2021-11-16)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1345)
  • \n
\n

\n

librespeed-4.0.11 (2021-11-16)

\n

Chore

\n
    \n
  • update non-major (#1342)
  • \n
\n

\n

librespeed-4.0.10 (2021-11-15)

\n

Chore

\n
    \n
  • persistence cleanup and small bugfixes (#1329)
  • \n
  • update non-major deps helm releases (#1338)
  • \n
\n

\n

librespeed-4.0.9 (2021-11-14)

\n

Chore

\n
    \n
  • fixes around the GUI refactor (#1316)
  • \n
  • move port above advanced in GUI (#1326)
  • \n
  • clean up Chart.yaml (#1322)
  • \n
  • update non-major deps helm releases (#1328)
  • \n
\n

Fix

\n
    \n
  • split udp and tcp ports (#1321)
  • \n
  • Allow spaces in paths (#1306)
  • \n
\n

\n

librespeed-4.0.8 (2021-11-09)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1297)
  • \n
\n

\n

librespeed-4.0.7 (2021-11-07)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1295)
  • \n
\n

\n

librespeed-4.0.6 (2021-11-07)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1291)
  • \n
\n

Chore

\n
    \n
  • Simplify GUI for deployment, persistence and securityContext (#1289)
  • \n
\n

Feat

\n
    \n
  • Simplify the Services GUI (#1290)
  • \n
\n

\n

librespeed-4.0.5 (2021-11-02)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1267)
  • \n
\n

\n

librespeed-4.0.4 (2021-11-02)

\n

Chore

\n
    \n
  • update non-major docker tags (#1266)
  • \n
\n

\n

librespeed-4.0.3 (2021-11-01)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1264)
  • \n
\n

\n

librespeed-4.0.2 (2021-10-26)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1245)
  • \n
\n

\n

librespeed-4.0.1 (2021-10-26)

\n

Chore

\n
    \n
  • update helm chart common to v8.3.15 (#1240)
  • \n
  • update non-major (#1232)
  • \n
\n

\n

librespeed-4.0.0 (2021-10-25)

\n

Chore

\n
    \n
  • Adapt for TrueNAS SCALE RC1
  • \n
\n

\n

librespeed-3.0.20 (2021-10-20)

\n

Chore

\n
    \n
  • bump apps, remove duplicates and move incubator to stable for RC1
  • \n
  • update non-major deps helm releases (#1213)
  • \n
\n

Fix

\n
    \n
  • reenable postgresql migration scripting and bump all to force update
  • \n
\n

\n

librespeed-3.0.17 (2021-10-20)

\n

Chore

\n
    \n
  • bump versions to rerelease and fix icons
  • \n
\n

\n

librespeed-3.0.16 (2021-10-19)

\n

Change

\n
    \n
  • Project-Eclipse 3, Automatically generate item.yaml (#1178)
  • \n
\n

Chore

\n
    \n
  • Project-Eclipse 5, move app-readme to automatic generation script (#1181)
  • \n
  • update helm chart common to v8.3.13 (#1184)
  • \n
  • update non-major (#1174)
  • \n
\n

Feat

\n
    \n
  • Project-Eclipse 4, Add App grading annotations to Chart.yaml (#1180)
  • \n
\n

Refactor

\n
    \n
  • Project Eclipse Part 6, move questions.yaml to root App folder (#1182)
  • \n
\n

\n

librespeed-3.0.15 (2021-10-19)

\n

Chore

\n
    \n
  • Project-Eclipse part 2, adapting and cleaning changelog (#1173)
  • \n
  • update helm chart postgresql to v3.0.20 (#1177)
  • \n
\n

\n

librespeed-3.0.14 (2021-10-19)

\n

Fix

\n
    \n
  • fix previous SCALE bugfix not correctly being applied
  • \n
\n

\n

librespeed-3.0.13 (2021-10-19)

\n

Fix

\n
    \n
  • Solve issues regarding ix_values.yaml not containing the image and tag definitions. (#1176)
  • \n
\n

\n

librespeed-3.0.12 (2021-10-18)

\n

Chore

\n
    \n
  • Add description on persistence (#1172)
  • \n
\n

Refactor

\n
    \n
  • Project Eclipse - part 1 - remove ix_values.yaml (#1168)
  • \n
\n

\n

librespeed-3.0.11 (2021-10-17)

\n

Chore

\n
    \n
  • update helm chart common to v8.3.10 (#1160)
  • \n
\n

Fix

\n
    \n
  • force users using correct / prefix for mounPath (#1156)
  • \n
\n

\n

librespeed-3.0.10 (2021-10-13)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1133)
  • \n
\n

\n

librespeed-3.0.9 (2021-10-12)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1126)
  • \n
\n

\n

librespeed-3.0.8 (2021-10-12)

\n

Chore

\n
    \n
  • update non-major (#1122)
  • \n
\n

\n

librespeed-3.0.7 (2021-10-12)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1123)
  • \n
\n

\n

librespeed-3.0.6 (2021-10-05)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1099)
  • \n
\n

\n

librespeed-3.0.5 (2021-10-05)

\n

Chore

\n
    \n
  • update non-major (#1098)
  • \n
\n

\n

librespeed-3.0.4 (2021-09-29)

\n

Chore

\n
    \n
  • update helm chart common to v8.0.13 (#1060)
  • \n
\n

\n

librespeed-3.0.2 (2021-09-28)

\n

Chore

\n
    \n
  • update non-major (#1048)
  • \n
\n

\n

librespeed-3.0.1 (2021-09-26)

\n

\n

librespeed-3.0.0 (2021-09-26)

\n

\n

librespeed-2.0.3 (2021-09-21)

\n

Chore

\n
    \n
  • update non-major deps helm releases (#1014)
  • \n
\n

\n

librespeed-2.0.2 (2021-09-21)

\n

Chore

\n
    \n
  • update non-major (#1015)
  • \n
\n

\n

librespeed-2.0.1 (2021-09-13)

\n

Chore

\n
    \n
  • move all LSIO containers to github registry (#957)
  • \n
  • update non-major (#962)
  • \n
\n

Feat

\n
    \n
  • add new GUI and VPN support to all Apps (#977)
  • \n
  • Add VPN addon and move some config to includes (#973)
  • \n
  • pin all container references to digests (#963)
  • \n
  • Move some common containers to our own containers
  • \n
\n

\n

librespeed-1.9.15 (2021-09-08)

\n

Fix

\n
    \n
  • repair Hyperion and some misplaced GUI elements (#922)
  • \n
" + } +} \ No newline at end of file diff --git a/stable/librespeed/item.yaml b/stable/librespeed/item.yaml new file mode 100644 index 0000000..b61cde8 --- /dev/null +++ b/stable/librespeed/item.yaml @@ -0,0 +1,4 @@ +icon_url: https://truecharts.org/img/hotlink-ok/chart-icons/librespeed.png +categories: + - media +screenshots: [] diff --git a/stable/lidarr/19.2.0/.helmignore b/stable/lidarr/19.2.0/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/lidarr/19.2.0/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/lidarr/19.2.0/CHANGELOG.md b/stable/lidarr/19.2.0/CHANGELOG.md new file mode 100644 index 0000000..90e0409 --- /dev/null +++ b/stable/lidarr/19.2.0/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +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 new file mode 100644 index 0000000..e4f4882 --- /dev/null +++ b/stable/lidarr/19.2.0/Chart.yaml @@ -0,0 +1,39 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + 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 diff --git a/stable/lidarr/19.2.0/README.md b/stable/lidarr/19.2.0/README.md new file mode 100644 index 0000000..5dd4de9 --- /dev/null +++ b/stable/lidarr/19.2.0/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/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 new file mode 100644 index 0000000..ab0ee61 --- /dev/null +++ b/stable/lidarr/19.2.0/app-readme.md @@ -0,0 +1,8 @@ +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 new file mode 100644 index 0000000000000000000000000000000000000000..31f3a104561f859f297067776ab86a1503525be4 GIT binary patch literal 100097 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 l8bLay74+E3;;+DksJU3 literal 0 HcmV?d00001 diff --git a/stable/lidarr/19.2.0/ix_values.yaml b/stable/lidarr/19.2.0/ix_values.yaml new file mode 100644 index 0000000..cb96d58 --- /dev/null +++ b/stable/lidarr/19.2.0/ix_values.yaml @@ -0,0 +1,109 @@ +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 new file mode 100644 index 0000000..ef19303 --- /dev/null +++ b/stable/lidarr/19.2.0/questions.yaml @@ -0,0 +1,2927 @@ +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 new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/lidarr/19.2.0/templates/NOTES.txt @@ -0,0 +1 @@ +{{- 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 new file mode 100644 index 0000000..3c93f57 --- /dev/null +++ b/stable/lidarr/19.2.0/templates/common.yaml @@ -0,0 +1,11 @@ +{{/* 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 new file mode 100644 index 0000000..e69de29 diff --git a/stable/lidarr/19.3.0/.helmignore b/stable/lidarr/19.3.0/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/lidarr/19.3.0/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/lidarr/19.3.0/CHANGELOG.md b/stable/lidarr/19.3.0/CHANGELOG.md new file mode 100644 index 0000000..3060a38 --- /dev/null +++ b/stable/lidarr/19.3.0/CHANGELOG.md @@ -0,0 +1,100 @@ +--- +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 new file mode 100644 index 0000000..0aa82c3 --- /dev/null +++ b/stable/lidarr/19.3.0/Chart.yaml @@ -0,0 +1,39 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + 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 diff --git a/stable/lidarr/19.3.0/README.md b/stable/lidarr/19.3.0/README.md new file mode 100644 index 0000000..5dd4de9 --- /dev/null +++ b/stable/lidarr/19.3.0/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/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 new file mode 100644 index 0000000..ab0ee61 --- /dev/null +++ b/stable/lidarr/19.3.0/app-readme.md @@ -0,0 +1,8 @@ +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 new file mode 100644 index 0000000000000000000000000000000000000000..3a5534883aaac1a331bf10ad166cff7fe5d2dd75 GIT binary patch literal 100452 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 z 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 Wm9Bh-<^K-=0RR7ge;?HVjtl_2wPFzf literal 0 HcmV?d00001 diff --git a/stable/lidarr/19.3.0/ix_values.yaml b/stable/lidarr/19.3.0/ix_values.yaml new file mode 100644 index 0000000..cb96d58 --- /dev/null +++ b/stable/lidarr/19.3.0/ix_values.yaml @@ -0,0 +1,109 @@ +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 new file mode 100644 index 0000000..ef19303 --- /dev/null +++ b/stable/lidarr/19.3.0/questions.yaml @@ -0,0 +1,2927 @@ +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 new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/lidarr/19.3.0/templates/NOTES.txt @@ -0,0 +1 @@ +{{- 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 new file mode 100644 index 0000000..3c93f57 --- /dev/null +++ b/stable/lidarr/19.3.0/templates/common.yaml @@ -0,0 +1,11 @@ +{{/* 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 new file mode 100644 index 0000000..e69de29 diff --git a/stable/lidarr/20.2.0/.helmignore b/stable/lidarr/20.2.0/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/lidarr/20.2.0/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/lidarr/20.2.0/CHANGELOG.md b/stable/lidarr/20.2.0/CHANGELOG.md new file mode 100644 index 0000000..ac28903 --- /dev/null +++ b/stable/lidarr/20.2.0/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +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) diff --git a/stable/lidarr/20.2.0/Chart.yaml b/stable/lidarr/20.2.0/Chart.yaml new file mode 100644 index 0000000..e400953 --- /dev/null +++ b/stable/lidarr/20.2.0/Chart.yaml @@ -0,0 +1,39 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + 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.2.0.4045 +dependencies: + - name: common + version: 18.0.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.2.0 diff --git a/stable/lidarr/20.2.0/README.md b/stable/lidarr/20.2.0/README.md new file mode 100644 index 0000000..5dd4de9 --- /dev/null +++ b/stable/lidarr/20.2.0/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/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.2.0/app-readme.md b/stable/lidarr/20.2.0/app-readme.md new file mode 100644 index 0000000..ab0ee61 --- /dev/null +++ b/stable/lidarr/20.2.0/app-readme.md @@ -0,0 +1,8 @@ +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.2.0/charts/common-18.0.2.tgz b/stable/lidarr/20.2.0/charts/common-18.0.2.tgz new file mode 100644 index 0000000000000000000000000000000000000000..1588b1d05a16b20438bbc705eac225461a6888ce GIT binary patch literal 98784 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 F7e{OIR|UPv`apV6iH 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 TWtaay00960JTG`M09p(H9js0} literal 0 HcmV?d00001 diff --git a/stable/lidarr/20.2.0/ix_values.yaml b/stable/lidarr/20.2.0/ix_values.yaml new file mode 100644 index 0000000..10a558c --- /dev/null +++ b/stable/lidarr/20.2.0/ix_values.yaml @@ -0,0 +1,109 @@ +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.2.0/questions.yaml b/stable/lidarr/20.2.0/questions.yaml new file mode 100644 index 0000000..86ad1ce --- /dev/null +++ b/stable/lidarr/20.2.0/questions.yaml @@ -0,0 +1,2899 @@ +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.2.0/templates/NOTES.txt b/stable/lidarr/20.2.0/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/lidarr/20.2.0/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/lidarr/20.2.0/templates/common.yaml b/stable/lidarr/20.2.0/templates/common.yaml new file mode 100644 index 0000000..3c93f57 --- /dev/null +++ b/stable/lidarr/20.2.0/templates/common.yaml @@ -0,0 +1,11 @@ +{{/* 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.2.0/values.yaml b/stable/lidarr/20.2.0/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/lidarr/20.2.1/.helmignore b/stable/lidarr/20.2.1/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/lidarr/20.2.1/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/lidarr/20.2.1/CHANGELOG.md b/stable/lidarr/20.2.1/CHANGELOG.md new file mode 100644 index 0000000..143915e --- /dev/null +++ b/stable/lidarr/20.2.1/CHANGELOG.md @@ -0,0 +1,100 @@ +--- +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) \ No newline at end of file diff --git a/stable/lidarr/20.2.1/Chart.yaml b/stable/lidarr/20.2.1/Chart.yaml new file mode 100644 index 0000000..8b00681 --- /dev/null +++ b/stable/lidarr/20.2.1/Chart.yaml @@ -0,0 +1,39 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + 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.0.3 + 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.2.1 diff --git a/stable/lidarr/20.2.1/README.md b/stable/lidarr/20.2.1/README.md new file mode 100644 index 0000000..5dd4de9 --- /dev/null +++ b/stable/lidarr/20.2.1/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/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.2.1/app-readme.md b/stable/lidarr/20.2.1/app-readme.md new file mode 100644 index 0000000..ab0ee61 --- /dev/null +++ b/stable/lidarr/20.2.1/app-readme.md @@ -0,0 +1,8 @@ +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.2.1/charts/common-18.0.3.tgz b/stable/lidarr/20.2.1/charts/common-18.0.3.tgz new file mode 100644 index 0000000000000000000000000000000000000000..94e930e88c129164c3a20cff45fa9f4fb8916035 GIT binary patch literal 98756 zcmV)IK)k;niwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PMZ(avQnPFuK2a6)0*`vG#}*zbP?s>Xjv}SMSP_9#QrtCvQpt zXFw9sa46i(P#jT?nZaRBeNL^_m8JA zX7vS}1>bG{X*3#*UZ*4eZ8RF$f1AyAnnV$anRo|45(fh?Wh|nD{e2%( zkHmi6BeQ)R&M`y#>;t{J`RSJ%7FS?|KcJXm5)Qz;Re@1teg=>s$|^phUW_9q-u;+_ z9{&pjcof5U0mdW-H*tc*{HK*E;n?V=Cs-iOTV`>BJW*yJMiJd-F+%$@NEwRv)qA;; zD%j%5M!(yw+@ZxiiG4b#)Ii!;rKT~hi5Ha` zP|e&WBV@Yz=fAyf)?1x=qt^IyWd?D`AP!M1fT0=00Uy6H`ClpEI*BJ0pr~&VAVd62 z1zB8Sz!ni2X!I&`jZ5>O-l(@LUwU3|pYXE6e};oyL~` zzr?cxYBlgSAR`z6ISDEg@r&;U;^Po80DT{Gz6k>$zk&dcP{8?x{9^zU9}l@alewLJ%V4BY$^|W;pEA5RL*w0f~W+sr;Kw5g6l-$Okj*`vJO#F)tAU7z6-^ zlNeE|`mqC!VF*SDkU5IuBtSlhP^=4yB1p9GBZv1c1?M1f6h#3>)M}3R>rt(Zv+XDu zKuZSR6ymTpf)sn|3kQ1{$;q_`MhoDhF-!sm?r{(R7B2uJR?%ue$Xyau1(nQ<03%3| z&uOGzn=08^BPQPzIke@yjiO)y@R)a-+#i#eznx411Ta-J^yQf9?@M~gyc&s6=#iM# zM328vU&Y*gheJF|W*{U!y5h@8@CCkpaCo8K4ZvZe(a<&Iq!e?TkqFEPWgsFx1u*mh z7kH#N0&wUBiI2kx@WN;!YWoCHv3BJ*1So@{UxNV&k$_PF0_af?48Rx$6jdr?zKWrD zcOr>F4XZjqV;mv?d5suO&~X4My?`?W*c2+FjSxsUIk@Dw=)cr^FqZ%zA5;j0hFV2FQ1vMB#+0Gf@)TbwQU z;rK=uoO^6Z!K)9)`@Hax=OIeLJK_so0>w}9YoIiTYXtpYV$9HG=;aVogMw#>Btoo} z1EYRR5L}4~5jBeuhnQg)oS*hWXG{@5c}aNsMl$F``ov z_~{p#h|XAFn&L~0ppU-}gj(VYmyB2vJqn#}2{x@#YdMsy%xDeoEks&&DVTf-4eWZ!rL8;|s#B zVnk8MbyEf>12Avan~i$&f6*yyb$f%}2#v-E9j|fN9Cdxz@jI>7!DxJN*ywiJJ=AV{ zu-$LMvDX{7M}D_8YW5CVqfW!`_eQO@k17>`@G;j4KQfNp(bd)a>vP4BBjO*Qom{J5 zbncm76(ulvNsQS7C;%0zURVG{!DG#Zfi58!Gy2F3CrlZ2IX^UIDj@w^PLMbWkLY`f z;sNOP4$@a|W0FMHI|Tj9Fj!m@!hXa7q6^B<%n~oeet8w+IS$YSol*}5P-^d*1@YCa zKKu4tiad|ZqN|vUae(x+m3r!R67s32_=EW5!3d6UfEi9VWa#??@Xvp#Uw%x??B^`! z=={8*_u5~$?8avyBNBx@fYlZQ6Gmo`VGjnu!c>614~~Dj{N-W~3{P*~pPh(*-|~Nd zy!_?j^m-4R939_YemK3pK07%z^=vf3<;D3wfDjuE^*NO(fD~L`UfyWLrD!iyYC@u;sg?mz%YM^wOk|L$n`^OJxI2m?@UG+Heqi(C=Ee8MX6pagnEe7S(+ z2#&K8QN1{x!f=B0ioXo`ynKi03^H#jXH^nK0h*zZ!9diYW`@uO^;jT(%k_ATC`n?j zHLUD&tc!B|0zAWdU-F`406L9EV1g=+^{Mr)V=%u-kZtD;3j_lpjTf ziw|cfXGgckM^{6=i^3pKsH<`=b(hdKBEAJ$O1w%?IhQs*J?*B1vJ1rSNqpzNyyDZy zesOkn?7raq#DYYpFy^8X-ybeg?yf(_NNibpFpq+JxZpFy52=2q#HAl`Oqu+0Ou{jq zNP3X8L$-Jx`h-!#2ZT600M%wyA$b&FNRgfvTx=eq0C|ik&UlxMP#hwLXdRP%7<zH}|o{OZ602Gc%>~RrxLip5=IJ*=>a)P3OEci5(V)c+ghQ>)SM2uRR0q>Li zYbffbIx2}sKqd?M`j~{2#Sn)~qs>TwVy$qBH`JRVKM7ELA&4ONqZkvhy=ci=y^ke( z&At|#kR&0~TCL~tUpM3qS^S)#c!opK_S+bG=*kr(dJQ#0U-`tN`+OP&1p52er$;C6 zPU|y&x1!&1de6AHYH6~*wYNkuol1gs9y>UVvTIblTtQr%#~%LE8M3Hc{sts7EAbRQ;(m z67czRH3K9P8XyPq{VFI7#uLPZ8u?$Ny{>GU7tc1E6OVu2-OUK!59loOqA%71xlp;D z^&3~C|=x8QH+Gq1be&(m7D*20N&pmJ4;)Ew^z1$_3(u)u+!9Y7iTdIix*~O z^m3ukYkbZzW!APY(YMrVy9?Iqf!@RXvX00xM6-x3POub=1OvT-Y&rn@va&2G21;@a zVI5I0<}eP(gg&x?IgIytbtO^wIGGK=J0V%DYBf$uhi8pO<0O1&n`{<6vOzYB9@?0X z=5#uHWP3iE@6+k*VQuaJfT>6Efd7?kbSG_96p}BB+7usbK)OA?#$mwa$9kjQsyDlX zcB|LWWg_vF%L0Ga1$v^upZ9=y)0c1l1$KzCQtImX*Kol9Q*SjI&03>V_sFb{KEhcP zpnk#)e%WwsUGt+SA!cq{}#&9CwWh3$e7 zCChNcnumv-TB9ovi;+KtY`{ggX1+2^*mQ`fIN#Lo0OxJ76c4ME%#i+BO-n?O(t8s7 zs)YVo&BHj;=w*PJ_XSY1b#m{kHvT7=dR&HId~-dRdu-JTn0qWg{}rp;0l;5`aE85F zH1}3Piss%jNK2Ng)kw{U3=V~I_k8UEkZT2iI~?+{y3#ui`#^$3h~;=@20#rt`iLpR z;pFPWvG}Ba*F0W&ZNzmo(S{mG&uZ_%9n%1#`ST7K0CPc{i*yBCeGo`f1{wBh;g~)* z2C^kHd^6&6ZF5ZZ3odOSzC89hdh(YUN707DT>Nb#PiLbqf;^p#o`AfV)FInXpCZUBq`=A{&@P4aX}$4LY%V4C9yL4 z|MOqZ-G(qE=9D>MfVoP7V2HdJaYfhPtz=$`(SK;ALe;b@Tvg}ed@ z5g=pfj6;He-1C>h+ZEuDcQOW}nA}r+UM3NWVK_nMIMqPfxw?KSYogExHT6dS{`|S3 zyCNk+Y0l4)vr@^lFTd(KcH^d1yG`@rd)`4Xc&#B=ZcBAOeH;w&STG$~r{;7N4mcrRB93)9y7F8r zK#(HfO%Z3T2@`{vPCMY+H2_iOjuK~C@$E7~p`@yqJ%sZpA>e|0%%*ZyOi>W+fk?GY zLW+G9YhN}#iBb%fHMmbB5>gVY)rfPDdsfho# zyFZMOhsW3h*Mu-|DShu`v7H^&taQPVK4}WL7^nLw_NG8GHsSInoTx?!Oi+ko$dF%= z#d#O`lFC?G(j!c95`}$pzH2OW>i3jTX1>r{I^4h(I=l7csp?2}*_?6(gZK5W2#qjLxwjZv$A*nu7Y zpwVl2o$f)a+km}g{tuN9F*+rLtwvIpG*~w3%~pzK7eUxO?6pQ-uhASe8y)Xp)axP7 z>%vj9IX*n-jr*-;v*AJ5A43GaQ3rPVezVbS^+w}Xb19Y#;y`RntI;$?E#Hn_v)(k$ z9nB^}t;6;~qj%Uk=z85ozk3K9&6d~hbiF?G+8*rodTrS4`3(;?$KzHTHV)cw)bkr7 zzvC@M)FZx9idJLF%hqIJgKMYWYNmcD?QY-qI$Z=08hw9!*g9>4;!%S zjoa;h|FF~Rz*e`@?2bmAX3O_RUf=7E5Na(&6$TLw*C41YXU)y#VTvL2QKQl8qUIs; zA?%EMhmE%1>2(n5H+qe3v)P25gZ5#k+wS>jbl4fUo14!sfTdZ^Rr!lfwQB_rgqU^R-WU@?lY)gK-7yzZzoZXR|HdfhQ>p~J&Yqjl)F zM+Xo!#~y6*5(oWJ#~U{fq2GY*(fF`&&_ko;RJ@;{HC8t-Wv!S-y0BYbt2Z8ZJIL>h zkbj6e<0d@pH`}dd^Kb-Pt#QBGZ#H_}uHQKDI*rE2L*r)G_ZkP|L)7q>FYLvy2DK$V zS~k`*e22y`hSUAUuNvV_z0*qPBtm}IZ}k1vxCeV9|KOlCLfvlj5FH+Pu;uw}-)kQ< z4;zi{L95{(G)4z)hUb}LH>*+CuD z9UYF_ec1II-hqGE@cW&Pk6LZNdC=`Q`iG6f?szoncKz02r-Qu1rhm|Gb(-T|qupQ5 z$7e9c&>uY%V^ysf;a=;YdoVg^9`ZHY>Nk7-LFb^;7$5kDqqcX@>vcQhX207z=ry~C zUbofj!=`u8Yxw={xP5rwFGV;;K7KHPMWte7(P5|AIyh{4hohc%*c&&S%}(3%4-Up% zzj^47+uhb^+#hwj{l>U?(CUtRoC!2x%lDDjTt!_HPRJvuE2|YFeAwz8pjP{^)%QAZ zWZoYxWNty+-SB3_GLVxYhOg&E@-$a{fW#hpP)f zwTS208ggX^{4ag9BBUM!MkpZn6)yM8qf~5>LXm*65F(%|06aks;K9g8hi!C#`dx^+t#P+~*lLZMaKt5~ zX8+&-q3+rkaQcEs5O_7Uf59<&o50wAD827-j3&HdImJ`hD~WBOtpUd-v0(bGMyuI4 zY<3I>IB1U!M*WW8>!6X}=#LK%yWM7|-)$crv^!plPshd>p>ES}!FF#9`@PX29Kqhf zA(sNj>)`MpB5NBD5}-_Ait-dj%29ZVVpOl}fTJ{EDJ|+r-#6&{$meoC^hNLj1U?pF zq%dB9JG1~4&u{=^uF-JFf1W`c{#nDRmyV`ZI2_*wE1)7D<&%%o@pImt@8F#>Q3xGO zdNt^p;FVBLaHt%L_JA;c5QdcD3|S8&dRAtM&SEJD|2Qy7A#2D1ldycH^`3#Gqx z`dQS1@g4F3q#A{KiKB+q zMCt+YU|^NWVHZI*O|j!3tkUA+ztJ2fQscya=B+e)PeKy&6)SCLR@gWA z+iTFQH#@aP0W|3}aTTL6{#XR|QW;SslhDJSTF%XUp;_ zsr#1wc_|hloRy-IgCowA9s*sss;vt>wI5}+l$-NmcHY*(8^WeQn&pKhlCL5;#rfz* z(rp<)cV_67{1!0^uo`XY;jbdQC{2(c^%w^_s8D;ID|BmCvzd8bV*xb_5_l+PT;6~T zNw`*!qgi$piwL#SRbyp@Fbjc$e+NT2NsZiv8`W}DG6A)q)Md{wG0wy8(MUuJAgdCK z7ZDLo&Xz-Dt+42dpjV)xZ}~PwIr%Ma&c}u#X37Z{?wj*r9^05i6pZ*ZF;USz5G2h7 z!pb>d2a*Cim^4exozh5JIh4!eX~9DyO~K>hO?S+ibt7!~GqdS#7{6M33j5ijW}W%j zB_4#ouJB;|WyK==r^4-Ef>us@GiTL0%?IQ$@|l=IPL7k}${_)hm?V+;Hj&XV z%bLQT)rQP#Vimu~{sggsLmL-BhIGn3xmr|%FJLYAaV7*BRwb$k`z z1Nrv)>iC)$+XFw{++3+YZ;s7h=R@_^`xE(2fRZkbrpB}CWgF8O-36s1|13&D#-KM9 znI)8-3}Y0sYcw|T?p#LXJX<>%sJXxlIIUGE&R#k-jFkH`4*iwTB)#8CV5X{&Z_BEx zQm$xj!u8gvCU@7u)+mx0y!gUXOHrz&Im}hb3xh^Ze?+OW85$>`f}+l8L&Y|dJ$;5xUX?dnJE-20VEMEny><3zBaH;EQr3ZjZKJWcsqYO@D8*Qt+E zCnWhQRh;D8pSesS|NLMCk&F!`wT{eicr=GN;7Di^&)~=RA++CC?$KyUh)|8@oTow| z?v!;v`Nx}r6*-Iogr4rRgslTa7t4dFRGhF-y_~R5EH|T5oE~8 z4kPm}`Dg}1zv85gkwkGb$!wM;5scvsF%d8=oqvV3R5;^ng2W=5i~1&%N$Dwi`Z0o` zOyFlzS$ungLoT_!6aLI+vl;R+WV(oO5Y}IamIMq(0kXtJ!loz&NCx1)qPv>kj*7qm8VKIYQQ%UJ7N_PYKr!J0lyGUBH|xE9 z7~vY9*mPflQX>;6Q2Uj_7L4;|s*?&WM{C5wcBM@3p|xvCV0!q0Zbfl^g@MiQ8Q}s2 zI2)@hCmbl3C?hG7_FSPop}JCgI%mo8@pv#Jsat97GL)QdZUxhI7AeAj#4;WDg!A zp>a!>HYf}Oy$(R3N4QdRd;~^G=*!GkT+|mPn>mW{cp?1u&WC(Y45b`mi3+Nx7TtBD zvPs9uTkLAOdp?fEzOevF$SEx4P#6T@gP7wYC@43NY+*@uv#4#^QaX%!*C64KV$Tk} zg`vfi+=H=v%Yub&T(zqzO8Hifn;!3cy9KSJD5PnhfRALF07L;E1G%Dwj(Hzrh9qq< zEt_8Xc6U;XHc4|y?TJ5yV4{y+{3PasIm6o6DU5b85~QUXT#D%+g{HoFG4fH!FbwR0 zJ^E$1Putc!X|Ns52Vw`<^?u5uIme(S7lG2b^~JC%I+uB zUX>hAGh&vJL6f0Ye1cvV{9kzg!V#IL44Shc9|_Mtj+9p2_I0!c7-JOpa@!K#xmms> zo3VD-9lpsU0BHM15_^bCr9-v|kn`z%99X~aX7p#YIP(WKIH}0Ugf;2=n<)Zk zCuV4pk&#I>P5DF>-_-Pn(&c}TPaGeQmBJ+=D1-?|o-q7>|IhzR9dLE<>gYGVA(Jpz z>{_^6WgLuEdpg1({SYOi0DEqaZEf!D@l|^0C~IqGYEEWKm$c<7V4;$MCQq@)j{QaO zYLzksV6ptzLc|{+C^TX@=$e{*=8kcI>aRGuS(>=P73l}baK!F&ha=lcXYo8hVwwGL z%$pZy62m(j-JB0Uh;2k2EvTizMYBCMa>Dn7VjpR)OQq>0MPMAjNge!1V$GgarDHOi ziE{^hhcqKqG?rrS2<>Iw2V_E1uWji2(gYU338>XH;x*pS8VhJmZh~gLfz=$mE35 zdc9tPT4Cr~xmcIc3)hnMvb|a*xFWD;PiposQyzcezJ@ag=-T8QJ7*L`~LBYRWN|wwFS*Y%G z>fdr$DVN!EyRztO(XK2$;LwXz;yUXsEnMn5YCUpceZZCYH)_{aNx;OKlZs@$VqU5t zJK}vcW-5R~5MV0u^vxg}q{S_6csk+jrhrt$tlV$(>{N#j8K$EQ>}ER87ATw#z?f*` zh;ye!X(`?I08|^G0e;~Brvs7`iZ1U%6knV3ma|Y2B*Xu9z?sZj?57sgJ-un$UNgix zGsBFcV7#YKhLDxjRL>s;pP7?9-3`Wq0jRb*jcFP@O|$B{&IRY%sS2WxEn`)7Cnz^j z71^G2#JaFp$seh)%0~gRt#a445em~n8(hYiRhc0cV~?)1*cSO0>a2cRR-2I!GZOEC zi1_Mn%g$MKOKI;I-!k}X|0l~5OpQTTo%^8BcU(_uDt2sUW%m}*U~?D@K-XBlsTadY zXDYToxK3iy?@HO7o&J*m<#ATIh=~QOPVneYRWx_yEdt1jlJ(N3Lkj-T88L zzR6P#+hxP5!KtOP@+%=t9;VDO6e~goa=(3lW=>Mc9K~FxpK9?t-(q?mmu-6ooENt$ zI|~x3p_+zO%@n4hOWI=1_+=RCRKGFmRO}?cG<7>y?hiB0@pRe(*^l&zN7Q4)6UZj#TmXXRRN|@CgHeH88Gs}JrXj$mN8PC zvKgScpllBJRcJZ#mF-5hA^fW5N*T#>HlPoH-oZQJJP_8#Bnj;{r!e+wV~7KNF2eu5 z3{T^ja{?C%G?N56*Kw{Ey|+^ zpzkXW%oQyg2b>RA7pnO>IAd!x%|T}yw_?fpDvE6X5j%#1H^w*CdVvdwmhbj}3Txie z!8Lop1gCKRV@K*r4=5R~#8>k#rXY;d_<7_5A4M_pL}+=syXz(^DYiEncv&=#ELlu_ z`OTyxz~Pvr9#RERitZNE?OT710y5g?qJp$R+#S&UI0@@?s?LyAxzt61^WcO{rJ6|e zv4dvAoK~(608H3asJ6yiUJry;jbf>cZbOyqT*t%7-ORWfJsE=J+ zNcm{1cpq`{SA)9-hB)DnySmPuCGV{v$z*B`X~rMb%Cl9qdUzBBU=Cv}J;jU?BW{pDiQH{+g z>#GsT454st-rK&Y$`v*3*Ft5fk;jBapllw3anZI2Q+jZPi?l<^1nrX_JV0@lrC)Q17)a<+|!tnz6fFdE7AeEDL0Xj5Onf8_wf?}A ztkY?xFn<#xJ|tXhQs5OKM0d(a5tJA6N z@E$X7YVCCBqcjbvyASB?+10#b7J1Rvp7N*4%X0d{(!4Zh66Jm%Z{^5YBrMqx@magzJQ2qvBr^n+TBZ}B2qZOz9*M~7ApL5E#Mv24Vl zz6K;c>ATqXJ!LTDZHA&)dOqn$= zrTO(8FC|?pC0-|3q)^q{b2gqbU4YOWeW&_ImNV3|_CQN2XSwU-)Reb3WqrLGiJ8!K z;u*9ek(`|Sd3I6WHdt~oMkWKl^+DKEo2_=MDT!mn)8~j2n((3rP{&qIih=}WEAI6! zIvUiIUZ3FvhuSAO6B*!yTgvsJ;*^Px>gB=8ARB(HYiBIP2Ehl!5ZmwzVu;OUM*!#? zU(0p^UFKP~0Rue02Z)4pn|Uf+3KQo!p6zHurQjLGsHO!p65Aee(sc|)DD+Y2VMM{s zCb6n`VKjNvVF;Jh5++ZNIS_rI$wy|2`An8Pe@1*+MZe6XRItvCqUfJwYCHv^j@bdiq&FT3+ zz{%t)CLI_2y1@)$AhSJsoG=bhi zH!rVL7GB^oU7^@0Q%4$gr@I_9bHTfWq0v(Ng_tfJH$!rpHna5JPJxEF<5gVo`fpG( zn+h*g2gl;Dl8P}UF-Rg`{IsJiqj9L4dpwvXM4aR-laK)Ae!9r2_%ciKB)ZZ2Dqm1iJENM#X`K+ zGjIT^FjA*cDml9OU1Y2=z%;ITTa@~e?xO3hbeory?RSMMoi}lj%tn0ej^#;B=$Rue z^LqeVX?f)m$JrVnA)q*%1gIABIjB&e>PBjEFK+l%O79(t7_XqA>Ko$}UYa9S*Dru* zasaBWZtpFwu7TA(3^t6^Jq(8H;#I53bQY4aaoRVy@L_K+nA&pQj?}C)BIasD8A7HF z>ju7cb)tFq4za1!?Pd05!5X7U41JUf&_l8I>V_aDGUc>nG%`zvFQSLxm@g2%gDECL z!4%FB7$Fpe*2Exudc(j@{o_9Qo@=7|=@?qg+l?ECFV#E!O>5C8 z<~mbJ(_&$!^Toy6UR){?U3w2_>N27aw;Y1#9kgh6=@~R|YNRvlMr5~94EWC=AQKRv zISTfQlbuWZ#sHu=Ch;D)hcVX!_T-_Mq1+zu(I}bh0T!pnM**3fbI1d^&>al2rc}w{ zj*rw?ejvu$a<5K#-VmvK*y&(@-#r6X?!BoIXJ5&e`!K?{CeD6;=hy;#oZBp&>8WiVqD){^*cDG+B(W#m!H~EuS)8*MAmQ&B4EP{3UTze? z@J=P>QYTh=g*apxEsR|X3j$ueKR>UhBcpDr)!504=9P+M3OOUK+fj1&@PE#M$;G_6 ziKeCcqDhvj1J)FKLkQ#SFggn{J9(o$u)QMGN4l&@LnUaBL(Ke<4t083cT5xe8zqYY zD{(bqA^(vv#BeHcS`7c^Je&OJ`1`19i`dZ9}ZSnaz8R8B5VJW>a|LIl{3+Hi&0*VN*@sZhbAyvYxq~he0 z_PI=vd;5Q7ipB`~y8@QzBlz+9@*P*p#4S$bma~RiCag_=arvPBxFP3ugp_a8KlMkpdQEmD2cPs%Cdm#wA_L4P+_gruwF_8yG{*Oq8%JyFY+`OWm0( z<_Zv3!EJ3`>*3;^3S@e9b#`;D57Cgn3ofi9Rh98e=th=R%)B!m-gO%fsoviT^?nU( zMlhbi&@~EVv2x%$rh;V+%rS&qK1NXG*)W{T*wE|XJw@Xr$OOb?BElok{*inEQy@48oN~-f+5gal>Vmz}(TOQk_@qIShwK1I`gwgT&RgoC2u_wQhdcHnkp%dL(kCmZDADgZ=%# z%8>QH{goH~TgoPWOJYmB_^TU(`nURD)o~an>)+}giBbI?hd#Nd^$@ZBzgkq!f__WL zBtQc&p=Hhch%$9${gr*Qj1|)cXj?d1iTOp_djS3>RP2cWt}RaOblR$jCp&+S%1L0q zQWx3mr*Gs@|IdyyA5cnw`&M8uSOO}|Rxo5j@^B!!LB0i_ayZD>LrB$)|5c|cc_eg^ zO?haI+W?FLGBRIqI7KmLKgMJxM*rv}6VV{YZAk|U2s*h#r|BV6HeI82dynOGx74Jn z_(MASWMGE< z5KpGe(FiipkUAc6WjzVr4VD}Lih{9I4C}N}`EY1m-3-S92J zss`Rk8>J z9@RyJ1olZ?t)^`XCRkSm8%2|mf+BB7g}!j=mkU{op`ya|r8`8t4Vl)4$}8~g)*g1s z&b&`|R5tMJBCvUj2k|Hh^2_7Tr=4{U)qHdZs-PSCrP>xa5 zP`5=roF1xTAw_b|!m6<7QgwZj!Dl9!B7wZp=@BH571tzzEc|tnzzeWu8e7 z5Br}#S3Z5JsdSQ{%Dno#S(kIME}E;`@jNwE{Cn4-9}He|5dep22|PA;z)Lu^Zckpf zy1Zb#2=MC%Lb2~g&s;N~udjHXX@36)a1`-vA?KFvL^$YJg@8bx0zpEBd|GVq+6>Qf zn$}I7DyW113QM=RWIm+{CuIuRzKs2QlRIzl8cYyNiDf=y3F=h8<@G49r_0wP;twO_ zrD#z%qAQ0<<~Di(cM9p1G?wV-*THLLTuUp-3-7|+&t52|vLSKPQl)@>S@-C#RyH2W0 z7mkYGC?KIryYkl5s8n5w7tuR~kzEq*x^x?O*a+!}oOMS?ht?F1kovgJ2Tkhtxt+*O4#7;^0kD7U7LI78VCkJH z3S{`B!y$1vQ5+J7la#E6*Jr8tEKG74n>1*Z)l`g9b)Cr?>oLoe zU78*gvdhv@%Q4LS5?;SKrP$o{7*Ws{qO=OzO z&Ni3(xX9$WPubsJTI&9Ko;CG9C44oJW~J5icZ<+cjX|3 zLyBUC{D*3Awzk2SpBn-!Z=xPl00_92Xd-y?fx5#=m#ZB_6z?F5Qy48B7a6P?voi`*>dtms|d`6cWVKo!mu`uus|yp(1C3w})qGj(bJacRoh%Ek}}psFr0)cI{VzS&F+@ECu*;JnH>)R4@Pi=1I)0Fo`=4l=GM75y}3O)d3Scn+WK1i@A2EW!Lx0L8h58Sq9wcpKC#{cJ0C`5mm&j0be|GU-v zztL^9T>jtecRGzN|9^?c$p0$;>=;jk)Tia0e+NzFFw2iJ`;@HL8&_;kOUQ{k- z+b+OsG9sibdp)xeLc;vu%_kU!IlEs-q7tGJjHgPf4}?r;_}4&8vbK= z`|k4O{rPD{S{DE~xftI5e0q9ydvWycba;CG;q-a{swAxPZg*?K&_ z*GaKMl@wdJ5r8PhAsd70pXPginpaa;B1fvCC6{N9&rYsOzS6lTzV2q#`vSZQ^LE?b zf;lXUkjxdTTa8<~{KN3*EyH8pdo(5h{CIYK`pePzxfw+L;`Z|W&6~^j7bmyF_irvv zZ-&aalZBc!SD3YBL)KG5HCt|y5d;Y5skMkNV6~QuR8+*H>W zVR1C?1k1#ZLg`ZP*LFLF;%%;(*8oaGcKT{92-bF9+NhSAAKz#Of)@K6q44seTFJN` z`{?5y_+H9DoQ|dyF*w(k?{7|TKYbFne#p|GnI6fN$X><$T`6xb6}JbkLA9EXE_t9* zv937(mqKxV-ZKKd)6*3seHZ}*$$L+rd4cq}mDQhBR$t3dxm5m>f&Wi4{;y&GZ#OdX zU$fWmZO?ySztin!{Xd%RW`Dc>U*a+A|0a8{?FKYJGk+eW16EBn&9`N-b7s4r?HdwB{AVM6+`b1 zhm(5c7c4?R&6TI_cYWRMpBaF`JzUVrT}bYAHf0z^GLAG6>2}4HV{#q(!tJWUanQHS z>gaBj7*7bo!Z#~GP+oxogCs_3p{nzmo8hh1bCrE-z6xEeXAC_++T+CUyh%HY7f zfz!X=Tp!&YUBA_YDO6k^Mxg9v^QN(zqqFnj@zMF|$#b-;?(t72I$v}@pZ=qWY+IFk zeU)1~f;&c(2e^V4xBK;JE=%Qqc_r<0>;K($ub=h*YqYlUzc2C_`CpDTc%`pi;Svj9 zTFP5)H=_gq9LoEw^o?=rYXxdnDZrM0_XtvS1=(~-?uZ-|U8f4_!gB9w7V>Vns*f%3lRX3~P8R zDuBvm(SX#yEl!ia{rXc`tft&k9QSd};5e(3^7T9lwV*BTvX&{UIp;G2w~FDem}_#N zHb2!Q+zrn(0mu+S?4mXuGBZ&PFo~DgxC$-ucGgBQs$xn@Eo0dP<+_iUDY^kGBHX+x zpLY3%?X{B+t}U)pwy}8_6)pUe*Q&LU|6_qOb zkFxGb%(#Z?1P#xlP{a-E>hjv`Dlb>9z=V-26wk0oo$TiMRqC%dCHJBEB`y(}wS=V4p0w2YjU)~b#3v470ohkw^TPobtbolC6dpZZCImIX_YS14#q^5q6 zy-*H@Xy^pT8z+WoyMQEli^nPrW4->Sv(Iwxw5PG+Gqum3W$@Y?t`UikTnD=3tISQK zhJG#V{31f2dXHl?Nnq?(-2-UTAa4&bZ{ICg)bcO7gx$R0$}4bC{zl6%u!|J6{Z_dw z*)2Qza|-VF6|}LzXSx2zN9&2o-)jA@-*0uZ=fCadHvjL7JZ15}oS}S?xL?iYv~0?Y z=^Ku!rR=1ZrhzS%XO#$&G8;DlcpioMlkfB{U7E>Hr^>8|{Iw6l3nG5glN<%EEazUD zfm0N#8Y#J&tD5J5smIk)6~xk7S1F;(XqZI%qKp+jnBGY{gHe`{=EFL)v|88OKfLKAb{U5+-NRt?;i`alsGVI%rXAp-VBEGyq6^}s@a&+w668S_I!uQq6c2VjD zuqxYqaSIR4cVFE3JX>-TX;_&itlp}#mF0P_(XW=qP0#ae)pNdlcrm9%gQmWS?;rUIP1= z(ge}{gXY1(k|ft=;Sv8*TxLi?6()=bHQV)U5SRE>i}J%iY;X%5k-pC1wFl`jgRJ5i zo@td7#PocfWPJQ8v1}gCLP7)ocSpn(^29?~PSZQs3oK=Gdw;(|6gkVF;n$f{eRn?eEes-v-SUfk>?rXKMNV%O7CA&>yH@& zDvx^d`8-xR$-*EY_g68V;{Z+2Dd!^U{y%-LwA^v_=>5sr&FwGOXE&!yoN0%rH}B6* z?4NJXUNX3JczShoeROkqJpk3eR4V|SUELhLIX@lVzBxMn`Sjvs0IK1bJs|4{06(9d zpAUaIyE*=8pzi7@jrZ$h(~4`|9$!Imos)+=>9E+)l_w6fdy$*&`R@>_p$@}Cz# zN;j7JQ9LW;zgEB1$e#ao`rGrr7kPw|b!?71j``>VCE@WeFbHHcik=~SS1(ba#MH4* zY1DmXr8jt`KZMIoMHL(XE|BscLJCD6#cjaCg2?yKdL^yLSF^l;pH~s=Nf$K}xRPE6 z&kM=F3yV3I#PhP&i^2*bm{pYIe-#$tIEk2)6h#@Lk}C{eNplzscBPD6E@bB@ZE4!y zD=G>thj6LU< z(8@0MNP-=uAYPPe&}rBDm7$-_4%Q*!=g%g(T_~MV0A48(!={`s_?^{XNBU59uN%&D zdH47SOu-bz@``oe2M~nl9t4~%7+w6aLQ3iWACvGuWV8wQpOx_+{dPA0bFbO&ZukF} zc;qf0lkk6&(MEQEId5KM?-xboZ@K?UOI1RVZ+SBDx~hZqHTPBBhmGv2mdaJiyo?oI zHT?kw*cY6~5ONvuvb**OGH<${?%lHY-^2i`KvciZEm7U>+uMEnMfYtQA#d>DWjc(I z_lWt<(RH_c{-i8cAJy6GHGS4x6Z$-_cx^Zk%byLbpbfSZ5ns3TD4IV9PE;LStc%#q zB0^PAjfh{>uP)>@)z;Y2DT&4F-J(_HPK6iaO8T+6lZ}YIz?v;kfU0{zb^3l?)}^QP z5*D`R$gV%W>#)0xH;O(o6o)W43mJ;X&_h?mcd&So>Aya{Q3kzbdqVnrq1{10xn07> zYrV;Az1ACuU1W`oMDT$}jVAArjb!6-$py;vKbg;hZXo;LO8u|bY-QvBd);mRua|j* zo_8V!dx+R3G(aCk0a?sY$i6Zq(DZUmHP9@9FQEvU#-FGP!YHDtCTK|TE$D&<*{wFX z)ds(2ZP2XMjp>8b3T6gi2AMZKcf{`Hn7yEOk`Y5xwrE$E&Fir*rNh3A{`$4)u3xp@ z`r9b5*^vHPDyVK6_tbX1ndP z&Qq%Y8!hhX27s0Nf4i5<|KHl)|MVh{)c?(3|Go_X>6~8E0$}yz3zz^*>zlO!7_i@j z5g;9ctrcKv1^Ak+0A{9c%>Y|7z}5_~H3MwT09!M_)(o(HzUHS)|3{%85xfcQe~tLB zPVWA{c5kcyzsRGqR>{HMg!Zo|&dcfkRHh6P%Kx6cL`fv9EH(nD1VhSVu%;m(?Ubcl zJxiRG9t!#`DCZj4t!lni&0khEPev3mb;|+t{TNY-*3^p4&SvUuQ261^M@2NKct=RuNjdnA8|4+NU-TzP*qamr1i;^=B%pe>u~PxFEl8$x zvxwv^?eo|><_O+u&VRwd$$X!(i{fZ=ilX~CDW2h4ER62 zDyaVWKPMN}-E5k)kTAK&{RC;Ip%mtBCV!g97-DX6ac5}_oPLau$B+;HX@UEfI{qP{ zh_L_XpXk5#z$js0LYVkf1+V@?a0seRZTe33`x|FndAAw?q!AO#SNf&>ZqOJrwDCxu9056!etGBlMkH;fVRVgwoT zD+v|Xs*6NNe5Qc_k75`vR;3Y@()Kihj>%0XiNE0ccWEMD&MKvTAcUd%I0*tN1JrF$ z{PjivO(Uq`q(H6j^70!Y^Q+8s(+Fl#BTpgy87)8^ROO9_vY>l6me_FX_ICp)m6&yF zudS@l#S*OBgL5O*DF|AMbBi6hvWPBg%N}mWVCaKas&^WiKvrTe*J79IQ2mYzT`twPNFE3PQ=J`g1>F1=+bBWJ2%Lhu# z>l?v+uhCfL4=!*qP=M%ek`t(zPBp1RVBn?>{;~1;|!k1SMT359N^!? zNL-=VLm`6`q`OxG@_Nf_L`f2RNHOho8M{^Xz39=d~pw=oZvJNnX zU3rIQBwlQ?H!}h8F&$b1mrsABysqm$W%54`CtOc{f&6dHMyH)S|8F(6`QKjT5f=V4 zIoO-9{HuBMm3jWF4z6kAH+|T+b)U{XU1Z6oZ`Pi3CDv1Y>WXcrw)s~&gCbuYj8s#6 zU7=ps^0iQJ1Hd6elURu&t_i)QNvDPouu9dGWewXR&|2*}GE+&jnpkQ$#NyDJUUkWd zORl_wPwwk$@JbxMEQ6p&I-7XDX5GH_%M^uR$Vdc^f&gI3JH5x%b`Jp?AgEGCq6qob z3gF9Rfe_OL#B32OM!iVou*~(+OQvtaa8T!M90fr&hk7{~s?4it)RtT%v~t;4bE@v4 zn7xA`oGiCMm#&|60(OepWido!eD~Bg#r3y&T4gCEnfO=?x_rF{d=fIv0;gn#A}$Hp zYL9bC(!+YE;XSc?C0e<R7)ytKxiWg2pcQLAgluGi^50UH;J=XNnZ#sz%l?ij6KNE8Knt|`Ti%xdLLkU|NQ-w z1V)(I)a*03P$nu!mDbn zx^Z}E{Rdw{ynJk*>t15$&oJeG#%O{mQ^;qJih zvc#*`+0z$Y+I1E#m$uZT)?G8d4g7p>3q-7fq5mcXuCMGVlmCUKvXXF1`t?t(U_eCBd(p|{G2I**nbhtMm04|wLUsnEG+VkZC;L57&NPsJW z$YXR_U;eGDVr_9)PflAp1kWX=ae>SWaor2Ou_KvXlwcnij@C)?|NtkRPwbliUvLdG+BR((0R+|Mcra*Q~a&TN) za_TR~#*QE=;7Dd?Tn^>GKy7a6F4kSx$R8Ev28cB?S{79(6$@e*Ri2( z_p{&eezx)Rp6pY0{u7~?V#-j+K9C@pJ?RRVRq>zwX4e0=(QIw~KVIY!9vxSi!QO<+ zM>PMko*h>omb-7r@9X$z$dXY^=9se>6w8v<3&4oTd!SFxvh)~ z05M_^hXe4-6tSr+Bws09030(E10MxQIqaTDOZGrYn!6PMDE>`Rg#Tswk;TfY+I)-G z^!MfCy0JJ}14Q<4@Y=xBCnjSU1S9C(DNK3$-nA_4=E))qyt>1oe?~zShvHrrHyBH{ zkx4_Q8h%|+vRu3PK1N;u@k|~04PFBg0~9YnRiY;Dtq%}GRnvl9J(_z%J}zr^SCq}1 zE;vzU>GwlQ~oCWl)04ZECYpZnoZHhsQQ1Z zQxweVbh@uI`_`mM`u|j`pn8W;RFu(gIm~EYcQ5ow8LnR&E!@RzGvja83kXKg!)zhz zQAT1oQOis(Xld-vEX`}18_Du6gA%nAyi7i@!u1P14^jG#_;wnwaw4jiWI_&vyzWLKRu=}NR5^39GrdkT=J29- zXkmG=i}xiHQl386XYdZ4h3qoEAS9|bu&l$iU^5%GO9*dsC68&LuCbLh+Jghi8j zsghVyVI8fpq-t?UXG!5zk(@=<9vr|~I7-hI5Fn+(G!Eb@-}txS|9?e%km3y#)wW@p zzZdoA+fW?zBB9R7K+dpVAj5eHWn^}4dlG|Z%tceuazWOQe7Acm1lRoGYLV~X|E45d z)~g4){ym*lWMudk%}`Y6e7IXg^Fn2y=mLfr4v*##2XGW1<&$Q=N|O~cGGs9hC$7q6 z70u==ULOVc@qGxhNH{N7q2Ux>jY!TCmxNOU12$b;5&v|KMQ&VM2QU9_Fsmf*Ld z#P6i2trNVHmi|JKJDDNKhwWqvJm*!LX;Wo4ZeAI_RH7$juq{v%zD%f2ZdUvu;&j%N z^o!TPHbw`4|B#UwaB;(C<~)Q?&7AcA$@PAu1+g(jK|FL>1W(?~T%h=GBXu?_%|9hl zCnvwlb0gxvle^q$=tl&HwzE>vq(Hh@!K`?8$E5A^B2TIOA7c_@wh(6EXN~`FwA;;W z{{Mbwd;jOlJktKJ23w5%MlAm}z%Oj`w^3PP?avln%g*msTF>O}l4oP?RH~2^U6l(_ zHUwd9e<=q_#%;=N;dObv)rtZ2rpQl%qTBwiY##JY91AFf+R(R#VbTHLbE7ig>>Dj+ya^V<@mRAa*tv?@rBjZVE_`O%M(6-uK0+0F&2<> zjauLA_AUspzfABPh1IPn`oyPP{v$KQrYND;N$@1^|JC;2R==B-|GK@c{P!ZyN=Zde zgE$G$GueQhHXdpRb}D~;wqOUnwd}!8jW1;r&JRg}T{vIpS#85kbEWoShi{eHi1V0# zJ$B-v8MCz&m(XWxFLv$4lb9q?-p!fM&OPwG`1&E`p|Z3aw7g`6)I>Hk=h{x|u4sp$ z+D+9(At%IBnjEFIaozh|%Hc!b$I|6(Gc6VTH22RIP%&-(5%k1kw=askLTE00t<3P^ zGH+kKvWfJ2ACaxJztN{u{-1ja0=#uVZh&F9Isf~--Ina z8wdyl>RY4w@5ZRkMc?caRv14+nDMt^!e8%>VjXbEg*5v3JBo85hgy?62P(9dAP1=ac5k%KKv4E*1E7iFG7?UDgW{%250Z z_K_uws{#O1T>#u;9|01BkcjwAX^WBl5_XUbT$+e3X|Y`Wa!aixjZ4BmSJ0+F1SV`s zV*Fe2O`D%Sr8#hpB{8l^fU2M>|8YXVQfh+IOBYHL%P8NKB>=yi%*xl1Eugwq?X9%> zElaE4hWu!(zsm(kv7$xU4T_GNV;gU9=;LsrxQF@mC7Fm(@RuCvZI}CYxxesoCjq)f zV_qCa_-#y*Xvw;(0Py79dd2cG63u!nh@yCoJ#^%GBngX>gFKcOt=GCj_K&PSm+F5c zVNZ1XGS3SAuit3*vie`I-`nbcFY$=`|88t85Aa2aD1a0|Fmi4NU=^@EfC;Q4C6(8t?L8Dw5ytE_X3A6QNk2h>Eu=7;*~-vcklXC z5_+GiSP5IprAriC*OO~QzIB^%2Xm3hyMUQbr7*HYl*ITMhrUe(zAf3lzCYdETwSMA zK^i39A|~clCc0zBw=uPm?8!bafSGIGs}e(5KofPz&YmzF=#8naY8UJfN?I_OsTx2L z`H}c>+$P9!FVkR)`eA6Q=$7fD>p@vKBQlNWW`_H{bcPhPpPwrQg;v7P%^nxX6^WUl zSO%8N%)a(G^U}G|rgKkolN_m>nZW6rRevUsp?kQ{cTPG1E-;9uu;mO%i0rjdeS3X% zELXs8?pwM#^51Tb%RikD%Raq7F}2cR9YY*|S9%yP2m=s^I3Xapr&zSF{zP}H7OY)o z+>BeM)Sz^Gr3#ywv0sflrp@I45MG#Ts%E)8?HRl;i?pJb_Qib2pzTmEX$BRUr3NQ_`%l82y^y82RbSHfYJ671Oi~ z7yAA*2ZDd6%hxQ^T~K%3LERO*swueyAKsp|bgh&Jb&5nnr3(im>!rLA$u9L@U@lfK za68QXC}Gu0Sgyra^(2@Q%0wq5T=UbJ+$DueeJ9I2sm%|^F6hom%R{pUM$o%Mp|9t# zUA}I8TRMNuG*#qXGF#PdT0UD1?=FxYmd?FpOuuLnaRFdii(J$YQi8nmC9Qam@MP*% zZGyUdyTqXwkHIVSYw5P`%t)!fh+GrtOi({vPv3&6QIJ2c2&)1Q+i%5$v3;KKl-YkM z^5Q3?e0H8y{=e-`F8^Dj)!EvAUg8n@>rf2#COiP-wE40=0BY(k^#VxCtm6lemS&4c zwaEXv6F6>+jcm^lvDhYz2)%mqr@riebVvmGlJoyhLVNsL0 z_R67`6kW$XSE62#(~2v(7T|{+Ykn!82Sxm?TkiJc^Tkd+U3Y&@x1S)*FT+;>rYysW za$G~&8T2B108bM*uz=P*r8zh`EX2`iT0A{29Q8UV^wQdQD4%x2m$^6a95Qr=7R8kx z!y!e*dY1haw!gGdH{@L<2BadR@`*!9C#_tjg@_)14=;!4BW`FDd`y!8$|K*{^ zMic;L(Rl$4Kzhw8+&M?tljqU*I0(Q9frKJo#?0}JN&wM4l~C67t~Gtyc)S~(ds?>6 zac}G3VpVXNLhwe*o)yJD&qB<=9L5-q0z_>#`TZ2qpKflhhWZFCn<7pWAe5DVCzM@C z3w7c5NatfU$ziRID+^?#(y8vrKeJ?zM|d^YY9>n7QOLWLy|P*EgYuF!SuTnRBOVFt z!{w@dlUjAkSY)MyF%rH*Aa%QYEoVxr6<;xK&R2Qm>QvEDoTzfF^o!zF^~a@+mTbit z7X=z255s^@3@KwuiRkpBaQ_NqB3bkE?8-X-+y4RR_du9i_tW2JSHLHT3LnZC1q(nz zajG2=U!Q+lb4_O(G;*4r^$vP=P^LOkzal zy6xOV{L)u}Xlu6;w==U^V`-1KMF@MnNzpBdg~*(Cw_s&1b03L_U$@Gx-8X~kZWh;H zrYLj}#Z*M`sd0;lzX!%77CVjbDm=T|1C(eUPQg718DQ}ujf&>O&1awF1qu*vBHL|s zRlit%nE+r5qutCex4e{Kvo(aB-tJYEugmK0Zhradnf==MRi0f{*IdDsJQ)QWz*Ox` zdEx;`?@(NPdoE&l9U zU6$ZppkSv_r1o-TBB8c{wZc3jCg!(chf&PsD>1}a319NhI`AKP-;oj4++^u?oV|VJ z(bjOZ$$0KUE5td0{u>y;&_l7yX_iDdEA^8j6P&+s@OZ>3Sz?GP;~tug8X53mh_e`? zF}_<9@kikI4VdY&@$4n@qhuReO=AvR$0zXGo4j{-rETpgvsxe?H~?N0_Y2|+hlWSt z9h%B7inFV;JOXdz0Qe%fKXQsAtNO4It~Qyac1Eid6^rl4 zv1I~B*l=BD%52zfokDAN=>l`-#MFE3u8WyuLp0(hByQ{Rar>TPB@Hgc2X;pjXECeL=~{Py{Jo)zam zDl+p~^S`(H&20Xcez)1$p8veWwS2+I1w)b#=q@PqocF)D&6VB%GIaP>iF{Ikd4Y)X zWde>1XUrcW@_0RYqkMgA?|=D2-4||U%y{gb;R?jY?hVf-;K;oHlJ|#~9E%rVzVaS% zw7ot2_w$s>{|quTP6E1tAkY=^f3MTY-T&BZZ1aD;$Rq84YOsf!2?F&|6p+OXy^!5c z6qUba)FmTj-rs3I*R`*u%V6WdmE~Oip2T+nfxg}R2N+;q2nB|y%Ltj3v0)U^H1DcK zh;PD#m!i8h-)+rzU*U}$MJsmr_?tQ0U^rJ|e@2;cZC`>iZ_3PhvXURujYHsX@f*v! zvU)8?#2*UBslqkA)ZcV{uhXY^wXWYvMErFJp>Td|8lUH%895G+4*iR9PyPhX!pSp$ z!dobFe*SB6R6S#taMm>j@IjMzB?sPUgT^y0WGEg(4_y)eX}-D-o!#r>8f8#hwmqdo z{RK8D{^T|)uk_MZ6K+I3u)af~y2)yuUQTzTRne#W7ZyQXci;bm zm?+Bi|Mb?#ry2lO=>P3rE1Unj-|TPie|?ch>i8m_a0a7|c>c(lBYu2gzaI;e6<$A? zl56?=ICa*vCfKCecr-Z-0&@R>1g9S(DD!Juezvynw05<{p~&a!iftN7GD89o#Uy)U zYNnyrE9`L&}w~yL~pBAs_$$ z?7e$;+c>fyzJKRa;PB_%v2r8%ZO{0wch>E=)80;OukECFZf>p*O+pgK6u}Un9CecK z{yTUQ0KtbImXnNlPIoL4C=?1np{h`*lEI{&M&PWH|Hi`HoDBYecSD5kPxP1r(@BI) z^54#$<^Q$4eXzYc|5?hzn9O^7u+0Dy3lIuR)5&PzX~o2P-0B6#=DKY}$z~|-xT4MV zn&OQ%K$toXY124AmVde*jv`F|%-|rxBy*=5EX{L+sr?8iVFK^fDcDNNU8) z|CaJFfsPM07K6PIdC!3O#PXeiOM^UDD%(naE7fY0yUZHX%UKqEA4{%M7*^Tm-Wz=4 zM-ZVb(yb(^l_d34{zN6?mAUIOK3uqqSA67Yt!lz_7(N*&&*Uu>{`aAI6RKRemr`bc z2~5cQ;yhLNVy`TqqgM8&sB6>eE9L!(;W=Mfpsvl8XjppM$$#@512@|L?DOC4&Aq*q z{I`_HA^))%uy`TxJ2((_AT*6QIMwm6v+4}8-D4dVM_7apcSY}x`lTSc8jn_0tz+Q= z{78=7W8jJH~ zenMGLpMNsWD?=DV+ET?atoga(9JWF{t30h%9Vwqr%d=;O`Mr)QLrsM1A5*HJYZigK zW0?7j9IY#XZm~~={1?ECbVq*T4`8-&t0gj;MF?z)|8cNs<$u}U+Sy;7|1Ra>vYnQw zY5{VektXXYr#AL8&*k7#; z;hpf~0m>pW936twlULWrT%?Zvgoj{zZ=e0jM7O0Zc^p6Z6Z{N-2;&@PSFq1PDQ;lP zryBD*V^u8II++$;MuBH#*n5#$-eOE{yQbC(&vhv8d&nD<`nzHTTQGu3$V*@mOTQl% zm#&pMQ^~t5xow$6H9eQfMxIdHb6o9eN$AJWcB$^P)x)DzlAt^e)$^w!Uv#ZQ17jPYtRqf{Zk7v z*d)*DL&oFS@s`{mI2CX+sJliW&aifsAdWz>mzZC){<=D#>q_YEpLQ_CRw8T_jcR~N zLbU^W*A85Dq`P`x4&v#bZMszU(V;S?2$Mku@u!&c30-UC04fwlZ9P4$u4pW-lAbzoJ#bSFBkx!UIESc{tiAdzf(Vws?t#@<> zvxHyUIy?d%>i3OdixN!yB;YZ$^*mr}BNVc6@MwY1k5K}RnmpsSh^tJ+c30BxFv7Hy zI9~m~Im{y7RHAeC4cWo&EO$o)&xy(-* zri<22MME`kWOrtU=jvFUHmP;7dLus1cmt|6v-<1nDRi@2McrZutWRJSDx%+!+F zt_<+%ZT%F{gqHe&P{oXUizQ#k9+yonQ79nmVdLDw(owmR(TIJT;%L+$*E{(uG|{OQ#l(n*^mM_W|D}tPHp+o%?X{5YLGss zOY^NCB?KmvJAprC&H!0g%XaEK@87JTtSm|9SKwmX}2Wo zw&fiO3Zd3D(X)nGSzu*OMGIf8+_dvvcFcyaby$^|V)|Wj4FD7>K*cn~JkzV2|Cw4u z$L4;PlHs0%rD8P#m^0-riAE3yehkAquMq>ffgh(Sg`WXyw#pl~tes`c7M|W)1(5XaM z&buV~q{UF~^0A5TrbW}>2~MeqBU8vUhqlBc;7YmV(3DtOuf6~!#E%k~^)kqB#?BHI zSxyIQ9V(FRv$Ki4oL5N4f$34#!qOw90pQVX+Y>T?sZ}&bi%!Qu56_le!A7Jye03pW z%+cKfi0ZMFPM)IE1v>R%yQ98Chh<+2C7Bb!)@pU$Y}WZvE6$4J>_A?!Ed; z9?|QqpE~%(CuR?G!ce0rkE7N;ao?h@T>!H1lhQ+}$(mG@7Qn+tcTxYT`)yU(elpiTju z$s=U9%AxtSX!n%a7lL`B#R;I#Jrp9qr`|m@F1+!Mc0Y-p&a^??Aw)3A_>9wN!>o9Y z)3m1bt{=Jf6!4x7Xr{RM1z*=X5o2iLo528$VK$i)+X75euBtL(b2h1xQpkxvAGx;c z)Nz;B7w3H;n4vGi&vN1TeyR2qsrCOz5sK$`|7g7bx4&~x^8a1M|6k7YrG@_op9V|u z|K&}U{C{zmf8ZNNo&T?#vXgX?4!{~(PvQ-7$w%N(9e{Zs-IWDZr-NY}78+k3@eq`^ zQv*hHWmag8PPIG$HGOX!C>7regbHr{1V^3v5$xuCmQ+50D-5aH>Uw(Psak3au$>x{ zeq}m!nNFL`pyeg@FK7jw+Bvw%2uZica<&R>>*S`!!5zwzKsHRjJChuUit@XzU}4Cj za(hLeH(r1tAt^rG*a%{jhlx+3G3@fC6`~*?!Gu$6W2?8dw-KNufdT!^#L*}jZ2W%; zv91wbyo*HI2f-gJjH41=Ba{hfw2i{aOOe~$Wg&$V(?-h5&1NU9k=7Ug)XM)j7{V}* zVff2j7XcgO|Glk)opSuQy_NjGjHiwKucpEGa1oFp^RIm!@LGSEyPV&Ics4AiII zD|_1E95YvwiWq|qS7Nrl`K%X}ZBJqe^T=JVC%@O&?H)~KDsZcC!jh_$O#L()WmI*W zHU-=&>J%mBQs}Nt(cnk8=;>gal{(()%IE6J=c5M(67#V%$uw3biindYM#PJUgvH%~ z8BBt@%C6$NZkDjKBz~^X*%k*Tc^KCtCA$!Mq~adz>r>rYT|J9>D)hfGjA4dk1Q_8n z@CF4lWdCbE|JmI?u=D@zZ11l0zhyj3Y!h-RALUq#@*=0U(u=CcZQU*J?=kzlXomgW7%5zHG4qoUtXE{LA9p%n zJ%M0d1`VgLfahs?i{-d%mYmgxxkaai&@@ScOPEE{W!!#SpSP!+8c3N7f6d^h943Jn z1;+;$Xg=YX|Ge`Mr}$(>g!jWgvWQ4Ufmbm6V(;?c9+DC~qhya4as_iQb=0hwX0RWr zP@(*n=w5AP_*TFJpG6Cnex&SIb^f5AQg>;P|D^&tmk(Hj{J+1yxo^k++27e-$^XlE zm}IZa42u)_CCI0h^40XM73}p=ZDe`9e3SUD%FZgW7ld4tkgmC9b5!g7*cUBFzi0hY z)>zHGT!c&@JlqW3sDHVBW5zd%5xURQU#{OUr1>x4>1u`tJg17`0ncONf$6}j0QMpR zNBZUDjTb^5_%%vGp3;e9UJ!1bEsY3+hat=$$JWmv6{vgy!;S!OoP;395JUv{m_aH) z^igKa6F?B^v3iCRgEm@6V7-L(SJ00#OgfIiYBuvblr%Xwv+HFV!Yc)7r67H8)^)nl zN`7ed!6$MIOYYWBZNsj0od~GrspWAzTn=Ac)8IL3X?;{)lx*PbOk^#3n0<5kxeM;bI4go7_ z&T3Pr8jd9%1HN}MmLK69kYf%c>fp`lC~&3eKAEP=jb=B(4ps09l^I!`6iNYkb#nL} zoE&~1!ks$@o>C!V{{_%@+coLH^s?+u63ye|C3P{$ERZxL`-e7@Q_! zW{!T9r!mXVH?!===a3e?N}o&9NPWQLTDAw)_#Yxz&DuSju;n^~K*);n-+*0{Aqd<- zkYgCqKZTis)m8X6r0H$w??SIjbrmUS3Gt@}f?eOFpR5oF?200NPyf}Sg?S3;(9`{Q zV1=;~{SfrlYDN8`qR#F5eiRpxeoiDoK$p(0C_~AJ?q%;q?h5eXIsOQug#Syjhz|i8 z!z_zJ$Oge#j|_c6_d7q%pdU`esDu&}pCF1*5>r8~PIbIdcQ7xV3UcyV^HLD!yJ73C zpKAU;faDTo9=Swq<^O< zBN+G?M}vf~PQsMiNx>cIs-rJc6wbO~P@!5(ydH)@o<(FLVr2L9c{sJj;8FL7OB6Qk z4DCC%&`koYr4lmZ>zruAXfX7^Ch%hP;DJqUQZXcIDz(1^YZzwZC~#)4k)O<4Z_IiP zOV|9wk^Wg9$Z8Q55d*_suV6RjjsTf*X+&Kw}@bd}`e1L_~yns`NMEq<3i8Qa< zf$TP3u)}#eb0Z8?H#B$(BK%Yd)E&3Z5eZK6W(5b1@Awfm|Bdm77yPU}G zh~Tx(-k5qHFSj6sEA$_0oCVyjF>vNAq*IvBIyMm{@i|AbF`-b43a$yHIz@}!ATIOL z#i7^ZBTJX1W@yk0&_6p4Qbm2B0>%@bI>>0qtl_}qNMv%?-|0Esql7q`wFW@L24!3U zE;vCiMh_jZ9uv`J*$RW*5ieCq@!IZdNlq#l4QDGgy`CCj%CI_Meb549T66}KIZK=t zXM3JE&U}}sSzz%M5cGdAN}j?pP%Hmki)BhTx;Z4kCi!pYpd|kt9IX65m-6tyVscYw z-gk1;seH2tfzF&roR7{F)@ zyaX{Mf5B`oiU@$8(>Mwu5>FV!Yovtbz)wJ?Zf>)s7e*Njn41kj+zo?Y5`;s49HBg; zQ`=W7fWo750_DWQLCK5jKF0Y7V<%N|Dj)Sl*}l-YJLKQ=Rn8JS$RSH57mZ*%%Z; z>q|;Ij)%U0X^9+1$$)E@LP}LyrhIITZW2VfpK?Y zO-gLeF*@>WcA>a!fe8lvQU6AZ!<~&m6zBeVBTZd7_yjlnzOi$qY|*b zr<0fO<7p-TT}!?9QR2Vt>}_q^@!$4$w^s7sGM+m5PrhEP3@D)fEOMaLou$fxSZ{k? zdC&ybMkbVdNR>!vLToRQNw^CU4Gkn_5D#6*tVF~*5z!p>ClV8}&buB(RFo|=NQ$D^ z`P7#6daJlCG%D+8oiVp&fv=UDe^ddodXnfA`#uCo6W5rnM*clKOUOlbj?m1Z zf7#RI|FgYSzW=?o^8Z=N)8x})%mPEa(L!Ns3rt@uDvX-T~`zgbDDX zgm~=#`@0_S1QETCymP!RuQy%t02VxB!|nxQmfAwG*M985$ml01TXrx#=Dq$m`b1$zZNeIsFNmzjPLWe{Nsjm2}Y znZ&axa2DG640sEn?+J0g%+LsuAb|lH5{1V(K`aw~2K;*;{C0UfMK^}2Uyr;mphwAI zW4v8Pdui+6$^QeGk*Lpnz&CCS{q~XUzq^}zyCwVY*6RF!DGxX67UNB&Z^N81o84EN zL9Rp>t=u;)Gw(A1+FEjDoVvn1toM+AYh~}P>c)aS`W+EHw3g2>&S6$|v-eo=y0?Df z4`62WunSH>B z8tA|tKLz@D4*Uzv{P5B7md1<^htpuIUX*Wf7R_J7AcI7v&@Y?0)s@YjykN|K8FyxF zdvN17hQKEvhCU{Mnfd$R1IOg0emnQ0S7CtGd$Y*wPc<~u5}Z^~V7;<- z$E%upE9=a^&f}KHV#@>sc~j?}Q2ScB(NYyo@5&a+HMd zv#YR2vK+FRjC&{>Y>cAhmbQF5HnsBN43$FEdHco-aGa*`1o$9>vHux{K-3in$JV_g zqhm$V!vA%|vX<-6tNE=Z17kQEQ-Gt?&!E|WJ_H@RFY-{CCv7Wlw&wR<^qJ95+)Q)t zvP!;CTPj6BQG^N!Tx95@JmD_2J@76aWPS+2O_sy+<7;qza{T5LTwHr?`ciSgYu<=j z41TO=5J!L@6!%(T_jBx-b^M>_!JNb~UH)kFo;@pu%%gK`f?C*%c zIoElg>2zIB8hYJUUyfrxkK=jqlrYRdS&7I|+b*kYqB%kpyk4nz9GV#+(b)Ca_akQs z_pz&}P&l`B>274!=Y=XaBmQ|&1Mw+L<{E@gp&6;H=vj~UtR`%edn|h$lNvnm+EH$B_P)$ls#< zPMtlEO;gvCtE$UJhk#4BFm8fwl;USZ250@<^QpqrwwPJ)4HkZ4>RCyW z4)hG(-Xc63#)d(-bTLE^{-`XqUJM6*FsX4GSkn`YTZit3p2Us1P!qmIOfvz13+GWE z_+vkcS+qgZMLU7c?pP=~urihKu~){inoO>%ETS6}_Y4MT46_N~v4^JZlHP6xgZG-J zc4I%VXMU}L)ii8Bn(g#wcxw26cz2@0JM*LC$2tGo-`U$Lo&W8wLm-Pzt?7_*+#?hm0){5u~T2EYVi98cHQ-!YCyD1=90 zgz3&ObK5D($ZrS}yLqiS$Bw6;3RhOHulLXJF0kv-cZXKTEef~ppPIiJ46%x)$+kuh zlh9K}N;S}4_Tce*RUR7=tw=FKS|Ld~t(-wkt?1A!HgpuBeb+cp#wY#Hk?<^5nI%S^{asnn|P;t|pRJsG3Z&P>p+MQ-TP_I60?e z97p+h@gF6IZ*0eypKOe53{%k(<%F_ub~Pj*xgUdd3ce$+h_i6BREOaa;nRt& z4rpoQ_#P)nP}w=XkiF=t$mG#ex$gG6@b*R2D$wK?W$Yku98p;g4s|&5Xm_-GO_E!g*c9Alwb_o+*`>Tnv z%V}wfamA*Qd5vvnbmZ6{x_l^PcqX`)$CFG_cnHkImUljmf-V(D)o@d&MP4x02B($a zi2S{5Vr5Kdd}{Q6&N1IYl10H>$AAs`|K`r_PAUHH-YWjvQl93OJ`xjvPlw{F>KcC` z4X!=yXT|C+u7W?4QG)22E@hKt%|>XWfGC!=)k2t}C?Tv;mvPHOAdp?H{I*Zc`js)$WME6LdXOMx(!c!62W4aDbIZ6DEzy~NTvVoR!Vv- zgS1vs~&JXVMbmJDM{zC$@IT%3G`R~?#>Hh!bD*y9xo)(h67=Jz= z78v5xyeiGX+g5(jXm8{vxgY<+f3-O}<`qRmLHeQtXP_B4Kaq`ew#i0mQd% zGd*j*GRg))RId%C&@OOpeS_7e+TPXfEQ4~pUYnV-pTppYrvU(MGz6n%6aBc=MM3a2RLx~3#}ND@zkyVY~&{w zY{;$&%HYPW|7V`fpb0jt|DA(_9ozq7e}A?9m-4js|Lc|J!wFLidu&oHJn(&G8skvb z3+=SX>WW|M%Xq~lur&vs+{7*ITUvPdt~`H~8T0Aij0|0Q`l)bn=Z0k6GY{gWIqTik z8+Iw)plAp&i4w+rFMaOgViveBy%H%a8TmY^BU|2ydYebK=N_xj(~B5&ZImkN+roNVve2HrhbRfr0}Hab@f>qEDA$xL zkE4q|>+Ae&N*gYcrFt7)$GR=J;gv$AY4-bfS8uo>PhYFwzCE-0#>?0p{`Tz|qjce^ z%8mm9lq8VdWam~vey&g)9BQmxknu?;r?B1#YzC=beKZ|9NfdxWNhb97rT^-hIxljEcrIC z5us!R6Du^Igm&aATH|oG5<^#FD4Q^Md2kQs6+gv>!C@^|{uyxLN0V|ykG>bVh113o zT*NZX_&Viv#Y$#)_-PtP0fS@JY#|ODUtYdBJ2__Z&B@j2tJCwFv*S0{E0fs2@H3VC zhj(T=0%(%|woB)~Tbui<^WUXB^UHsDXC?dLot5QpC31ZiA{X9y5^)RfJchVcCT7*J z8idT?K#wpmGa)$~MM$mfIf!UZ-IBcy@ARJIo#XFWz=?4H5 zLF>K&#Q1kOISbp$m?tNv*VnhdpZ??a?A0>>c(G#%XF4d?rzcmZH_QaKl2IS$sh0o5 zzQ1uR8~`5A|8IB4KL6d^T>1Ym=b1+S)A!-|Wjzk>P`_{L+K72NXwDt@-;8tgfXxH} z$RMG-3ne`580Rn!kXAWfxg_3lR`uY=hhh^6&?wCy#t}*m!Qjs*74KmZWRsMz*T<*V z+k5-$gY;XTp(+6XM0dCnfBI3|O1FV_%Ss5PReqG}yBwyC7vNV&f+0{}m}srXFOWhv z&jDWsTC}QfO;QL~8{BN#1(PQV_)|M00x#sRST8)fWqV4d>}Y|{cKJ=Ja+g(D|I8?HvB|>VNc{$dB9$kvHC?k86c&iHe!HS`W1ZJf&#dT9n&3382 zBS?lQEL2yq!N~ni7l2*WHQz|5UR>8C|8|Qh3l$AxlxG1v6nXC$bCm;r!s%0`aXDK` zBa+?lOqWZ zCNN9DGjrYWg6%j!+ix*DgFxc&nO>`HLZMfUyGPB8Z~4gbF;eiHgI zN~UxHYvBL82m7}DXM2BlXT|@Q@yx=nv6=@9zYMw-B@qel9O3BJQiRD_5|Qiw%Z|z7 z2s=N^&8nf;ap6c&QIhhXlOYW5aX!KoURg%)ud?0&Jl>t^SYS1E8bX6v;<+3pK|iCp ziasCJ0O(cJDXdN!xf}!33U*t7`jEB)tXFV0;HIbTV^`gfF*mHiHRnw&zGl%1)HYs# zOZQ-yf#@vJh990%g$oCM4C#bwHz@*?1U{)OuujP+gD9R{ogUwug46$Zb9#P#c5x2Q zeg)?jH{kUDon7Bt1FiM{@M_QYoXE2Po)LZm#6`>h;Z0ZmmY@{HXfSDAv7i6>=LD0C z#lV@qxo7~h+W|xY3Sm|z@wac!_)Po0tS82_7l)C?N>H6B=aV)U5KICTil`sVn$CW? z4hXufVaABg*b@}9(7vpi@oFK^*#y^N^9V`vKz{J!Yd9Fegj`2|3gG6udiYVla_O)# z?r(=`VTw2o%z?QU5LKYQeBt>>#)a6>+SpS@w}fLeVvmT8zWW$hX&)M}D}k67%SyGV zh5SEv0DyY=e`|YZ^T0m;Jy^wmU(VBB{+}lRz*+`BZDP97k_etBU1pD0Rz z_Y!!e79ChEfPTa14rYl@Upj6ItU99{NJ9}Ade zDD!~#;AaVoy68noA9=tF;ayIDlFSca30mEV$Q@mxVl=G-nreV-sIv@~M4=8_yQj8; ztu}h?MkLLmk)KW8r6HBLN#+wcm{bgp_#Bz6Cr@EEjxY?V9Fu52XBibII;H049wuiq zvy7RJQ|tab?jXKpr+F1a$Uhq6_Yjd_NVf^LVX$=4^A8Gw8uzvTJ~b$ z!&S12&t&7UiD{3Kl*@V@In+@?7zZW$yB_fRG4knO9dle}8W|^sN^(qC8mR%yszk?L zr#v@wDr;Rt8Ca)MUr$MR9k4zyUTkjfK6aPxAbEf=0b4937HzR48um(Jpu1;vGpcGw zwhYEhW~;dDul#_+f9CUPPRPdOwiz2lVY|h?i4!Zt+UdkpsUb* z4~_-XuJf&T?ULLt&rk~Zwm_$62KzAUGL7r5EGgB^P^)F5tyY_3IV$7_6Xr}hf<&Mi z)v6s(CtL;x@Uys6aCii~|NgMm{oBV6o87;CeDNWC7=2u0Q-YuAouD*=A@{h-Q%o}G zj|x|wG9|Al@V7n*hGs)8E;!6fSPLAZFgvgU3=u)&g1+bIe{*Z|U}gVb#?x&7m*cPJe~}DtF;1BkUNpcHO}6l!QDvJF>WKt2B1wfS z(30B5hsQp^~`UOU{?hDUATHy5ui z4#B%5B7i_lFzBO9Vk^>SSjhkcsmzemsiuytVP|JvT%+grtdU&_-g|2a70)b1b7Q%1VzS+;Fc0IRee2t=yS z6Du@Z!P;sM6X!cn)G(_^8eVG^mmAv@r~IPDSq}Rh* zceiZ*zrD);v7Dy`{}=N>h2sx0NVGJtb|&x21dgTX>Uth+J7T*YD$FzeT&>{hX8La< zkbN_Z-%tPHs81Pmb6pix-2p)cYOe%SvSdy*2o;;LE2;W3(j(4ks=$Sq&|OO4V`-J5DMsii$}-MVC<$Pt>MZ)%}-X*%K3rCDNEvfQZy&nk0S zQGgxR7Xe*87Um-J3?}9k#bukG9ZJDcVq3>co8?gUIkwp#V|*WMT7J}7AU~c}WOfE_ zTb-}|D?P3F|BQKm& z?or{f-;!do_M&Ol5QMLiXsX`SWUCI&=Q3ori`1vc^c)+KPB}VXWhg$G)Q0`5W5h1% ztj~amlpf1SSZx))AC>NZf{92E5DvQR0HP=Ad5%@09+yjqn3fuHy`NlsYPJ8D*V$CM zV59!GZ~Oo5Y_9x&m-9@q|GT*DqAY-Jj=OXdV6h!pHb8j^XaQEhrZ}uq-^;491eR#J zG6k+4`)S4hXUzL3pCERdVtD5&Vo90F#t0pgwZ4iUvb%!I0{zF1UOJI~`jt@!_(F5nIP zfAe6=mjAc54_4>@OL?YXhckJAi$WrbU+-SA7tTkSkj)t>|Fc3@aOwrZYgW!v&4ZY^ z`gp*@J09@(K}fxuc_9azFzZBfmOZrKh0paf_eSSm*>y&lvL|rSeyw0WKX5#_4#wC55wn-=fgC3ZB8-#Tko@9{b-D4ae-D8V0+dcDPa#7HG{B~r zIe`xs#(+>h_X@)Fgw|dwjgDyII1CwFMP6|V;7T)7bkA(eW0i%WMITDj!L;6@V~ua) ztxN-j4w&Y$rD{r^+_b!PX*K!73a(S||Cy!02L8XZxo@BUZtv`_GnfSK_^+~vEZprT6wpwpqmQ~yWtj>?dr(;!PQ19 z0?%+wPeZzWhv$wrs}F268o@A{B^Gvpq=GRo=@p=9=si^^Z5PrDr61RKV0U1UZ$Z2x;?8}!rB~HSdI-XAP`|ue6T(3R^H$y1?ma1>j!ZQFgrJ0x2wP;rb zb|}S4GR?MJg!R4QsL0vJ1qj5Ush2AelePEOuM#V1wHAjxYBwACsaI;Z))T>n0B=@p zMRbHCl=#_1-;Kr^ath31b!xpO%MHy^z@yA6&118 z829AtD913Qe`YWVSu7jI;stKcT4XD?I?~>iy%p;>^IOS-E7p<+KaS z-0tCdLVi!<-S@1^SVAVzn6fr0U zUv+$Uv)LL}?gFB7UBTEJP^sQWR-F3>c$)Y>Ovdwy|4saV|6tGZ|Jd3;*k8&2OL+|b zf0~RJ!}eh^{wY{K>&GL>{V!$GXN|$aWZdE+cExUG8Yaw{RqY({nMdPq71Aj5Uj^A0qbjH@D<#{3GVO& zWM<+u^%Z;t{V2nv!%=bM0xMY=`J^_ij4&C0lLlKCyiFpZEjydYjAlnl0OvGZ zvpgA%8t`-KC*ir6G3(V^XHKHHSCqEzFP5J+?7gmf!W|*+^^1;@xL#dFeo>O{6P-@Q zpu$f^&pndm&~uLNT14Q8k!Fq4o@CMJI`8+R&%l%Gm5HAAQJ#c$z8kYlNh%3TXHm{^zOP=sR`W;fLRbYfJJn@lpX6|G*b5&I+8;I` zQBpNFs^1G5B*9(uv>4B^SI0ECKuqi5UO$gxv8Kfms6eB{0SobtVKB9k)|3&7ovRQf zBrN&j(BAIYNRE5*JOAU-CqoDB>NK=*BPfIW=sBe~^-2}w^l)NSL7%8^l=suVot^{5yKDUv4I$KK%{h!K|k7@ti-9Om3?Z5k*tNXu8c}n^}9qok~0VuGa#Sp;z zvS4FCrGBPs3c8x0?bQM&hYf+fwp`FA{4lV7Z}Z-XSuaz9VArs1{2Hj*Y*GtaivN$C4IvDvEU6T)Ny$suQE4 zrp-AUEeSB%WS5E#I~SM)hg2uDxN!yVAqc?F5hk8Owy{@b)v3nH?AGX>!qjYDqkfJndR*9|Tbq@1 zX0%v+s%j`SMS`7+vPmtibcKGU;pKL@c>=eW7V`g_2$M(k|2Wv$EX)6^^S`A$CHeo& z!hAo()cINDf8LkJIShn}>nM;7h2usNEp7{aQ<+BCiWX9ygW>S=w$tK>4MZ5QBe^!2 zY#;Y@l8=Je6(k+XcN+OgBP+mvS!6670hUX;jsc5OrQ<+j4=8xP8Y+Y1FYaJ)-kqU| z|M#QMFg%^l38bF?Z*A^vm-zp|_A39wQXYf<|4IjYab6&D?)(%xK+&0nZUGxF!0{MG zAxNSaq$o-V%&?K;UN}dTZ?FPS;ZzwS*;(3-U~b1iPsULg`6qsgxrw5r4|0-Rr0j-O z@BIDQtFz@l~$>c}ivH)W>umqBDze>&V30wd zz^wC(ZI#un zLaeATyD_U@XR&s-@8xN-|3xEz0Iy*T1A=A<{mY()^Pla5?Oi+m&%y5M{_j#A!~REg z6E@&lAeY6M0*z_(Q`iHo9xd80jDf%4w>p%$t}tluW|;#BE2$&E{D*W=*Fe?WI25EK z`!a8x+$n95wzEBUwxPNr?x!@=atfDitV~h?6298Xk3xX2OQz8Vb+fNdiEtNE>4G7CIhc-EPL6^*|F zf|wz59vP%*|Bs_S3?{)G+232le?B;{_y4Wc`QLILWB*r!y_ij3f%_>oe62T&-t316 z-Rn#*&EPems)v^%Osq>;vejl(zWU$K{3(}dl^ONCI3h4 z(JZi2$v|eZTUuOnWwuMc3a5|Y0|nE9x9S{Kw9Ni(agSH-ZbdJ9MuO?-oN9F3S+;5W zj(ar*CIxj=_%P2;OrHLFDq@P3ZIoPeWh+Pwe{nOpFyWWFC1$JLt5y-^0)FJoA+)q2 zX!E%6>MmAuM_fAvUqKQjAxsF^w!10(l`BU|EJNq|o2`cw#%t(uo_n-T+BX#{tj|BR zxnuQMPm}zYqKwQN0JJIo&-VU~?fOdUK$A-C{A$3=g6tRZVg7>F#byFrw>^h8Nhdg1WM z5M~UT50sLt1>6|!!bcB=XT5aZFJf>%d2L(bDA%N68KmZ5nW~@!O)RFF>m^eaPRmbj8n{ob45O$9bO+;s&(WU-C9t;FGTjIR+)aP zr&0gsoAUd4(m*x&f9&k+m-0XFt@1xD<&pWHr2pD4K8}LLrGb*_vptJuxjn(QfT@)B za;vR1^ad?o`3fcxiTpVF6I#J&`MHjdrS9hNaHpS7g?eJEJ`DJ41kl*9TfoG;940ie zgll1iuxj}_Q&ld7K~M8j>>A0X&-$jME48MQX+U@AvlT15PnvkH+YL&JkwZt&opYtL zNm0iWHM|a3Un>oFDfr693-GHS#S~zn@5LGP!wK+J>jikHM6V5HS)41M5nafrK?T^r zPv|}@+oJ*+-Qr^8hwiX+-BQRL4G9-9R5Al0$nxNM>z8x_Hu=vFB(J~em!{-5UkAKk$@4*;6(e{XN?+V=n5 zmH+2*9>e~B$p(8-TRw&La~S_cR~GH|!QfJzUpI}!(HJHWV-I+Ai;BeGbe57lHQhiM zfE&vf#IUMJQ_CPr15cd1cU(?>h8>R0f_kp)a)RI$>yl8K0n&8>bWK5nIYwA{&Lm>4 zbZ2c`A_OaQh4M8Z))*s9`?tjYrTDufb`^xIzF4iG=;WB8dmMwQoILdQiXRQ}3)doD zXf+J5miLwaNlsla&YSB~+ z)iXGK1+ER-prvlv0wj<~E>MuH>GuyRPZm8|lvrs?m8?whOP4%}9HB#gXY>_>=?O|F z?)a(|JEnwTiw^GiKRAT}D3UpiVfK(k1oBN*o*xrq=BRB}z2?}yh1mcW5Q@*P_9|{s zu-rd|&>V3)-YXdUlWQ2DB&4!4-D>j;-V8H{hbRuI9G(XO#8`hNnlGxQFpE$qe>;Nj zNcoo`VYu<|!yJ{$r|6lUV8bOnsQl_2LPvJ2A0waa?|QV0g#Ukk*DEDDYA-*3)RSTO z;`GVR_Ri2%sI(TWtrJ%m;Bi)Rw@4D_U6|9D*wk)9z%S)l7qb%$xY3jpF(QWdb4OlpaNZz$0~z6)ks=q z86{d2uia8q@x2b1YuBDCMAz7H23$~fO$+qIn#ka%9AbhGp8*i0`Jo7}E}_ZKy&%oG zYtjggP&TP7$3Fx80Bfxj3hLXpXZ)|jXQnO4E-9MjGVP_0ag+?e=1cAg!~J{Mw2R0~ zFoHhwJjxSRw>U?W-Rij$XVneh%cHZnMXpSLzy za~s*ltKHvFezvhyjO4}(@b>g=Wrg$e%lF%_^a>1#0c0H3o%lsew*Ow={ICD&ec0;$ z?c-PW{|}qpzkPhsS*LI5pI=9R@2r)RxX4)wy#Lm!t$#SZym|fh_m9!vze4uv-#dR_ zGml?jmZ9t|9#o^Ip|^e+`%wbU5&{QIyMTip*y_9l>%USJO}yCb?a^0nqd20=gumR| z+#Ge>*=Gvm*Lm7Z7;;u|x^cO2v+;W4?Z)r2t=AN?RVv!Jj5cnfjn~n}+i2tWNR^Ff zVH4#j0e2I+ghZLm?Oj^v^mB?5n8+S%?d-z+j(NzWrjdPCWwD9!8B5?3I6#@6Pgk;X zPs2 zE7lqh3sHvZJn0aGAnG*3AZ6EfnNc06>BX9Tm3Q9mSUoB?FonOb%TQvEyc*w*Tf{lh zXN^sV(pjG_0;rmnfwt`^SctrrnFvfQPAUmi#^}9FN}y*!=W&zy?j>z!u4L$CThSHe zrEgh9i4$e60+DrsuGy^ttNo5U^-vqri9Jv3bZ~TM>!UbE5471n%0@oH?m#NcsKoDE z^XzDn{|f9aoGbk9t6Z(hZ>EznYBt;yg^nP#3%2`;0Jf}z{M)ekTD;c^X$m}l6l%W) zY2J$x0%P_r`rFo?9c^b#Z$(Xg-i&NTmZ=M9Ge~oX|KlTu&gGYFh?{{92v~Po!AnB! z8tJI;uVofMd-a&1U(4>DwUT-ZchC~USQ|U9&(RXJYLt|+r8thZYH6;Td-PDxV=cn- z8Y#zgZXP-J*v-j9^fmAmDDFEQd#NMOl9^27TAn+mv#~_$;yD+r$FWGO272z1dTM*# zv`>@$*ACD>ixs%R{(G>$YsdfE+TGe**?*Vu81~;ng1Z*O4rJntg;++c$@Ej0g-d-} zsBzf5VxkgAc!L<-`LPEO&%tAuOTMFYCv?oTpw--fR~6A(7Ji3e<}OLUsA4SWy1N|D zmq80UgKC#6xnpmC`}WMIipgabjiVS2;3*FLm>J1RAgT(o15x=pELAH$v9nni1Zb3A zW~d*<%$JS|Or=U@G47hE3+6m9Ms0EL4GR2th%oVZ)mZ+PjW;x!@_&JSlpXk~e;36O zi6FC{e^D_&f?`e;MS6Z1au|LX9@^4tVo zjbl-58YEd0Wh~1E?Gw2$m(I0odBP9RzxCcN`j~H&)8(ZWyyHrs^el%Njxd3V3JRpX zsSXUJ6*6^lSU7Aq=2_=OtCOrZdmP%Rx`2q(%2r1;cS?IIyUgDr?YaiU>y(rQmcd05 zfGd5rWm5W*+K3BQ8NzWCz_M%U+8D*T$X-9)F3T&vMR`Jc5tcDR)N-<@;-XUtR~O-H zvMIPI=e9$NPAUWBSs(a7ykyBO`2BnqBVYvmLWXDOht~?OW|d$ zCQNRmq3ZTT&k(+j+|1cGw(qWA)avcy8r$5v<0# zh&Q%R#TLLwC}``T?y)!t+psGY(zZKvsWT>+($&yvL$J_*^&_>bJR#8tihB~Cp=EpT zk^m(fYHiwz2F+cyJADR=c3p3OS5TnQfN_0>ktuBzj%nV)Na2|BGm%IFv}OrFiJ0*U z(~sUoxi%hKD~N>c5-U%`FK%m{*14LkYm;*WC>_$e)E zhQetQbj=gtify{mpcrBQE{50pCo^VYuj3CU^l7&DR_GQxf4kl_#UPksP1J1{H3(0$ zEZB^&6MocJxjwyNxmBmE^LpAkzh3-tetI=soma;vw-@hEuddEsRjlxZFYyYAnpO3} z43#wRh`^Cc8aCT*7L9StOnVI8!q=20C)5789op2&U?{Y624%f>y6mjm!GC)*`FYX? zFp~n?c96GM-^E_ZjL{|#IqOykVS4&0_hY`Py-T7`a?oZSyQ%w_C($RWx4U|%3C15@y_lmz4d734 zSZMTT(Z_>2^$V?Q1Tppp@X{wk4|rbjLMGQV?@g3U@j6tUC$WM(4Z1BO6kEFv!o+9Y z40_bCdznoZiA42QQ~vt!$PK$x)XWz8YZOBdc)yB(6*uS&8sLlMG|N!tI`*>yFjeLV zokk?kIi}IqX$>qzhS1bV3hJb9yFn9kM)tH~wA@yK0^IU&Y{EIhvzw?o^HX^R0E%xRYPtJWF~J?K zNot||fbLf{u2#HD-LhL$!52)UUGd&seF4r=f?MbW*P1QBY`maSFr5$fRa8qfRggS3 z`7~8Red?(%70QJZ9M12Yz{LA$K=Jl7l==gyzPb=B3b+&%-R$h>S)Ix1QfIPG2Qvld zqt~E!$)(C-^22`g8F(9>3!{1~S_MiPB9vpW*lb+Y^FbeF4}KN`9Q$|(K5R6ix|S9c zwfDAjlu+gFH-yOzQo5H1ykDX)${-8k>Br@uaK64y%Hy_fDuFcvY~$A8l~qr#0@m~g z?!+-3oF+j(Dfdpfg_IgDcfd-Urm7?=cbb}yR*7Qav0}0f ztCV~Vj2?5dN{OMcGUA7wHOQSGMc}m}l)NsWFL%Gl#L<~d76+%F8M2A`r3 zZ)i>wbaL_Pc3qVeapd1afMJ3mOHxP`14jZN$BM83GG(P+pD`wv=xXVL_Qnfv4G9Qx zOwb6h6@wDyr;);J6k*J~(;exYY}L!Huvmb+jtgm8=u&H~WLR#lQyE&JqT{U>o!pi; z*h{?ed|c*eQ=G$AX2Yc~Ok(NtLI!D{iqe+gwjw+@6=ZZJTXs;pVHu*V))|7CjT%AB zCJdS|iulnV=(hZ^N+4{+rB=Y@6Sp#z{1+?Ybd^t|i)C9>{R-~kq~w&fCP%H1fw;d) zBfKhHs*bSC5j2}^I>l-?Vm&?RHy^Z;CqyLy3+FEbu@(nfh0~Tn$(eej>CWZ8RiodC zr6Yf$E7$v%;zEpT%3*E3S-lmrtJB)fW|C*)1zsI!uC4r3<|y~m2`4&4#?OR=h7id(OYl=_*Osj8{LHO|XTT}q>nfaxcI zGbyI88W7nV7cfVZfVSs<4d=fsi$OPz`Y@OTG3<&|IUBd|GYs0E2RHbCZSCxCS?9ky z`? zQVe}-7nm-pE0yv-2rwU6P7~U(kIds=8w`{8eEar{mSQ2=dDS9HN}E|CD$SG=yp+Le zcjc2b%`+?iA7ts``2XHciT`iyuK52l9)thWL46edUzgtSC)xz`6pD|(2~_O@?1JH( zTL6W@`9JMb1OL|z)U5GRyxELcJC}V;WvzrXf5X$N^1s*06coD;#gT3~v=~3mV-;3A zLGv>!{}(A&TWtXi{C{WjVB6yVyE`lY&*eM@{}+S$C|f{vj^3YW15llOVntxFTLA6V zqP758#wSBs#@jGxg@YmF-UT8*^rP(>-I^;isqUOrpj(mR+igU0Ib5ZNi&e{E5rfgr zy=sQxDqk2Xh4dGr($N2J-=2x-e^>>2h%n(^Ec7q7Q(GWyh^{>yutQ(*uJFQPNQ$tf z9O17ZPg5Q-whAFa(%+yT!VC+%iWj9wp9%MoR*`rthaBbTClhv*PbeA}9;;i7qQK;% zeScdK2LRm{s&Ij#4}+y>tY!8Paex%f!B_ApM+7$K)mn*DKixB{{HHX!77}2i{(oTG ze|Pt{SMuLd9`pXM9MqK&V0IZ$>*mj82_V73q`=2A1Ss0CtN|?_C;ty&N|!?tL=bP> z25}VJ4^fWcS@KWrFfrXl&<6g$yT5Pi|J%F!EB?QfM}*h9(K$O9zyxM2w!BY;-;nuP zV*G$IeqIj~oM#Y&hydZrgn=Jq2xE|^EY0c$3?m-(OmX7|W~$G*UNPl*@)o0#Kcha7 zHxadBrc@};@VU`lDl!02--y!(wRx%z|}cb|{#Ii$60-m^d% zDFZnC>(=&;r-19_sYa)jrCQ_R#>VsUMp|sAcBMRvoplbMkN@}cG4oq>tgzzGcNk`D z_DUibt<=_|GQgd0#AIIkXLuLr$k5-1!I1ZXd(i4Vkn|VVA2Aw1<SWU=BthB1E&A758TC`jO?u^%xDiS9IRx_pll`3=Ae-FleEQEyH8e_N$g-HQ6)__iI$mzaJfjSWIbxJK8<&N}wBU9$IS1vZ-;{yQ7_vf&)(S+)K)k1ez~1Fq%wJJ@ zvNvowvsa8hwJvMZ%Lb8u>?X!O8WcDL*w{wUVqib(Giw6V{WridJ6 zU7~ni5+cf*cE^H0uV-Jor-l3<-u>Z6vt|C{PrdxVy|cHqZ^wVx++F$qE#;{-ZiFz! zy$3%sOc|Q|oxw0F->2cW3T0cUT!=;s9F_;x%B!zff8~5Ex`AF|^?|?55mCkv>^Z&1i*;UAO}}AUQF!aB@pvxf6qMXc(aOFl^lbIq8w zA7RS0U+qacSj?npr-(X5)^15T=UIDsBBy83$R9v?ukR4BN+)py6LLnsJhP&YQ{`Pt zgS@x@SNTFDJQi;%G8?n@MFo|0S-h-HX3T8|0O*;D<-2lHVwslMOn3AQ06Y1wo^)4F zp9?@29KU(<3?^gx;_CF(+4b#j7uPrZGgpIuhm$MVmldk)9sDczf%(gqFAYjJBfikL zzkU0QsC^G7hlMRfA#{0sef`J9)vG5&it7Q=fKy<0admSDy#1Ynzj@EJD>q%>ZQMo4 z1|E9+S2y5)d}Tn{w>uvX!TuJQl{W>0Ap+j%XBgxpN(SK7FM!T&-0SstM8ppt zKsN#2nn@K8eEbOh?cXR3P)0anCvVPfkKf(=c2p|-AI}86XxTSs?@x~yrTA+)jbh-f z(f6Wchy)ojh*Okcc(k^z@fteqP)gB`F9{!9DBNfyMB@fLvYP<4UMG|&E=7CpSU zDt%6)WT0Mj#9vV#d;s2>M9~9BN5H$hIDhSdkKpT9$HzAp$FI)LUxO=(B#1De99UVV zed1GY7bRc>M<|=BQ?9WZV!@EA?-r`QiiQ3AR-^TX;6y|pj;0Dkj8H`U%5^!w&9&Z?O0zx~@HKw{#P z9RG)a86v?_wim@nq}60fM#8JD7|9YD$;J8Wi)AqqKD;d$i9qVr@y+os$JeKa!29y0 zWZ)D3sw4An-^80TW z@2*d8FVD_jKlYj}ox$46mP-8x~Fw~Ny#gc33E5&{nd`~{(GLQcvQ7jjNqB^1 z?9H_LxT$ls?!M1;cYX2ZYAL%Uod(TYBtz%q;_CF;+#H$do&N6xWe~GHQ4~HsKmO&- zDKkEtp5L6E9N(N>oL5xlnHr9Bs#%jLka3q4tm9X2&(3e(U7uc^AHO}V0HS>0N)?x- z8&s2$nbMU)uy_V0>>kyG=f;i+#I^;4v%VnDV$kif%Lv_Wjybn;(EgiuXnxRyeEESZ z1c!h9+h2D!Xva6?2R47cc^gcZVD69_`;@)BMsWt}%@i&MYO+wBi5BBn?(6r7azC0) zoMI;t(=qfEVKT_z%KW_y);^`SVCf29zF5~@*(urKk$GySj#c={Q<4tU!I}8f$V|R` z;T2_A`I;ML>`oU&2lx7U9E)J>8WIH{!~L3_5;0$5_1(BD%W-@K3BLh#^#@21iedH= z5QrJp>J{+EeiZXjo;dX;4(vu$45j{t67C&oqWSGxH+zsPG#%VVm`>~o=)PkS{~2ri z_6>AH_A@M$LC_sKAla(Zo+;t+VPZiP*-(it=|6e_b635(sG`k9nKl=XM;o*-+Ms6I zXt%2Ce(BY1UG%BF`KEtb_I?`FMXNFw!ZPDT}S?LE{4gIj_NyFcDGspGmcFj`JUNgI#7n!rVs6J zt_@q=Tr#wct>}>9P3bIyS-o4Sw<4?96oulK$1@d{=$p1E_r#Y_ljJ24xY~DCHEG{|==s zt}p5Wf*YzW}yW{eK}HD8qXa{a<%~tk?gUvzOBV;8b)4vhOFP?u@J1lUH6Z-s(oSm2ff=DP236wTr!##V6>W4m~R9xU)$m>#UdQ*@kJ4|YPE zQx7&_&ZY-DV9cZkJK)Ty2UkFvQ4cnu%@p*;g289EfY4t3Ede1h7C`9ip9RQw8hgj) z_6|+e#lLGcRTWW((_Fn&3Mwa~dQVAOseIPxs*QT?ylSTy!3C(DmXx?8wNn?negd_# zh5pBG)XlE_HOK$lIoP%Jzuldc{Nc%l|u@J1hBr8PE49 z|MN>$HR8V`1lxSlzjl|ZQuwE37AOAe(55~5(Xh23F8fHwpozi76*h%hpcfX3fpJr< z;S9#6*fh-*Cns%MTy(7e;_hp`IRDqb{nZ`izae0Mp2fzQM){IrL7(z@hIOg3Sy*Qk z7A30}z&M?BNnIh`N`}-S%_ORq0L&t(8$bl9rv6WG4 zeyP>ic9tWw7M%R4WLBsA2a_;GQ9?Fu{V>cR#t_dD{=G5(-|pUlDgSL992^|127I2}e{%lx6f{T5Kbgd>D)S%ba*N3HCrVEi# z=wk@ZEJou)0JM;RKuybT9mH}YMu&|7(CH8DaZExIKK0PdlBV=3bu@zvKz(jAWBe{Eh_;D z`6b_U)Ni_X@IeTRJwj8C873Oy#Loth(7CCdb?OE5%(5I3oz_f=0a|6Nt*GzV1t};q zwt0cp5m+y$q3u}obcDYbmFW^&E2AnC)9d}w$ZO#tzc|zJ8)c(D80DD!=3}jzIR|y{ zUbbi??60JapQ;Y^)Qgom z_*1BZn#F@h%K8`63)}Gjd6mFM{qMle|Gv4kyR!c+<#F==g(-oYYyQZZpwWYsI=E5? zSL)zO9sIGkeB*KN|5D&d2+aCEl>x?n9EB`g>ca2;?{4pudtN+77+{p)shf`9-A0U7#4X05_(vzKjCHY+;CvsvUBZ677QR&qdX z4`$HvSol?Km*(4%jFAl1OW}7Wo7SJ9$sU=cbM;vPscU?V7SILDaL6P}Onedr zhD<4q07^h`BFq8KG35%h#cV?fq{2A>=0F+0onoa4_fHfhzAR`kT^Qd%Uz+IPz=@+SV0?`s_lnWA5u3~A6Yj(l<@fo9)>V6$SMNEf8fO$ zrY8K<&>35MaL(llN}4j^Ec3gH7_Ls+9WHfQmmcfJ*uq<+3NA^#f*8G!1+(TGWm$Tj zvez20k0451BVH|kJJB2X1U~qa`B4*qrblZfV}I9=Q~qaZ8!q!W=3eL&C5-}4uK z|9g9Hw{-t|XM1}k|1aa=ay?_PBR^e`*l*3BUNL=|gnn)w^ekh_3?{&5fawUlif#k6 zaciRl)b*#e3eaFUEbcuIB22Q$wQ^ln3DcEZeolsT&%4{-g-L)y$nWJ4x-HT!J`7Q; z+`-Lqx-Y&@!5H^o4xeLBn6$Jll2VVQTi{m-)X2CCs;fdp!LI@XXFrV|R&3H?K|{Ot zk(^KxLD2yh!d_ZjE?{NKxN4hZ`SIY$k78Mw{m`LPdU~9!H8QC}{ddUv?j)k>-kQU< ztbEPwxxz3|hIXSN^`oQDq-OxIt6zAC@;C$;#Cgo}Ph&KKWEdp_5J&frt$m(v=8GVZ zXzEbC04x(UZ^L*Ew4pf!-kSRHQZJ%Lh89sjj3S))^gI8{_{eB~2)uO#|4@PHfIA<< z{oNuHl9WomJ^Ln>zgSsUkmMO(L>6s*4E_(6T+zK$zXF0-naB3oU*ywn|DVVD*X;kX zzh8>~xx3o`m-8%T|DVI?_Y8p8zk@O6J30TmaxVwKPZC79qR4A#FKVhio~$sZxzN_Q zOIsn=<5(^=K$``E8&znSKJlk<1{wLOS8Bh`091C z2H%$+@C5GkpQ2je$1%)2;GOXS@ql*^Dff~+x#sJXOSqkmZu1mj5v*8N@N+7=v!?o6 z)DW%`lo3K0>RuU|LPupxRA@c`9prTUMAIf%Tf^zEU6Dz zI5k#(u`GF=alO=iZYSyMnJlh2-M7A%n=b{EkcDfCWD}GePbdHTE3CxEO`?>zTdeAi zMPfNP0M0o$I1464Pyw^cIHh%L8;Oq>wZ*+=flrQ6uOj%foJ?2v(+hJkQ0%l|;K3v+ zN8*vvR>9{D0&3umNYzE9a<#w0{N6%Q71@WeuuX$!Qf~9Ag=GnXy-a1B$rR@0MkP(4 zub<1>*%bJ?ka9FGh(x}}ikV60?xfom0uo?dLblC+OPaD{3BR7*zT=sI>bcG=6Kwx< zEBkNJjb+wu4~c%Q7>|#@`3B{)U#NQ9&C;O@iSunm$7CXOzs>)4XxxJf7^>PSR zICQ9WD@3y6J&LYNd1oaRjCbWbTh-gO5v!3Mi|rC>jZ}|EcWY7M(z%n30Ujlua*j*K z3*m=jNlKb;gz?>bfVRX`&w<<+l8{;1W%I5E5%+p2(rf0SGBED91w26s+MpJO?P30} z{?woUSG)I>PyP9Se0*?d+kcHlqoeKle-n>T5OZeI)9tS~_j_)AOWxY)2Dq*L7XY@q zh#VPz-|hm}1Afmci?;fJ7Wc813r5$&U9}U)3}&nNfK;lZMM1|~wMt77qr}F@?rotr zG&V=Q+@P7ziN3&)$1Fg!dwuv36GUa74WpD-(a*rnqG6nS_Sua|M+@hW(RENmU6_VE zdT#)B?rLuk{A*6R!Y*7t*k!@0jpDF#SFW_hpw6GR=Dys!)5PAsh#?_woohZECO(Ti zr;;Vs8j>SzBPhZ>Qlwc%W$m^{JG&Q#COQu{2z)FX{Pc{|VoX4esGyG`FiCUnQUp*`j1>Z($ch z5{=WLmguxI`dH;A50)L7rIjsH(P7n!+?_&lm7@v%qN0WeyoK(ZLIY7QO)5GS{8Ig+ zXx`n-W^cY7>;aUl8B($WsLIPUIO`Kc(Jc6Q)&(%n63k#R^}AoSS%a*0(;}?e%%byU z@xl9Uy_aQg?YMEqwy_^QJM`s;hm7Cd@P%lTZl+xvs)9BrESnHpQ!DFi&r06A!=%nD zQBn8Zlt2Y9sgM$Y;BuD5XoeDQ+<2X#5Kj#MLvyOi&<_eKv#({CyEbiVv>jbLZ6FkU zEhH6IR?$L^@G4~QWDJ4VF(gg6^`Ov)KD$8|ffDx`aidg?HZkxhm%HPe;aaC{9-`*< zRB02UxdkQ8h_xlaI2fMs~31#lS-hxUzx2-z{TD^;LtSaH$Nk%rmbv1S_` z6-`J~aF%`{q0M%3nQSM_2|`ymM~>JptrV6d(|&M8%$e8HjH0lGz1GJG)pKh$QCN~* zJ)7Xto*y-e$NEWSJGard(m$VaJLZx z>j1A81bYCuy-3*d-f<^HdGRje-Vi1Kv0$Y=VYg&A&zbd#$WNr+vMxHJ1W&+i0d`dz zOye{F+LV?g^4(tV zCPBcwW483*qF=jw2P2XOqaZHS$>Cv-70Dm9HY7S@Dv|u0WsP#g$MYo8yQ;AGmQh-! zkT6$OStAhTg8|sxu~v;u8uotzujmfNGPxZylFJc{9yALH*|KASP0x1Pl4_Rt-pSoA zn+#z>x4Q(nQnoY6nbxNdh1~=|X2|*b9OuXs+O5$);|PDSXI`5MeQI~P#G?T9#kVQ( za;|qQJCHb{B-?|eN=o*<@5cTLPwo9LP6~7@!tU&Uro8G6OyDi*XbIlr|8;O^=YKso z8I890zngekv1)A{47F9zfA9;far+RfuSFdQ`?g14rFMW@R;E$7sTi%i5Jv5Mm`kal zjMtzIM|VqRBKO`*bc54i}!}2>kUB zdT-sfynpjg2mU`zXDEZWsIw_pgZW50Up?i&0>EiBjq$w%X>96WotOmuq0D)97 z3`+iRlQQF9tEfbSGcXN;=asb@)MuTSh%hDAq?>*TE_+kDg6}G?AS2iER}jJ( zibF_jZ?y=K&}@;u$uU#Q=?Mm8yBEyb@P$@r&om=S6SF<`rm~^S&~8B#lo!%gc`+Ow z#lEb^j{mcCf!N`miX!0@<}fT!PFN~yk)BCK;Ih$r#YIKCD|LlNre2OE&Ykizwa9M zXr7Tytt)Zi%xO7@wb1nX>9pG47n8S9Rn497Sep!yG4aY))xCp zFYWO#TB12E;^K}KZE?kx>B5#Rvqj!p%Nli;9WWNqTL+Zf%a$4G_qWW=B2>-WJe_B) zM336eSu-+5Wkt^wVX;f1i}3B#*@oR=;q3%qcW8Jl)vsx3WUYrLg;_Sdo8O>3K?Nd1 zobKa<6fg}DvR!2~76pxnKtI8ZYYSsGQCXP2;Pky>c) zZ0XaEpOQfXIP#J&0KZg!FLbLnhZJ&rn|x)} z-siat%*q;WO2+iWy8E%jjc`tibmoBP*!8!lS9Y?n-nSjHT4@zSXT0N1#^YV+nU35& z=c1zNowSSb4)x9+lo;%g-Px{jz{5NA0K}L@XT6QP_TsHq9jNy_)L8}E{owqhHR1DW zA-NIPu)Fn^7b3mi)>d8B#M7@vZQ827adKxXf5pDWZZz7~{i*__UNEBV=$g5&th^Sy z+$}m7g;xPq&uj&i!v&hvP4zj*kC7ysvb3?LyhAdtMk`cQ84cD?e1&qogZ{V3 zA)4U3zVpA0kH#ZA|J%W6wAKG^g!?KoArOFpI zDpa}H9o4DP=X0lEJ;`1DLRxmW>}B)>e?ie397Qp@hdK9xa11tgSbVXIG$)NE`G{W8 zR&7f>HEe}^xTZ-jt{U6+)~Y!e z@Bake$*{EoZ@V16fiq?%*2QTEW5=p*r!Asgz}PHbnC*W|kquV;-+}+N3v()AVkhH8QLW=A@Ye(&?+3 zHcE<<_yO<^OOs=mBbCM6yDsVg-4(4#W;n#@{$dQ{YzoH#2+Gnto~eDmz|Fc#IOutV zJOeq}gM{E)p3-Ikb4<5Rg#oq)F!$Avwd^YH+`7-()b{G+_J0Cbbe0%~_fQ1pSsg;f z(T$(mTsRz1)eZ8@y#4W)WOqWo;{1bIXa6T~!E%EE2*`}x3GubX2t9KVDP)e3dj#%b zQh36FyGzt`cX7X)k;J&0fOer(4y3!s&?L=guqc|hjGP7>actERy|+4MgTS|#AtYDDF#30(o22u^ zBSKr)#5jO`&xCZ_XQPkz{!gBB_dmlpJ};TYl0kqQ{69y>V<-Oa={En* zW**_EU&;gQa7`t27)4ZeOaY8z5kHr#5<5aEPs}wHfE^$MN7PCRmGvcUqCm~_93}K{ z$*XYm8jc$kF&p-v6_y22_a(8|4zenSP6KnsEPfw1w z`+p-3+ctcPH?#G5UrX(JS(Wa!DT-%9GTmp9zt2Ez_j+;)_P5x)w2i$SEil1p!rD+a z!tcdf@D=<%PYXngyGFpi{!3~{adKPU*NIwL8g*e?jbrQEj1JRIE|Um-am_7sLswej znJDhfr5C~&y|kg%6a(VQSqtxf9>)}i1Qh^sojpYu>&Y=Y7}^yry`?b>^B%zX#0O%6 z^)e>NhAqt%Xh}pTk^dCAPV2#Cc?-oQxt+hE3=FJ0C(5O07kAXNeGD@ZQ3shF(M`HQ zT;U_eD5HP18=^i6H;dkCAUEjQcx`rDW8E)HEu6JN@fT-#l8ZE%;M+OZkr{n+Ux%(u zaB%i~_67=EwiR7NfL~CdVf*F*kSxYUA!!PJC9Ch^FMC32+N1K+-e}-43gFG0J?G85 zW+qpAfewZP!8u*&IJ{&1#gG)tECi(78iXOZsvkbDuW21^9?j;t!HF0jCID;grW5`i z5vh%&jN_TU3jMjz@dU^nwTlzk`@mXT?scucdOVAgf2c&3*D=hw*fQ_smC82oFi+Fa zAIP9U?s9WiTSZ7^&z|9Pa4#|jm*ad!@ynGSj3(%eJe5oggfNczV$@i+6%0^E-nVa0 z?*4-?K9}HOn1mB{1VY7qn%@y7?`v0wX2t5;q32gShL_lj>J#&1ZoeB@xQKB0n^=ucleO_HD4ep6c+l+W#x6 zfE)M!!Pvh4IXv9@e{JNc+W#?E33uN5x{kJ&T^~y=pt<4s>+N1&^=a7urKRBd?tc!B z4o3F<&*|uRyZ<-wwA%Z^)`;civWCVIxfLTfkaB^7IBEvu}Y1d(* z!Z6Ig&hQs@A$KA4%|0VBE$I#ZvRCb*A??R85$+>Qn=&UX;|RF871>`d+A6F^cKA~Vu{#9#J40iHpP zTf(#Z&zPqR03Y%>dV7A&M^ZN}O-9ImO{2M&{?g(@1OLyA+ln>We;wNP9|xn;S_gI*WY7TeQ_-8Fmjkg=af6VozK9rZUymI-s5#o^ZsAI{nz2C zYyWk!mH#*L)Z2gcy!Ds0{nDzoI6QQ76pRov7#fggq8;O6s9l0erxT6j3%pQUUC4G27HF)ii%%5v`*175XhY!to9FIBKbQVR5^D$ci`JM zMswY0v`QE^EjP6BnwA^dhn>4hi;X3f031o~6s-|c=hj+W9$oqZaB-%8?GtfZ-udTy z8u-7AAimNeu<`siI&kzqh)Um23|0jizW;ZB*>W1wpuE(c={+Ds- zS2zPU(f{LPhyIVpTmPSpJUot(m~T)f6A$eO&ES7C3tX#G&+zk#KRk zk*++nF7mRvkngKNVdW)tM<1<7mqX)HnH*{jDy(SMnxax5Vb_zjz$w*y z9bd*7;Wf%YB6R9-n!x-)k0rABRNl<0m?G8v`t^hMkc>Pa_2bfy_8kVNRajRa0@;UL;CAOdWSkPgC_ca;>-Vjx~2b{cntebI_0y9DPM&l zP{F&dZLc1$GN66w-N}h|rElj@=O0|~=kA@1%xji3MGCmCkJY_OqhSl#zj;u7-&LvJ z%rK$K7bw96hB5vhRHpk3xDihP(yZj_<)x1mG~F@)%F^gv#tlE}25Q|9l~B4)r7c^m zad=We@R|NDOQU}$?Z&1%Hu77|r3clqshZonvf1zD7gbIFh4I|Vw?B>a|70|_?|)8C z50AF=e-n>E|1ac}uS)FI+Ih5;T^m8)WE{`nEqZtJFGj`lboO5)O~7uA3Po*1R`Xir zckG;})(}#63Y5=q!cTjhLD4EN2gtW?PxgRPAla7A{Mv(!mwngL=CX8$5{JVaWhuc$ znm=eS3wWzFa5azPt2D+T4|h`*%hU&6x+oqTV2a{FOLf7SE-Orm2q#W)_SRoPT{^YG zFMSDt!U^>@vzvyaP?+Dg(B(EkNn2S4M12ttXNV9w z->{g92`xXqDZla1MBSU!SBl$kxxnh1ZiQ53y|OxHOGB7-t$-}eiyoE$Yi4agF4A~D zL+m`eI;dJ>T_J9T&^*0Ct6)?E4BrUL0`zERPt_v zZc|I%f5vzH%>$59rITpN3q%Oxa85~F^y>PTJe_C$3j?Q^y{48{iu!l4s^Jm$MlCFM zTL^g7{6AXS-`9Q``2X?I$oBs`K0ey=|BXC`{{O|>YarBIFo^(V$J_*%03m0Ih@W$UfWD;ufs5(ic?F|S(MY{CMc2R9+tQ+^61UP^gq%?cvWlE} zw@P>hU>E&fLdVn14F*;%ai6d1lz;iBI;g-%tye9rjAdqK?%8W>)#^rr7yRlc0KwZd zLAIZ*=@=wuTlQCH##UOesl_er*F*s5k57r4>`RNuTJ|D3t~AZt{|WqqE+_$?h@4%d zfDVae1-U~Hg!u~O==V9!%LM*^Xt`&3ZH|Xh4%Ypv(1V6zCb^@0fpQXnfFPKMQ$+vd z8=nOBnLy(6R)}+SAJR6Pa%AeUdG|zYUbVZ2Pst}v1aw4;@qeUa`7{iiZtC2qOckkW zlwTfZ+O<--QN(D58cNhVferOrB1$yQM{#BazV@`|;PSTMah!$&aM&J$V3y|0OFID{ z4?pRM)H?fQn^lUAd?;iuw7O?b>}_$wwkQ4OhK5r?s|oSoM&YpzF(=C*=EOjZ?5Q(W zWW`OPL@qT}LHwxfoA$0Q^cf8NgzUhfbu?U1siFMDex7*-;c-e;BSZ)pClr=I?cyTA3G z|Hem$2ln}IYyY{S$EE-BcDV;0Ps6_Zj@_p!pQP--YI1 zUB2*;PYO;Wy{CmXCjZyMSzV`r#LE(YJrZC0)YJc83CdTu0&k-KCocUz-R6JU%;VC3 zHs@OoAQu06cmT(-%LTYIRjudA-&J*oMDo|qL6Of<8*;rCF2jHr*!MJTDp~g^RYR(~ zrdSh4su)vU>AnVIR9yrAs;B=6oUzQmtFeG4`hPHT?*9+B^nWvtNB;w7s1NebT^b)T z{pSN%2l2K~RJQx52y13u~CH73QX%)nYmkCrDm4mbpZBt*8cd(WPp`D-1YT1IJiOg6WM3!JQfl znBSs;2ev$qW0t~&%E)e>a@Ck!#rDdvk!fbhvObm=+0%nH?EeH_(&HI6Axv`$Amo!{ zfrv!;(#J8zAqxC(r@8B>W~Acu24-m0)XGTkIoVjVmZXIgJ)xAW*)Q^LV+wcQC!Pe!Um&cFxcR0`fo#Gz%EF(a5|131~a*%aQ`daogha>^6rH z;>C@qQY>Y(?kg{07T}aUsYcBDGnC(=$Q-}#AZ%gDrO#~wTREK>Twq5^DYR%)R4c)- zop=Tn(XZrdeqdKWjdQ!sW6viAU9VXTZ~<;mn9dNDJ9szG82^RfCQW0TnMwzI*#nQH z;PO!oAYCPCa%7_+rmwDTsnlq@ytb0}QpT?%&Ew_3_nKCS;L zsFMoB*i^?dNgta%A2#{pSf0=*fYN3VS~5ga|5}`LE!1%X%py9r zQ(^xn@IeSE0I|(M058nTayB0Uv_J_XY=YplfK-I!rT{Ncf=KDoCK?Gi-E)?FU0XSV z5$>xoD#aG_thT8~5lzovfc!{Tq{2~ZqA#!;D6-VD^=bn~#Z^n7Vo_o&5u%;|YQw9o z#|fc4fLdMaQT$q8`sr7uGWqExx#V(`(TpwmR1Q^1VNMjC^+hdQalF5BX>rN%nzH7P zHQx545VG{3<$X<0Ls$u9CiQ<$fPZ|o%MbHZ>wl6oQn`lKd;foWIJWQqk4D@3|BXDx z{m*vvGf6PJjt@SDM>u(^?r#=+(KBxqvV;q1^VE|U_Uu6rfIV;W! z91ls6X6JFNpAlJDN&AEoyntwyCfA7as&C((1WY&Z1(O0Nx51fEny|jPF2of=?w*02 z1=AFjL-3ybcNRY73Qx+vb0<^pGrhv1W8gLp9}f|*1mCNs|8(BW^T2xIe~pih5A6KE zqm#q!{r^TDgZ^Ko5s-5Z#H6pv2AVT6Jq}LbjH72}ASs1Kz^!g6C zd+L|GN_jS%Lh{SiughoZl>J6%fkVWUB-%a8F&K})!3Z228F@W<;qxfsw-~xY{*M|1 zbnELC$_XX~N!g1o~x zOU#$5&jwy_*Q|sVHFS{XrSS|~XN~2( zMl|&{G`r0}d}X?BuT@R$a9wGw#=u3X@Rz}9n@csl6=$khjBXbXOgQF5#Bh8ZPdi4<>cXq3NDVil^m*KsEcL z=nt%Y`iJF2+7bf4C)V=4ix4&~d-q2ITB>&u99_boCS%9+0j*yrf0QxRx?2ylPm3jG ziVIy~+AYbpEitJZlkR#_aV0wdCQqQ)wBa1WI8N`ca=gGXx7ht!d zFkKAbE5J!H0OLVzQGOv+mfh>iolDSNDoI*q8P<)HCXxnZo@Ftbp`?H@mjVN@8>UGJ zjexJ2ncbA5FUAR0x`43Y(m+UPG5C~HZmA2lPdqucS`JvRUp;t#DyH-J9zKu&1n(H{ ze}l;k7U8r$)l$O{TBTsJNv>}!OQ&S22hgUv-@ZK&rP$ShfA@3hI-J2fbeR6K1hG^fP4*v$r%wL& zql44!{of`Y^ZrjvIbd_%OC$(q6+PMuK+j0}wg(Ai({^x({;ffr(U_;~5|XyjC05T9 z(K|>+rN>UF*Ys4={~WO+7nkx@G5~Cf|8RI{$A3FLIoQU3-pFIn|Mz^#We)HaNx!jx z9xd6oM$tFP*OGzDV{IeVk9dY*5_BQ>#yCvMs!}C)r}Vn}h|(9RcT-6I8@X1h{74M~{N;kKEX&+i!a`@M+sYr35XMX0W!lQzo!q{L zD^atPx4-&Q)oixeeK*L#t$$C556J>Y7;eTE7X-K2oV&>fykFYM{%tl729`jDepjG5 z#vS`VfoV}>TmDck>&RC#XQ=bBvSum;HHx zV=~Mh{_XYn#Jo+`){+=(-Q`@>3i{q$ZTqx+s^vctPEjD{M>(_i z48wGu6ss_Srt|;d_{cv0A0KY@{~LKs`p>5vh&k_v3pmT@@v;KXP2=NE&?c}xM>(s6L4oN6OF)*5%_d>9O$qg0tD=>u{@n=G<+mL@<$%K! z%JZ_-WiN54tu`B7VP7>!Ved^ zy03LmF~m0Z&bNix+_=qM4lKYdCA9FhNj5lPg@oYSgvVop3`rlKl21eM^Sl5bpDsRu zdz6=@s=^-XVAWms2qbRhyw#r?`ELqybd{$e;yON(!EiYdu<87Na%ji@7#|!SZsosC zJf{3dryPhm2Wrw+76E-L>G4W|{?YU<2>QC&eBxLy7?w+(AJp2Uvi>R^bPdZV^jm2} zZQHA3UX|s)2QRCp{{_ltIAM;zzvM7PS189UBvhJ2-EzV<(*I*C|KGvE>EYJ?dn1oQ z|38#d4%nOnKIuTr`l^hec1b;2hR`soz8S-9*~j{I#E)LU zCK0flgN(zn%-s zH&oJbZh>Z*wxk)Ylk&*rlsfMY)vK>SsN0zbe;GQ~fbtGKXm#nYR@JzBYgv*1ZdDac zCUi-cb;XNTm5Vf%T#+us5@$NEbkU<*mB0LgNkIY-u(&36PwDeDgg+tax_7?_R3kMEJlmiIlJbP6>nvK{+Vr9ue@%@$PcnZ`B%%O%Aj|nm6Th3 zFtCQmO23;JWh72;~mJHWr^upq;_9)S7Zl z@i-J}F>6IRr=gUXy}UyrW`%lVUy10|#N4y@{BK@ae_vOh?X+nw|;-ny;>v6Er{^!W{|2a4~ z+1h_@H0M|?P}98up##Za4wjT{xLR)KN4(4ksq-jII5;m0w|(jHd2 z&o;TtRy)U*Z4c^DEDmpcNL<#L!7tZ$=>80hp8yv4@7ILD0+R`bH!(U>w%O;&!##Xp zQUJ%xe^Z%i+*%oBaPLmi^E8@;CZr=JHXdu`PEx8(tIbrWa6YMi4D+9jfFOpLjFuHJHEht zX5|_HEo{m?`9W-pcHxmPteD}vNHdhrFd>@w4J<=uD_dS^pBtFcg^StDxQIGio!bzrof}>v&sy-Y7W!fhb}{*>m?y? zOQZgk?EhQk^s%6({Z}nJ?u_E3_z{&~aDqekz92f4Y18GUA$?7$s5vF{ZF%Wvv#AM; z;~N;>y%0f3biP$4R<~CM`W*z>A`C>Q9@@}C%ows3S_XB<^t?h}L6PH`afonMQArU4 zmSP4L(-pxjo7n)&GDX`;5X(k30I!x_ZY7Ylb~XTYng4Djpvz`90CO@SD}u{f*Z`!M zgaoe$t7u~b(3U9=SEOoXI~#ynW_w!+WZB5N;C1uLwRC;kYJ#etO8t*G1n+-Vv~*qZ z-;WPRw*CL;XuS3R+Q?(*e=gWmzk!+11ofi`s^!MtQ6nUv>!cLY$I`QQNIJ-Cr-)L| zZ>U8?(hmPgPqRHMtAC;b|3?M;Cno&Y1@_Wyjen7P-eL)wn(ZUTd~pZK({5Uwnet zJtK_k?YJsdPzeRIxRenbabm8hA_eFRCPh#UtZUY%tsFP9LtReH+DH=v9|+!ME%4&Y ze659q)MNk2DuLJZwc6cqr78F*Yb!+!?VwswMNg*o0)E8H3VS7X32RnSLiAX%cyC82tiX1^e5 z!z$Y=Ej-_&TlD1(EW#-W{_n@p-hY1j>N~}5rYm<#8>#45yxLPH zxGZklofcphs9Lm{vJ8XFE#xO#+aq1iPxJYYAL~~!18B1UJQ*L@{(q#8Qb#@L_Z(QMAbMkbH+x_04w_m2&zNlB*m|@D~v52W5NST)h=SQ3-gF0-h&{Nd}P0 zME5X{0Er=)f{**{hNi50r!arP%Ify0Me*RvPP0=v?ZUW(w#E!e^k(<$8^aPEN*3IY z&|;q@Q>HZs8qS?NOlyG!7pf~eL39=S_G98EPQyDF6(kBkFpXIB^_e$kPa{@X%M2|> zAKmc6s&+!m&t+$;Va7@JgL8I!{qQco$Pr{daq3+Ff>$_3+9&!m0Ks({-m#QG`h*!k zdW@aTL0R5&CN1HaftERN=|`!fq?<>m4al})4%>$ zVr;YgC$A;fnE&VK*vbEMw2l9;k;jn#;r%PT{{ip+ zg7@Fx{r|?QET)C8Vu%xPnH1<2Dn&m$!!>&#K zJ2>9Tf8Xsf|C#Od zI`jV>AGq;9k53M^{C^XV!T;G*_sjgNEbkv1=NIExzs)C~gJsw&tNBUdfN~-6rhx^y z_APA3PlzjDu+R;!uI=C{=u2@FfZ)r71RzL?39(M%JEE<#3f+;bOku-`^g0?cp!>cqeV7%1K>kT-AteN>ri16>pa!c^{q+|b{ScVQX z@jU4ut7+iG^LF5fRT|F|c1P#~z_N36tQZ{_S!+UIrGKg={}qUMelwcXvyLj%tb_Wr z%{V+5Bq(2?d?_6AstvujRyHORV(S?*O~=SP^9pui2)f|0R#w?e|5YS{HTi#!Pe;dN z$N&3qtN+``W6*y!)%|jTx>y#EjTdNRSwBY*7Bb5bG+vieGzE1tci4J&ZoNB~^6u2t zQ*oT$qv%>J-%?Q=#&c4j{6jt`#n1C3Vt1Fy+cN+`l-?&)9yq_c49f6TftgPJLwbjj zV9=f&tL1;zkI$&sTW7YL0e^4n5ba&8CjGVmyRyz#z~bP21u;qnT1xg-+dfU=2d2dq zjWOMJhH~bd${hDK0>BAbl|O>6Rp1^IHh>eH6FUd}&Z3NIAjY)-VqSn)5A254&X$1kkgMG8!#)ZRj*8#g1EMenZ7bn6TCf|L&x?s)B5ZYeUgg4_X4xBv#9Xd%#ot%#f7? zWN;o~*1rHw{;t%gyF)kHbEi`@?0nFfwZ*E9SOW$QtB%-9>=?*Kl$PFs%f-RTuxJgI&=~B zk^xi-s1uCh=slVQAdn6UujH#ixxj?H$Hc2rM)C|#j-P(9V{k0Bd6h(0i3Mj1>{*+j zgvEEgrBPwlmxdBsel15P%kV$E&arJrs#^F2=Ip5cQ8wOs{0;^HkZqh9FmZBYjsRx( zHwt8Vd&g**dRucl=Mj;%Tv*N7In%S|-4#PAlAWl$jgqG_%Q${Ol zw(QQ9m^J61R5KL$V(C%H2KpR;dSSO!EwE3~U;Fz#Y53xh=^Sl5PmU_rF^U^uPK>xDK zx1Kr(lQb{R<7^6TZB}y>+9hNR?R2=Rgdsl4Nbf@x^w-a{>!MILO-oHQ%BSj*g+a2i z5YYh?O_=BmMXBP9dB|iPs$~Q-0gRNwShEIbj*ljrFG~m${nrLRbYptDGyJ2(^W>2E zY6=q-7xXfar-|w-rLy-mSCfQ>jXjpzWJlycpwuBZ7319_fBM3IioU$TEDc4mFZicK z$0|`LpOV%QKRH%@?7*Mw7{C%Ea}%$2!2~^8h%yAIC}+kDv`}B6GuGk+wmw041Ry(l z;4X#y01bJMm<-zv(5uO(IAB%9!_J4=tW5@pQaO?lQ zk;kzAxccp)XUh+7Zl*_P^Fc?^v$e-gwg{y_U5!doq&d805Db%2pso?0Ymx%jpxxHM zYt@;=hm+fj7-B2JkQ_ooM4-UzH|9nr? z`R@P;LH51{CPhAHTjb|?bc>4p&&+(4nca0f3^ttqjt*@9--CnW@mBx0k%yh{-k<`q z6Vq>MidQ`Sy}-m+J;QSGsH0$oEME%eJNysMUbKVW698g(gJQyueEe^9E>!7ip8x=p zBrRC4qOA79TOm>hNrn%%2t!NbnXz{G{U0E0X^clbxkfRI8rVW0Gb_}~5@`g=;Q>BA zL#i+vTSh*s0H<1Da!y573vPjMPKtE)nk}7`hAWMW%pRWsy#t8@{fOmTCEUEjA9ABn zW~`q7s&TJ2Y~gbBUB~XoYx87^U|dWeuF~k`0*ADNt2D-;6_zNY@37&Ub~*VwugU=m zKyV)4!v}I6$LW3G9L`Yd~CIgze!52HJlS@T4B4x0>lWC!my?6 zu(9=(NawpUvXEyi+XKKFAHV#c<21*`!$k}USwZj@Pt*PXXk_JoJQ$Bpj<@pvCZ2jp zR;+`Nu7h>TuspWrmCKZ`azshw>+~MwR|1*<1aHv-<#tGGBbE)X=jZ-TpwYUDCTI=p zTtEoe#xbMcSnYP?-WCvb5O=jj|K2Nb`+U#GOaJp5818>&BE9bVxojM`2Ks+^I=1yc zqto#={?A4p>;9ijHxTm;UQ-%8NpnCK#3~vgTHo>=|FJ9r-v4}lq3i+ne*#x9Cx}Sb zX8^?pc*c&};S_~;gt8G@jo+FOcKD@|a`GSmnt^8f0xx3vX0B%YjJ-1Ms+AE(vINf1 zGrIyiq&aujMhW9=O<=QOTm3z+d6~>|RT=#aQ9=)uPQ()BC}ft-ay)~%Yd0?;?e~T{ zsX4W&SNlJK%L#ySY*AQ1_Y^(Ls{D6e@y1ip9h_C*IiT{+d6rRNoUalWHk2=g_o-bT z69D-tvLKc2s*azO735B9%sqh9`bs)Wn9WJs>MM`lcPC}d8(n09I|l(sb33*T37!E+ z2)<1iosmn?A}ov=DH`h{v+as@q+qw$TJTeWvDOL-yFb_LiBZ}rg@i?ogex7xI*Nwi zoa3LCoD-bff{&j4vwM@KF@nk9nX}f}S!D33#&$}^f3hmFi*ULR&Vbq76U`4v+*UJ+ zlF10#ir&6QbeL%PR(^IvXRIX5*T{eQJVvXA{$)>-{C9L{#eW>192{=X{~LJ>`R_fQ z@%{upwt%*Bo{f+78<4V&S`bk^41xl%1)ZzyN}8d-4F8g+^UQW<>;OvH#wRzriLXzU zRCa|vRU0k)T%i1BmHt@$ioOKe_kRKM-Txe&+WtQ$r-xhrpN%}G z{!h$!k2*im;#LauprmI(&=t;PSNcIz(8t{z{XWMzikig~MF(gDp8~-C9aPZQM2|$Z zOeeGf+6h;q`8$yk&PpB0Mrdd9@2U>}ymx0c^ncZBfAuuc|I-8e{C~PV|8MBw^q=mT zE1@jx#|D_~HKBj}O*0(WVf&_q6>U`mis0@41TI-dxETKr0t+5ONfX_7SiTxQCZGA* z6q1+X8o~JNy%Ax|kdj_;|G|E1dQPqvW^XY8@_IsPbER&U4NAYf&@{3dJeob5u6aIB zBGrXd?Yj2_%pO+S&#~fxC>#vH?v9REBSO3A|_d zD6eur5%l?;v>#=Sg)pJ4TEf|+hj%B~hp}$TXeI_RCSvNA^+7-5_&MjX0&wa6a;{Xlx|6p|B#D6&%kGJ%H6AxSX((k_) z$}i$Yw0HRE=HDTjZ|U4omiBvg$nPx}l4o2?sA>)IoOwj3LMCAlb0VU7l|@w)FEY=v zG`BJldG6QDBLRzr7u?NnP@bRyks(g^#kprsoO|{PJ*+>d^|Oey@G%we`y_E%ty<*? zs{9(*%1fOU zH}MGm&lO*L%o8+z{WH*}do@{rH9Va0X0=wEBbj*|L!n-ONBhMoTpv0^B^NNjpVZ12 z3z%anse>F%P>zxiJ)hOp#AeVNRRub2v}%0_6k^ zi^)EVV!y`+xrbTm7y}Qk&OpamoWkg57{eq)`Q=s3C)e&!N`I1~Xda`?(ZQ_$3|Q^i zUS(4Jx=D*^o1AqxbL?A{YUA%PiDG2+2zCihZeuiPFuAm9c`WZ5y{ye9d}fQbc;_I| zLZ22kp7qzpx!QulHNNyKTPR{pBSHFR*N%5%uN-9;+iVc)ogM;qctY=vBRlwC{w3Q$z)(U|JLzsj@%o^ER^n{FkNq`t3iC4i84Q{&zIm>VG%#STye{ zRpRt&RF18jB@TIOJIQq*R|58)%`)gX#62VhO=OF) zcsv8zp=)LNs%ytgfaLS?nouST!@Czez@BpZlEa{FaoJ6jplm}{0*)Y>A8@l z*pDWu*sY9{Li}9;q&Dm}pq9lw0BdcDfR@@D>y%sry3q_9fHgOsVW_!iGYDDOGX&L+ z7=ZfS9(=6{2E2cnNQHyGUbWp}tpxeSt8%apE6M>*RWnJ5M~c@v;B=*(v~C6LOv;G- zXgQLg{(VO&v5cqBTH`I zc9%QEmP6#H*D1c8%7oV+pDsQ*nXYyCYIdfw)RslWl9N@JIKyqPu2y*J<^O&RKRBa8Nr+`cuKmfZ#^x5Rv*_B~e|RkEt>FKllb zzwMkeWVr{`Awy(qFm06?1??y?o7W!wdI2bn+6s;UHEryD7heE51)4j6e6?qL1jr9{ zP62X&EBOUz9kp}~kTneN01MeRMQG`eli>ADkQ36?J;9qvc`ZnXj-Ptz>*$Mw*GNda>m-zt=k@f1JrjTH4IreS(@a0 zZxzcA{nYCJ#J^NjzF;X(_CJfX@}F_mUL)9W|35k%+3{ZwkB+wX-y3Bm zVX5!gupNM@0%Z08U5*+W;C*NTYx0$p`2P0oiTZKoiDI)R8rOCIBc+aOZx__K|BvnX z|A)s1TmS!!Jl6i#rne6Ypf&f{Xn+BF&vyZyB>N@WUB&H?U(i?3gw?DAm)-v#ayXgb zkf$7Ipac#3e|&Uk@BicDlWqK`jXV|m-3QTP`>Hg=`| zIC}+WIBp{O#?wIm4~~yVw){6b+~$AX$YareIlX<5eA(7xqw*!(>lXWDPreM56F9r7 zBkP(cYXQSMovL3mhsJCAI$$ZZCMbU~hp~Jk)O_Wu`s9`xD59_KWZxWVM|v+iEdlWo ze6tTu=}XY73@$u|B%&e8DtDVa2FtRYElSF&rHde)z!DX(#uUfXv1fEuOAhl$#^o<3 zl&@)txx-4J>;*f82{700o3)9j zEC0{tH!&vDw`uVn!RX;UigH9qeV&M>^WWIf|C}6bjlwjEd|sV+0$l%H(SXlxquHwr;uEj~5!s3J;4RNCW4ICqX)qI+BA4l24XaII^ zwcr17ax@ybwU=C_d}`GsT9YK#unb4`aRl}_0Ipx88n;5+_?Zv-0$J#!9K5gZ{>kNfNnSaq8(VzZ*?BxGG935@_KR5DN@}F|i19ZZB zk^V9iK3+>O8~VOZ_{Bqp&Pr@QsXA*jBEMnP%2!b2cvdRRnLJaI5xXyAAKvdkzq`G> z(iGD}@D(IDiBM9216QBl(vPE;*yIP+~U$hXtG7C~? z%&Q)#ZfLttmZwv_&J(>w<(^atukN9+<#Q|Xxktt3zURsIhh?!p^wW|5>p}Q?neQ2-ea51jcb1!UE|pWqdqw>!?fDqE^cwWfKZ=0x{l&B;M3j#F zU&d+f6b`tF{~tQ~--FYw|Nmwli~p+--o5hvL`8RfgnYjQzF(d%QN3lze05sZvo!a*QXuOYDz%@;MpNN?zT%O3l z@=IkHO(+Vq2ox+w-%DUkt>12OgXM^P;e)ODSu*IR4dSZtH`N@tVTENEk0%VL1bL0& zI7@uhMgW$$+lJ+QjE|rH7ikV}(f(%`hKP_iX;kmv-S9N=|B-Y5KN_8G`Ts^9MsTiv zyP&(AO*UY&y$Zk27U57^I6p!X&}(*B_Rs< zZ_3o)z~mv&KHI-(@vAf{v7Zz4PQ#VtAx!@O%O&De{MA z&q=w$bPq}w2nLr>DFF$oF2n8FUhzCBL^|34fZpW6BVj*kzv z{C^Wq{c)SGgCSc6!*B|-4tXou@y$roW+H;ga*VK53<5YWrZPf-PQBbHS9bB?oS;0> zP3c7cW!8QMNsy$GQWLWVRLy{Awi^;tsM^8|n>#|xD6N{nfW!uS{a5&^& z%fmXIx*Wj*0SM*^{(X+X6edxOo{7=#vtj*Pj$#A}+JjlPw@Bmp3^BhAae2Vs{GC-~ zJ(ntqr{v$BlE4Rwz^?BLL#_US&6U>Gc~Ru}W?o2pNI7dBKNG7r%Q#X@XiYs1i&pKg z&ED$iKbhTZfc_ub_y3gsZ}tBhdHDVRo1gol|9r(fcKS~d(wY9tq5rAr|Ne#;05g#{ z`rhAvy4ZiZ5Qm#)mN2L;Xz+jmha*WNbX~w(bdACs74Ol6Ly|~`M?d(y0Lh?$R^5HP z=NKNom7jl1UeiGT`5zZCB&3texA8R4|D*BYk!}CAz5m_Nquu{r^T`Hmwn0e`R%8g) z68fR8gWJ({X9PX#z-z9B_kUtE=5hjbC;%n`>GKl+!CnAzRLt{)fFO7V z?x#4Mf*FDd0Xh18j!1!%TL8h;Z%kp8&I=II4zwn&FV0`T-24AtU6)PK{+K}>Q%$7_ z5cj;dae4#eA^vhfXX1j-j)T6kZSXQCNVLiak>gvOz*r4Vugi67tO}lhdju#E#|eN5 zFnfFkV0;fBh~BadgpEG41+%NtM9rK8*#uSya4x#_^3O_muo%o`!c4bP+5-q7L8?rW z7E_$uJ^_3Ss+FSPKYI=WeIZ(^Xai8=Hrx1e_T0xLwF0IF(F&nUm)DNBCkNc;AoyqS z&mb@rkpjWADQ%h6H7P9-EDM8nE6*|KtGj>KqA9d%oyA%BsK)WhSS;#l-j`XV25W3` zmK&_sPyv-zuGRf{S3s4zTc5~QkopWKR-VuPXVWud_I#~vwi?h{OJ>ZC+6Z2KTVANF z3xm*@jvr6L-9B|sd-?yjrJX>U^gpLZw)}r^INsWSY~*Pp0ka)GTv%Qfeb_}-hd;{l zbb$#@6O{W*)QzKxpU!J7eDWHj>t=>mZf?}~sDL;LK=1;^s3?;qc%-eIq6p7CY5W|+ zz{*-C91Up}s)qm3XtQIg1q*;mP`lhFvo?RmNn~4a{sZFTRhqxTIiXCE%x5eO?d5ES zA`I)%%~eLURh->6CZH`JuBZPiI{t~L$^P%;@Yu2c zAC0#3e-jVa|Dc>;QlKP6J^B1)Ws3&m5W1gQMUSb|tW^)Ek zWo=FrVZt2RC`xBH3gh9N6zQxfMN&ntT2J*Hr3#x`W6N+74;Rr|T;9Slf(7K!i@c|J zZ^@y@nvqL!RfD(cN(3m`E~q!XtB2+eI~teP(9pVFq2Uwq-#Cf%MfV%y>DLL&$TX#! zSoL1;PZw0)>ahCk5o+Bow*o7M-DMSu-fO_@wi4~F&+Q+tQH;VO&8=L`j2>2(uFck5 zN#l$rBuYL~p5|i1le4)3gg?Hci)>r@?}FgBuddf}|95!kiVWW1RZfGz)J_M>tLUeYynS^|mynOe z%H_2O-lhd0^DIkqN?0|snKnv=oX1CqG=9qGh>CC&{f5jd+&giBSpNF5wvV;mqQWa( z(%SWWv>aQ>FP<(u(t_1i8^*^#V?i6x1b+d+zTf_a4&4{f!3P>E%%G$6ui*X)ANQ*@ zW&1yY5AR;QI|Ju&oZf>pi5~#TP>3fuq&tUzeRdsezPovl0Z9L5sD$3pk7v&To4vhn z-}JB*V#3m_u-%~bjq9C0i}`0o_c_!0_ypLZ;WG%Ci&{08&x%3)O_35yvtoFM9vU`? z0*DsHi2)aBFM}!z0)~3pmT+WNV6^jRW+m0kt%OzLh>{B@Yo;Sg@?OmuHIb|>psmMp z`=^8acm3w)^~irGWBdMRbb7k=|JcZ5%748Z0{^w-zZJ}e|2*>F^_!oo;v=)20O9)KR7jM{+JzmAOBR{k>;*4^a5M*E)wJO1mz>F97P|83%7RC8fW zZckUhyip=o%=fwlHo@p}5nMBX_1ixY_m+*5U%nB6nk>`!2?*mSUcJ`ti5K}`-9np7 zfr)iV@m2^@zB?-RO_!`h!xu6V?#Pw8IMdVtun4;=adC9)ILy-M?Ku_F$L70EdNyR% z9oO6u)yxC>0>eT?m=(*DEgs?32KdcCWzIwJDxD`(CX6hOq9JEs0M+xQ(Q@>k89?=w z|7$!xvCsd9C#T!|&l`CqkH4Zcz@6RgJY`6QB zg3%UtByQ$6K9gI?b$BCQuJgU+-0kCk8t8w?=Re32-F3hX^#Ax^WaobxpPp{z|BXB% z;5>Ki6nmY`H&7Gahc?)^kUA@b`|tqfw0BNWME}fD5}};cy-K4lT3i2sdS-}bl8HrF zaNR3cSeois-PqNzc|>Iri<&%6^8&{*p@f(h9SLWXa&kZezfg?Ow(MPs&HUSsL+|Vy4_ICv0$5GkccD zFg=@kjejLh!0sJ-AilN+1EV#2nK)QQW;QTX!%Ng==iIdpcHUVa zfiUs_((d@{Gi?Fri2zUhDRITPV3MQ-qvfLRv!`(n)+Wd%6~7zi-dFrapImaYQPDMuWn;iv7gN7Ogtb~)sm2YskVZl8mxs6MIphh?+f%r zLAwEyJe_fq%F-Q_prXLZEunM|C1jq{(h0g}u>~;!A!{K5_fwPrsMq8NS2Jy83!l^G zbx}1Jwx?vZ*J_O?vQBcJTh!4c5gHf{{B#q;C`S3=0h!OL%Nm_IvukwD+NcCvF?%+D zbbhp^_3XG73)u?nf6}K}{-+1UwaWhoCnG!m!|CD4@mBud#N(0wp)LPkXDIAR{;$wF zJf3@>au8i4^U8Z3Q=ID}v;E;qGNh?2%a*-*N=<|GM9VaJ)+k%Ap50Yb@L&CQ5qMNe z2W-|6w|ZhQiDFO?)>XeE(wrJ*KuV2`1WD{#ZM zf!#bC!LSzSHgXilvN}5&(K`N6v0k~XR1v1a5=L3q%z{rYX#I9l@6eI1O<-E!yt9T} z>%o|W;h-)wtF~QAJkrHT(ZVN!A&3<(L&j^J{h%sPFaMtxINtvZ=S7;Ke6~vJZ}!yl z|MB?v$jSdXK0V#?|4lrcrKd>&v54$Vr+tskJ7x(J3HVof1DY8mvmj7QCeYX$eZf3( zP-I&hYvHV{kXHk-NBEWCLptYL1jHqe3>MR8?Coq$3i$~aV9xluuv>bQ&XaiYIbQKdTE-g6ZPdXh}+Dw+zjHA{5jtLMg42MH?^C}Or z-ZoX2jxr_9tEz<4^ggNnI7>ZOyUbdH%1G71QHdYA%)B?*yvxG=toQM}vXtk_y27xO zhf=fGz3=|tG$lQs7b!3%42TBGg;WUh@kyGq`2+e^g*o#0DzU)ij?a<{o`5^COgrjF zF0hr04D8E{@&C}>&8|P?PS(b>pWY`ZCsUlU;m%-zsfhF-2gRig)xEM|YCnwqpTKz( z0g}$RMhoQV7UmI7Zo&N&7667^^~`b2G}4+?f@9z#XacwEY1oL%UYR~IkWZ*^AqIZN zj4z(hnLGpkmEJtDu9br+if2PI-JhoEU2q1n9PQzR6flmTu^;p7Hir?ii|*Ycd^;_I zGY}jG&PQg6jP^2Sh#Z^&_L9uQkkPqkH)xXPXpg;Ria?wu&)6@zHc<2=OQUOXi=89p z?a6JL&%j%>K=~8EPJ9s4mB5bx|K?*0oOHHl3;f<)@GLPm@+RHHCx0ibUyOHn#&QO6 zE1WX`;|wS0lD-rL2ny#pE*^x7^qE>W`8+u%Z`0&`nigl=Y|Q-jD?#}g7^#;b%-{`< zae)yz(>9riV0e9U0W)F%$Ho^$XNEQ19=Q1XyMMg3-n}@#`26m-m+#+SzIbVUdiCxf zZ(qI_FO6dve_}ktg#l5R&CkHWXf&E>FK1|$Qsf={f)zf~8?&JWN)R!c;wu?_L80D$ zI-9}78CM7k>&<>K%l4-T#>MoZL@t66-atQWA-yh0_!S*A!-!6vpN)|4MI$!=Y}NS)}uDY69i7cW%(^FwJumvi3Eyo_tP_ic zScb4^%tV2b_~~dW1v4q*l?rp7K&%u1H74PiyR|n*+w}jEn^SYAtaJE5HP9Z0FVM|_GBhNvw_uk)1 zMc@3ASS?Y5E!zNa!P4owVVUYXfQnr7R9`NxZ{MsfK_AZTp6~3E0v2E|1i@1nI28w0 zEe;;bAP2sEV}IySJN3cWuLAa0jEBk_I0NE2p>J3l9zc0@9f2J5Gw^YT|MjW43Y-*_ zOMPq_Zbef;hpB$2NJhg%)8j?gi7x5U^3yy&dwSbE(82L^YODhLo0X++_#YYEYk0Jnj zneT1YGA!}Q7a<42gGcS^+dCc(v)UMY6ZSX5#kX%~&Olo25gRzxM>T9hPwrb!<(h1{ zcghOBol~)bI&U8D0PO0oaDvGcMb*5%_WaRO6*T-;dSiIT{42d_Yy(J)ErW>nX> za=|f83~dtJpebBX!04`vA3SC%@_M!OTMN`cj~V?-#&yt~o(7m)rFjA4 zKpo0W^FVp~+=7TXL+W<e#{!xBSv2n+ut+!n}xd zX|Bp_A%?f77MAXz7$}{eruhgsvL(#ytcHa=%*&OaX=9hx81U5Hgay10Dtp0{{?#+eyZjE}^$i)F7$yI6CK zPWZTdj^3VM1D3_J3=Wj|x{-u@+Uk*7VckP!lNf51$D&t?!z3SYv%|mur6wVvN>q*B}NH zoRi}3f+or!jyeidC`J;qq)9_cU7SH_?K}s&yS$J_QE1DQQ`6H0OJ~;@Vo__+#h?1d zI`Y_`b3j;pM60aF5!ItmDaR!BqXup&v7_}yX)1B=*0feBrtAvsaOOM58n|KYJ6%i4 zuZnQO-)@EJlLM28uI~cf=ECK~_%$qYh$i^XUL;zW1Ql*z>}=Q*cM~-Q8gkcc7t^8l^d_KICcdxT^#GO@}~*G+3ZZLgq*m z6B5ov`PHH8J&deb{z%eN1i43mon(uY9=w1MlPtlK1?H;dYeEjV=G9xuD5A6WGK$5y zMQ@d&fgFqnIx9v?TREkaRAk$(Sg{Bj0g``s=?iPYV+mxB`ng+j$?Yofb0rRAPV50a z!o{^SaJz}Fv!CWg3po`8WD#;a1`afC1WxhYJEY1%aad?MzG=|yGw||Df${{#Y*bN- zxND#Y%?@}4*Yw8dU#`J@UFP*K)x!y5U(?@&sN7BKyZ@Dn@bWY1oehU&-!F z$DBcfGF{p2s{tzG?TP_@1uR0&S3uIdIFGX_tP%v*yLOgYJ)ULL0f&;GP}zOg=$NmV zub@b;iySAn15=ha=Ruhnnk`6fCQWOZc1SQbkBq2szlw&e@%W+xIXu*6q5hSGes@vK z!*RV%Ve~VMVG^P|@GXV%RKgJDlBZ#;HF0_6+ezlx(O=KM%e2Fn<~CB!Tkm3?U%+@L zl-q`K&>>V(1@4^uD`r@qOt(yx@M#}Ybv&8hDqFBuGYTR(E7KU!bETm#n&(UxTYBW4?e9M&XUzXtp^&3PC&{wzKX5Uno9;Y`;@NL8Ky7bSUewXG zu1p6W$G!Zfo|^lA=?b!<_g8cL_hTpi)5-DiHvjKNo6%z6cKb%64Vv9gD0j4q{7r6{-fAowTJ=AyU^%K0Hr+L?n8A6QCGEHGKD;~w z=P|#I%n{_4DmgQlK@rFina2fy1aQO{@|KRGAC>9U(f=8(SjdXZMck~gzR~3&3>7L)%d2l zMLB4bVd%)cF^}(4;^)D~u`3VLC$uKtX_?v5`PiGDBG`KIR;3z zTt{oFg7N5WZI<_#2(M&6HS}LbIev}FI_-Z))QbhO5rs(5ueBR$Z!L2ybVQ=RY|QM$GJD|eH6 z`VtY-TXZAComcc=X8m9|EwR_wyfNk-$a&`uOSxb$KYwrBqq0PNb9Z9cJF(~~uI%YY zm3_BQE&UgFrJpqmi?!tcACHg6cK)aFHviLR9w#KI7Cl=U$X=kl=;{W7*iE9aGtfvo zZHpK#&9tabd!tHP)Y9|?XSHc_ytpN|0YpVv3YzG{=FwBZnc1+Kp4*jQa zw59)|%XKjT38~pzEeD`g3=W{7^*e9?6Y?!5_!B%W=)ZJtTABqk>i-W9Ect(Qc)Gp+ z-N;i%|0Ug&1V_4mbz=pNcU+76flh=KmkxAQ4r|^^O4_QXwr!#2mqTg3^Ib93YGcG` z0f}4DpJeq)%%Joq__e^X8|y?QSQTySE;)ZxnC>-R;0ljGeF11CxT0Hw;~!HTi?AK{ zIF4Bi)%zS5Oy$mfDqyY$x0|IoEe{hgwwLKMfD3K}3=@C}F@xff(nX`p5Co$1o^OMg zE@PxE-kUB* za$5_7_jf%7rc8&M8nT)@C;AKD7>eDJ=-bWaG^v(#^(kajCW-|yE0G3J#V*U5@M}!O z_r08-WCB|zfJAP!v6n*JYc;cggM;mCI5=l(|KCh$Bme6S(2?$&Z4;vV2BM`0m`?#! z;7w7xRu{0K?%3dLVq~yts}q>MO*q#8*cIpoHs)T(-T-plz%;ScgEHy$*1#jZIwpZD z_ZL4(QrCZzlQ)v0d@BgTC#DJJ*@OowyogTc#im(CC`a+2?8P7Qh+iQ+tkGu_$9k5a z)Su>Ea9F8NIl7No7VF7M3)DVdg{TGn7Yn&g`_Iwg(a|>k(-RftQK9Injdoa-1 z`Q+1LX1z3(!S@+6ncSqPHkzg?CI@CfikvYh(gj((#ZV#XVK3vCgL^zfDKPIG6@wYH zSP_LQoJvqm4U-mxtoM`^+TDVZ*M^RG&i{&!T?{|-*hw)}q+ zrH%e4H$X@2Pi>koPo8pwTps|{LqPSjD%Yxh3V^ZzsusTDrx0qZ_8BN^x(h1M_4=#3 z4N{Hl>mX;6pYA@$Aiup3`t(W*`ftSS_1*s*oR{r?+xwr5l*;(O%+bj@t7PlC>|sS5 zqN<2LE7G~lP@Z1x(wKDByv%&mDqp(N%5*Jn1FT)$()~T9#^o>1C#7_?p#LWF{lW~O z$^Lh6bmr6l)8lRa?~RmI$A8Z^ONav)n9AOkXH*Et{Z7qV$v?+aaD<|nFaDcfT5A9W zD1G(wgN^PAbpdAprOvCafAUtf_dh>)tFinAP=VQJa|M(Ssr4mLF$tB|K;`F}RxH)> z^14%g!9ju`Q4`D@vp7W)f;QpteoIrUHoI*6f^mmZ1l4BjC@ zebL~GU1>Z$u0XO^0w>lY@@hUSGeq$y6mu2yNv5JJ>%42wx`C; ziM+hU=@i-Oho!jXD3>%hi}B>a1m2onWQJw2W(h?wo|}b3@c>*(i6EJaxy(NUl18;7 zX$+B@XFz%WeHKHm0`IAeF>hezr2`41|Eb6aQ&n`H7_%%q+BY-2ue56boY6FZ^MKpn zW{5IO(qeMns}GLm{roGLq+;OXq2TRA@lPu2O71KU@LedIrRw69jfUF6!lKzW;; z;Oq146Xb?c!~Yp4*+r79J^tIl`KkZ@>+E#<{&zE_g-KU!gGy7bqfdy+C4IL#^O1(_ znrtPEQp}!Uq}N4~Fby!fHh^-+A&&L@EATx-qiG^tm?Fp!0||Z*G)_gJ-uD9g zH%$V*PYFd=4OsPCXCN?bTG73l^RFb9rKSJI{Evqx=Oy|7_s+eqmk|EvArk%Eu{ zpehDp9X|gGd`qOAAK21AQ^xlcDfwV1B@{fuMNYw7?p6&-SO2i`+*Ii7k5E}OMr4}C6^goxXgRK&2K|jPcO-M!?n9Q~2=inPAbUV@ z`3lnBs6Mq6s{h;c6{TJ_lLo^8`x%TO(*(QFA*BnDHz#!)PEC_HY<-0w2QTv`u`!t@ zu}Yuxm)p13p28V4y63wxw-0!|sO-9bVI&RY$0%!^`7)Y4XF%`U$>E(`$1)6~Ogc%Z zN^uOMusNeRx}t^v`-8j+&&?XHRU^-Dt5ERquQ8&?w7V7tX{DOJGnyueRLpZr!j9SU zWxVUO^nCl|fMiYsvqk(dFLI&bkciGgO{XlrIl&p|f7+6_Z5s4rPg`5jyVA_3x*?~u zG?vJCYiwYeRHPSGJ57K~2zi)hpg%k8gMPm7MYG)ADF(wb7$GaF=&V@$KhF9VqGt7W ztu$`=s4T@#;-Rv6JA&Xh;wY-aA*DZuP-4zdG6IYfsuEO-U$v>nGD5l1;S9se=0O+u zsCg`nx3DOgv4+QJlh(ZJ662KjkmhH18X73970vZ0jnmK8x#dJr!<3}^DxdmKs)`^r z#J1lCiE)Xg>PgHuq0EEiB3`zRmYkxDX|W9iV-OAUO--p4dCIQ>CQy7;cKyB~MuWj1 zz)MqPF7B;U+G^U1IWFcs$3VZ4a<{9rlFO$n;Fe4fALH~MJff6?M@rKBLHiX@gEzy> zZTc{c!35HWqD#oaQba+30y1`pGnLy*8kMsh%g3z7_TA6VQr}v06G65(X>}k91G)ZJ z>zKoyUYQdJ7Rs%dPf$S1!D);>?17zVQcFbo;{SFBn4?KR{n?2op@XiLHgLn>U35ua ztb+WCj>??YJ))+w`omduJcF%+2eaa6wmFfGd|P=Yi}@?9Q1!9>MxKFqD&$`w=U7Yc z(LolbgB2$+AMcyssS72Nt3G&3o~_dPiYDDoR^939pbWNgyK&Yo-!YB?Bqwms>~PGP zqC=1=!QQv{Xi1$DA*b7YYuPH?Nv>t(9jO@E%BrLUGruQ|crY>6XM2wnwExaff+%_Z z%MeBn)9jWL3h&Wt5=p<=_qhjcTZ?eR{m=2?k^lbd`21{Z|J_KDr{}#~Z}4?!xk0hs z)~oJI!DprGw%Iu^dcXZvV^mRFYM^!$Q(Yvwi$UR(o!eO)2l(O-MYM{)U-SUbYRn6H zw=MnvChwQN;8t2w4*;v3tQ^F~yh87(OYmA&u)onZ8Zlv?@Eu!36@QM7mrpeFh6{Jix3|MXxR|7|0sjd)|W z!GOtq&?wEc6=rm$jG_@%5cEH7gSudQ%yTJ{dietaY)TQx1s_~wfpXIxn+jesnf$w_ z@tH2ZXU3jTRFy%GB8ngvwbgt`OT+uy*PgLSzTKAzh1H+fs{Rnc*E?|JsYzMTzlU#E?igSIDG-e}oP zO;)OMawof%lOn4k?UY?#-JzMCn2>4Q*W)ss@7n$xg_n7GR`k3Ck3y6{R@(T@59-Za z`Z!qE<(5LLpTOom?^3xGM_lN2RnF>R-MH&QxtpL7x_Z>Fr`uu$&egarr`O7VOzhlg zg1VdhoYElw9iANc{-1|O+xU;0DYpIZRxkHzO@3w*J(-oyAh3X8FNpj4ZFxDyW%b=( zs<7H_05q5of=O_v4846!5q*b7h@vz?>?&18gNAgtLqZalHB^IgEkey>`>7g~F$k%g zuL!1Xc=Xm>p-V0OpOIubLANQ)*qHEzFMt}~|DO2t|K#XsOaC`gZ2JE`xZJDd25L(& z-N%#P0A+|W%(x&Z3$TY4gL%@6AGM&stmwLKe#%yig}PU87V3P3li&ediB=5CO`iLJ}#aBrt$sn!D;FJ-^tegzmd|({%_kDZC7(+ zq8}7?t0KVA-~S8E<*(|38OMEXrYIn2@5=`j)ls(ysT#^>QFgNPP=BkeWttnq7}OnB zGf9Du?4Rs-@JFURsee*`{|pL?pxtv=!}$I8UMxk7fA#?QNqdg}+yekUvR~BA^Dhr* z{tJ%({M&DOKm#1BixW{tO|n(hswZgZ>NJ?(`F}*iF(D7ne}VA?Glog}4$Uxn)DbJX zQi7)Qe{$r@|3|0ChuibNiBfz1^*$I>Yy*b~RMe4Vq3XBhd&G*CFI>V=1z&>S2fzIW zc$R=c(aY8zU`qY@j}nYht~}q@7ytSA_`v7?N5@x#;Gm;VHRpAwGBXTGAlDNR(}DNQOm5mgq3Z=!?9 z8v2hHQkW3BRYi{`tg?DN;gB)aPQC$X(OA8A^CA3}M^p(m%pf0|s^Z@-0wmR$hVbKo zx*iDSc@Kp0P!C(9?ixxx{io9eEs^+BmnQmuv?jU_@;C|2}Fx)FvGT-S86e^Du7%A42gLaG)eynGyE+j)2zA|_46`)s7FcF zLn(e=rWcABnbHVVbdvwPP#goS%ImZuO>goUC*>O4l z=lR+Bmi}*|w4(nN7h0{ndmFO81nvv?JPX`e&j8I=DxlYRjL z_7DMS=5u`$*qBgmzXlFmX6#5*Ui?|f)IN$kflEB`gZ-Sw%v^fk2mQ&EtAFmg`hokJ zM!}YVc2_kG)$e6gc!}&G>ay-{(EJ9A?=J!h!S)&107rgG;VfX+Zi^X^1B7jy#PH zvO6AS36HDZ4B39D6>$8~cbEWYhz+w**gWOpb{kx2^UEg$eF?4{FJk3WAx zi=&||RnCeB%u(&fW;fo@+A8_F1@`)hfwV-G5}&mmBEo!(DEMhglb->h;3o~KX8Dw? z5EnFTNceb}wX}Wlt>kXbpuG4hRpT|Q?-4rn(3%a+s~|Dy3zpF$t#)B{1GeIM%Eqps%B{h3++)g)VPHLUA15uqHPT|>a0n+B*{`M4VLO3E8!`w z1SJMLrRatvI4UK`&eYesNtX2l5D5W0t9>QI_V+>m8;Fxo_C0rDbZ-u{MI>%#NE=xt z7h^q;&Z4=yF!EL8a?4VHaM$J42N>}_=)d~=6whFSQr>=X9GHu&jy0~0tc{28qKjj{ zSeEuD+iW%d1KCkvj^rErpUPdyL{wV;SdA>_joGr#wI8v! zU+WrH?POUsu#>OROmdT}(KSLbirepF2jU|8I5_+3-_9Q1tD!Xv$LQ5)gd$$b8-V2J zW?Ex|u-1p9g8qyDyiH%y`MYV_yhOT78{{GjWHsLmtG3bAgII*j1d%Df zMG;A37Mj37a&|LXxA6iK0naKN;hNFkH;w-IV6DSX5MyfW#~T=YU^0H&KKEHgslWfvS7|8^u%`FFCntyg{r}PV z!S?=t6Q#}lzjNttT`Zd4TX=u%d(N%l+q)c0ofa=EIiD(>Ma%9+)mo^mVtrT`Xh86n zHOt=@?!p#FWfkkg!a!Y0tlGHWB5{f?t*^;PVof%6Qnqe zQOdzlCuCip_i7B?dcnK9rE$^zm(@t<3jRGrZMW{~=Ql*RNaf>F%Ut?gco>R3_KcGs z;UuX6vupbThR~?nk~;dRgOU5K0Uft;Yh1n{aU#tB34KTijGzA!QIh^jhPN4t*7pAA z_~@|o{`Y7b|9vw>M_wc8U&s)MWnL!6huJp+YumIA%I1goXdBeS4FzH%A9EIDR;0(nW4hX$}F8+EhstBzP$m1UP zhR`97_W+^b9m*0Ip#gZQ-ulY4c(U3+3o9u83mLNSFyn;IU*iep3d3|d86ql%q-uc? zPB9y!82n0x5)4Hg;?xCwD8RC*d>%ZSCQYD=n(e?JOYj_0j??>>2*wFcQ7#0$%~Wnx z5bIyW>@qDjj0nwJ%2oQ6428mqIS_mrv3yNpDP710Fr5R6AR`_gDNY7j3i$^~^_rT$ zbiyUOzR5gy_uoAL{!hIDWqOgG-qm%&ZgBJNugKli7!s#UCdBmI^33NV&6uA%PU!p% zDJ%0t-F`keukT=L?caaziHZGhInBTQ2A)ZN>iE2xc`uOk6I$Q>_pa5s<@;ZpN&`9= z?kw0gZ~%Y%&5r@&*050Qt5ez+kgCq12QFOAf_W&1RCD?~fYntkpvMwu)tU1lhU;12 z&JGR~mU7J%0J8yp|GoDs8Q$eI9RQZ0s1T)E5cp+?`#*sey-rpb$6#9)D-H5r4AF$7 z4Dn?oz$W|8@!`2I|D7Ff-~Vl-NI~zVT;*HDS0@2F8)w5ZAVo9GFiGn~B9g>XYQqt{ zMck5vWH@UfxdBR&WC)`NB@9u>(fwS3$p@Ez7p^4ZW_1%{f;Zn! zDJLM6;KGd9fbwTg#L%Cs?iE&GKC!w!C>u|T9Vhr)UU!u; z65C2gTj^-k(oqBdU;6InKbraf$9%^@K9`x>pHj>h5QfB}j$u(JY-|isInaN-{4lS0pbtw;yaw zrb!Hj2+(ONIeg$UCxa9w2}&@VsIDgP1D;GLfi6S91!TzOMan&%p;X?I1iFC{$1_wi zFN+1kBdqiI$5Ztb%)Zy5D1oA>fFv_CaY*?co*=--kmu-3;9UBL%5Kbr%ldQ1(FCZ4 z5HJv(;8ajW%>M_N!DNcSWXhyhZAKWD?X{2T09=h^)+2Q#v{&3KF_5Aeq6M@V#8ZW% z@?4SEM?BF3y%=#sztM~I0^Hrb4*dWUv5C}FBzT16H5C~FD9?!;?ijLSvC#(tD@N@9UJLwv6aIRHn>xfIDxbzf``U@n@X1m9!9m9#tV zl#>bMID%pq#z^!X55Ny&u@N)~EcU}=TkKRcTNW|$;NO$K{J#{@dz_O(qwLi1cq}Nj1f_$mKddy?F&@y?q0i# zGeVG0DRN1~8xo@zX6g0c@?u3DtTA~6Hzc-c3V`BpP#8VPDd8Z3sTkkiu1R{8#^?iz z{|26E8E{u@roWlbom7K$U1nM|tEE(LweSRc8)w@B&s(%CVV9#w3Ez6+;(A!zTa0z!&qC{u^Gh=%r9fB(H#Ng%yWs%VvUGkSF3 zJ8{~X0z=G4MtKf%rLec**4($s(jfn5BwjlFXOsMYesWrh|9N(}wf}9TNMT>_rIpG5 z8Hoe3e~r+;n9MJ$>cpHfb*+*OrVPc(ye8Aoincc-?!+$T0NQiGYEJt5?>!xWfV?9QC~bjAUGqgzqSI6e)RzfltmS<8O&0Ci zVoNpBg6I)X;61vTCdqBL#ImlN3#WJ@JNCd?VOqh!aYgoJjxk~U8ga2TTg;PHd(kNp zAa1T+w(RWY>g6&WUEN%^?C9#|a?y_17*cdYiO|xooj~aghcMJ`Q6!Wyp-<6koIbD? z7?c|=eCCi;*Dd$Ch688UU;k+{{(p4Q!@X5~Ssk zOG%u+uvnHj*{}-2R701#p~^`{5^_Jk%_xHLB}o~l5T|^x&1~Ua33v^I5H#o_!I0HI z!)b%I1!_%*rps(r17Oj&UIK}@{!Le{^|!;u(l$R#(r+n@&<&!P#3qcuqT{cHy8OZA zBr$Qemf!zLIktSgIKfafm6S*c*DqSFrq^f*w0+#fUi+RQ+J+hCb(dpD*bS(gkyu`D z32g)76j7!<&h=kye4+(*d5hZ&KBj0Hn%wG{T*WYOiut886!%Np;W(`}G^94CN9WsJ z_T*?VX8V`U%$H4mlc4lchYso8JE&oRs{(4$rsm|29&jvFBE=@=86xy{+>l zdVpC|un8Bi(u{vRzT#U)uvI#ODU(31O4{vZK#h;Xp?-hOK4TfA9LuC6pS9CiG0Y+b zpZ?N-OkQv6RlhA2rC$Ck6943(Al`RR3DxBPe|YM@|2sZA+WP-(q&V>(inU#36o~g$ z_9!g_u0i1Qy(~my&$U7~SM7rSeYP7#sdmXl&vv8mYIhGe@P3gTTVZoR`8~WNzm$LW zYswPTzXJ(uyS z3?>}-Gmr)=4{=~aks}I?Bqiy-3@r+NG7W$32Y9sn(>lM}48;Ic?vW|OG1>!+fJX#0 zEmxkC(&18QGen*AE)V~^p69J3@e!By{6Bw(+*tx>;{OMJ{Kun{!{f6p|KCLM-v6&y z0toDxb;alKhFo^hVyB%#<)yde|FjS+w`UMrS6wC z{93l1_hEsp=hwv+bE24QI2{?a-D!?XM-JW2g0Ulh`abjLxZJ=`D_|NvbMi$^VAeN3 zmEv5tnJ}m0B0ZEiQJAEV&P&r~f^C;Nt(m1Q$NpkU2mYTwFzzYk2vF>@tqjmk1_;mCRtVUZRh9Pqe=*ztf3)EL zN5=;q|35lE-oF3YNXg&-ubA;~?fxxZ<*wA`?+n>9_&dLqto@~yb@qCvvPp$$Ua8to zRvUO**?4b5_JsirbPp6Alrx&SAez(vp}&^~R1BqbQ}3Jf?LAXewk`YBLu6)r3~`w&CCf*GGXCJAWjJmb&r}(eV34t4Q<&Z(u#>_G+5rY=e}pnS<7=YWTt%8 zX=8rjeB^e5;dxe4?maHgJT9+0b8%>qCfQzCE9X&Oh1@QzeQE=@Rds7l-=@i2PGJsIhmX^p^-Ig+%~APu zgl4I|`mU$p9s2teQv@KF*!e@>Q|Tk0q7Nay2x;fXi#M+UqLfh9+?}2s^J1fKlnGDHk`WG7 zit#rvd&YL#Ph})qNi$UST|@GlcFq-0DZeUAr}pje|XHmF~~6ROfYoU}NeCXO5 zaYv`c)`?rz1iqI@uNjMc}CR76}P3GO=0R?uA%*k5WV-msz#AkYfLyfDAJB zNNCLDMISaz3LJ5*ub=KZrXjXTZ!?DKZ6}3^T`kHyBAbA_%?ZWzCCdx5DAjol zMc3gbdKhy2{Rk$Bkj49#*Eiqx!wnwLybts!mFkasb;MJoBX{K-Y+7XgtW?#6T1^I-K` z;3MFT3FQhJRvVI}I>)$iA0cV67u)p61juV^`rQuo0HS0n70=cK(G7HJu$uiW=%`z{ z{_&f?*x$i4P7t6dA~QtifN_e`dk;tRt2_b%-+n1zzN+wFNP5Bd&ENY9Tt)5NyTsoi zdV8oHV!t~xlkN6ca(*v7WHO3om`s^{fiyxq8tbg^&Nx+;n1qmrX$JbULve%*ihZy% zc!v@M85-mn`znUwyN`SGC#gh?K7fHtEou*?_F1_a+lbHz#l?bQMMx3jC>{(3WhZ}Y z{$$&Crey(v>{c`wd=56;2fBHfvJmuhhF%cI8FKuASjB| zIyLYJd8W)51_q?r$|lo@{(P%HdtLXfRqcCg{7*2VWbz}NB-Mk=*-bu|701RJRm~FR zAqfnx>T^0p{n88ndhRtr914m0j=aPXZ}-sFei5OGjk?8T&&^F@tUm-^M##hwq0Aln z64T2Tp}&USv$)JH&|}jK$ZcWd57T|8T*Q^w)J;Suw3r8IMffQ{IO(~q1}^=OP-iqV zN@h6D9qSC*U9bdwKF?6!Y=F|^qS8~HV%yyik|1jND|DRPOtxQmN^MjwwLIV;^873F zIIf~XBc@sq7|c38h7X)MFIme(#xF4xsJ~mPV15!bVoYMw;V*Kd^!?Xd!L4Pn8#`Ig7*QTOl}Et z!4>D1TL4lrP0PxqY(;p9gT}x8g&r%#K9`IDD&0}*l#k+ zUFpugXF`^i2h17>prW6mOx|^I!cGc+GKo^rPWaAFN zgB!8D9FE<-@hEpS<#)HoJ9I{H9I10jNvsfz7tq-XezK6lRwHzM9(UE%@?Yuc-okQV zgZy`Nbadp!e>yll*~Wj^NKtBZ>5=Ek1i`=q&`ttjpnX}M!xCjnh?8&OUinR1cq0m; zTi*Ch)K~VuYe}rWhu}4N1dm9uHuI`G2H14K_5f86cnT_~^-gb~X^cMXiT|1*S%bzO zN+V{91x%@OF?S_eS3Z-&a&AV0;$G1+Ok>uRRP3GnP@OI)Y-y7ST|PO6`B zUT_Yh@dTy(r8u_O8Gjev`uVZaPqNhVe;I9Kc^|L_{(m5NzUTjSez=YQyphs|0qdYE z1$#5xh@*+kfJ{~38qKBETGn;d0~NgOm1rab#e@^!8lXP|0is_rhyMP1Z-0N^?#~3- zHQoTKZ>MX~o%+1vJan~TCk&MvJyWgz2{`!?PLkc4_G#?C7_jWL9}$(SKL6u9#J~-S zivR-)kb@@w|HD%J_rvqEZT|O-6d@$^9RE*aG^lq1Z3>9)M3^v?h|AmW^VZK^?-yFfT&}MGD1S)T5h*BIQ zAykRqL_1ezbID)c%fM+}vgs8Alu|n96{rx?RQtP-l#hVx>T$-Gy7M0LNCMAmE!8<+FQE$~3)Y zAKJY#NP3$t5M?8fi9W+VY@hB$qKPy5x!oex$bagM^9r7THpqYHhi50g{qOW_EB|ez z==e`^saJOCmxs&jCheJ4tC#X@zkT_Zkfg~R9OlU>&<7a+s#Smvb1o{=+JxmwJ;k;} zsXwhplB|&-Rlk1y3b|1)ieFpHiTc-oe3(B`$c03iS*O1Xo*4`V#@400&*l9M)S#f7=BD@ z(~>HU+41ewG)-v(-7TcI1f~88vi8Z!`ne#o@Jy++T9=6OE5@dX`g!N9V{e~ooN{ze zVK}F_Nsd)fUj}YA(VyE?3S5X(AaA7wvupV;dukJsyAXX)=0Z9Cum^T{!VE98$H5a8 zKvm43ZeWM54)l``PE-p7yxT#)O>vDnT48A*8a|R^!8;iEg$fvLtp-TdlC5YmumZuPCT%F`_IwA zNh$x=>Gu8KW=bjkmm#662mzMouBdhZ(N$1O{|{Z=HlvtNzR!o*zZHHT`e)1c!v^I0 zfB3P+fv2}g8OH(XIC=;T&cx4ZQnC%+dA8D>-EyW~OG&*LMX|DT_qo^Sd8 zCQ8Zw(^>Y__<(v@z^a7-r(!#Sz(v;*3)~-k;lSP86(WLD$r2RGpu4(@x&y6q91Y;m z+J!WP|GMM@r>}mn?=B9e-j>zu=W4nNRcEfBXOKB z^-wPL%6tKWDH%KY1q30i-xD;8hc-V6VBrv@jk$nk@vw{I=M9NLfjH3fSLgg0n(q}l zfQB|(ryKDs9)5m7V_Gg#%O&b`4ZgkTZGOVt2J&)uyWtJc?gqBak=o#GY~3V3){ zRUEnU)U5CdILLE8H{Z|yXpsLXhbwsf-6;Q^oSmHd_WzT^t^emniXx~ggY)V{K9#t+ zqm-u_S=NEKX)*_NnkocH3T`hiUcd4Zz2#xp?-MeF$pC+lnKmzVhD}>U^W-}J;wZ8Lgd(v=UOZ=jQcmaP$x-94@)hZ4lyDM}q@Ry$0JH2y ze^o9a?r+}_=0YIUt086(^fSoE-gn5ycFQUCy8WIeKVUutKcX zGz!iI z-$_Y~e!*Ek!ZE(qR(ZPScX&^cBXIq}{=Uw%!Za)h$Wle}Q=WCbfTnH$BbSJKc zT@8$JJ#X8$JMmcVN98b8BmYxODCTpS-Ep1wf5&HMN2U9}v!kv2zlow)o?dDo*LqcN z|IG%HbhoQE;I`d>wb$;@vHRM`U`=neG+C=w3vA>%8GoIHt+)Ex<6Nn|*O}RFmR`H* zXK3?nSe?d|`7+JC>Q`rPd}`4XmNON*#IdD`xb_ro_Nh+(6u0%VIM^@sn8~JAD>N6o z?CKLT6xYaqvuHKxpPTYOpB$d~`TtMP54Q0?H&PU(eSf(+S<$Rs9<%DLQW~@7t(z=XG%QPEb)jUQIgj|}8M2axiq0YUl~$gu;6yh}j^uvwW9V*|D=#Eqv?ikveG$R6QJK9C925KB+9C^07+AZ~YiE zMK%2gm32s}*}2r>kqf){$)*h6E8Gs9%}6qxAjkS&Jmw8NbJWzdYP@VR^o_B;9DDob zYjAmc)#bUSy=T~DczJuZiZ}X=b0ZT(GE8LFRWYRQ#Se^p&BuHKR_eVdjE9HPYEq3WZxHw7NMZNR}aC0ub052p3Y zB7mK%%PB*&JY>Cx&5us5%yKpJV{`A}XVh{jZMZR+K%AE9miAP!#5xJAYS;&ZU_bto zWYFp%SG&+{1uEg!(AHbCDq4|_SQD+d{^oWWT9J;})6j}^#8yQsLZB9yY?T%{NNU=R zDRd5s-QgI8^`64wQlf+`RXZyiIHw^6{(`ALqr++PrUfN{v z%`{2WZU6>7ApQ>ZWY7o%UXjLUUrsZfS4eG*=3#g6ot!mRVG%ED4Tp8zTHl(T;RuY2j zzj}$>IqI@d;dSUl#+nJ4i(WHLE8!O+yp^OltWc@f_?Sfu2Oii znBc}0zrMsQA~QtiAqv$><^PzK{w37@CG@97wWpQpPHWPfOmORm=@8KraU|r==W;*o zN8_sO*$xD)c{T3|wM!+`1$<2Z!bsXQp7xAnIX%dRzYYKNnU(7MKRSdfx&UnQ|2jVO z{lCr*4!8ba8!0OO)7KZ5tMd91+ot0MplY&uA1~$ECga`~LKzqln%`ZBp4p&X+;4dv zx&{3fP3%ic`S<=)JQ@}~ce$k$JEHb_Qm)z4r-cz{G&+V=gkd%zHZ0-7gh~EPJ*U>< z0=20-O1UN5IXlU7_Ow1uS0fN5Q^wH`I7Z+B%|T3%ip4E2EB63oOep2*c|bV&%d;_L z|Apq>gh;Sd!0orbCA1p_BN3N2>1rLM6p8XT*dew$P1W-$8;QJk->Bf&6h6*m z+Mi&lrvGf&w6A$-(*IA6eE;9GNRT0gyaTU85CJ^A1ZeyH_n=C@@ZYg$_;mu-_FWSfO` zYe=Xsb@HE#f4~0xA16oWrTd@L)2;r$k)lb5N_V)TDobzlH7DPS=^uS*l>aZHh)mO^?7&U--=m{*FaN{A z!P)6n{@+A#u~lZNsIZ8?Iz7>n(^65bvZ%a3U{AFsgeJz*SX6Xft%#Nvt$4M z|NQi1d;hWb(?O$9l+|(5x4Bu>HAL-V$4RZldPrMwTSxayv|>x zyMR5Z-9#;`V3_2BS$oBw+wB@irSWkR4Id7_gT=r>-!An474B??xC;Mu4& z=;GH!9`xhC)JcTiSXU_&RtJ-577N|BpPyjZxI`_M=S!9j7moMzQHY2gLkMl&>(q^5 z)=~~_IPagVCA4cqrH@$(Y%BjQV+L%J|IW|+``^RE<8A)ejg$cKjPfKiHQrC5CZ@{dx5dRqS&-#ThY z>ZWB%l|$UB1VO!@ItqVztMv@AkaM zG;aptx$i+=c<#gU|N;MsyrU0FIzQqw6?cC^RyY~ zop01uVt3`%=pte}od{`Kb%9kBR+5Sx3ArYiF(7FXe{~N`nfk;~f+9|6TU%(OQPT`J zBk^s9BESg1T!yYr|HQ!v;zV?t;sj&_r`)iL(!LKyuGT;UQL823d>Oz#c=aJe5l1oj zNjLgg#?aGL zkyu(Sk$VZzgruEOi)FKQBK8+D?1s{>qQRPwxuhiRj8H^Lx-3##&1_r#qfY;e5as(5 zn8JIZ42r+-2uE;{knoNEKfeBVba;Mpveo}KQ535zR(Dk@U`8>an9mn+_^~$IChmPi zceXlab^k;fnZTfnHYU~&yisS>Ud&qU%${W{`CY=apXcg1e)^jk z71s;`3po{3_D&yfp@e9?V-LXi*C`8!$@9`fSHo+i@LJ9HF=JCi)#$!Fwf9Nh8CLG? z_6XQQ!g>RyeO^(G9e%g8+mHKKll)#O|IJW>D0%+N5JnHvOh0=}NF>*^n+(`w|35nO z;y)Z6ou6;x|8Atny&PQQ)p>x+oiqq`($y8b7S#GhMb)u>lKq-E$sPUQ)FeKQ0O{k> z$sb(KG5A`7048988BncA8JvPuTK~fvwbNCAkE74tK6xRv>-x1`yQdafg(x7;Y6c@2 zY*$eOknaOR0p<)Pqdg#HR-A$eG9&}^N{ji3k_mXke2i1mxU_dNL?I_s5snyr06XS@ z=RfsT+mc39ASX7CsXiz^7x~I-woER@He*ueH?N(sODRr zn(zK{VteHxx00mW(bEkJ){5|JAzz$UAzjBzUe;%n%y5k8o}feWqDp@-vAHLZM`NM4 zV$n890DHih63+uet9enOBn<<8fy^VIpHVcz9|Ub>iN7E%`VLFpU7vNVNoT2-#6IO0 zv0qkc)c=?`PSa$WJTOiA-{JA8AOGd(;9#r&ZK9}jr+ST7t@0VTi)nd9>-8&k`3%?r z0QI*gi~gtkUqE@gHB(oot>xqEprMudv={f!%wxBhf4bEIHwMqY%7^$;%hsIe4Cg{% z$PrSI*dVWdC-yXEV2C0(Wr7b9RwO=#6oDz5!elO0hrE?kA>@NZHPcaoWwMbmoZ-AyV@W6H!a05OCh`)Bhc5>p>JL<+k7U$ zLkj79Q5{mDGZ4E`5Rzs^(P>bqgLqWD?@>dtAH3|SZ>oY|U5?^V+fYnQMZ0HYg1Ko8 z`g)Swr#3qiG54_xL9WN!8KRFAbL3&?bm@S~neG7e)$jdM&@`*J-38pmx8*Y{mGobW z8q4^7n9@Z5Ps{OtPLHPH_EM0=^&y74N!%yho4^q62NXj8j!5AeIfGEwwPH0Ae znYuAg<{*M87{e?>DS#u6C=hf9r}u`tNQE4xIn7t0E^sXSp(qtXeMBflQDSqBivl|- z-wzSUAQKusC!o*Ck8qOom*g~N-}k{F=Qd5urf6f?A7PRdRQ;Jk4h(i}0T++Vq%zQ# zGb;X`Aqok{Qx7Jh0a##7{qZhFV4c6U;a> zufM!k0k1LZq#88J|L1=GkK?0*ZT^pqlqS+vxd9wnr&WD+Gtr;}5GAxrkfc9r(!XPn$}Do(QKwQR-4H6V!B+UdX7Yd0R?H(r_#cmNGA2rt=|?0#;giT*9cj95 zv^*_WfN~n{O#ha4Z%er}(0@xyT$~3q+kZ;=zmHB%xAcD#rHTG~8=yN6umDu^0k0R| z9F(E}oQ^gj-M%aPD0lnCnup3O*~UiHzp)@`1Cd<0+(5*}^3u7=JS6X&`&$dpdP)=h zCv-uhk5wAz|IyL0C;uOwpPip?>Hj85BmLJKppx*Le_KDZSyYhvLGhQxB6j#ByS1x% z0YRKL4&8KGO7yC{Al*LtvZ_NE%cMkeE>ZPLaW7(fcNTc5j!V2s*1s;X9zw%>NB84J zU#}Q}9&6Esjaj6NNM8#6&s+tCa8mNRg?6Jo|;v{ zS!Z3)!Da2LU|?X~l)?~zrPad#P@^ciOSRP#Kj+ek{x7HoHroGAef@8n|9MlT8~xu1 z>HjRr{!%1=<>Y=#>bFIeZuEb#007PMzfb>B?y}>=^&*lFr^m~KhKj?G$zvjdE{<-)c^Cz37&kH~*5DFOK z1hL*%1NNBpz8VbSL+`5rpNM}Gitl@0{lC3GfcKDMGG*ZEiH(69bt3iv=6_;<$mAg^ z(A%F>lr@TnQ%)$;;7|;HAoSry1-SmDjw|~eN+v*l>|Mk$76b$);CqI^w-l!Q1^AIn zWuP~cOD{3t9|?T`I0YFc@iY<*_W)!dA?bbaCKZTZF$b6l;({Wc%mI^AqtggL8$lf+ zJgxvmMk5?ym;j10!Z0Uvz6T=6VM6W!p&IZY#~vn(s04u-#WTpmsUHEDkQk4!mex3t zBQ9Ypry$Z(uvY;|QhJ#q!I`5$ucE$Kpb<$D@+de%1R0X468AtnMH&-KK??a)d=%rU z0A!weKnDI)^ea&LliV@rLzdtOiveYnjPVe26u+ndwhz9Zrg0+KjJj78*bxe1%(4W| zO<+G~S5(ai=Hq8L-32fue2l2sK^&#A*aIpMy@hY()SBRnFv}oCDc3*%8G#XuaDq9M zaUNkBKPR*TN=C_q$ZBq{U^oYSjA;xqNI6Cf;Isn743k7B${49=n0g)tz24OoO9QUg`$h(t91%KE{lOubasU&-%#}=_ zs>)GQsT)pE%2jxOF;%x@#2>|e>SYOn45`SB5q|*^bPtpNo6{+h;g8vX(EDERns6MU zUQcYxDoXZD4ml>#RP?n6bXWiW*ZwJ047&!XCWjY*+ z@5dZGi*~`$!QnZ011W|tzXq3tW`wFqzZmX;izET>L{$dfA%^G-#e?3z|MkBr=IG!5 z`rl##Am9|nXaebj*eYS*gI;fcm8I9KWkGj{PMBI?!-2pUQ8b)`dqMgcn3Jho6*V=S z$a&gRG*XaTmFOTwlA_`n>WKr*gq#{{?g^20g1J1<37!a|)^mFs^m?yGBNWNwBFOs~0qd0J`*%d9l#c;SQ#?bI zL7JyZ8ez&f$fm;tN6EaG??aG}SJMIrScW3ONq_*6QwV>DtNkmsW-s5hk7FE-#gPCJ znINV*wU0+|ov7NA5@1i%sKSqE94OMaHj1ETVW=KCydpkdvvLej1Gh z1%o{yVk0W$08LMdEW&24_GGdmI2z#uOImkX%TOep>bihC3>lq86%AM)-f z8c~Q-1$fE~!*jQ6uP5k2L^8oH^t1@w28*pK4}g>_Q0%r-3sD>($q`vEG_QLyZ!(+e z2-3u*XG(iC#~Wr@f)VR6Bvz86WG>kNg3-8sJDP1_oeFvWW{}Q%?Lbf@*-I?As9AzR zulJ*w&WNNe!_kyXSu!_Lgfkd%G-W^e1PUr(=1-8I-~`GL5;GH#RFNMhO@1RHsD$39J$vrwVtw3G0=ZmUu~E`__2I#3K&CLD zB|C&uPJ|2)369vyPp0b5CIW6-BL?VmC&vSm1V}-wr&pAP>9ODu7O4DyOR6EK9Hw*4 zBxH=}xy|h;NXR__WK@uJl~t@blMFmF;=Y=yxutW!24Ij0iIyTJ_LHVDv6kU-q<6(2 z-h#XDUV&GCy?b?i2X0=ydvkSn_v$71`bThabMyM@^5W~)ufXezANFKDt+&4fKfHbS zU*PH%+`N1H{_5qcm*DMn@8ViWITyF!>Q-?0uP<(|ZU?%_+jro*SMOeZ{UdmJb$j{x z;_A&UxOn{<{BZH^-Np6Y)vH@@as3ipzP)~Vb$9jl`gX7P>aRENUfte;x9`B!o152H zuU_tftLw|x-@m-N{uVs@;p*?@?k+@|T^rilZ+dTDy}SJG;`;95>#NsS zcR%idZ?5jH1;lUOz5^HF=HlJm)#dlEFW!Nh@88|Ly?wO@uHRnoUtNFm?&|v6S8rZj z-|Y#kdUscMuU`#%JtLu%8I5GKjA{KyX@$i^|NCG6A5$_FC%N=0_okK&B#9w{s;U(2 zGRV0hs>MpzN>qD2t!IkG7dZK>=90`%DlsObf@uy>LLP-=9{RP{yGkW-!ZD)O`Lm>- z>aiNSX<^+f%YoANFRPki?iI*IIZ~V$`7oa?m?S-=GEo%a3?q$vSs&*_hVD0~$s)op zdcDH|xFcFJnTxqAiw5%3w>PiBdrjnz1_zQ)rgM-$j;NvjQa2Mn{334$q8u$fk2is2bTR~khGrOGx$d1QV`nMBKb3RT9!N_ZiJ z1vCfe0dOSLd{PSu)kR6A3?NhK-!A1-sLcUKa#au(>-z#cgS!Q=)P|?XEg2aqpYKRm zWReiT@gyUHZl(@46bT7c$--LpRU6xp{cM2?N?&?WF(h{X4>2vzhPwc#3{kFG$h8N&(JKs!`-hF*>xd1TH%z)5<7e~nex*;)J z0Ll%C4TMXTMMPK0|FV7_;rll*a{=U^ixEW>aUWOlEw2&51c6r{q**NiS1Cty1S9kU z{0)ED-+8B$8`V + 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.2.1/templates/NOTES.txt b/stable/lidarr/20.2.1/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/lidarr/20.2.1/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/lidarr/20.2.1/templates/common.yaml b/stable/lidarr/20.2.1/templates/common.yaml new file mode 100644 index 0000000..3c93f57 --- /dev/null +++ b/stable/lidarr/20.2.1/templates/common.yaml @@ -0,0 +1,11 @@ +{{/* 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.2.1/values.yaml b/stable/lidarr/20.2.1/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/lidarr/20.3.0/.helmignore b/stable/lidarr/20.3.0/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/lidarr/20.3.0/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/lidarr/20.3.0/CHANGELOG.md b/stable/lidarr/20.3.0/CHANGELOG.md new file mode 100644 index 0000000..35ff69a --- /dev/null +++ b/stable/lidarr/20.3.0/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +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 new file mode 100644 index 0000000..97aa756 --- /dev/null +++ b/stable/lidarr/20.3.0/Chart.yaml @@ -0,0 +1,39 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + 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 diff --git a/stable/lidarr/20.3.0/README.md b/stable/lidarr/20.3.0/README.md new file mode 100644 index 0000000..5dd4de9 --- /dev/null +++ b/stable/lidarr/20.3.0/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/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 new file mode 100644 index 0000000..ab0ee61 --- /dev/null +++ b/stable/lidarr/20.3.0/app-readme.md @@ -0,0 +1,8 @@ +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 new file mode 100644 index 0000000000000000000000000000000000000000..afb1de8120d9e1088c1711607a6c323d4dae355b GIT binary patch literal 99288 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 Du(4)S literal 0 HcmV?d00001 diff --git a/stable/lidarr/20.3.0/ix_values.yaml b/stable/lidarr/20.3.0/ix_values.yaml new file mode 100644 index 0000000..10a558c --- /dev/null +++ b/stable/lidarr/20.3.0/ix_values.yaml @@ -0,0 +1,109 @@ +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 new file mode 100644 index 0000000..86ad1ce --- /dev/null +++ b/stable/lidarr/20.3.0/questions.yaml @@ -0,0 +1,2899 @@ +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 new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/lidarr/20.3.0/templates/NOTES.txt @@ -0,0 +1 @@ +{{- 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 new file mode 100644 index 0000000..3c93f57 --- /dev/null +++ b/stable/lidarr/20.3.0/templates/common.yaml @@ -0,0 +1,11 @@ +{{/* 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 new file mode 100644 index 0000000..e69de29 diff --git a/stable/lidarr/20.3.1/.helmignore b/stable/lidarr/20.3.1/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/lidarr/20.3.1/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/lidarr/20.3.1/CHANGELOG.md b/stable/lidarr/20.3.1/CHANGELOG.md new file mode 100644 index 0000000..296ec6a --- /dev/null +++ b/stable/lidarr/20.3.1/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +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 new file mode 100644 index 0000000..f2948f1 --- /dev/null +++ b/stable/lidarr/20.3.1/Chart.yaml @@ -0,0 +1,39 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + 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 diff --git a/stable/lidarr/20.3.1/README.md b/stable/lidarr/20.3.1/README.md new file mode 100644 index 0000000..5dd4de9 --- /dev/null +++ b/stable/lidarr/20.3.1/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/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 new file mode 100644 index 0000000..ab0ee61 --- /dev/null +++ b/stable/lidarr/20.3.1/app-readme.md @@ -0,0 +1,8 @@ +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 new file mode 100644 index 0000000000000000000000000000000000000000..afb1de8120d9e1088c1711607a6c323d4dae355b GIT binary patch literal 99288 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 Du(4)S literal 0 HcmV?d00001 diff --git a/stable/lidarr/20.3.1/ix_values.yaml b/stable/lidarr/20.3.1/ix_values.yaml new file mode 100644 index 0000000..0e1808b --- /dev/null +++ b/stable/lidarr/20.3.1/ix_values.yaml @@ -0,0 +1,109 @@ +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 new file mode 100644 index 0000000..86ad1ce --- /dev/null +++ b/stable/lidarr/20.3.1/questions.yaml @@ -0,0 +1,2899 @@ +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 new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/lidarr/20.3.1/templates/NOTES.txt @@ -0,0 +1 @@ +{{- 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 new file mode 100644 index 0000000..3c93f57 --- /dev/null +++ b/stable/lidarr/20.3.1/templates/common.yaml @@ -0,0 +1,11 @@ +{{/* 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 new file mode 100644 index 0000000..e69de29 diff --git a/stable/lidarr/21.5.2/.helmignore b/stable/lidarr/21.5.2/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/lidarr/21.5.2/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/lidarr/21.5.2/CHANGELOG.md b/stable/lidarr/21.5.2/CHANGELOG.md new file mode 100644 index 0000000..36c2773 --- /dev/null +++ b/stable/lidarr/21.5.2/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + +## [lidarr-21.5.2](https://github.com/truecharts/charts/compare/lidarr-21.4.0...lidarr-21.5.2) (2024-03-17) + +### Chore + + + +- 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)) + + +## [lidarr-21.5.2](https://github.com/truecharts/charts/compare/lidarr-21.4.0...lidarr-21.5.2) (2024-03-17) + +### Chore + + + +- 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)) + + +## [lidarr-21.5.2](https://github.com/truecharts/charts/compare/lidarr-21.4.0...lidarr-21.5.2) (2024-03-17) + +### Chore + + + +- 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)) + + +## [lidarr-21.5.2](https://github.com/truecharts/charts/compare/lidarr-21.4.0...lidarr-21.5.2) (2024-03-17) + +### Chore + + + +- 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)) + + +## [lidarr-21.5.2](https://github.com/truecharts/charts/compare/lidarr-21.4.0...lidarr-21.5.2) (2024-03-17) + +### Chore + + + +- 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)) + + +## [lidarr-21.5.1](https://github.com/truecharts/charts/compare/lidarr-21.4.0...lidarr-21.5.1) (2024-03-17) + +### Chore + + + +- 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)) + + +## [lidarr-21.5.1](https://github.com/truecharts/charts/compare/lidarr-21.4.0...lidarr-21.5.1) (2024-03-17) diff --git a/stable/lidarr/21.5.2/Chart.yaml b/stable/lidarr/21.5.2/Chart.yaml new file mode 100644 index 0000000..5bde981 --- /dev/null +++ b/stable/lidarr/21.5.2/Chart.yaml @@ -0,0 +1,39 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + 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.3.4098 +dependencies: + - name: common + version: 20.2.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: 21.5.2 diff --git a/stable/lidarr/21.5.2/README.md b/stable/lidarr/21.5.2/README.md new file mode 100644 index 0000000..5dd4de9 --- /dev/null +++ b/stable/lidarr/21.5.2/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/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/21.5.2/app-changelog.md b/stable/lidarr/21.5.2/app-changelog.md new file mode 100644 index 0000000..9585177 --- /dev/null +++ b/stable/lidarr/21.5.2/app-changelog.md @@ -0,0 +1,15 @@ + + +## [lidarr-21.5.2](https://github.com/truecharts/charts/compare/lidarr-21.4.0...lidarr-21.5.2) (2024-03-17) + +### Chore + + + +- 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)) \ No newline at end of file diff --git a/stable/lidarr/21.5.2/app-readme.md b/stable/lidarr/21.5.2/app-readme.md new file mode 100644 index 0000000..ab0ee61 --- /dev/null +++ b/stable/lidarr/21.5.2/app-readme.md @@ -0,0 +1,8 @@ +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.5.2/charts/common-20.2.0.tgz b/stable/lidarr/21.5.2/charts/common-20.2.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..8bc207a92f0f2456ddda65216a8fafb7bb9d5b09 GIT binary patch literal 101653 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 z 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%0AZSzDiWTb()Y-C~3y!p)O`y!G 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 literal 0 HcmV?d00001 diff --git a/stable/lidarr/21.5.2/ix_values.yaml b/stable/lidarr/21.5.2/ix_values.yaml new file mode 100644 index 0000000..e0a46c0 --- /dev/null +++ b/stable/lidarr/21.5.2/ix_values.yaml @@ -0,0 +1,109 @@ +image: + repository: ghcr.io/onedr0p/lidarr-develop + pullPolicy: IfNotPresent + tag: 2.2.3.4098@sha256:ddb5035c57005792761e60371ab7e2ca3e0804fa5ab6952266b0d5f797ed08c2 +exportarrImage: + repository: ghcr.io/onedr0p/exportarr + pullPolicy: IfNotPresent + tag: v2.0.0@sha256:760327e885a9bb5b818b56e8a6f818c9570eeaa9484bed122028adbf80bcaeb9 +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.5.2/questions.yaml b/stable/lidarr/21.5.2/questions.yaml new file mode 100644 index 0000000..86ad1ce --- /dev/null +++ b/stable/lidarr/21.5.2/questions.yaml @@ -0,0 +1,2899 @@ +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/21.5.2/templates/NOTES.txt b/stable/lidarr/21.5.2/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/lidarr/21.5.2/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/lidarr/21.5.2/templates/common.yaml b/stable/lidarr/21.5.2/templates/common.yaml new file mode 100644 index 0000000..3c93f57 --- /dev/null +++ b/stable/lidarr/21.5.2/templates/common.yaml @@ -0,0 +1,11 @@ +{{/* 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.5.2/values.yaml b/stable/lidarr/21.5.2/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/lidarr/21.5.3/.helmignore b/stable/lidarr/21.5.3/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/lidarr/21.5.3/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/lidarr/21.5.3/CHANGELOG.md b/stable/lidarr/21.5.3/CHANGELOG.md new file mode 100644 index 0000000..685ffdb --- /dev/null +++ b/stable/lidarr/21.5.3/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + +## [lidarr-21.5.3](https://github.com/truecharts/charts/compare/lidarr-21.4.0...lidarr-21.5.3) (2024-03-23) + +### Chore + + + +- 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)) + + +## [lidarr-21.5.3](https://github.com/truecharts/charts/compare/lidarr-21.4.0...lidarr-21.5.3) (2024-03-23) + +### Chore + + + +- 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)) + + +## [lidarr-21.5.3](https://github.com/truecharts/charts/compare/lidarr-21.4.0...lidarr-21.5.3) (2024-03-23) + +### Chore + + + +- 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)) + + +## [lidarr-21.5.3](https://github.com/truecharts/charts/compare/lidarr-21.4.0...lidarr-21.5.3) (2024-03-23) + +### Chore + + + +- 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)) + + +## [lidarr-21.5.3](https://github.com/truecharts/charts/compare/lidarr-21.4.0...lidarr-21.5.3) (2024-03-23) + +### Chore + + + +- 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)) + + +## [lidarr-21.5.3](https://github.com/truecharts/charts/compare/lidarr-21.4.0...lidarr-21.5.3) (2024-03-23) + +### Chore + diff --git a/stable/lidarr/21.5.3/Chart.yaml b/stable/lidarr/21.5.3/Chart.yaml new file mode 100644 index 0000000..9c0405b --- /dev/null +++ b/stable/lidarr/21.5.3/Chart.yaml @@ -0,0 +1,39 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + 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.3.4098 +dependencies: + - name: common + version: 20.2.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: 21.5.3 diff --git a/stable/lidarr/21.5.3/README.md b/stable/lidarr/21.5.3/README.md new file mode 100644 index 0000000..5dd4de9 --- /dev/null +++ b/stable/lidarr/21.5.3/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/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/21.5.3/app-changelog.md b/stable/lidarr/21.5.3/app-changelog.md new file mode 100644 index 0000000..dcff1f4 --- /dev/null +++ b/stable/lidarr/21.5.3/app-changelog.md @@ -0,0 +1,17 @@ + + +## [lidarr-21.5.3](https://github.com/truecharts/charts/compare/lidarr-21.4.0...lidarr-21.5.3) (2024-03-23) + +### Chore + + + +- 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)) \ No newline at end of file diff --git a/stable/lidarr/21.5.3/app-readme.md b/stable/lidarr/21.5.3/app-readme.md new file mode 100644 index 0000000..ab0ee61 --- /dev/null +++ b/stable/lidarr/21.5.3/app-readme.md @@ -0,0 +1,8 @@ +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.5.3/charts/common-20.2.2.tgz b/stable/lidarr/21.5.3/charts/common-20.2.2.tgz new file mode 100644 index 0000000000000000000000000000000000000000..a03705c84630d53af93b6d6ffdf44b22f1a2597f GIT binary patch literal 101828 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 literal 0 HcmV?d00001 diff --git a/stable/lidarr/21.5.3/ix_values.yaml b/stable/lidarr/21.5.3/ix_values.yaml new file mode 100644 index 0000000..e0a46c0 --- /dev/null +++ b/stable/lidarr/21.5.3/ix_values.yaml @@ -0,0 +1,109 @@ +image: + repository: ghcr.io/onedr0p/lidarr-develop + pullPolicy: IfNotPresent + tag: 2.2.3.4098@sha256:ddb5035c57005792761e60371ab7e2ca3e0804fa5ab6952266b0d5f797ed08c2 +exportarrImage: + repository: ghcr.io/onedr0p/exportarr + pullPolicy: IfNotPresent + tag: v2.0.0@sha256:760327e885a9bb5b818b56e8a6f818c9570eeaa9484bed122028adbf80bcaeb9 +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.5.3/questions.yaml b/stable/lidarr/21.5.3/questions.yaml new file mode 100644 index 0000000..86ad1ce --- /dev/null +++ b/stable/lidarr/21.5.3/questions.yaml @@ -0,0 +1,2899 @@ +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/21.5.3/templates/NOTES.txt b/stable/lidarr/21.5.3/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/lidarr/21.5.3/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/lidarr/21.5.3/templates/common.yaml b/stable/lidarr/21.5.3/templates/common.yaml new file mode 100644 index 0000000..3c93f57 --- /dev/null +++ b/stable/lidarr/21.5.3/templates/common.yaml @@ -0,0 +1,11 @@ +{{/* 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.5.3/values.yaml b/stable/lidarr/21.5.3/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/lidarr/21.5.4/.helmignore b/stable/lidarr/21.5.4/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/lidarr/21.5.4/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/lidarr/21.5.4/CHANGELOG.md b/stable/lidarr/21.5.4/CHANGELOG.md new file mode 100644 index 0000000..e07d165 --- /dev/null +++ b/stable/lidarr/21.5.4/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + +## [lidarr-21.5.4](https://github.com/truecharts/charts/compare/lidarr-21.4.0...lidarr-21.5.4) (2024-03-23) + +### Chore + + + +- 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)) + + +## [lidarr-21.5.4](https://github.com/truecharts/charts/compare/lidarr-21.4.0...lidarr-21.5.4) (2024-03-23) + +### Chore + + + +- 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)) + + +## [lidarr-21.5.4](https://github.com/truecharts/charts/compare/lidarr-21.4.0...lidarr-21.5.4) (2024-03-23) + +### Chore + + + +- 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)) + + +## [lidarr-21.5.4](https://github.com/truecharts/charts/compare/lidarr-21.4.0...lidarr-21.5.4) (2024-03-23) + +### Chore + + + +- 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)) + + +## [lidarr-21.5.4](https://github.com/truecharts/charts/compare/lidarr-21.4.0...lidarr-21.5.4) (2024-03-23) + +### Chore + + + +- 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)) diff --git a/stable/lidarr/21.5.4/Chart.yaml b/stable/lidarr/21.5.4/Chart.yaml new file mode 100644 index 0000000..9e077b8 --- /dev/null +++ b/stable/lidarr/21.5.4/Chart.yaml @@ -0,0 +1,39 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + 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.3.4098 +dependencies: + - name: common + version: 20.2.3 + 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: 21.5.4 diff --git a/stable/lidarr/21.5.4/README.md b/stable/lidarr/21.5.4/README.md new file mode 100644 index 0000000..5dd4de9 --- /dev/null +++ b/stable/lidarr/21.5.4/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/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/21.5.4/app-changelog.md b/stable/lidarr/21.5.4/app-changelog.md new file mode 100644 index 0000000..8f62b3f --- /dev/null +++ b/stable/lidarr/21.5.4/app-changelog.md @@ -0,0 +1,19 @@ + + +## [lidarr-21.5.4](https://github.com/truecharts/charts/compare/lidarr-21.4.0...lidarr-21.5.4) (2024-03-23) + +### Chore + + + +- 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)) \ No newline at end of file diff --git a/stable/lidarr/21.5.4/app-readme.md b/stable/lidarr/21.5.4/app-readme.md new file mode 100644 index 0000000..ab0ee61 --- /dev/null +++ b/stable/lidarr/21.5.4/app-readme.md @@ -0,0 +1,8 @@ +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.5.4/charts/common-20.2.3.tgz b/stable/lidarr/21.5.4/charts/common-20.2.3.tgz new file mode 100644 index 0000000000000000000000000000000000000000..701ca7141bec7a024c6a235eece1372f39cd79bb GIT binary patch literal 101772 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 pQu&l(J|9!^kf&Su#3jL{{R30|No + 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/21.5.4/templates/NOTES.txt b/stable/lidarr/21.5.4/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/lidarr/21.5.4/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/lidarr/21.5.4/templates/common.yaml b/stable/lidarr/21.5.4/templates/common.yaml new file mode 100644 index 0000000..3c93f57 --- /dev/null +++ b/stable/lidarr/21.5.4/templates/common.yaml @@ -0,0 +1,11 @@ +{{/* 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.5.4/values.yaml b/stable/lidarr/21.5.4/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/lidarr/21.5.5/.helmignore b/stable/lidarr/21.5.5/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/lidarr/21.5.5/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/lidarr/21.5.5/CHANGELOG.md b/stable/lidarr/21.5.5/CHANGELOG.md new file mode 100644 index 0000000..79a9134 --- /dev/null +++ b/stable/lidarr/21.5.5/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + +## [lidarr-21.5.5](https://github.com/truecharts/charts/compare/lidarr-21.4.0...lidarr-21.5.5) (2024-03-25) + +### Chore + + + +- 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)) + + +## [lidarr-21.5.5](https://github.com/truecharts/charts/compare/lidarr-21.4.0...lidarr-21.5.5) (2024-03-25) + +### Chore + + + +- 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)) + + +## [lidarr-21.5.4](https://github.com/truecharts/charts/compare/lidarr-21.4.0...lidarr-21.5.4) (2024-03-23) + +### Chore + + + +- 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)) + + +## [lidarr-21.5.4](https://github.com/truecharts/charts/compare/lidarr-21.4.0...lidarr-21.5.4) (2024-03-23) + +### Chore + + + +- 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)) + + +## [lidarr-21.5.4](https://github.com/truecharts/charts/compare/lidarr-21.4.0...lidarr-21.5.4) (2024-03-23) + +### Chore + + + +- 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)) diff --git a/stable/lidarr/21.5.5/Chart.yaml b/stable/lidarr/21.5.5/Chart.yaml new file mode 100644 index 0000000..ba9f5ab --- /dev/null +++ b/stable/lidarr/21.5.5/Chart.yaml @@ -0,0 +1,39 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + 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.3.4098 +dependencies: + - name: common + version: 20.2.4 + 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: 21.5.5 diff --git a/stable/lidarr/21.5.5/README.md b/stable/lidarr/21.5.5/README.md new file mode 100644 index 0000000..5dd4de9 --- /dev/null +++ b/stable/lidarr/21.5.5/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/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/21.5.5/app-changelog.md b/stable/lidarr/21.5.5/app-changelog.md new file mode 100644 index 0000000..a5f1197 --- /dev/null +++ b/stable/lidarr/21.5.5/app-changelog.md @@ -0,0 +1,21 @@ + + +## [lidarr-21.5.5](https://github.com/truecharts/charts/compare/lidarr-21.4.0...lidarr-21.5.5) (2024-03-25) + +### Chore + + + +- 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)) \ No newline at end of file diff --git a/stable/lidarr/21.5.5/app-readme.md b/stable/lidarr/21.5.5/app-readme.md new file mode 100644 index 0000000..ab0ee61 --- /dev/null +++ b/stable/lidarr/21.5.5/app-readme.md @@ -0,0 +1,8 @@ +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.5.5/charts/common-20.2.4.tgz b/stable/lidarr/21.5.5/charts/common-20.2.4.tgz new file mode 100644 index 0000000000000000000000000000000000000000..e02a4ec419295564ee54731f20fe2563fa9e2f00 GIT binary patch literal 101809 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 literal 0 HcmV?d00001 diff --git a/stable/lidarr/21.5.5/ix_values.yaml b/stable/lidarr/21.5.5/ix_values.yaml new file mode 100644 index 0000000..e0a46c0 --- /dev/null +++ b/stable/lidarr/21.5.5/ix_values.yaml @@ -0,0 +1,109 @@ +image: + repository: ghcr.io/onedr0p/lidarr-develop + pullPolicy: IfNotPresent + tag: 2.2.3.4098@sha256:ddb5035c57005792761e60371ab7e2ca3e0804fa5ab6952266b0d5f797ed08c2 +exportarrImage: + repository: ghcr.io/onedr0p/exportarr + pullPolicy: IfNotPresent + tag: v2.0.0@sha256:760327e885a9bb5b818b56e8a6f818c9570eeaa9484bed122028adbf80bcaeb9 +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.5.5/questions.yaml b/stable/lidarr/21.5.5/questions.yaml new file mode 100644 index 0000000..86ad1ce --- /dev/null +++ b/stable/lidarr/21.5.5/questions.yaml @@ -0,0 +1,2899 @@ +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/21.5.5/templates/NOTES.txt b/stable/lidarr/21.5.5/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/lidarr/21.5.5/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/lidarr/21.5.5/templates/common.yaml b/stable/lidarr/21.5.5/templates/common.yaml new file mode 100644 index 0000000..3c93f57 --- /dev/null +++ b/stable/lidarr/21.5.5/templates/common.yaml @@ -0,0 +1,11 @@ +{{/* 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.5.5/values.yaml b/stable/lidarr/21.5.5/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/lidarr/app_versions.json b/stable/lidarr/app_versions.json new file mode 100644 index 0000000..42847e0 --- /dev/null +++ b/stable/lidarr/app_versions.json @@ -0,0 +1,50478 @@ +{ + "21.5.5": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/lidarr/21.5.5", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/timezone", + "definitions/certificate", + "definitions/interface", + "normalize/interfaceConfiguration" + ], + "human_version": "2.2.3.4098_21.5.5", + "version": "21.5.5", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "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.3.4098", + "dependencies": [ + { + "name": "common", + "version": "20.2.4", + "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": "21.5.5" + }, + "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-21.5.5 (2024-03-25)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.4@f245f5c by renovate (#19731)

    \n
  • \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to v2.2.3.4098@ddb5035 by renovate (#19416)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to v2.2.2.4090@4978f1e by renovate (#19404)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to 2.2.1.4073@ae2b24d by renovate (#19254)

    \n
  • \n
\n

lidarr-21.5.5 (2024-03-25)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.4@f245f5c by renovate (#19731)

    \n
  • \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to v2.2.3.4098@ddb5035 by renovate (#19416)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to v2.2.2.4090@4978f1e by renovate (#19404)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to 2.2.1.4073@ae2b24d by renovate (#19254)

    \n
  • \n
\n

lidarr-21.5.4 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to v2.2.3.4098@ddb5035 by renovate (#19416)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to v2.2.2.4090@4978f1e by renovate (#19404)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to 2.2.1.4073@ae2b24d by renovate (#19254)

    \n
  • \n
\n

lidarr-21.5.4 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to v2.2.3.4098@ddb5035 by renovate (#19416)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to v2.2.2.4090@4978f1e by renovate (#19404)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to 2.2.1.4073@ae2b24d by renovate (#19254)

    \n
  • \n
\n

lidarr-21.5.4 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
" + }, + "21.5.4": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/lidarr/21.5.4", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/timezone", + "definitions/certificate", + "definitions/interface", + "normalize/interfaceConfiguration" + ], + "human_version": "2.2.3.4098_21.5.4", + "version": "21.5.4", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "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.3.4098", + "dependencies": [ + { + "name": "common", + "version": "20.2.3", + "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": "21.5.4" + }, + "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-21.5.4 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to v2.2.3.4098@ddb5035 by renovate (#19416)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to v2.2.2.4090@4978f1e by renovate (#19404)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to 2.2.1.4073@ae2b24d by renovate (#19254)

    \n
  • \n
\n

lidarr-21.5.4 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to v2.2.3.4098@ddb5035 by renovate (#19416)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to v2.2.2.4090@4978f1e by renovate (#19404)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to 2.2.1.4073@ae2b24d by renovate (#19254)

    \n
  • \n
\n

lidarr-21.5.4 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to v2.2.3.4098@ddb5035 by renovate (#19416)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to v2.2.2.4090@4978f1e by renovate (#19404)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to 2.2.1.4073@ae2b24d by renovate (#19254)

    \n
  • \n
\n

lidarr-21.5.4 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to v2.2.3.4098@ddb5035 by renovate (#19416)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to v2.2.2.4090@4978f1e by renovate (#19404)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to 2.2.1.4073@ae2b24d by renovate (#19254)

    \n
  • \n
\n

lidarr-21.5.4 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.3@06e462e by renovate (#19673)

    \n
  • \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to v2.2.3.4098@ddb5035 by renovate (#19416)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to v2.2.2.4090@4978f1e by renovate (#19404)

    \n
  • \n
" + }, + "21.5.3": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/lidarr/21.5.3", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/timezone", + "definitions/certificate", + "definitions/interface", + "normalize/interfaceConfiguration" + ], + "human_version": "2.2.3.4098_21.5.3", + "version": "21.5.3", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "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.3.4098", + "dependencies": [ + { + "name": "common", + "version": "20.2.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": "21.5.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": "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-21.5.3 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to v2.2.3.4098@ddb5035 by renovate (#19416)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to v2.2.2.4090@4978f1e by renovate (#19404)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to 2.2.1.4073@ae2b24d by renovate (#19254)

    \n
  • \n
\n

lidarr-21.5.3 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to v2.2.3.4098@ddb5035 by renovate (#19416)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to v2.2.2.4090@4978f1e by renovate (#19404)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to 2.2.1.4073@ae2b24d by renovate (#19254)

    \n
  • \n
\n

lidarr-21.5.3 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to v2.2.3.4098@ddb5035 by renovate (#19416)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to v2.2.2.4090@4978f1e by renovate (#19404)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to 2.2.1.4073@ae2b24d by renovate (#19254)

    \n
  • \n
\n

lidarr-21.5.3 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to v2.2.3.4098@ddb5035 by renovate (#19416)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to v2.2.2.4090@4978f1e by renovate (#19404)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to 2.2.1.4073@ae2b24d by renovate (#19254)

    \n
  • \n
\n

lidarr-21.5.3 (2024-03-23)

\n

Chore

\n
    \n
  • \n

    update container image common to v20.2.2@f7d0b92 by renovate (#19432)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to v2.2.3.4098@ddb5035 by renovate (#19416)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to v2.2.2.4090@4978f1e by renovate (#19404)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to 2.2.1.4073@ae2b24d by renovate (#19254)

    \n
  • \n
\n

lidarr-21.5.3 (2024-03-23)

\n

Chore

" + }, + "21.5.2": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/lidarr/21.5.2", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/timezone", + "definitions/certificate", + "definitions/interface", + "normalize/interfaceConfiguration" + ], + "human_version": "2.2.3.4098_21.5.2", + "version": "21.5.2", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "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.3.4098", + "dependencies": [ + { + "name": "common", + "version": "20.2.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": "21.5.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": "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-21.5.2 (2024-03-17)

\n

Chore

\n
    \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to v2.2.3.4098@ddb5035 by renovate (#19416)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to v2.2.2.4090@4978f1e by renovate (#19404)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to 2.2.1.4073@ae2b24d by renovate (#19254)

    \n
  • \n
\n

lidarr-21.5.2 (2024-03-17)

\n

Chore

\n
    \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to v2.2.3.4098@ddb5035 by renovate (#19416)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to v2.2.2.4090@4978f1e by renovate (#19404)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to 2.2.1.4073@ae2b24d by renovate (#19254)

    \n
  • \n
\n

lidarr-21.5.2 (2024-03-17)

\n

Chore

\n
    \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to v2.2.3.4098@ddb5035 by renovate (#19416)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to v2.2.2.4090@4978f1e by renovate (#19404)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to 2.2.1.4073@ae2b24d by renovate (#19254)

    \n
  • \n
\n

lidarr-21.5.2 (2024-03-17)

\n

Chore

\n
    \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to v2.2.3.4098@ddb5035 by renovate (#19416)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to v2.2.2.4090@4978f1e by renovate (#19404)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to 2.2.1.4073@ae2b24d by renovate (#19254)

    \n
  • \n
\n

lidarr-21.5.2 (2024-03-17)

\n

Chore

\n
    \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to v2.2.3.4098@ddb5035 by renovate (#19416)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to v2.2.2.4090@4978f1e by renovate (#19404)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to 2.2.1.4073@ae2b24d by renovate (#19254)

    \n
  • \n
\n

lidarr-21.5.1 (2024-03-17)

\n

Chore

\n
    \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to v2.2.2.4090@4978f1e by renovate (#19404)

    \n
  • \n
  • \n

    update container image common to v20.2.0@91ade87 by renovate (#19361)

    \n
  • \n
  • \n

    update container image ghcr.io/onedr0p/lidarr-develop to 2.2.1.4073@ae2b24d by renovate (#19254)

    \n
  • \n
\n

lidarr-21.5.1 (2024-03-17)

" + }, + "20.3.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/lidarr/20.3.1", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/timezone", + "definitions/certificate", + "definitions/interface", + "normalize/interfaceConfiguration" + ], + "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/SCALE-support": "true", + "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-03-25 06:34:24", + "required_features": [ + "definitions/timezone", + "definitions/certificate", + "definitions/interface", + "normalize/interfaceConfiguration" + ], + "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/SCALE-support": "true", + "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
" + }, + "20.2.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/lidarr/20.2.1", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/timezone", + "definitions/certificate", + "definitions/interface", + "normalize/interfaceConfiguration" + ], + "human_version": "2.2.0.4045_20.2.1", + "version": "20.2.1", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "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.0.3", + "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.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": "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
\n

lidarr-19.1.10 (2024-01-21)

" + }, + "20.2.0": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/lidarr/20.2.0", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/timezone", + "definitions/certificate", + "definitions/interface", + "normalize/interfaceConfiguration" + ], + "human_version": "2.2.0.4045_20.2.0", + "version": "20.2.0", + "chart_metadata": { + "annotations": { + "max_scale_version": "24.04.0", + "min_scale_version": "23.10.0", + "truecharts.org/SCALE-support": "true", + "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.2.0.4045", + "dependencies": [ + { + "name": "common", + "version": "18.0.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.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": "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
\n

lidarr-19.1.10 (2024-01-21)

" + }, + "19.3.0": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/stable/lidarr/19.3.0", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/interface", + "normalize/interfaceConfiguration", + "definitions/gpuConfiguration", + "definitions/timezone", + "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/SCALE-support": "true", + "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-03-25 06:34:24", + "required_features": [ + "definitions/interface", + "normalize/interfaceConfiguration", + "definitions/gpuConfiguration", + "definitions/timezone", + "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/SCALE-support": "true", + "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/lidarr/item.yaml b/stable/lidarr/item.yaml new file mode 100644 index 0000000..aef1c87 --- /dev/null +++ b/stable/lidarr/item.yaml @@ -0,0 +1,4 @@ +icon_url: https://truecharts.org/img/hotlink-ok/chart-icons/lidarr.png +categories: + - media +screenshots: []

h^tO`pg#3c&VS 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 As{jB1 literal 0 HcmV?d00001 diff --git a/stable/frigate/13.2.3/ix_values.yaml b/stable/frigate/13.2.3/ix_values.yaml new file mode 100644 index 0000000..f5513e2 --- /dev/null +++ b/stable/frigate/13.2.3/ix_values.yaml @@ -0,0 +1,96 @@ +image: + repository: ghcr.io/blakeblackshear/frigate + pullPolicy: IfNotPresent + tag: 0.12.1@sha256:bb7f7e76a13eccef0b12704e5851cc774a12af1f12df387d6a70a796a3e938c3 +tensorrtImage: + repository: ghcr.io/blakeblackshear/frigate + pullPolicy: IfNotPresent + tag: 0.12.1-tensorrt@sha256:db6e62d94206803011307296242ee6bfcc185bcf4eb6f68a6fdab8fa7f03a3fb +# When this is defined, the contents will be mounted +# as configmap into the container at /config/config.yml. +frigateConfig: {} +# -- https://docs.frigate.video/configuration/ +# mqtt: +# enabled: False +# cameras: +# dummy: +# enabled: False +# ffmpeg: +# inputs: +# - path: rtsp://127.0.0.1:554/rtsp +# roles: +# - detect + +workload: + main: + podSpec: + initContainers: + init-config: + enabled: "{{ not .Values.frigateConfig }}" + type: init + imageSelector: alpineImage + command: + - /bin/sh + - -c + - | + mkdir -p /config + if [ ! -f /config/config.yml ]; then + echo "Config file not found, copying dummy..." + cp /dummy-config/config.yml.dummy /config/config.yml + echo "Config file copied, you can now edit it at /config/config.yml" + fi +securityContext: + container: + readOnlyRootFilesystem: false + runAsNonRoot: false + runAsUser: 0 + runAsGroup: 0 +service: + main: + ports: + main: + port: 10500 + protocol: http + targetPort: 5000 + rtmp: + enabled: true + ports: + rtmp: + enabled: true + port: 1935 + targetPort: 1935 + rtsp: + enabled: true + ports: + rtsp: + enabled: true + port: 8554 + targetPort: 8554 + webrtc: + enabled: true + ports: + webrtc-tcp: + enabled: true + port: 8555 + targetPort: 8555 + webrtc-udp: + enabled: true + port: 8555 + protocol: udp + targetPort: 8555 +persistence: + media: + enabled: true + mountPath: /media + config: + # Only enable when not using frigateConfig + enabled: false + mountPath: /config + targetSelector: + main: + main: {} + init-config: {} +portal: + open: + enabled: true +updated: true diff --git a/stable/frigate/13.2.3/questions.yaml b/stable/frigate/13.2.3/questions.yaml new file mode 100644 index 0000000..2bbd14f --- /dev/null +++ b/stable/frigate/13.2.3/questions.yaml @@ -0,0 +1,3293 @@ +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: imageSelector + label: Select Image + schema: + type: string + default: image + enum: + - value: image + description: Base Image + - value: tensorrtImage + description: Image with TensorRT libraries for nvidia cards + - 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: 10500 + required: true + - variable: rtmp + label: RTMP Service + description: The service on which nodes connect to. + 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: rtmp + label: RTMP 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: 1935 + required: true + - variable: rtsp + label: RTSP Service + description: The service on which nodes connect to. + 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: rtsp + label: RTSP 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: 8554 + required: true + - variable: webrtc + label: WebRTC Service + description: The service on which nodes connect to. + 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: webrtc-tcp + label: WebRTC (TCP) 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: 8555 + required: true + - variable: webrtc-udp + label: WebRTC (UDP) 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: 8555 + 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: media + label: App Media + description: Stores the Application Media and DB + 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: config + label: App Config + 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: 0 + - variable: runAsGroup + label: runAsGroup + description: The groupID this App of the user running the application + schema: + type: int + default: 0 + # 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: 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/frigate/13.2.3/templates/NOTES.txt b/stable/frigate/13.2.3/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/frigate/13.2.3/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/frigate/13.2.3/templates/_configmap.tpl b/stable/frigate/13.2.3/templates/_configmap.tpl new file mode 100644 index 0000000..ebf2580 --- /dev/null +++ b/stable/frigate/13.2.3/templates/_configmap.tpl @@ -0,0 +1,42 @@ +{{/* Define the configmap */}} +{{- define "frigate.configmap" -}} +enabled: true +data: + {{- if .Values.frigateConfig }} + config.yml: | + {{- .Values.frigateConfig | toYaml | nindent 4 }} + {{- else }} + config.yml.dummy: | + mqtt: + enabled: false + cameras: + dummy: + enabled: false + ffmpeg: + inputs: + - path: rtsp://127.0.0.1:554/rtsp + roles: + - detect + {{- end }} +{{- end -}} + +{{- define "frigate.configVolume" -}} +enabled: true +type: configmap +objectName: frigate-config +targetSelector: + main: + main: {} + init-config: {} +{{- if .Values.frigateConfig }} +mountPath: /config +items: + - key: config.yml + path: config.yml +{{- else }} +mountPath: /dummy-config +items: + - key: config.yml.dummy + path: config.yml.dummy +{{- end -}} +{{- end -}} diff --git a/stable/frigate/13.2.3/templates/common.yaml b/stable/frigate/13.2.3/templates/common.yaml new file mode 100644 index 0000000..6ec5e06 --- /dev/null +++ b/stable/frigate/13.2.3/templates/common.yaml @@ -0,0 +1,20 @@ +{{/* Make sure all variables are set properly */}} +{{- include "tc.v1.common.loader.init" . }} + +{{/* Render configmap for frigate */}} +{{- $config := include "frigate.configmap" . | fromYaml -}} +{{- if $config -}} + {{- $_ := set .Values.configmap "frigate-config" $config -}} +{{- end -}} + +{{- if not .Values.frigateConfig -}} + {{- $_ := set .Values.persistence.config "enabled" true -}} +{{- end -}} + +{{- $vol := include "frigate.configVolume" . | fromYaml -}} +{{- if $vol -}} + {{- $_ := set .Values.persistence "frigate-config" $vol -}} +{{- end -}} + +{{/* Render the templates */}} +{{ include "tc.v1.common.loader.apply" . }} diff --git a/stable/frigate/13.2.3/values.yaml b/stable/frigate/13.2.3/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/frigate/13.3.0/.helmignore b/stable/frigate/13.3.0/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/frigate/13.3.0/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/frigate/13.3.0/CHANGELOG.md b/stable/frigate/13.3.0/CHANGELOG.md new file mode 100644 index 0000000..7ea5c85 --- /dev/null +++ b/stable/frigate/13.3.0/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + +## [frigate-13.3.0](https://github.com/truecharts/charts/compare/frigate-13.2.3...frigate-13.3.0) (2024-03-06) + +### Chore + + + +- update container image common to v18.2.0[@9e8b7d4](https://github.com/9e8b7d4) by renovate ([#18943](https://github.com/truecharts/charts/issues/18943)) + + +## [frigate-13.2.3](https://github.com/truecharts/charts/compare/frigate-13.2.2...frigate-13.2.3) (2024-03-05) + +### Chore + + + +- bump everything to force helm release again + + +## [frigate-13.2.2](https://github.com/truecharts/charts/compare/frigate-13.2.0...frigate-13.2.2) (2024-03-05) + +### Chore + + + +- force rereleases + +- update container image common to v18.1.6[@904d84b](https://github.com/904d84b) by renovate ([#18835](https://github.com/truecharts/charts/issues/18835)) + + + + + + + + + + +## [frigate-12.1.11](https://github.com/truecharts/charts/compare/frigate-12.1.10...frigate-12.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)) + + +## [frigate-12.1.10](https://github.com/truecharts/charts/compare/frigate-12.1.9...frigate-12.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)) + + +## [frigate-12.1.9](https://github.com/truecharts/charts/compare/frigate-12.1.8...frigate-12.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)) + + +## [frigate-12.1.8](https://github.com/truecharts/charts/compare/frigate-12.1.7...frigate-12.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)) + + +## [frigate-12.1.7](https://github.com/truecharts/charts/compare/frigate-12.1.6...frigate-12.1.7) (2024-01-21) + +### Chore + + + +- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) + + + + +## [frigate-12.1.6](https://github.com/truecharts/charts/compare/frigate-12.1.5...frigate-12.1.6) (2024-01-09) + +### Chore + + diff --git a/stable/frigate/13.3.0/Chart.yaml b/stable/frigate/13.3.0/Chart.yaml new file mode 100644 index 0000000..4ab7f8b --- /dev/null +++ b/stable/frigate/13.3.0/Chart.yaml @@ -0,0 +1,39 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: nvr + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.11" + truecharts.org/train: stable +apiVersion: v2 +appVersion: 0.12.1 +dependencies: + - name: common + version: 18.2.0 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: NVR With Realtime Object Detection for IP Cameras +home: https://truecharts.org/charts/stable/frigate +icon: https://truecharts.org/img/hotlink-ok/chart-icons/frigate.png +keywords: + - encode + - nvr + - media + - frigate +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: frigate +sources: + - https://github.com/blakeblackshear/frigate + - https://github.com/truecharts/charts/tree/master/charts/stable/frigate + - https://ghcr.io/blakeblackshear/frigate +type: application +version: 13.3.0 diff --git a/stable/frigate/13.3.0/README.md b/stable/frigate/13.3.0/README.md new file mode 100644 index 0000000..bb1903d --- /dev/null +++ b/stable/frigate/13.3.0/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/frigate) + +**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/frigate/13.3.0/app-readme.md b/stable/frigate/13.3.0/app-readme.md new file mode 100644 index 0000000..2f2f6dd --- /dev/null +++ b/stable/frigate/13.3.0/app-readme.md @@ -0,0 +1,8 @@ +NVR With Realtime Object Detection for IP Cameras + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/frigate](https://truecharts.org/charts/stable/frigate) + +--- + +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/frigate/13.3.0/charts/common-18.2.0.tgz b/stable/frigate/13.3.0/charts/common-18.2.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..a5b3906a5658ae044397aefc5e5915bb729fb6e6 GIT binary patch literal 99595 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

h^tO`pg#3c&VS zH!Op-eob*kB7PX0%Rm1qc_zg%M{xnw(GAkl=;F^m{PhKeTI}jCpO??iHLdmPHD9^z z-tW_rLQD6+=X3Grrv{&z+Pd0kS}m{s8WPm*?r+Jvzu7`}fBx0^$S(iNgs@Jh{B%k| z|C_wpAU3mTgQlc~9yO9%;dPUJ{kgJ1ul)vwhLoy${Y{_r30%u*8 z;!xR;PfSU>7i5A{-5T`OB-u}GwkCY;LmPrvkLwwtPZX!f!OrT^0+lh{0qD!$`-Pxs zMsM2-xQln?Gb^R^Ux^ya_O=cKWr_uYq4+a^xsbe;I8^itxqbR59 zFC=ncux$#sc%&zlfxehg{`U;gl+V?VXYbzff&KOF`l@fj%Za{>Y7}Q&J0*aP$&>z5 zC{UaUOW11Md4wbV8Zbm+)t->@QFwxJDr0S=6b7jQg2d5$2Mnia<~D)TeATnDyz1{{ zHlfQDJfM_;1X8|IkO83{Z~+6Se5ddge?T9!`o_PCP4fh4sCHP!<3ym4%%*fMq>^2r z=0$H%7%ObWwwk~>-zX4J#HLZoo4b3z+22(sRp(3|EZh*nYw(!3wYMbTTS1WYI3)uEM_jA|-bzpVd_PXf*>Nsc5~YRvFxq_iA$J##(hc!e?D-=zoZ2I6!R) zzEkSx|KUN=|NFS3{~IZF^grJK?FqhYTTb(H*p?kb-87o5RkSSm$$S51aRgbf1wXL* zS~p8b5M`L9C=P0zb*maKP5upFn&?~WWv++_VP^Mb3*v7?OCXmLT*uKI{3N0M48+oL zg>Z>ga#`KoMihDFC(hpZz^o{y#kK=>JAa{XJ^70T!V9vT+5y&!N`}^{Q@b z8gJsTe%da3Ye~~pqvdJ21eDQmYx+Cd-IZdgq5p=KxHu1}xBnFKe;*v}b@YD|rH=kP z8=yT8FaVVE0jC$&926rDoR&5r)xItJD0chBnum%j*~CWFzcC;w1Cdy{%s|A(;?lXy zJS6U%`<(@7J*AHR6S|<$$0#-Q|KQ-zk^lEkPfiay`oD=%OaIjdC?)**-^R~u7UZOU zkpE?{h^=&z+?my!fFM>Ii*8yi1$t#(kaiz^QPm=hMN*R%OD521d(qxx~8ua}HKjWzGWM9$-RqA`+Lr)~_yYM$;eL^KSOQAr@p2y_?Dv#j++1 z^u=}VH=j~kLJqR&+Va||K6}xqhX32)fzBhih%ZR3|KFag{~es}cl>`NrH=oXY=HKf zpbEZKPSQ(ys#ghTt#v^Qm$j>co`JPf3Vi^URu4TuwW4S*Ri`I@&ZQOoUr-IKwf`Nv z`d^p-c~hkw{oe@b|18P=QY3%nIU6G|7{a-8qK)w9$(*MJwgD(H;MoLTizf=H# zSycdl@{ZQR3N{u1pe(@d;@n_$AplCER%_nS#Q^yHi=zL7F^VSmAtn^9zKF)nGQ~m^QV45Nti{Mdm2Y{zBiotM-qma|l1O|`r0kJ{vPcq6EnJQ_Gm;8V9 zpKKPt%mK+jC}4ym#Cl&1*i+K`YA}S4y{`u8g#VjR{LuUA|LOe+yoVH%DFc^pE?94n zQ1UAZ(%t}v2)>lnDfzWGn6ZF_=;fzC8P)lJdwG6wb$79zKB~|E{{Hd7fph-%kB__e z9~&vJrwqr4F>ptwRCwqIC}s%k5B7V#8%W^I%evH69ogxv5je#3^ zB6a{y|H1$f$wOqIx4+0JYZMQsDWOb(Lm~Kq(8pIL;QHq(uIzUxngH>!cNT`26A&1I z?->H$QW&SNz>j1q0=?;6dXWbIMCc>HF-Ry0rvY!c10Vwti66W-seu2AQ-B#KE+|N& zIbdRHR2l(jBB(-yhb5rMXoLd{BS29?7)}YD?|=ZNFd`3tPz899VGkolWP-qi;u%c+ zsUHEDkPwfslGaipMqI#FOhKTgV5bCQZ+CBhcW*zdq0XzWbhsNtBK+g)yEhtKulJ1zGC3l2 zBKw0wGED)DI5U?rfvhS`}3)~Bct?*@26f8A;^%7%owDvK!hG(^nayv zibVKhHX!t&*SjJq4p6Vhw`Cb6dm)A#l3>dF+5xJofB)-$s~Z3Q*ZHrWWmzkx0=D#i@*fIYeLrLj>Rq;s_2S)SHTUrV6x!o}fl7g{eG( z0@t_M^5`+7=tC;f;ZXcAPQi;{8yxKIpMrOgV)*7YI43kAR8IQYa0i@45xC`58Ms9Z z(HRN{y?_7ff0xYBzyI}r_yjp^7_<;|4z1>xoUayh`-6J|-a)C7m0%Jtc za1I_g>1SY0ream()TBhr(~hK(oZQMp2O$y^70*zQA85wq)DSbtkdTm0CFPAtyz3k_ z70KLM_5mk_8B-M0TQr9;@NuXe88&o>i?kD*iUS?t2`6ejySG8FcQG2FKpYoN-p2?S zr!?EYBQmAw7{EBjGejArS*oNFrYr@?bQs|vn)kAO2(s}iS^xn{P{26};2<&z;qGv` zfBDwzWxMuijDs;h5+EQG#AK)D@$jw_m3vYE?D4uOUtZm-O=@r1q$fH%yWUBi3VxuVjj%xnKhb2IK1OsJDf2D#ZDl zK|1d>13{5sFCpimdI<)--j8}Z0}`_Y2U9X-(OgRr)?oP26#Zlq$fBZO|Eaj zcNe!8uYUw@F7M9Yo?X7X17~mFf*;OqZ_lpoFE8%E+0`3xetq@k^8WJr>TaiZ@wc1X zi@Q5;eG4w%-MqcLc(Vg8ug>3o|K{@QTkztC%lq%HzrP1>FW+6>pYb-^Cba8sdhaf7 z&%Zmnx<7k;`S$Yu#~tv^<^2_h_|5e#I0H9lxA&Ll-@iS(1vlT{-dx{Z?0~E5tKG}1 zZ*DKIzP)&Nadp4LvFhDl-oL#V^m862ouP6r!+rOx)hq;p@7i37KM9YWSY{4k%NtKDB04EqJ>eVPm+{HoX6AAozJB$GLxyP{|yK7D)h7Q9zP{$Q{t_+&f>5lj)))L-ak{D+M5 z%B%)VECx(57mLJ#_@H@UJ@Ku^XE1NiCvAdY%p`24RG55tn$Q(S5kR4`4N(@EUr;9A z@_|B`v9J`L4`B|?!g&BJ2{oJ4Ttc-`k|_hoRQR_G`4lR1z=2p5g!%fu0x#fp4lFj| zNped@n#yN866TpCIB+~k2&bE|g$+eqLY1%mV-T#wM%ZuSQ zz%fHKRjl$u%2)7;#C+`rz22d{<4nO~(CZxyz!eckOR5w$%TlaFnF`>1@F^I5jiT(o zw-;w`-dzkP;X3-Lz5jRPf9@abb^gDbDcLQ^TbZY;*Zb3-z!jWuW_K5i(FFB+yFfj2 zI12(Yjnh{>0CvHRe8}(${C(@2X%t<-3HrPE;hLWXW`5t@vH{4tyWsZq+4%y%cry(` z0bU#>4d{l1Yyl`YB-9YjWfl=tCHu?xd4wO{!NdlTea=S|P?Wm3@^4v<07eL0d=O@} z2wcV~q9YifSK#mX!|v9tRBmKTk<0e)z21KU4o!0R-TwrCw`&P=wgms5BFm1bCx|xs z5FivXaB?V;z`-CD%BK+X(=jDaS-O=^jPiA*D_!ZzmtFq900030|F=9QZ~$ry07MD= As{jB1 literal 0 HcmV?d00001 diff --git a/stable/firefox/11.2.3/ix_values.yaml b/stable/firefox/11.2.3/ix_values.yaml new file mode 100644 index 0000000..9749061 --- /dev/null +++ b/stable/firefox/11.2.3/ix_values.yaml @@ -0,0 +1,41 @@ +image: + repository: ghcr.io/linuxserver/firefox + pullPolicy: IfNotPresent + tag: 120.0.1@sha256:ac3c8817dcbf6855b05e55db4799e36a8b935bf57fcb27f9fa3ff71263ddd3de +securityContext: + container: + readOnlyRootFilesystem: false + runAsNonRoot: false + runAsUser: 0 + runAsGroup: 0 +service: + main: + ports: + main: + protocol: http + port: 10131 +workload: + main: + podSpec: + containers: + main: + probes: + liveness: + type: http + readiness: + type: http + startup: + type: http + env: + FM_HOME: "/config" + CUSTOM_PORT: "{{ .Values.service.main.ports.main.port }}" + TITLE: "TrueChartVNC Client" +persistence: + config: + enabled: true + mountPath: /config + varrun: + enabled: false +portal: + open: + enabled: true diff --git a/stable/firefox/11.2.3/questions.yaml b/stable/firefox/11.2.3/questions.yaml new file mode 100644 index 0000000..9e48fe5 --- /dev/null +++ b/stable/firefox/11.2.3/questions.yaml @@ -0,0 +1,2851 @@ +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 + label: Image Environment + schema: + additional_attrs: true + type: dict + attrs: + - variable: TITLE + label: Title + description: The page title displayed on the web browser + schema: + type: string + default: "TrueChartVNC Client" + - 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 Minecraft Server runs on + 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: 10131 + 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 Config. + 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: 0 + - variable: runAsGroup + label: runAsGroup + description: The groupID this App of the user running the application + schema: + type: int + default: 0 + # 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: 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/firefox/11.2.3/templates/NOTES.txt b/stable/firefox/11.2.3/templates/NOTES.txt new file mode 100644 index 0000000..efcb74c --- /dev/null +++ b/stable/firefox/11.2.3/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/stable/firefox/11.2.3/templates/common.yaml b/stable/firefox/11.2.3/templates/common.yaml new file mode 100644 index 0000000..b51394e --- /dev/null +++ b/stable/firefox/11.2.3/templates/common.yaml @@ -0,0 +1 @@ +{{ include "tc.v1.common.loader.all" . }} diff --git a/stable/firefox/11.2.3/values.yaml b/stable/firefox/11.2.3/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/stable/firefox/11.3.0/.helmignore b/stable/firefox/11.3.0/.helmignore new file mode 100644 index 0000000..77ca556 --- /dev/null +++ b/stable/firefox/11.3.0/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/stable/firefox/11.3.0/CHANGELOG.md b/stable/firefox/11.3.0/CHANGELOG.md new file mode 100644 index 0000000..e5a9650 --- /dev/null +++ b/stable/firefox/11.3.0/CHANGELOG.md @@ -0,0 +1,99 @@ +--- +title: Changelog +--- + + +*for the complete changelog, please refer to the website* + +**Important:** + + +## [firefox-11.3.0](https://github.com/truecharts/charts/compare/firefox-11.2.3...firefox-11.3.0) (2024-03-06) + +### Chore + + + +- update container image common to v18.2.0[@9e8b7d4](https://github.com/9e8b7d4) by renovate ([#18943](https://github.com/truecharts/charts/issues/18943)) + + +## [firefox-11.2.3](https://github.com/truecharts/charts/compare/firefox-11.2.2...firefox-11.2.3) (2024-03-05) + +### Chore + + + +- bump everything to force helm release again + + +## [firefox-11.2.2](https://github.com/truecharts/charts/compare/firefox-11.2.0...firefox-11.2.2) (2024-03-05) + +### Chore + + + +- force rereleases + +- update container image common to v18.1.6[@904d84b](https://github.com/904d84b) by renovate ([#18835](https://github.com/truecharts/charts/issues/18835)) + + + + + + + + + + +## [firefox-10.0.9](https://github.com/truecharts/charts/compare/firefox-10.0.8...firefox-10.0.9) (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)) + + +## [firefox-10.0.8](https://github.com/truecharts/charts/compare/firefox-10.0.7...firefox-10.0.8) (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)) + + +## [firefox-10.0.7](https://github.com/truecharts/charts/compare/firefox-10.0.6...firefox-10.0.7) (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)) + + +## [firefox-10.0.6](https://github.com/truecharts/charts/compare/firefox-10.0.5...firefox-10.0.6) (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)) + + +## [firefox-10.0.5](https://github.com/truecharts/charts/compare/firefox-10.0.4...firefox-10.0.5) (2024-01-21) + +### Chore + + + +- update metadata in chart.yaml ([#17457](https://github.com/truecharts/charts/issues/17457)) + + +## [firefox-10.0.4](https://github.com/truecharts/charts/compare/firefox-10.0.3...firefox-10.0.4) (2024-01-21) + +### Chore + + + +- update container image ghcr.io/linuxserver/firefox to 120.0.1[@ac3c881](https://github.com/ac3c881) by renovate ([#17351](https://github.com/truecharts/charts/issues/17351)) diff --git a/stable/firefox/11.3.0/Chart.yaml b/stable/firefox/11.3.0/Chart.yaml new file mode 100644 index 0000000..d96e8bd --- /dev/null +++ b/stable/firefox/11.3.0/Chart.yaml @@ -0,0 +1,37 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: browser + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.11" + truecharts.org/train: stable +apiVersion: v2 +appVersion: 120.0.1 +dependencies: + - name: common + version: 18.2.0 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation. +home: https://truecharts.org/charts/stable/firefox +icon: https://truecharts.org/img/hotlink-ok/chart-icons/firefox.png +keywords: + - firefox + - browser +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: firefox +sources: + - https://github.com/linuxserver/docker-firefox + - https://github.com/truecharts/charts/tree/master/charts/stable/firefox + - https://ghcr.io/linuxserver/firefox +type: application +version: 11.3.0 diff --git a/stable/firefox/11.3.0/README.md b/stable/firefox/11.3.0/README.md new file mode 100644 index 0000000..af8822b --- /dev/null +++ b/stable/firefox/11.3.0/README.md @@ -0,0 +1,28 @@ +--- +title: README +--- + +## General Info + +TrueCharts can be installed as both _normal_ Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/stable/firefox) + +**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/firefox/11.3.0/app-readme.md b/stable/firefox/11.3.0/app-readme.md new file mode 100644 index 0000000..06d4ce1 --- /dev/null +++ b/stable/firefox/11.3.0/app-readme.md @@ -0,0 +1,8 @@ +a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation. + +This App is supplied by TrueCharts, for more information visit the manual: [https://truecharts.org/charts/stable/firefox](https://truecharts.org/charts/stable/firefox) + +--- + +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/firefox/11.3.0/charts/common-18.2.0.tgz b/stable/firefox/11.3.0/charts/common-18.2.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..a5b3906a5658ae044397aefc5e5915bb729fb6e6 GIT binary patch literal 99595 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

!?ZGJZgYw9)q4I; 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 wW?59bgEPXGV_ literal 0 HcmV?d00001 diff --git a/dev/testapp/0.0.1/ix_values.yaml b/dev/testapp/0.0.1/ix_values.yaml new file mode 100644 index 0000000..0aacb23 --- /dev/null +++ b/dev/testapp/0.0.1/ix_values.yaml @@ -0,0 +1,38 @@ +image: + repository: tccr.io/truecharts/jackett + pullPolicy: IfNotPresent + tag: 0.20.2297@sha256:4de1541011cb56935ba5a8e28a58f6cbcf62a903393dc94581eda0b6e2aa117c + +securityContext: + container: + readOnlyRootFilesystem: false + +service: + main: + ports: + main: + protocol: http + targetPort: 9117 + port: 9117 + +workload: + main: + podSpec: + containers: + main: + probes: + liveness: + path: "/UI/Login" + readiness: + path: "/UI/Login" + startup: + path: "/UI/Login" + +persistence: + config: + enabled: true + mountPath: "/config" + +portal: + open: + enabled: true diff --git a/dev/testapp/0.0.1/questions.yaml b/dev/testapp/0.0.1/questions.yaml new file mode 100644 index 0000000..2efe88d --- /dev/null +++ b/dev/testapp/0.0.1/questions.yaml @@ -0,0 +1,1855 @@ +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: 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: Workload + group: "Workload Settings" + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: type + label: Type (Advanced) + schema: + type: string + default: Deployment + enum: + - value: Deployment + description: Deployment + - value: Daemonset + description: Daemonset + - variable: replicas + label: Replicas (Advanced) + description: Set the number of Replicas + schema: + type: int + show_if: [["type", "!=", "Daemonset"]] + default: 1 + - variable: podSpec + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: containers + label: Containers + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: Main Container + schema: + additional_attrs: true + type: dict + attrs: + - variable: envList + label: Extra Environment Variables + description: "Please be aware that some variables are set in the background, adding duplicates here might cause issues or prevent the app from starting..." + group: "General Settings" + 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: 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) + - 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: 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: 9117 + required: true + - variable: serviceexpert + group: Networking and Services + label: Show Expert Config + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: hostNetwork + group: Networking and Services + label: Host-Networking (Complicated) + schema: + type: boolean + default: false + - variable: externalInterfaces + description: Add External Interfaces + label: Add external Interfaces + group: Networking + schema: + type: list + items: + - variable: interfaceConfiguration + description: Interface Configuration + label: Interface Configuration + schema: + 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: + 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 + show_subquestions_if: static + subquestions: + - variable: staticIPConfigurations + label: Static IP Addresses + schema: + type: list + items: + - variable: staticIP + label: Static IP + schema: + type: ipaddr + cidr: true + - variable: staticRoutes + label: Static Routes + schema: + type: list + 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 + - 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: setPermissions + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "hostPath"]] + 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: 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: setPermissions + label: Automatic Permissions + description: Automatically set permissions on install + schema: + show_if: [["type", "=", "hostPath"]] + 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: 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: [] + 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: clusterIssuer + label: clusterIssuer + description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates. Cannot be used combined with tls option below' + schema: + type: string + default: "" + - variable: tls + label: TLS-Settings + schema: + type: list + show_if: [["clusterIssuer", "=", ""]] + 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: clusterIssuer + label: Use Cert-Manager clusterIssuer + description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates.' + schema: + type: string + default: "" + - variable: scaleCert + label: Use TrueNAS SCALE Certificate (Deprecated) + schema: + show_if: [["clusterIssuer", "=", ""]] + type: int + $ref: + - "definitions/certificate" + - variable: secretName + label: Use Custom Secret (Advanced) + schema: + show_if: [["clusterIssuer", "=", ""]] + type: string + default: "" + - variable: entrypoint + label: (Advanced) Traefik Entrypoint + description: Entrypoint used by Traefik when using Traefik as Ingress Provider + schema: + type: string + default: websecure + required: true + - variable: ingressClassName + label: (Advanced/Optional) IngressClass Name + schema: + type: string + default: "" + - variable: middlewares + label: Traefik Middlewares + description: Add previously created Traefik Middlewares to this Ingress + schema: + type: list + default: [] + items: + - variable: name + label: Name + schema: + type: string + default: "" + required: true + - 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: service + 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: clusterIssuer + label: clusterIssuer + description: 'add the name of your cert-manager clusterIssuer here for automatic tls certificates. Cannot be used combined with tls option below' + schema: + type: string + default: "" + - variable: tls + label: TLS-Settings + schema: + type: list + default: [] + show_if: [["clusterIssuer", "=", ""]] + 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: clusterIssuer + label: Use Cert-Manager clusterIssuer + description: 'add the name of your Cert-Manager clusterIssuer here for automatic tls certificates.' + schema: + type: string + default: "" + - variable: scaleCert + label: Use TrueNAS SCALE Certificate (Deprecated) + schema: + show_if: [["clusterIssuer", "=", ""]] + type: int + $ref: + - "definitions/certificate" + - variable: secretName + label: Use Custom Secret (Advanced) + schema: + type: string + show_if: [["clusterIssuer", "=", ""]] + default: "" + - variable: entrypoint + label: Traefik Entrypoint + description: Entrypoint used by Traefik when using Traefik as Ingress Provider + schema: + type: string + default: websecure + required: true + - variable: middlewares + label: Traefik Middlewares + description: Add previously created Traefik Middlewares to this Ingress + schema: + type: list + default: [] + items: + - variable: name + label: Name + schema: + type: string + default: "" + required: 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: "002" + - 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: 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/docs/manual/SCALE%20Apps/indepth/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/docs/manual/SCALE%20Apps/indepth/validation" + schema: + type: string + default: 8Gi + valid_chars: '^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$' + - 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/docs/manual/SCALE%20Apps/indepth/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/docs/manual/SCALE%20Apps/indepth/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: hostPath + 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" + # Specify GPU configuration + - variable: scaleGPU + label: GPU Configuration + group: Resources and Devices + schema: + type: dict + $ref: + - "definitions/gpuConfiguration" + attrs: [] +# - 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: cnpg + group: Postgresql + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "Main Postgresql Database" + schema: + additional_attrs: true + type: dict + attrs: + - variable: instances + label: Instances + schema: + type: int + default: 2 + - variable: storage + label: "Storage" + schema: + additional_attrs: true + type: dict + attrs: + - variable: size + label: Size + schema: + type: string + default: "256Gi" + - variable: walsize + label: Walsize + schema: + type: string + default: "256Gi" + - variable: pooler + label: "Pooler" + schema: + additional_attrs: true + type: dict + attrs: + - variable: instances + label: Instances + schema: + type: int + default: 2 + - variable: Monitoring + label: "Metrics" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enablePodMonitor + label: "enablePodMonitor" + schema: + type: boolean + default: true + - variable: addons + group: Addons + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - 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: + 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 + default: "" + required: true + - variable: tailscale + label: Tailscale Settings + schema: + 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 + - 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: 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: 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/dev/testapp/0.0.1/templates/common.yaml b/dev/testapp/0.0.1/templates/common.yaml new file mode 100644 index 0000000..0386888 --- /dev/null +++ b/dev/testapp/0.0.1/templates/common.yaml @@ -0,0 +1 @@ +{{- include "tc.v1.common.loader.all" . -}} diff --git a/dev/testapp/0.0.1/values.yaml b/dev/testapp/0.0.1/values.yaml new file mode 100644 index 0000000..e69de29 diff --git a/dev/testapp/app_versions.json b/dev/testapp/app_versions.json new file mode 100644 index 0000000..2c1be2c --- /dev/null +++ b/dev/testapp/app_versions.json @@ -0,0 +1,3185 @@ +{ + "0.0.1": { + "healthy": true, + "supported": true, + "healthy_error": null, + "location": "/home/runner/work/catalog/catalog/dev/testapp/0.0.1", + "last_update": "2024-03-25 06:34:24", + "required_features": [ + "definitions/gpuConfiguration", + "definitions/certificate", + "definitions/interface", + "normalize/interfaceConfiguration" + ], + "human_version": "0.20.2297_0.0.1", + "version": "0.0.1", + "chart_metadata": { + "apiVersion": "v2", + "appVersion": "0.20.2297", + "dependencies": [ + { + "name": "common", + "repository": "https://library-charts.truecharts.org", + "version": "12.2.0" + } + ], + "deprecated": false, + "description": "testing app for truecharts", + "home": "https://truecharts.org/charts/stable/jackett", + "icon": "https://truecharts.org/img/hotlink-ok/chart-icons/jackett.png", + "keywords": [ + "jackett", + "torrent", + "usenet" + ], + "kubeVersion": ">=1.16.0-0", + "maintainers": [ + { + "email": "info@truecharts.org", + "name": "TrueCharts", + "url": "https://truecharts.org" + } + ], + "name": "testapp", + "sources": [ + "https://github.com/truecharts/charts/tree/master/charts/stable/jackett", + "https://ghcr.io/onedr0p/jackett", + "https://github.com/Jackett/Jackett" + ], + "type": "application", + "version": "0.0.1", + "annotations": { + "truecharts.org/catagories": "- media\n- test\n", + "truecharts.org/SCALE-support": "true", + "truecharts.org/grade": "U" + } + }, + "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": "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": "Workload", + "group": "Workload Settings", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "main", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "type", + "label": "Type (Advanced)", + "schema": { + "type": "string", + "default": "Deployment", + "enum": [ + { + "value": "Deployment", + "description": "Deployment" + }, + { + "value": "Daemonset", + "description": "Daemonset" + } + ] + } + }, + { + "variable": "replicas", + "label": "Replicas (Advanced)", + "description": "Set the number of Replicas", + "schema": { + "type": "int", + "show_if": [ + [ + "type", + "!=", + "Daemonset" + ] + ], + "default": 1 + } + }, + { + "variable": "podSpec", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "containers", + "label": "Containers", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "main", + "label": "Main Container", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "envList", + "label": "Extra Environment Variables", + "description": "Please be aware that some variables are set in the background, adding duplicates here might cause issues or prevent the app from starting...", + "group": "General Settings", + "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": "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)" + }, + { + "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": "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": 9117, + "required": true + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "serviceexpert", + "group": "Networking and Services", + "label": "Show Expert Config", + "schema": { + "type": "boolean", + "default": false, + "show_subquestions_if": true, + "subquestions": [ + { + "variable": "hostNetwork", + "group": "Networking and Services", + "label": "Host-Networking (Complicated)", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "variable": "externalInterfaces", + "description": "Add External Interfaces", + "label": "Add external Interfaces", + "group": "Networking", + "schema": { + "type": "list", + "items": [ + { + "variable": "interfaceConfiguration", + "description": "Interface Configuration", + "label": "Interface Configuration", + "schema": { + "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": { + "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" + } + ], + "show_subquestions_if": "static", + "subquestions": [ + { + "variable": "staticIPConfigurations", + "label": "Static IP Addresses", + "schema": { + "type": "list", + "items": [ + { + "variable": "staticIP", + "label": "Static IP", + "schema": { + "type": "ipaddr", + "cidr": true + } + } + ] + } + }, + { + "variable": "staticRoutes", + "label": "Static Routes", + "schema": { + "type": "list", + "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" + } + ] + } + }, + { + "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": "setPermissions", + "label": "Automatic Permissions", + "description": "Automatically set permissions on install", + "schema": { + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "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": "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": "setPermissions", + "label": "Automatic Permissions", + "description": "Automatically set permissions on install", + "schema": { + "show_if": [ + [ + "type", + "=", + "hostPath" + ] + ], + "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": "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": [], + "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": "clusterIssuer", + "label": "clusterIssuer", + "description": "add the name of your cert-manager clusterIssuer here for automatic tls certificates. Cannot be used combined with tls option below", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "tls", + "label": "TLS-Settings", + "schema": { + "type": "list", + "show_if": [ + [ + "clusterIssuer", + "=", + "" + ] + ], + "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": "clusterIssuer", + "label": "Use Cert-Manager clusterIssuer", + "description": "add the name of your cert-manager clusterIssuer here for automatic tls certificates.", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "scaleCert", + "label": "Use TrueNAS SCALE Certificate (Deprecated)", + "schema": { + "show_if": [ + [ + "clusterIssuer", + "=", + "" + ] + ], + "type": "int", + "$ref": [ + "definitions/certificate" + ], + "enum": [ + { + "value": null, + "description": "No Certificate" + } + ], + "default": null, + "null": true + } + }, + { + "variable": "secretName", + "label": "Use Custom Secret (Advanced)", + "schema": { + "show_if": [ + [ + "clusterIssuer", + "=", + "" + ] + ], + "type": "string", + "default": "" + } + } + ] + } + } + ] + } + }, + { + "variable": "entrypoint", + "label": "(Advanced) Traefik Entrypoint", + "description": "Entrypoint used by Traefik when using Traefik as Ingress Provider", + "schema": { + "type": "string", + "default": "websecure", + "required": true + } + }, + { + "variable": "ingressClassName", + "label": "(Advanced/Optional) IngressClass Name", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "middlewares", + "label": "Traefik Middlewares", + "description": "Add previously created Traefik Middlewares to this Ingress", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "default": "", + "required": true + } + } + ] + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "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": "service", + "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": "clusterIssuer", + "label": "clusterIssuer", + "description": "add the name of your cert-manager clusterIssuer here for automatic tls certificates. Cannot be used combined with tls option below", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "tls", + "label": "TLS-Settings", + "schema": { + "type": "list", + "default": [], + "show_if": [ + [ + "clusterIssuer", + "=", + "" + ] + ], + "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": "clusterIssuer", + "label": "Use Cert-Manager clusterIssuer", + "description": "add the name of your Cert-Manager clusterIssuer here for automatic tls certificates.", + "schema": { + "type": "string", + "default": "" + } + }, + { + "variable": "scaleCert", + "label": "Use TrueNAS SCALE Certificate (Deprecated)", + "schema": { + "show_if": [ + [ + "clusterIssuer", + "=", + "" + ] + ], + "type": "int", + "$ref": [ + "definitions/certificate" + ], + "enum": [ + { + "value": null, + "description": "No Certificate" + } + ], + "default": null, + "null": true + } + }, + { + "variable": "secretName", + "label": "Use Custom Secret (Advanced)", + "schema": { + "type": "string", + "show_if": [ + [ + "clusterIssuer", + "=", + "" + ] + ], + "default": "" + } + } + ] + } + } + ] + } + }, + { + "variable": "entrypoint", + "label": "Traefik Entrypoint", + "description": "Entrypoint used by Traefik when using Traefik as Ingress Provider", + "schema": { + "type": "string", + "default": "websecure", + "required": true + } + }, + { + "variable": "middlewares", + "label": "Traefik Middlewares", + "description": "Add previously created Traefik Middlewares to this Ingress", + "schema": { + "type": "list", + "default": [], + "items": [ + { + "variable": "name", + "label": "Name", + "schema": { + "type": "string", + "default": "", + "required": 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": "002" + } + }, + { + "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": "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/docs/manual/SCALE%20Apps/indepth/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/docs/manual/SCALE%20Apps/indepth/validation", + "schema": { + "type": "string", + "default": "8Gi", + "valid_chars": "^(?!^0(e[0-9]|[EPTGMK]i?|)$)([0-9]+)(|[EPTGMK]i?|e[0-9]+)$" + } + } + ] + } + }, + { + "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/docs/manual/SCALE%20Apps/indepth/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/docs/manual/SCALE%20Apps/indepth/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": "hostPath", + "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": "dict", + "$ref": [ + "definitions/gpuConfiguration" + ], + "attrs": [] + } + }, + { + "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": "cnpg", + "group": "Postgresql", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "main", + "label": "Main Postgresql Database", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "instances", + "label": "Instances", + "schema": { + "type": "int", + "default": 2 + } + }, + { + "variable": "storage", + "label": "Storage", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "size", + "label": "Size", + "schema": { + "type": "string", + "default": "256Gi" + } + }, + { + "variable": "walsize", + "label": "Walsize", + "schema": { + "type": "string", + "default": "256Gi" + } + } + ] + } + }, + { + "variable": "pooler", + "label": "Pooler", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "instances", + "label": "Instances", + "schema": { + "type": "int", + "default": 2 + } + } + ] + } + }, + { + "variable": "Monitoring", + "label": "Metrics", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "variable": "enablePodMonitor", + "label": "enablePodMonitor", + "schema": { + "type": "boolean", + "default": true + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "variable": "addons", + "group": "Addons", + "label": "", + "schema": { + "additional_attrs": true, + "type": "dict", + "attrs": [ + { + "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": { + "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", + "default": "", + "required": true + } + } + ] + } + }, + { + "variable": "tailscale", + "label": "Tailscale Settings", + "schema": { + "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 + } + } + ] + } + } + ] + } + } + ] + } + }, + { + "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": "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": "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": "